parent
4d0e51db58
commit
90c5e65ed2
File diff suppressed because one or more lines are too long
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"id": "obsidian-3d-graph",
|
"id": "3d-graph",
|
||||||
"name": "3D Graph",
|
"name": "3D Graph",
|
||||||
"version": "1.0.0",
|
"version": "1.0.3",
|
||||||
"description": "A 3D Graph for Obsidian",
|
"description": "A 3D Graph for Obsidian",
|
||||||
"author": "Alexander Weichart",
|
"author": "Alexander Weichart",
|
||||||
"authorUrl": "https://github.com/AlexW00",
|
"authorUrl": "https://github.com/AlexW00",
|
Binary file not shown.
@ -0,0 +1,73 @@
|
|||||||
|
{
|
||||||
|
"confirmDeletion": true,
|
||||||
|
"showAddCommand": true,
|
||||||
|
"debug": false,
|
||||||
|
"editorMenu": [],
|
||||||
|
"fileMenu": [
|
||||||
|
{
|
||||||
|
"id": "garble-text:toggle-garble-text",
|
||||||
|
"icon": "align-justify",
|
||||||
|
"name": "Garble Text: Toggle Garble Text",
|
||||||
|
"mode": "any"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "obsidian-tasks-plugin:edit-task",
|
||||||
|
"icon": "list-checks",
|
||||||
|
"name": "Tasks: Create or edit task",
|
||||||
|
"mode": "any"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editor:save-file",
|
||||||
|
"icon": "save",
|
||||||
|
"name": "Save current file",
|
||||||
|
"mode": "any"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"leftRibbon": [],
|
||||||
|
"rightRibbon": [],
|
||||||
|
"titleBar": [],
|
||||||
|
"statusBar": [],
|
||||||
|
"pageHeader": [
|
||||||
|
{
|
||||||
|
"id": "obsidian-map-view:convert-selection-to-location",
|
||||||
|
"icon": "map-pin",
|
||||||
|
"name": "Map View: Convert Selection to Geolocation",
|
||||||
|
"mode": "any"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "obsidian-media-db-plugin:open-media-db-search-modal",
|
||||||
|
"icon": "tv",
|
||||||
|
"name": "Media DB Plugin: Add new Media DB entry",
|
||||||
|
"mode": "any"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "obsidian-book-search-plugin:open-book-search-modal",
|
||||||
|
"icon": "book",
|
||||||
|
"name": "Book Search: Create new book note",
|
||||||
|
"mode": "any"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "auto-card-link:auto-card-link-paste-and-enhance",
|
||||||
|
"icon": "bookmark",
|
||||||
|
"name": "Auto Card Link: Paste URL and enhance to card link",
|
||||||
|
"mode": "any"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"macros": [],
|
||||||
|
"explorer": [],
|
||||||
|
"hide": {
|
||||||
|
"statusbar": [],
|
||||||
|
"leftRibbon": []
|
||||||
|
},
|
||||||
|
"spacing": 8,
|
||||||
|
"advancedToolbar": {
|
||||||
|
"rowHeight": 48,
|
||||||
|
"rowCount": 2,
|
||||||
|
"spacing": 0,
|
||||||
|
"buttonWidth": 48,
|
||||||
|
"columnLayout": false,
|
||||||
|
"mappedIcons": [],
|
||||||
|
"tooltips": false,
|
||||||
|
"heightOffset": 0
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "cmdr",
|
||||||
|
"name": "Commander",
|
||||||
|
"version": "0.4.1",
|
||||||
|
"minAppVersion": "0.16.0",
|
||||||
|
"description": "Customize your workspace by adding commands everywhere, create Macros and supercharge your mobile toolbar.",
|
||||||
|
"author": "jsmorabito & phibr0",
|
||||||
|
"authorUrl": "https://github.com/phibr0",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"id": "copy-as-html",
|
"id": "copy-as-html",
|
||||||
"name": "Copy as HTML",
|
"name": "Copy as HTML",
|
||||||
"version": "1.0.5",
|
"version": "1.0.6",
|
||||||
"minAppVersion": "0.12.0",
|
"minAppVersion": "0.12.0",
|
||||||
"description": "This is a simple plugin that converts the selected markdown to HTML and copies it to the clipboard.",
|
"description": "This is a simple plugin that converts the selected markdown to HTML and copies it to the clipboard.",
|
||||||
"author": "Bailey Jennings",
|
"author": "Bailey Jennings",
|
||||||
"authorUrl": "https://twitter.com/Bailey_Jennings",
|
"authorUrl": "https://twitter.com/Bailey_Jennings",
|
||||||
"isDesktopOnly": false
|
"isDesktopOnly": false
|
||||||
}
|
}
|
@ -1,51 +0,0 @@
|
|||||||
{
|
|
||||||
"enabledButtons": [
|
|
||||||
{
|
|
||||||
"id": "obsidian-tasks-plugin:edit-task",
|
|
||||||
"icon": "number-list-glyph",
|
|
||||||
"name": "Tasks: Create or edit task",
|
|
||||||
"showButtons": "both"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "obsidian-map-view:convert-selection-to-location",
|
|
||||||
"icon": "lucide-map-pin",
|
|
||||||
"name": "Map View: Convert Selection to Geolocation",
|
|
||||||
"showButtons": "both"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "obsidian-media-db-plugin:open-media-db-search-modal",
|
|
||||||
"icon": "lucide-tv",
|
|
||||||
"name": "Media DB Plugin: Add new Media DB entry",
|
|
||||||
"showButtons": "both"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "obsidian-book-search-plugin:open-book-search-modal",
|
|
||||||
"icon": "lucide-book",
|
|
||||||
"name": "Book Search: Create new book note",
|
|
||||||
"showButtons": "both"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "garble-text:toggle-garble-text",
|
|
||||||
"icon": "three-horizontal-bars",
|
|
||||||
"name": "Garble Text: Toggle Garble Text",
|
|
||||||
"showButtons": "both"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "podnotes:create-podcast-note",
|
|
||||||
"icon": "audio-file",
|
|
||||||
"name": "PodNotes: Create Podcast Note",
|
|
||||||
"showButtons": "both"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "auto-card-link:auto-card-link-paste-and-enhance",
|
|
||||||
"icon": "lucide-bookmark",
|
|
||||||
"name": "Auto Card Link: Paste URL and enhance to card link",
|
|
||||||
"showButtons": "both"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"desktop": false,
|
|
||||||
"titleLeft": [],
|
|
||||||
"titleRight": [],
|
|
||||||
"titleCenter": [],
|
|
||||||
"paneRelief": false
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "customizable-page-header-buttons",
|
|
||||||
"name": "Customizable Page Header and Title Bar",
|
|
||||||
"version": "4.6.2",
|
|
||||||
"minAppVersion": "0.15.4",
|
|
||||||
"description": "This plugin lets you add buttons for executing commands to the page header and on desktop to the title bar.",
|
|
||||||
"author": "kometenstaub",
|
|
||||||
"authorUrl": "https://github.com/kometenstaub",
|
|
||||||
"isDesktopOnly": false
|
|
||||||
}
|
|
@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2021-2022 kometenstaub and contributors
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* @settings
|
|
||||||
|
|
||||||
name: Customizable Page Header and Title Bar
|
|
||||||
id: customizable-page-header-buttons
|
|
||||||
settings:
|
|
||||||
-
|
|
||||||
id: page-header-spacing-mobile
|
|
||||||
title: Page Header Button Spacing (mobile)
|
|
||||||
type: variable-number-slider
|
|
||||||
default: 12
|
|
||||||
min: 0
|
|
||||||
max: 30
|
|
||||||
step: 1
|
|
||||||
format: px
|
|
||||||
-
|
|
||||||
id: page-header-spacing-desktop
|
|
||||||
title: Page Header Button Spacing (desktop)
|
|
||||||
type: variable-number-slider
|
|
||||||
default: 8
|
|
||||||
min: 0
|
|
||||||
max: 30
|
|
||||||
step: 1
|
|
||||||
format: px
|
|
||||||
*/
|
|
||||||
|
|
||||||
.page-header-button.titlebar-center{flex-grow:1;font-size:12px;height:100%;left:0;letter-spacing:.05em;opacity:.8;position:absolute;text-align:center;top:0;width:100%}body:not(.is-mobile) .view-actions{align-items:center}body:not(.is-mobile) .view-action,body:not(.is-mobile) .view-action.pane-relief{display:flex;position:unset}body:not(.is-mobile) .view-action.pane-relief.app\:go-back:before,body:not(.is-mobile) .view-action.pane-relief.app\:go-forward:after{display:inline;font-size:1em;line-height:1;vertical-align:text-top}body:not(.is-mobile) .view-action.pane-relief.app\:go-forward:after{content:var(--pane-relief-forward-count);padding-left:.4em}body:not(.is-mobile) .view-action.pane-relief.app\:go-back:before{content:var(--pane-relief-backward-count);padding-right:.4em}body:not(.is-mobile) .view-action:not(:last-child){margin-right:var(--page-header-spacing-desktop)}body:not(.is-mobile) .pane-relief body:not(.no-svg-replace) svg{vertical-align:top}.is-mobile .view-actions{align-items:center}.is-mobile .view-action:not(:last-child){margin-right:var(--page-header-spacing-mobile)}
|
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"immediateReplace": true,
|
||||||
|
"suggester": true,
|
||||||
|
"historyPriority": true,
|
||||||
|
"historyLimit": 100,
|
||||||
|
"history": [
|
||||||
|
":birthday:",
|
||||||
|
":soccer:"
|
||||||
|
]
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
@ -1,10 +1,11 @@
|
|||||||
{
|
{
|
||||||
"id": "emoji-shortcodes",
|
"id": "emoji-shortcodes",
|
||||||
"name": "Emoji Shortcodes",
|
"name": "Emoji Shortcodes",
|
||||||
"version": "2.1.2",
|
"version": "2.2.0",
|
||||||
"minAppVersion": "0.12.17",
|
"minAppVersion": "1.0.0",
|
||||||
"description": "This Plugin enables the use of Markdown Emoji Shortcodes :smile:",
|
"description": "This Plugin enables the use of Markdown Emoji Shortcodes :smile:",
|
||||||
"author": "phibr0",
|
"author": "phibr0",
|
||||||
"authorUrl": "https://github.com/phibr0",
|
"authorUrl": "https://github.com/phibr0",
|
||||||
"isDesktopOnly": false
|
"isDesktopOnly": false,
|
||||||
}
|
"fundingUrl": "https://ko-fi.com/phibr0"
|
||||||
|
}
|
||||||
|
@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||||
|
if you want to view the source, please visit the github repository of this plugin
|
||||||
|
*/
|
||||||
|
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||||
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||||
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||||
|
var __export = (target, all) => {
|
||||||
|
for (var name in all)
|
||||||
|
__defProp(target, name, { get: all[name], enumerable: true });
|
||||||
|
};
|
||||||
|
var __copyProps = (to, from, except, desc) => {
|
||||||
|
if (from && typeof from === "object" || typeof from === "function") {
|
||||||
|
for (let key of __getOwnPropNames(from))
|
||||||
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||||
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||||
|
}
|
||||||
|
return to;
|
||||||
|
};
|
||||||
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||||
|
|
||||||
|
// main.ts
|
||||||
|
var main_exports = {};
|
||||||
|
__export(main_exports, {
|
||||||
|
default: () => ListStylePlugin
|
||||||
|
});
|
||||||
|
module.exports = __toCommonJS(main_exports);
|
||||||
|
var import_obsidian = require("obsidian");
|
||||||
|
var shorthand = {
|
||||||
|
I: "upper-roman",
|
||||||
|
i: "lower-roman",
|
||||||
|
A: "upper-alpha",
|
||||||
|
a: "lower-alpha",
|
||||||
|
"01": "decimal-leading-zero",
|
||||||
|
"1": "decimal"
|
||||||
|
};
|
||||||
|
var STYLE_MATCHER = /^\s*\{([A-Za-z-0-9]+)\}\s*/;
|
||||||
|
var ListStylePlugin = class extends import_obsidian.Plugin {
|
||||||
|
async onload() {
|
||||||
|
this.registerMarkdownPostProcessor((el) => {
|
||||||
|
el.querySelectorAll("ol").forEach((list) => {
|
||||||
|
const firstText = getFirstTextNode(list.querySelector("li"));
|
||||||
|
let match;
|
||||||
|
if (firstText && firstText.textContent && (match = firstText.textContent.match(STYLE_MATCHER))) {
|
||||||
|
if (shorthand[match[1]]) {
|
||||||
|
list.style.listStyleType = shorthand[match[1]];
|
||||||
|
} else {
|
||||||
|
list.style.listStyleType = match[1];
|
||||||
|
}
|
||||||
|
firstText.textContent = firstText.textContent.slice(match[0].length);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function getFirstTextNode(node) {
|
||||||
|
if (node == null)
|
||||||
|
return null;
|
||||||
|
for (let i = 0; i < node.childNodes.length; i++) {
|
||||||
|
if (node.childNodes[i].nodeType == Node.TEXT_NODE) {
|
||||||
|
return node.childNodes[i];
|
||||||
|
} else if (node.childNodes[i].hasChildNodes()) {
|
||||||
|
const childText = getFirstTextNode(node.childNodes[i]);
|
||||||
|
if (childText) {
|
||||||
|
return childText;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "list-style",
|
||||||
|
"name": "Ordered List Style",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"minAppVersion": "1.0.0",
|
||||||
|
"description": "Set ordered list style inline in Obsidian.md. Alphabetic lists, roman numeral lists, etc.",
|
||||||
|
"author": "Eric Rykwalder",
|
||||||
|
"authorUrl": "https://github.com/erykwalder/obsidian-list-style",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,10 +1,11 @@
|
|||||||
{
|
{
|
||||||
"id": "multi-column-markdown",
|
"id": "multi-column-markdown",
|
||||||
"name": "Multi-Column Markdown",
|
"name": "Multi-Column Markdown",
|
||||||
"version": "0.7.3",
|
"version": "0.7.6",
|
||||||
"minAppVersion": "0.15.9",
|
"minAppVersion": "1.0.3",
|
||||||
"description": "This plugin adds functionality to create markdown documents with multiple columns of content viewable within Obsidian's preview mode",
|
"description": "This plugin adds functionality to create markdown documents with multiple columns of content viewable within Obsidian's preview mode",
|
||||||
"author": "Cameron Robinson",
|
"author": "Cameron Robinson",
|
||||||
|
"fundingUrl": "https://www.buymeacoffee.com/ckrobinson",
|
||||||
"authorUrl": "https://portfolio.ckrobinson.net",
|
"authorUrl": "https://portfolio.ckrobinson.net",
|
||||||
"isDesktopOnly": false
|
"isDesktopOnly": false
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,408 @@
|
|||||||
|
/*
|
||||||
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||||
|
if you want to view the source, please visit the github repository of this plugin
|
||||||
|
*/
|
||||||
|
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||||
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||||
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||||
|
var __export = (target, all) => {
|
||||||
|
for (var name in all)
|
||||||
|
__defProp(target, name, { get: all[name], enumerable: true });
|
||||||
|
};
|
||||||
|
var __copyProps = (to, from, except, desc) => {
|
||||||
|
if (from && typeof from === "object" || typeof from === "function") {
|
||||||
|
for (let key of __getOwnPropNames(from))
|
||||||
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||||
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||||
|
}
|
||||||
|
return to;
|
||||||
|
};
|
||||||
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||||
|
var __async = (__this, __arguments, generator) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
var fulfilled = (value) => {
|
||||||
|
try {
|
||||||
|
step(generator.next(value));
|
||||||
|
} catch (e) {
|
||||||
|
reject(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var rejected = (value) => {
|
||||||
|
try {
|
||||||
|
step(generator.throw(value));
|
||||||
|
} catch (e) {
|
||||||
|
reject(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
||||||
|
step((generator = generator.apply(__this, __arguments)).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// main.ts
|
||||||
|
var main_exports = {};
|
||||||
|
__export(main_exports, {
|
||||||
|
default: () => AccountLinker
|
||||||
|
});
|
||||||
|
module.exports = __toCommonJS(main_exports);
|
||||||
|
var import_obsidian3 = require("obsidian");
|
||||||
|
|
||||||
|
// src/settings/AccountLinkerSettingTab.ts
|
||||||
|
var import_obsidian2 = require("obsidian");
|
||||||
|
|
||||||
|
// src/control/utils.ts
|
||||||
|
function replaceTemplateText(beforeText, ctx) {
|
||||||
|
return beforeText.split("{{NAME}}").join(ctx.text).replace(/\{\{[^}]*\}\}/g, "");
|
||||||
|
}
|
||||||
|
function isColor(code) {
|
||||||
|
return /^#[0-9A-Fa-f]{6}$/.test(code);
|
||||||
|
}
|
||||||
|
function isURL(link) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
function selectFontColor(backgroundColor) {
|
||||||
|
if (!isColor(backgroundColor)) {
|
||||||
|
return "#000000";
|
||||||
|
}
|
||||||
|
const brightness = parseInt(backgroundColor.substring(1, 3), 16) * 0.299 + parseInt(backgroundColor.substring(3, 5), 16) * 0.587 + parseInt(backgroundColor.substring(5, 7), 16) * 0.114;
|
||||||
|
return Math.floor(brightness) >= 140 ? "#000000" : "#FFFFFF";
|
||||||
|
}
|
||||||
|
|
||||||
|
// src/drawing/drawAccountLink.ts
|
||||||
|
function drawAccountLink(a, config, text) {
|
||||||
|
a.empty();
|
||||||
|
a.classList.add("frontmatter-accounts");
|
||||||
|
const linkText = replaceTemplateText(config.urlTemplate, { text });
|
||||||
|
if (isURL(linkText)) {
|
||||||
|
a.href = linkText;
|
||||||
|
} else {
|
||||||
|
a.href = "";
|
||||||
|
}
|
||||||
|
const siteNameDiv = a.createEl("div");
|
||||||
|
siteNameDiv.classList.add("frontmatter-accounts-sitename");
|
||||||
|
siteNameDiv.innerText = config.name;
|
||||||
|
siteNameDiv.style.backgroundColor = isColor(config.color) ? config.color : "#ffffff";
|
||||||
|
siteNameDiv.style.color = selectFontColor(config.color);
|
||||||
|
const labelText = replaceTemplateText(config.labelTemplate, { text });
|
||||||
|
if (labelText != "") {
|
||||||
|
const labelDiv = a.createEl("div");
|
||||||
|
labelDiv.classList.add("frontmatter-accounts-label");
|
||||||
|
labelDiv.innerText = labelText;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// src/settings/WebsiteEditModal.ts
|
||||||
|
var import_obsidian = require("obsidian");
|
||||||
|
var descriptions = {
|
||||||
|
name: "Website name",
|
||||||
|
color: "Website image color(HEX)",
|
||||||
|
urlTemplate: "URL Replace Pattern",
|
||||||
|
labelTemplate: "Account Name Replace Pattern",
|
||||||
|
doesReverseResolution: "If on, it will reverse the account from the URL entered in the `accounts` field of the front matter",
|
||||||
|
previewBox: "",
|
||||||
|
saveButton: ""
|
||||||
|
};
|
||||||
|
var WebsiteEditModal = class extends import_obsidian.Modal {
|
||||||
|
constructor(plugin, config, closeCallBack) {
|
||||||
|
super(plugin.app);
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.config = config;
|
||||||
|
this.closeCallBack = closeCallBack;
|
||||||
|
}
|
||||||
|
onOpen() {
|
||||||
|
const config = this.config;
|
||||||
|
this.titleEl.setText("Website Config");
|
||||||
|
const settings = {
|
||||||
|
name: new import_obsidian.Setting(this.contentEl).setName("Name").setDesc(descriptions.name).addText((cb) => {
|
||||||
|
cb.setValue(config.name).setPlaceholder("Twitter").onChange((value) => {
|
||||||
|
config.name = value;
|
||||||
|
this.updateText("name", settings);
|
||||||
|
this.updateDisplay(settings);
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
color: new import_obsidian.Setting(this.contentEl).setName("Color").setDesc(descriptions.color).addText((cb) => {
|
||||||
|
cb.setValue(config.color).setPlaceholder("#3e9cec").onChange((value) => {
|
||||||
|
config.color = value;
|
||||||
|
this.updateText("color", settings);
|
||||||
|
this.updateDisplay(settings);
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
urlTemplate: new import_obsidian.Setting(this.contentEl).setName("URL Template").setDesc(descriptions.urlTemplate).addText((cb) => {
|
||||||
|
cb.setValue(config.urlTemplate).setPlaceholder("https://twitter.com/{{NAME}}").onChange((value) => {
|
||||||
|
config.urlTemplate = value;
|
||||||
|
this.updateText("urlTemplate", settings);
|
||||||
|
this.updateDisplay(settings);
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
labelTemplate: new import_obsidian.Setting(this.contentEl).setName("Label Template").setDesc(descriptions.labelTemplate).addText((cb) => {
|
||||||
|
cb.setValue(config.labelTemplate).setPlaceholder("@{{NAME}}").onChange((value) => {
|
||||||
|
config.labelTemplate = value;
|
||||||
|
this.updateText("labelTemplate", settings);
|
||||||
|
this.updateDisplay(settings);
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
doesReverseResolution: new import_obsidian.Setting(this.contentEl).setName("Reverse Resolution(Unimplemented)").setDesc(descriptions.doesReverseResolution).addToggle((cb) => {
|
||||||
|
cb.setValue(config.doesReverseResolution).onChange((value) => {
|
||||||
|
config.doesReverseResolution = value;
|
||||||
|
this.updateText("doesReverseResolution", settings);
|
||||||
|
this.updateDisplay(settings);
|
||||||
|
}).setDisabled;
|
||||||
|
}),
|
||||||
|
previewBox: new import_obsidian.Setting(this.contentEl).setDesc(descriptions.previewBox).setName("Preview"),
|
||||||
|
saveButton: new import_obsidian.Setting(this.contentEl).setDesc(descriptions.saveButton).addButton((b) => {
|
||||||
|
b.setButtonText("Save").setDisabled(true).onClick((evt) => {
|
||||||
|
this.closeCallBack(config);
|
||||||
|
this.close();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
};
|
||||||
|
["name", "color", "urlTemplate", "labelTemplate", "doesReverseResolution"].forEach((key) => {
|
||||||
|
this.updateText(key, settings);
|
||||||
|
});
|
||||||
|
this.updateDisplay(settings);
|
||||||
|
}
|
||||||
|
checkConfig(key) {
|
||||||
|
switch (key) {
|
||||||
|
case "name":
|
||||||
|
if (this.config.name == "") {
|
||||||
|
return "The name length must be greater than zero";
|
||||||
|
} else if (["aliases", "alias", "tags", "tag", "cssclass", "publish", "accounts"].includes(this.config.name.toLowerCase())) {
|
||||||
|
return "The name must be something other";
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
case "color":
|
||||||
|
if (!isColor(this.config.color)) {
|
||||||
|
return "The color must be represented by `#` and a six-digit hexadecimal number";
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
case "urlTemplate":
|
||||||
|
if (!isURL(this.config.urlTemplate.replace(/\{\{[^}]*\}\}/g, ""))) {
|
||||||
|
return "URL is invalid";
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
case "labelTemplate":
|
||||||
|
return "";
|
||||||
|
case "doesReverseResolution":
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateText(key, settings) {
|
||||||
|
if (this.checkConfig(key) != "") {
|
||||||
|
settings[key].descEl.innerHTML = descriptions[key] + `<br><span class='mod-warning'>${this.checkConfig(key)}</span>`;
|
||||||
|
} else {
|
||||||
|
settings[key].descEl.innerHTML = descriptions[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateDisplay(settings) {
|
||||||
|
let f = false;
|
||||||
|
["name", "color", "urlTemplate", "labelTemplate", "doesReverseResolution"].forEach((key) => {
|
||||||
|
if (this.checkConfig(key) != "") {
|
||||||
|
f = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
settings.saveButton.setDisabled(f);
|
||||||
|
const linker = document.createElement("a");
|
||||||
|
drawAccountLink(linker, this.config, "example");
|
||||||
|
settings.previewBox.descEl.innerHTML = linker.outerHTML;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/control/websiteConfig.ts
|
||||||
|
var websiteConfig = class {
|
||||||
|
constructor() {
|
||||||
|
this.name = "";
|
||||||
|
this.color = "#FFFFFF";
|
||||||
|
this.urlTemplate = "";
|
||||||
|
this.labelTemplate = "";
|
||||||
|
this.doesReverseResolution = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/settings/AccountLinkerSettingTab.ts
|
||||||
|
var AccountLinkerSettingTab = class extends import_obsidian2.PluginSettingTab {
|
||||||
|
constructor(app, plugin) {
|
||||||
|
super(app, plugin);
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
display() {
|
||||||
|
const { containerEl } = this;
|
||||||
|
containerEl.empty();
|
||||||
|
const siteDiv = containerEl.createDiv();
|
||||||
|
this.drawSites(siteDiv);
|
||||||
|
}
|
||||||
|
drawSites(div) {
|
||||||
|
div.empty();
|
||||||
|
const websites = this.plugin.settings.websites;
|
||||||
|
websites.forEach((website, i) => {
|
||||||
|
const s = new import_obsidian2.Setting(div).setDesc(website.name).addButton((button) => {
|
||||||
|
button.onClick(() => {
|
||||||
|
const modal = new WebsiteEditModal(this.plugin, website, (config) => {
|
||||||
|
this.plugin.settings.websites[i] = config;
|
||||||
|
this.plugin.saveSettings();
|
||||||
|
this.drawSites(div);
|
||||||
|
});
|
||||||
|
modal.open();
|
||||||
|
});
|
||||||
|
button.setIcon("pencil");
|
||||||
|
button.setTooltip("Edit");
|
||||||
|
}).addButton((button) => {
|
||||||
|
button.onClick(() => {
|
||||||
|
this.plugin.settings.websites.remove(website);
|
||||||
|
this.plugin.saveSettings();
|
||||||
|
this.drawSites(div);
|
||||||
|
});
|
||||||
|
button.setIcon("cross");
|
||||||
|
button.setTooltip("Remove");
|
||||||
|
});
|
||||||
|
const linker = document.createElement("a");
|
||||||
|
drawAccountLink(linker, website, "example");
|
||||||
|
s.descEl.innerHTML += linker.outerHTML;
|
||||||
|
});
|
||||||
|
new import_obsidian2.Setting(div).addButton((button) => {
|
||||||
|
button.onClick(() => {
|
||||||
|
const modal = new WebsiteEditModal(this.plugin, new websiteConfig(), (config) => {
|
||||||
|
this.plugin.settings.websites.push(config);
|
||||||
|
this.plugin.saveSettings();
|
||||||
|
this.drawSites(div);
|
||||||
|
});
|
||||||
|
modal.open();
|
||||||
|
});
|
||||||
|
button.setIcon("plus-with-circle");
|
||||||
|
button.setTooltip("New");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/settings/AccountLinkerSettings.ts
|
||||||
|
var DEFAULT_SETTINGS = {
|
||||||
|
websites: [
|
||||||
|
{
|
||||||
|
name: "Twitter",
|
||||||
|
color: "#3e9cec",
|
||||||
|
urlTemplate: "https://twitter.com/{{NAME}}",
|
||||||
|
labelTemplate: "@{{NAME}}",
|
||||||
|
doesReverseResolution: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Facebook",
|
||||||
|
color: "#3b5998",
|
||||||
|
urlTemplate: "https://www.facebook.com/{{NAME}}",
|
||||||
|
labelTemplate: "{{NAME}}",
|
||||||
|
doesReverseResolution: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Instagram",
|
||||||
|
color: "#dc2477",
|
||||||
|
urlTemplate: "https://www.instagram.com/{{NAME}}",
|
||||||
|
labelTemplate: "@{{NAME}}",
|
||||||
|
doesReverseResolution: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "GitHub",
|
||||||
|
color: "#0a0c10",
|
||||||
|
urlTemplate: "https://github.com/{{NAME}}",
|
||||||
|
labelTemplate: "@{{NAME}}",
|
||||||
|
doesReverseResolution: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Mail",
|
||||||
|
color: "#e7e7e7",
|
||||||
|
urlTemplate: "mailto:{{NAME}}",
|
||||||
|
labelTemplate: "{{NAME}}",
|
||||||
|
doesReverseResolution: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Linktree",
|
||||||
|
color: "#3ea195",
|
||||||
|
urlTemplate: "https://linktr.ee/{{NAME}}",
|
||||||
|
labelTemplate: "{{NAME}}",
|
||||||
|
doesReverseResolution: false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/drawing/frontmatterProcessor.ts
|
||||||
|
var frontmatterProcessor = (plugin) => (el, ctx) => __async(void 0, null, function* () {
|
||||||
|
const frontmatter = el.querySelector(".frontmatter");
|
||||||
|
if (frontmatter !== null) {
|
||||||
|
const embed = el.querySelector(".internal-embed");
|
||||||
|
if (embed !== null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ctx.frontmatter) {
|
||||||
|
const siteDict = {};
|
||||||
|
plugin.settings.websites.forEach((config) => {
|
||||||
|
if (!Object.keys(siteDict).includes(config.name.toLowerCase())) {
|
||||||
|
siteDict[config.name.toLowerCase()] = [];
|
||||||
|
}
|
||||||
|
siteDict[config.name.toLowerCase()].push(config);
|
||||||
|
});
|
||||||
|
console.log(siteDict);
|
||||||
|
const accountList = [];
|
||||||
|
Object.keys(ctx.frontmatter).forEach((key) => {
|
||||||
|
if (Object.keys(siteDict).includes(key.toLowerCase())) {
|
||||||
|
const lk = key.toLowerCase();
|
||||||
|
siteDict[lk].forEach((config) => {
|
||||||
|
frontMatterRecursion(ctx.frontmatter[key], config, accountList);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const target = el.querySelector(".frontmatter-container");
|
||||||
|
if (accountList.length) {
|
||||||
|
target.innerHTML += `
|
||||||
|
<div class="frontmatter-section">
|
||||||
|
<span class="frontmatter-section-label">Accounts</span>
|
||||||
|
<div class="frontmatter-section-accounts">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
const section = target.querySelector(".frontmatter-section-accounts");
|
||||||
|
accountList.forEach((a) => {
|
||||||
|
const linkTag = section.createEl("a");
|
||||||
|
drawAccountLink(linkTag, a.config, a.value);
|
||||||
|
});
|
||||||
|
target.style.display = "block";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
function frontMatterRecursion(value, config, accountList) {
|
||||||
|
if (typeof value === "string") {
|
||||||
|
accountList.push({
|
||||||
|
config,
|
||||||
|
value
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
value.forEach((v) => {
|
||||||
|
frontMatterRecursion(v, config, accountList);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// main.ts
|
||||||
|
var AccountLinker = class extends import_obsidian3.Plugin {
|
||||||
|
onload() {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
yield this.loadSettings();
|
||||||
|
this.registerMarkdownPostProcessor(frontmatterProcessor(this));
|
||||||
|
this.addSettingTab(new AccountLinkerSettingTab(this.app, this));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
onunload() {
|
||||||
|
}
|
||||||
|
loadSettings() {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
saveSettings() {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
yield this.saveData(this.settings);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "obsidian-account-linker",
|
||||||
|
"name": "Account Linker",
|
||||||
|
"version": "1.0.1",
|
||||||
|
"minAppVersion": "0.12.0",
|
||||||
|
"description": "Plugin for describing external service accounts in the front matter",
|
||||||
|
"author": "qwegat",
|
||||||
|
"authorUrl": "https://github.com/qwegat",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
.frontmatter-section-accounts{
|
||||||
|
display: inline-flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frontmatter-accounts {
|
||||||
|
background-color: var(--background-secondary-alt);
|
||||||
|
border-radius: 30px;
|
||||||
|
font-size: 0.9em;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 2px 4px;
|
||||||
|
display: inline-flex;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frontmatter-accounts-sitename {
|
||||||
|
display: block;
|
||||||
|
padding: 2px 8px 2px 8px;
|
||||||
|
line-height: 19px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.frontmatter-accounts-label {
|
||||||
|
display: block;
|
||||||
|
padding: 2px 8px 2px 8px;
|
||||||
|
line-height: 19px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,10 +1,11 @@
|
|||||||
{
|
{
|
||||||
"id": "obsidian-minimal-settings",
|
"id": "obsidian-minimal-settings",
|
||||||
"name": "Minimal Theme Settings",
|
"name": "Minimal Theme Settings",
|
||||||
"version": "6.1.0",
|
"version": "6.1.1",
|
||||||
"minAppVersion": "0.16.0",
|
"minAppVersion": "0.16.0",
|
||||||
"description": "Change the colors, fonts and features of Minimal Theme.",
|
"description": "Change the colors, fonts and features of Minimal Theme.",
|
||||||
"author": "@kepano",
|
"author": "@kepano",
|
||||||
"authorUrl": "https://www.twitter.com/kepano",
|
"authorUrl": "https://www.twitter.com/kepano",
|
||||||
|
"fundingUrl": "https://www.buymeacoffee.com/kepano",
|
||||||
"isDesktopOnly": false
|
"isDesktopOnly": false
|
||||||
}
|
}
|
File diff suppressed because one or more lines are too long
@ -1 +1,124 @@
|
|||||||
/* styles.css */
|
/* fakecss:/home/runner/work/obsidian-reminder/obsidian-reminder/src/ui/components/Calendar.esbuild-svelte-fake-css */
|
||||||
|
.reminder-calendar.svelte-18sic8s.svelte-18sic8s {
|
||||||
|
padding: 0.5rem;
|
||||||
|
}
|
||||||
|
.reminder-calendar.svelte-18sic8s .year-month.svelte-18sic8s {
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.reminder-calendar.svelte-18sic8s .month-nav.svelte-18sic8s {
|
||||||
|
color: var(--text-muted);
|
||||||
|
margin-left: 1rem;
|
||||||
|
margin-right: 1rem;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.reminder-calendar.svelte-18sic8s .month.svelte-18sic8s {
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
.reminder-calendar.svelte-18sic8s .year.svelte-18sic8s {
|
||||||
|
color: var(--text-accent);
|
||||||
|
}
|
||||||
|
.reminder-calendar.svelte-18sic8s th.svelte-18sic8s {
|
||||||
|
font-size: 0.7rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
.reminder-calendar.svelte-18sic8s .calendar-date.svelte-18sic8s {
|
||||||
|
text-align: center;
|
||||||
|
min-width: 2rem;
|
||||||
|
max-width: 2rem;
|
||||||
|
}
|
||||||
|
.reminder-calendar.svelte-18sic8s .calendar-date.svelte-18sic8s:hover {
|
||||||
|
background-color: var(--background-secondary-alt);
|
||||||
|
}
|
||||||
|
.reminder-calendar.svelte-18sic8s .is-selected.svelte-18sic8s {
|
||||||
|
background-color: var(--text-accent) !important;
|
||||||
|
color: var(--text-normal) !important;
|
||||||
|
}
|
||||||
|
.reminder-calendar.svelte-18sic8s .other-month.svelte-18sic8s,
|
||||||
|
.reminder-calendar.svelte-18sic8s .is-past.svelte-18sic8s,
|
||||||
|
.reminder-calendar.svelte-18sic8s .is-holiday.svelte-18sic8s {
|
||||||
|
color: var(--text-faint);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fakecss:/home/runner/work/obsidian-reminder/obsidian-reminder/src/ui/components/ReminderListByDate.esbuild-svelte-fake-css */
|
||||||
|
.reminder-group.svelte-gzdxib {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
font-size: 13px;
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
.reminder-list-item.svelte-gzdxib {
|
||||||
|
list-style: none;
|
||||||
|
line-height: 14px;
|
||||||
|
padding: 3px;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
word-break: break-all;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.reminder-list-item.svelte-gzdxib:hover {
|
||||||
|
color: var(--text-normal);
|
||||||
|
background-color: var(--background-secondary-alt);
|
||||||
|
}
|
||||||
|
.reminder-time.svelte-gzdxib {
|
||||||
|
font-size: 14px;
|
||||||
|
font-family: monospace, serif;
|
||||||
|
}
|
||||||
|
.reminder-file.svelte-gzdxib {
|
||||||
|
color: var(--text-faint);
|
||||||
|
}
|
||||||
|
.no-reminders.svelte-gzdxib {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fakecss:/home/runner/work/obsidian-reminder/obsidian-reminder/src/ui/components/DateTimeChooser.esbuild-svelte-fake-css */
|
||||||
|
.dtchooser.svelte-fjfxbq {
|
||||||
|
background-color: var(--background-primary-alt);
|
||||||
|
z-index: 2147483647;
|
||||||
|
}
|
||||||
|
.dtchooser-divider.svelte-fjfxbq {
|
||||||
|
margin: 0.5rem;
|
||||||
|
}
|
||||||
|
.reminder-list-container.svelte-fjfxbq {
|
||||||
|
padding: 0.5rem;
|
||||||
|
max-width: 16rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fakecss:/home/runner/work/obsidian-reminder/obsidian-reminder/src/ui/components/Icon.esbuild-svelte-fake-css */
|
||||||
|
.icon.svelte-1gcidq0 {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fakecss:/home/runner/work/obsidian-reminder/obsidian-reminder/src/ui/components/Reminder.esbuild-svelte-fake-css */
|
||||||
|
main.svelte-yfmg28 {
|
||||||
|
padding: 1em;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.reminder-actions.svelte-yfmg28 {
|
||||||
|
margin-top: 1rem;
|
||||||
|
display: flex;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
.reminder-file.svelte-yfmg28 {
|
||||||
|
color: var(--text-muted);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.reminder-file.svelte-yfmg28:hover {
|
||||||
|
color: var(--text-normal);
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.later-select.svelte-yfmg28 {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fakecss:/home/runner/work/obsidian-reminder/obsidian-reminder/src/ui/components/ReminderList.esbuild-svelte-fake-css */
|
||||||
|
.group-name.svelte-2zqui4 {
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--text-muted);
|
||||||
|
border-bottom: 1px solid var(--text-muted);
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
.group-name-overdue.svelte-2zqui4 {
|
||||||
|
color: var(--text-accent);
|
||||||
|
}
|
||||||
|
@ -0,0 +1,262 @@
|
|||||||
|
/*
|
||||||
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||||
|
if you want to view the source, please visit the github repository of this plugin
|
||||||
|
*/
|
||||||
|
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||||
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||||
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||||
|
var __export = (target, all) => {
|
||||||
|
for (var name in all)
|
||||||
|
__defProp(target, name, { get: all[name], enumerable: true });
|
||||||
|
};
|
||||||
|
var __copyProps = (to, from, except, desc) => {
|
||||||
|
if (from && typeof from === "object" || typeof from === "function") {
|
||||||
|
for (let key of __getOwnPropNames(from))
|
||||||
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||||
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||||
|
}
|
||||||
|
return to;
|
||||||
|
};
|
||||||
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||||
|
|
||||||
|
// main.ts
|
||||||
|
var main_exports = {};
|
||||||
|
__export(main_exports, {
|
||||||
|
default: () => ScrollToTopPlugin
|
||||||
|
});
|
||||||
|
module.exports = __toCommonJS(main_exports);
|
||||||
|
var import_obsidian = require("obsidian");
|
||||||
|
|
||||||
|
// src/setting.ts
|
||||||
|
var scrollToTopSetting = {
|
||||||
|
enabledScrollToTop: true,
|
||||||
|
enabledScrollToBottom: true,
|
||||||
|
iconScrollToTop: "arrow-up",
|
||||||
|
iconScrollToBottom: "arrow-down",
|
||||||
|
showTooltip: true,
|
||||||
|
scrollTopTooltipText: "Scroll to top",
|
||||||
|
scrollBottomTooltipText: "Scroll to bottom"
|
||||||
|
};
|
||||||
|
|
||||||
|
// main.ts
|
||||||
|
var ROOT_WORKSPACE_CLASS = ".mod-vertical.mod-root";
|
||||||
|
var ScrollToTopPlugin = class extends import_obsidian.Plugin {
|
||||||
|
constructor() {
|
||||||
|
super(...arguments);
|
||||||
|
this.windowSet = /* @__PURE__ */ new Set();
|
||||||
|
}
|
||||||
|
addPluginCommand(id, name, callback) {
|
||||||
|
this.addCommand({
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
callback
|
||||||
|
});
|
||||||
|
}
|
||||||
|
scrollToTop() {
|
||||||
|
const markdownView = this.app.workspace.getActiveViewOfType(import_obsidian.MarkdownView);
|
||||||
|
if (markdownView) {
|
||||||
|
const editor = markdownView.editor;
|
||||||
|
const preview = markdownView.previewMode;
|
||||||
|
editor.scrollTo(0, 0);
|
||||||
|
preview && preview.applyScroll(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scrollToBottom() {
|
||||||
|
const markdownView = this.app.workspace.getActiveViewOfType(import_obsidian.MarkdownView);
|
||||||
|
if (markdownView) {
|
||||||
|
const editor = markdownView.editor;
|
||||||
|
const preview = markdownView.previewMode;
|
||||||
|
editor.exec("goEnd");
|
||||||
|
if (preview) {
|
||||||
|
let timer = setInterval(() => {
|
||||||
|
const prevScroll = preview.getScroll();
|
||||||
|
preview.applyScroll(preview.getScroll() + 10);
|
||||||
|
if (prevScroll >= preview.getScroll()) {
|
||||||
|
clearInterval(timer);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
createScrollElement(config, fn) {
|
||||||
|
var _a;
|
||||||
|
let topWidget = createEl("div");
|
||||||
|
topWidget.setAttribute("class", `div-${config.className}`);
|
||||||
|
topWidget.setAttribute("id", config.id);
|
||||||
|
let button = new import_obsidian.ButtonComponent(topWidget);
|
||||||
|
button.setIcon(config.icon).setClass("buttonItem").onClick(fn);
|
||||||
|
if (config.tooltipConfig.showTooltip) {
|
||||||
|
button.setTooltip(config.tooltipConfig.tooltipText);
|
||||||
|
}
|
||||||
|
let curWindow = config.curWindow || window;
|
||||||
|
(_a = curWindow.document.body.querySelector(ROOT_WORKSPACE_CLASS)) == null ? void 0 : _a.insertAdjacentElement("afterbegin", topWidget);
|
||||||
|
curWindow.document.addEventListener("click", function(event) {
|
||||||
|
const activeLeaf = app.workspace.getActiveViewOfType(import_obsidian.MarkdownView);
|
||||||
|
if (activeLeaf) {
|
||||||
|
topWidget.style.visibility = "visible";
|
||||||
|
} else {
|
||||||
|
topWidget.style.visibility = "hidden";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
removeButton(id, curWindow) {
|
||||||
|
let curWin = curWindow || window;
|
||||||
|
const element = curWin.document.getElementById(id);
|
||||||
|
if (element) {
|
||||||
|
element.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
createButton(window2) {
|
||||||
|
const {
|
||||||
|
enabledScrollToTop,
|
||||||
|
enabledScrollToBottom,
|
||||||
|
iconScrollToTop,
|
||||||
|
iconScrollToBottom,
|
||||||
|
showTooltip,
|
||||||
|
scrollTopTooltipText,
|
||||||
|
scrollBottomTooltipText
|
||||||
|
} = this.settings;
|
||||||
|
if (enabledScrollToTop) {
|
||||||
|
this.createScrollElement({
|
||||||
|
id: "__C_scrollToTop",
|
||||||
|
className: "scrollToTop",
|
||||||
|
icon: iconScrollToTop,
|
||||||
|
curWindow: window2,
|
||||||
|
tooltipConfig: {
|
||||||
|
showTooltip,
|
||||||
|
tooltipText: scrollTopTooltipText
|
||||||
|
}
|
||||||
|
}, this.scrollToTop.bind(this));
|
||||||
|
}
|
||||||
|
if (enabledScrollToBottom) {
|
||||||
|
this.createScrollElement({
|
||||||
|
id: "__C_scrollToBottom",
|
||||||
|
className: "scrollToBottom",
|
||||||
|
icon: iconScrollToBottom,
|
||||||
|
curWindow: window2,
|
||||||
|
tooltipConfig: {
|
||||||
|
showTooltip,
|
||||||
|
tooltipText: scrollBottomTooltipText
|
||||||
|
}
|
||||||
|
}, this.scrollToBottom.bind(this));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async onload() {
|
||||||
|
await this.loadSettings();
|
||||||
|
this.addSettingTab(new ScrollToTopSettingTab(this.app, this));
|
||||||
|
this.app.workspace.onLayoutReady(() => {
|
||||||
|
this.createButton();
|
||||||
|
});
|
||||||
|
this.addPluginCommand("scroll-to-top", "Scroll to Top", this.scrollToTop.bind(this));
|
||||||
|
this.addPluginCommand("scroll-to-bottom", "Scroll to Bottom", this.scrollToBottom.bind(this));
|
||||||
|
this.app.workspace.on("window-open", (win, window2) => {
|
||||||
|
this.windowSet.add(window2);
|
||||||
|
this.createButton(window2);
|
||||||
|
});
|
||||||
|
this.app.workspace.on("window-close", (win, window2) => {
|
||||||
|
this.windowSet.delete(window2);
|
||||||
|
});
|
||||||
|
setTimeout(() => {
|
||||||
|
this.app.workspace.trigger("css-change");
|
||||||
|
}, 300);
|
||||||
|
}
|
||||||
|
async saveSettings() {
|
||||||
|
await this.saveData(this.settings);
|
||||||
|
}
|
||||||
|
async loadSettings() {
|
||||||
|
this.settings = Object.assign({}, scrollToTopSetting, await this.loadData());
|
||||||
|
}
|
||||||
|
onunload() {
|
||||||
|
this.removeButton("__C_scrollToTop");
|
||||||
|
this.removeButton("__C_scrollToBottom");
|
||||||
|
if (this.windowSet.size > 0) {
|
||||||
|
this.windowSet.forEach((window2) => {
|
||||||
|
this.removeButton("__C_scrollToTop", window2);
|
||||||
|
this.removeButton("__C_scrollToBottom", window2);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var ScrollToTopSettingTab = class extends import_obsidian.PluginSettingTab {
|
||||||
|
constructor(app2, plugin) {
|
||||||
|
super(app2, plugin);
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
createSpanWithLinks(text, href, linkText) {
|
||||||
|
const span = document.createElement("span");
|
||||||
|
span.innerText = text;
|
||||||
|
const link = document.createElement("a");
|
||||||
|
link.href = href;
|
||||||
|
link.innerText = linkText;
|
||||||
|
span.appendChild(link);
|
||||||
|
return span;
|
||||||
|
}
|
||||||
|
rebuildButton() {
|
||||||
|
this.plugin.removeButton("__C_scrollToTop");
|
||||||
|
this.plugin.removeButton("__C_scrollToBottom");
|
||||||
|
this.plugin.createButton();
|
||||||
|
if (this.plugin.windowSet.size > 0) {
|
||||||
|
this.plugin.windowSet.forEach((window2) => {
|
||||||
|
this.plugin.removeButton("__C_scrollToTop", window2);
|
||||||
|
this.plugin.removeButton("__C_scrollToBottom", window2);
|
||||||
|
this.plugin.createButton(window2);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
display() {
|
||||||
|
const { containerEl } = this;
|
||||||
|
containerEl.empty();
|
||||||
|
containerEl.createEl("h2", { text: "Scroll To Top Settings" });
|
||||||
|
new import_obsidian.Setting(containerEl).setName("Show scroll to top button").setDesc("Show scroll to top button in the right bottom corner.").addToggle((value) => {
|
||||||
|
value.setValue(this.plugin.settings.enabledScrollToTop).onChange(async (value2) => {
|
||||||
|
this.plugin.settings.enabledScrollToTop = value2;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
this.rebuildButton();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
new import_obsidian.Setting(containerEl).setName("Show scroll to bottom button").setDesc("Show scroll to bottom button in the right bottom corner.").addToggle((value) => {
|
||||||
|
value.setValue(this.plugin.settings.enabledScrollToBottom).onChange(async (value2) => {
|
||||||
|
this.plugin.settings.enabledScrollToBottom = value2;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
this.rebuildButton();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
new import_obsidian.Setting(containerEl).setName("Show Tooltip").setDesc("Show tooltip when hover on the button.").addToggle((value) => {
|
||||||
|
value.setValue(this.plugin.settings.showTooltip).onChange(async (value2) => {
|
||||||
|
this.plugin.settings.showTooltip = value2;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
this.rebuildButton();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
new import_obsidian.Setting(containerEl).setName("tooltip config for top button").setDesc("Change tooltip text of scroll to top button.").addText((value) => {
|
||||||
|
value.setValue(this.plugin.settings.scrollTopTooltipText).onChange(async (value2) => {
|
||||||
|
this.plugin.settings.scrollTopTooltipText = value2;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
this.rebuildButton();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
new import_obsidian.Setting(containerEl).setName("tooltip config for bottom button").setDesc("Change tooltip text of scroll to bottom button.").addText((value) => {
|
||||||
|
value.setValue(this.plugin.settings.scrollBottomTooltipText).onChange(async (value2) => {
|
||||||
|
this.plugin.settings.scrollBottomTooltipText = value2;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
this.rebuildButton();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
new import_obsidian.Setting(containerEl).setName("Change icon of scroll to top button").setDesc(this.createSpanWithLinks("Change icon of scroll to top button. You can visit available icons here: ", "https://lucide.dev/", "lucide.dev")).addText((value) => {
|
||||||
|
value.setValue(this.plugin.settings.iconScrollToTop).onChange(async (value2) => {
|
||||||
|
this.plugin.settings.iconScrollToTop = value2;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
this.rebuildButton();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
new import_obsidian.Setting(containerEl).setName("Change icon of scroll to bottom button").setDesc(this.createSpanWithLinks("Change icon of scroll to bottom button. You can visit available icons here: ", "https://lucide.dev/", "lucide.dev")).addText((value) => {
|
||||||
|
value.setValue(this.plugin.settings.iconScrollToBottom).onChange(async (value2) => {
|
||||||
|
this.plugin.settings.iconScrollToBottom = value2;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
this.rebuildButton();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "obsidian-scroll-to-top-plugin",
|
||||||
|
"name": "Scroll to Top Plugin",
|
||||||
|
"version": "1.5.0",
|
||||||
|
"minAppVersion": "0.15.0",
|
||||||
|
"description": "This is a plugin for Obsidian that adds a button to scroll to the top of the current note.",
|
||||||
|
"author": "cloudhao1999",
|
||||||
|
"authorUrl": "https://github.com/cloudhao1999/obsidian-scroll-to-top-plugin",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
@ -0,0 +1,146 @@
|
|||||||
|
/* @settings
|
||||||
|
name: Scroll to Top Plugin
|
||||||
|
id: obsidian-scroll-to-top-plugin
|
||||||
|
settings:
|
||||||
|
-
|
||||||
|
id: scroll-to-top-bottom
|
||||||
|
title: Scroll to top bottom position placement
|
||||||
|
type: variable-number
|
||||||
|
default: 2.65
|
||||||
|
format: em
|
||||||
|
-
|
||||||
|
id: scroll-to-top-left
|
||||||
|
title: Scroll to top right position placement
|
||||||
|
type: variable-number
|
||||||
|
default: 2.05
|
||||||
|
format: em
|
||||||
|
-
|
||||||
|
id: scroll-to-bottom-bottom
|
||||||
|
title: Scroll to bottom bottom position placement
|
||||||
|
type: variable-number
|
||||||
|
default: 5.75
|
||||||
|
format: em
|
||||||
|
-
|
||||||
|
id: scroll-to-bottom-left
|
||||||
|
title: Scroll to bottom right position placement
|
||||||
|
type: variable-number
|
||||||
|
default: 2.05
|
||||||
|
format: em
|
||||||
|
-
|
||||||
|
id: scroll-to-top-width
|
||||||
|
title: Scroll to top button width
|
||||||
|
type: variable-number
|
||||||
|
default: 1.875
|
||||||
|
format: em
|
||||||
|
-
|
||||||
|
id: scroll-to-top-height
|
||||||
|
title: Scroll to top button height
|
||||||
|
type: variable-number
|
||||||
|
default: 1.875
|
||||||
|
format: em
|
||||||
|
-
|
||||||
|
id: scroll-to-bottom-width
|
||||||
|
title: Scroll to bottom button width
|
||||||
|
type: variable-number
|
||||||
|
default: 1.875
|
||||||
|
format: em
|
||||||
|
-
|
||||||
|
id: scroll-to-bottom-height
|
||||||
|
title: Scroll to bottom button height
|
||||||
|
type: variable-number
|
||||||
|
default: 1.875
|
||||||
|
format: em
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* In case not using the style settings plugin */
|
||||||
|
:root {
|
||||||
|
--scroll-to-bottom-bottom: 2.65em;
|
||||||
|
--scroll-to-bottom-left: 2.05em;
|
||||||
|
--scroll-to-top-bottom: 5.75em;
|
||||||
|
--scroll-to-top-left: 2.05em;
|
||||||
|
--scroll-input-width: 1.875em;
|
||||||
|
--scroll-to-top-width: var(--scroll-input-width);
|
||||||
|
--scroll-to-top-height: var(--scroll-input-width);
|
||||||
|
--scroll-to-bottom-width: var(--scroll-input-width);
|
||||||
|
--scroll-to-bottom-height: var(--scroll-input-width);
|
||||||
|
}
|
||||||
|
|
||||||
|
.div-scrollToTop {
|
||||||
|
position: absolute;
|
||||||
|
bottom: var(--scroll-to-top-bottom);
|
||||||
|
right: var(--scroll-to-top-left);
|
||||||
|
z-index: 99;
|
||||||
|
}
|
||||||
|
|
||||||
|
.div-scrollToBottom {
|
||||||
|
position: absolute;
|
||||||
|
bottom: var(--scroll-to-bottom-bottom);
|
||||||
|
right: var(--scroll-to-bottom-left);
|
||||||
|
z-index: 99;
|
||||||
|
}
|
||||||
|
|
||||||
|
#__C_scrollToTop {
|
||||||
|
width: auto;
|
||||||
|
height: auto;
|
||||||
|
padding: 3px;
|
||||||
|
display: grid;
|
||||||
|
user-select: none;
|
||||||
|
border-radius: 6px;
|
||||||
|
transition: 200ms ease;
|
||||||
|
min-width: fit-content;
|
||||||
|
justify-content: space-around;
|
||||||
|
z-index: var(--layer-status-bar);
|
||||||
|
box-shadow: 0px 3px 32px rgb(31 38 135 / 15%);
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
#__C_scrollToTop .buttonItem {
|
||||||
|
margin: 2px;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 5px 6px;
|
||||||
|
box-shadow: none;
|
||||||
|
margin-left: 3px;
|
||||||
|
margin-right: 3px;
|
||||||
|
border-radius: 3px;
|
||||||
|
width: var(--scroll-to-top-width);
|
||||||
|
height: var(--scroll-to-top-height);
|
||||||
|
font-size: initial !important;
|
||||||
|
background-color: var(--background-primary-alt);
|
||||||
|
}
|
||||||
|
|
||||||
|
#__C_scrollToTop button.buttonItem:hover {
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
#__C_scrollToBottom {
|
||||||
|
width: auto;
|
||||||
|
height: auto;
|
||||||
|
padding: 3px;
|
||||||
|
display: grid;
|
||||||
|
user-select: none;
|
||||||
|
border-radius: 6px;
|
||||||
|
transition: 200ms ease;
|
||||||
|
min-width: fit-content;
|
||||||
|
justify-content: space-around;
|
||||||
|
z-index: var(--layer-status-bar);
|
||||||
|
box-shadow: 0px 3px 32px rgb(31 38 135 / 15%);
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
#__C_scrollToBottom .buttonItem {
|
||||||
|
margin: 2px;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 5px 6px;
|
||||||
|
box-shadow: none;
|
||||||
|
margin-left: 3px;
|
||||||
|
margin-right: 3px;
|
||||||
|
width: var(--scroll-to-bottom-width);
|
||||||
|
height: var(--scroll-to-bottom-height);
|
||||||
|
border-radius: 3px;
|
||||||
|
font-size: initial !important;
|
||||||
|
background-color: var(--background-primary-alt);
|
||||||
|
}
|
||||||
|
|
||||||
|
#__C_scrollToBottom button.buttonItem:hover {
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"snippetList": [
|
||||||
|
{
|
||||||
|
"repo": "https://github.com/efemkay/obsidian-modular-css-layout",
|
||||||
|
"snippetsContents": [
|
||||||
|
{
|
||||||
|
"name": "MCL Gallery Cards.css",
|
||||||
|
"lastUpdate": "2022-11-28T02:12:53Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MCL Multi Column.css",
|
||||||
|
"lastUpdate": "2022-11-28T02:12:53Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MCL Wide Views.css",
|
||||||
|
"lastUpdate": "2022-11-18T15:21:49Z"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excludedSnippet": "",
|
||||||
|
"errorSnippet": ""
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "obsidian-snippet-downloader",
|
||||||
|
"name": "Snippet Downloader",
|
||||||
|
"version": "2.0.1",
|
||||||
|
"minAppVersion": "0.12.0",
|
||||||
|
"description": "A obsidian's plugin to help to manage css snippets (download / update) from repository ",
|
||||||
|
"author": "Mara-Li",
|
||||||
|
"authorUrl": "www.mara-li.fr",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
.setting-item.snippets-downloader-settings {
|
||||||
|
border: none;
|
||||||
|
padding: 0.5em 1em;
|
||||||
|
}
|
||||||
|
summary.snippets-downloader-summary {
|
||||||
|
height: 2em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
|
.setting-item.snippets-downloader-options {
|
||||||
|
top:-2em;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.snippets-downloader-button {
|
||||||
|
background: transparent !important;
|
||||||
|
border: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"id": "quickadd",
|
"id": "quickadd",
|
||||||
"name": "QuickAdd",
|
"name": "QuickAdd",
|
||||||
"version": "0.5.5",
|
"version": "0.8.0",
|
||||||
"minAppVersion": "0.13.19",
|
"minAppVersion": "0.13.19",
|
||||||
"description": "Quickly add new pages or content to your vault.",
|
"description": "Quickly add new pages or content to your vault.",
|
||||||
"author": "Christian B. B. Houmann",
|
"author": "Christian B. B. Houmann",
|
||||||
"authorUrl": "https://bagerbach.com",
|
"authorUrl": "https://bagerbach.com",
|
||||||
"isDesktopOnly": false
|
"isDesktopOnly": false
|
||||||
}
|
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,264 @@
|
|||||||
|
/* === README ===
|
||||||
|
Snippet: MCL Gallery Cards / Author: Faiz Khuzaimah / twitter: @faizkhuzaimah / github: https://github.com/efemkay
|
||||||
|
Version 0.8.0 (updated 2022-11-28)
|
||||||
|
- adjustment for SNW plugin indicators in image gallery. Option to hide (default) or show.
|
||||||
|
- fix gap between the images in image gallery (especially the vertical vs horizontal gap)
|
||||||
|
Version 0.6.2 (updated 2022-10-22)
|
||||||
|
- rollover main branch to support Obsidian 1.0.0
|
||||||
|
Version 0.5.0 (updated 2022-09-17)
|
||||||
|
- added mermaid scale and zoom feature. FR #19 on GH.
|
||||||
|
version 0.3.1 (2022-06-26)
|
||||||
|
- fix table mis-formatting
|
||||||
|
- completed callout and paragraph-based image gallery
|
||||||
|
- added dimension control for images in lists
|
||||||
|
|
||||||
|
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);}
|
||||||
|
|
||||||
|
img[alt*="right"] {float: right; margin-left: 0.5em; }
|
||||||
|
|
||||||
|
|
||||||
|
/* === 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 div[data-embed-type="image"] > 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 div[data-embed-type="image"].el-embed-image.el-p { 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 div[data-embed-type="image"] > 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 */
|
||||||
|
|
||||||
|
/* Editing View - as alternate to <p> in Reading View since there's no natural container in Editing View using <p> */
|
||||||
|
.image-gallery div:not(.cm-callout):not(.HyperMD-list-line).image-embed img
|
||||||
|
{ max-height: calc(var(--img-max-height)/1.5); display: unset; object-fit: cover; margin-right: var(--callout-gallery-gap); }
|
||||||
|
/* previously i have max-width: 50% */
|
||||||
|
|
||||||
|
/* 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;}
|
||||||
|
|
||||||
|
/* Special Adjustment for Minimal theme. Left margin. Editing Live Preview. */
|
||||||
|
.markdown-source-view.mod-cm6.is-readable-line-width .internal-embed
|
||||||
|
{ margin-left: 0 !important; width: unset;}
|
||||||
|
/* Special Adjustment for Minimal theme. Override width: 100% */
|
||||||
|
.full-width-media .image-gallery .image-embed img:not(.emoji):not([width]) { width: unset; }
|
||||||
|
|
||||||
|
/* 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 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%}
|
||||||
|
.mermaid-zoom .view-content :is(.markdown-preview-view) .mermaid svg { cursor: zoom-in; }
|
||||||
|
|
||||||
|
/* css zoom for mermaid diagram */
|
||||||
|
body.mermaid-zoom:not(.is-mobile) .view-content :is(.cm-edito,.markdown-preview-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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* === ALPHA VERSION table-card === */
|
||||||
|
/* setting the borders */
|
||||||
|
.table-card table > tbody > tr,
|
||||||
|
.table-card.markdown-source-view.mod-cm6 .dataview.table-view-table .table-view-tbody tr {border: 1px solid black; border-radius: 0.5em;}
|
||||||
|
.table-card.markdown-source-view.mod-cm6 .dataview.table-view-table .table-view-tbody td {border-right: unset;}
|
||||||
|
|
||||||
|
:is(.theme-light, .theme-dark) .table-card table,
|
||||||
|
.table-card:is(*,.is-live-preview.is-live-preview) table :is(td,tr) {background-color: unset;}
|
||||||
|
.table-card .dataview.table-view-table.dataview.table-view-table {border: unset;} /* for primary */
|
||||||
|
.table-card table tbody { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px,1fr)); gap: 0.5em; clear: both;}
|
||||||
|
.table-card table > tbody > tr {display: flex; flex-direction: column; padding-inline: 0.5em;}
|
||||||
|
|
||||||
|
.table-card:is(*,.is-live-preview) table.table-view-table > tbody > tr > td:not(:first-child) {border-top: 1px solid gray; }
|
||||||
|
.table-card table.table-view-table > tbody > tr {margin: unset;}
|
||||||
|
|
||||||
|
/* thead adjustment */
|
||||||
|
/* table > thead {display: flex; } */
|
||||||
|
.table-card table > thead {float: right;}
|
||||||
|
.table-card table.table-view-table > thead > tr {margin: unset;}
|
||||||
|
.table-card table.table-view-table > thead > tr > th {border: unset;}
|
||||||
|
.table-card .dataview.table-view-table.dataview.table-view-table :is(thead, th) {padding-block: unset;}
|
||||||
|
|
||||||
|
|
||||||
|
/* === 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-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
|
||||||
|
*/
|
@ -0,0 +1,465 @@
|
|||||||
|
/* === README ===
|
||||||
|
Snippet: MCL Multi Column / Author: Faiz Khuzaimah / twitter: @faizkhuzaimah / github: https://github.com/efemkay
|
||||||
|
Version 0.8.0 (updated 2022-11-26)
|
||||||
|
- feature: `no-wrap` option for `[!multi-column]` using callout-metadata
|
||||||
|
Version 0.7.2 (updated 2022-11-24)
|
||||||
|
- fix margin-left for float `right`
|
||||||
|
- improved support for Minimal theme for live preview float-right when in normal width note
|
||||||
|
Version 0.7.0 (updated 2022-11-18)
|
||||||
|
- feature: list column, list grid and list card using tags (need Contextual Typography plugin)
|
||||||
|
- feature: float in live preview using float-right
|
||||||
|
- refine: [!blank] callout as alternative to [!blank-container]
|
||||||
|
Version 0.6.2 (updated 2022-10-22)
|
||||||
|
- rollover main branch to support Obsidian 1.0.0
|
||||||
|
Version 0.6.1 (updated 2022-10-02). Version number follow overall MCL
|
||||||
|
- fix for footnote with -column-list-block created a <br> tag
|
||||||
|
|
||||||
|
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
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* @settings
|
||||||
|
|
||||||
|
name: Modular CSS Layout - Multi Column
|
||||||
|
id: modular-css-layout-mc
|
||||||
|
settings:
|
||||||
|
|
||||||
|
-
|
||||||
|
id: multi-column-title
|
||||||
|
title: Callout Column Settings
|
||||||
|
type: heading
|
||||||
|
level: 2
|
||||||
|
collapsed: true
|
||||||
|
-
|
||||||
|
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: callout-gap
|
||||||
|
title: Sub-Callout Gap (any unit)
|
||||||
|
description: NO spacing between figure and unit
|
||||||
|
type: variable-text
|
||||||
|
default: 0.5rem
|
||||||
|
-
|
||||||
|
id: callout-margin
|
||||||
|
title: Sub-Callout Margin (any unit)
|
||||||
|
description: to allow some spacing for box-shadow
|
||||||
|
type: variable-text
|
||||||
|
default: 5px
|
||||||
|
-
|
||||||
|
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: mc-list-column-title
|
||||||
|
title: List Column Settings
|
||||||
|
description: using `{.xxx-column-list-xxx}` and `#mcl/list-column`
|
||||||
|
type: heading
|
||||||
|
level: 2
|
||||||
|
collapsed: true
|
||||||
|
-
|
||||||
|
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: col-rule-color
|
||||||
|
title: Column Ruler Color
|
||||||
|
type: variable-themed-color
|
||||||
|
format: hsl
|
||||||
|
opacity: true
|
||||||
|
default-light: '#'
|
||||||
|
default-dark: '#'
|
||||||
|
-
|
||||||
|
id: col-rule-width
|
||||||
|
title: Column Ruler Width (in px)
|
||||||
|
type: variable-number-slider
|
||||||
|
default: 1
|
||||||
|
min: 0
|
||||||
|
max: 4
|
||||||
|
step: 1
|
||||||
|
format: px
|
||||||
|
|
||||||
|
-
|
||||||
|
id: mc-list-grid-title
|
||||||
|
title: List Grid and List Card
|
||||||
|
description: using `#mcl/list-grid` and `#mcl/list-card`
|
||||||
|
type: heading
|
||||||
|
level: 2
|
||||||
|
collapsed: true
|
||||||
|
-
|
||||||
|
id: list-grid-min-width
|
||||||
|
title: Minimum Grid/Card Width (in px/em or similar)
|
||||||
|
type: variable-text
|
||||||
|
default: 250px
|
||||||
|
-
|
||||||
|
id: mcl-card-bg-color
|
||||||
|
title: List Card Background Color
|
||||||
|
type: variable-themed-color
|
||||||
|
format: hsl
|
||||||
|
opacity: true
|
||||||
|
default-light: '#'
|
||||||
|
default-dark: '#'
|
||||||
|
-
|
||||||
|
id: mcl-card-header-border-width
|
||||||
|
title: Bottom Border for List Card Header (in px/em or similar)
|
||||||
|
description: set to 0 to disable the border
|
||||||
|
type: variable-text
|
||||||
|
default: 1px
|
||||||
|
-
|
||||||
|
id: mcl-card-gap
|
||||||
|
title: List Card Border Width (in px/em or similar)
|
||||||
|
type: variable-text
|
||||||
|
default: 0.2em
|
||||||
|
-
|
||||||
|
id: mcl-card-border-width
|
||||||
|
title: List Card Border Width (in px/em or similar)
|
||||||
|
type: variable-text
|
||||||
|
default: 1px
|
||||||
|
-
|
||||||
|
id: mcl-card-border-color
|
||||||
|
title: List Card Border Color
|
||||||
|
type: variable-themed-color
|
||||||
|
format: hsl
|
||||||
|
opacity: true
|
||||||
|
default-light: '#'
|
||||||
|
default-dark: '#'
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
body{
|
||||||
|
--callout-min-width: 200px;
|
||||||
|
--callout-nowrap-min-width: 250px;
|
||||||
|
--callout-gap: 0.5rem;
|
||||||
|
--callout-margin: 5px;
|
||||||
|
--float-small-width: 300px;
|
||||||
|
--float-medium-width: 400px;
|
||||||
|
--float-large-width: 600px;
|
||||||
|
/* 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;
|
||||||
|
--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);
|
||||||
|
}
|
||||||
|
.theme-dark {
|
||||||
|
/* --background-mcl-card: hsl(300, 5%, 15%); */
|
||||||
|
}
|
||||||
|
.theme-light {
|
||||||
|
/* --background-mcl-card: hsl(300, 5%, 90%); */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* === Multi Column "DIV"'s Using Callout === */
|
||||||
|
/* some issues still persists
|
||||||
|
(2) some theme uses transparency to affect .callout-title */
|
||||||
|
|
||||||
|
/* -- Main multi-column snippet using Callout */
|
||||||
|
|
||||||
|
/* 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 { display: flex; flex-direction: column; }
|
||||||
|
div[data-callout="multi-column"].callout:not(.is-collapsed) .callout { margin: 0 var(--callout-margin) 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) { 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 */
|
||||||
|
/* adjusted for Obsidian 0.16.x, removed a number of previous adjustment as no longer required */
|
||||||
|
div[data-callout="multi-column"].callout > div.callout-content .callout.is-collapsed { box-shadow: unset; height: min-content;}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 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;}
|
||||||
|
|
||||||
|
/* Special Adjustment -- for Sanctum because it has "column" callout, Obsidian v0.16.x. Not required for multi-flex as it Sanctum expects the name ends with *=column */
|
||||||
|
.callout[data-callout*=column] .callout-title { display: flex; }
|
||||||
|
.callout[data-callout*=column] .callout-content { display: unset; }
|
||||||
|
|
||||||
|
/* 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; }
|
||||||
|
/* Special Adjustment -- for 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;}
|
||||||
|
|
||||||
|
|
||||||
|
/* === Multi Column "DIV"'s Using Callout -- No-Wrap Option === */
|
||||||
|
div[data-callout="multi-column"][data-callout-metadata*="no-wrap"].callout {flex-wrap: nowrap; overflow-x: scroll;}
|
||||||
|
div[data-callout="multi-column"][data-callout-metadata*="no-wrap"].callout > .callout-content > *:is(div,ul) { flex-shrink: 0; flex-basis: var(--callout-nowrap-min-width) }
|
||||||
|
|
||||||
|
|
||||||
|
/* === Multi Column Flex "DIV"'s Using Callout === */
|
||||||
|
/* - Still EXPERIMENTAL, different theme approach border and background differently, but 0.16.x seems to align most */
|
||||||
|
|
||||||
|
/* adjusted for Obsidian 0.16.x */
|
||||||
|
div[data-callout="multi-column-flex-height"].callout > .callout-title { display: none; }
|
||||||
|
div[data-callout="multi-column-flex-height"].callout > .callout-content { display: contents; }
|
||||||
|
div[data-callout="multi-column-flex-height"].callout
|
||||||
|
{ display: flex; flex-wrap: wrap; gap: var(--callout-gap); background: unset; border: unset; margin: unset; padding: unset; clear: both; }
|
||||||
|
|
||||||
|
div[data-callout="multi-column-flex-height"].callout > .callout-content > *:is(div,ul) {flex: 1 1 var(--callout-min-width); margin: 0; }
|
||||||
|
div[data-callout="multi-column-flex-height"].callout .callout { border: unset; box-shadow: unset; }
|
||||||
|
/* need to reintroduce border-left as original callout put border on the parent callout */
|
||||||
|
div[data-callout="multi-column-flex-height"].callout > .callout-content .callout .callout-title { border-top-left-radius: 3px;}
|
||||||
|
div[data-callout="multi-column-flex-height"].callout > .callout-content .callout .callout-content { margin: 0; border-bottom-left-radius: 3px; height: min-height;}
|
||||||
|
|
||||||
|
/* "fix" for theme with negative margin & box shadow. Applicable for Prism theme */
|
||||||
|
div[data-callout="multi-column-flex-height"].callout > .callout-content { margin-top: unset;}
|
||||||
|
div[data-callout="multi-column-flex-height"].callout:not(.is-collapsed) { box-shadow: unset; }
|
||||||
|
|
||||||
|
|
||||||
|
/* === 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;}
|
||||||
|
|
||||||
|
/* Special Adjustment for Shimmering Focus. Differing font size in callout */
|
||||||
|
div[data-callout*="blank"] .callout-content :is(p,ul,li) { font-size: unset; line-height: inherit; }
|
||||||
|
div[data-callout*="blank"] .callout-content :is(li) { margin: unset; }
|
||||||
|
|
||||||
|
|
||||||
|
/* === Text Justify === */
|
||||||
|
|
||||||
|
.text-justify :is(.markdown-preview-view p,.markdown-source-view .cm-line) { text-align: justify; }
|
||||||
|
|
||||||
|
|
||||||
|
/* === Floating Callout === */
|
||||||
|
|
||||||
|
/* use media query so that floats only works when there's enough width */
|
||||||
|
@media (min-width: 500px){
|
||||||
|
.markdown-source-view [data-callout-metadata*="float-left"].cm-embed-block.cm-callout {padding-top: 0.8em;}
|
||||||
|
.markdown-source-view [data-callout-metadata*="float-left"].cm-embed-block.cm-callout,
|
||||||
|
.markdown-reading-view div[data-callout-metadata*="left"].callout {float: left; margin-right: 15px !important; margin-bottom: 10px; }
|
||||||
|
.markdown-source-view [data-callout-metadata*="float-right"].cm-embed-block.cm-callout {padding-top: 0.8em;}
|
||||||
|
.markdown-source-view [data-callout-metadata*="float-right"].cm-embed-block.cm-callout,
|
||||||
|
.markdown-reading-view div[data-callout-metadata*="right"].callout {float: right; margin-left: 15px !important; margin-bottom: 10px;}
|
||||||
|
|
||||||
|
.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;}
|
||||||
|
div[data-callout*="blank"].callout:is(div[data-callout-metadata*="left"], div[data-callout-metadata*="right"]) {margin-top: 0; margin-bottom: 0;}
|
||||||
|
div[class*="wide-"].markdown-source-view.mod-cm6.is-readable-line-width .cm-embed-block:is(.cm-callout, .admonition-parent) > div[data-callout-metadata*="-small"].callout,
|
||||||
|
div[data-callout-metadata*="-small"].callout {width: var(--float-small-width);}
|
||||||
|
div[class*="wide-"].markdown-source-view.mod-cm6.is-readable-line-width .cm-embed-block:is(.cm-callout, .admonition-parent) > div[data-callout-metadata*="-medium"].callout,
|
||||||
|
div[data-callout-metadata*="-medium"].callout {width: var(--float-medium-width);}
|
||||||
|
}
|
||||||
|
@media (min-width: 750px){
|
||||||
|
div[class*="wide-"].markdown-source-view.mod-cm6.is-readable-line-width .cm-embed-block:is(.cm-callout, .admonition-parent) > div[data-callout-metadata*="-large"].callout,
|
||||||
|
div[data-callout-metadata$="large"].callout {width: var(--float-large-width);}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Introduce clear to break the float */
|
||||||
|
/* .markdown-preview-view h2, *//* remove this as it has weird spacing effect */
|
||||||
|
.embedded-backlinks { clear: both; }
|
||||||
|
|
||||||
|
/* fix for blockquote underlap the float layout */
|
||||||
|
.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 */
|
||||||
|
|
||||||
|
|
||||||
|
/* Special Adjustment for Minimal theme. To override (have higher specificity) the width param. Can be merged to main code later on */
|
||||||
|
@media (min-width: 500px){
|
||||||
|
.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); margin-left: 0 !important; }
|
||||||
|
.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); margin-left: 0 !important; }
|
||||||
|
}
|
||||||
|
@media (min-width: 750px){
|
||||||
|
.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; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 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 */
|
||||||
|
.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; }
|
||||||
|
|
||||||
|
|
||||||
|
/* === Multi Column Lists (require Markdown Attributes) === */
|
||||||
|
|
||||||
|
/* - xx-column-list for first level only list, but apply anywhere */
|
||||||
|
/* - xx-column-list-block apply at block level - but require JV's Markdown Attributes plugin */
|
||||||
|
|
||||||
|
@media (min-width: 500px ){
|
||||||
|
.two-column-list div > ul,
|
||||||
|
.two-column-list-block {columns: 2; column-gap: 3rem;}
|
||||||
|
.three-column-list div > ul,
|
||||||
|
.three-column-list-block {columns: 3; column-gap: 3rem;}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* - 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);}
|
||||||
|
}
|
||||||
|
|
||||||
|
.multi-column-list div > ul,
|
||||||
|
.multi-column-list-block {
|
||||||
|
column-width: var(--list-min-width); column-gap: 3rem; column-rule: var(--col-rule-width) solid var(--col-rule-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 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;}
|
||||||
|
|
||||||
|
/* ========================================================================== */
|
||||||
|
/* === Multi Column List using Tags (require Contextual Typography) === */
|
||||||
|
|
||||||
|
/* hide tag in rendered view, dim it in edit mode */
|
||||||
|
:is(div[class*="mcl"].markdown-rendered, .markdown-rendered div[class*="mcl"]) a[href*="#mcl"] {display: none;}
|
||||||
|
span[class*="mcl"] {background-color: var(--background-primary) !important; color: var(--text-faint) !important;}
|
||||||
|
|
||||||
|
/* this is direct alternative to .multi-column-list and .multi-column-list-block */
|
||||||
|
.tag-mcllist-column > .callout[data-callout*="blank"],
|
||||||
|
.tag-mcllist-column > .callout > .callout-content,
|
||||||
|
.tag-mcllist-column:not([data-callout]) { column-width: var(--list-min-width); column-gap: 1rem; column-rule: var(--col-rule-width) solid var(--col-rule-color); }
|
||||||
|
.tag-mcllist-column.cm-callout {padding-block: 1em;} /* add block padding only for the one in callout */
|
||||||
|
.tag-mcllist-column .callout:first-of-type { margin-top: 0; }
|
||||||
|
.tag-mcllist-column ul:first-of-type { margin-top: 0; }
|
||||||
|
/* */
|
||||||
|
/* -- MCL Grid, alpha */
|
||||||
|
.tag-mcllist-grid ul:first-child { display: grid; grid-template-columns: repeat(auto-fit,minmax(var(--list-grid-min-width),1fr));}
|
||||||
|
.tag-mcllist-grid ul:first-child > li { border: px solid Gray; border-radius: 0.5em;}
|
||||||
|
.tag-mcllist-grid ul:first-child > li:not(:last-of-type) {padding-right: 1.6em;}
|
||||||
|
|
||||||
|
|
||||||
|
/* -- MCL Grid, alpha */
|
||||||
|
.tag-mcllist-card ul:first-child
|
||||||
|
{ display: grid; grid-template-columns: repeat(auto-fit,minmax(var(--list-grid-min-width),1fr));}
|
||||||
|
.tag-mcllist-card ul ul:not(ul ul ul) { padding-left: 0.1em; }
|
||||||
|
:is(.tag-mcllist-card, .tag-mcllist-card .callout-content) > ul { padding-left: 0; }
|
||||||
|
:is(.is-mobile .markdown-rendered) .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(.tag-mcllist-card, .tag-mcllist-card .callout-content) > ul > li {position: relative;}
|
||||||
|
:is(.tag-mcllist-card, .tag-mcllist-card .callout-content) > ul > li:hover > .collapse-indicator,
|
||||||
|
:is(.tag-mcllist-card, .tag-mcllist-card .callout-content) > ul > li > ul > li:hover > .collapse-indicator {opacity: 1;}
|
||||||
|
:is(.tag-mcllist-card, .tag-mcllist-card .callout-content) > ul > li > .collapse-indicator,
|
||||||
|
:is(.tag-mcllist-card, .tag-mcllist-card .callout-content) > ul > li > ul > li > .collapse-indicator {position: absolute; right: 0;}
|
||||||
|
.tag-mcllist-card ul::before {display: none;}
|
||||||
|
/* decorate the first heading for cards */
|
||||||
|
:is(.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 */
|
||||||
|
.tag-mcllist-card > div > div > ul > li > .list-bullet::after,
|
||||||
|
.tag-mcllist-card > div > div > ul > li > ul > li > .list-bullet::after,
|
||||||
|
.tag-mcllist-card > ul > li::before,
|
||||||
|
.tag-mcllist-card > ul > li > ul > li::before,
|
||||||
|
.tag-mcllist-card > ul > li > .list-bullet::after,
|
||||||
|
.tag-mcllist-card > ul > li > ul > li > .list-bullet::after {visibility: hidden;}
|
||||||
|
/* remove the indentation guide */
|
||||||
|
.tag-mcllist-card ul:not(ul ul ul ul)::before {--indentation-guide-width: 0;}
|
||||||
|
.markdown-rendered.show-indentation-guide .tag-mcllist-card li > ul::before,
|
||||||
|
.markdown-rendered.show-indentation-guide .tag-mcllist-card li > ol::before {border-right: 0;}
|
||||||
|
.tag-mcllist-card li {list-style: none;}
|
||||||
|
.tag-mcllist-card li li li {list-style: circle;}
|
||||||
|
.tag-mcllist-card .callout ul:not(ul ul) > li,
|
||||||
|
.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);}
|
||||||
|
.tag-mcllist-card ul:not(ul ul) > li img {width: 100%;}
|
||||||
|
.tag-mcllist-card ul img {margin: 0; float: none;}
|
||||||
|
|
||||||
|
/* special adjustment for Sanctum */
|
||||||
|
.markdown-rendered .tag-mcllist-card ul img[alt*=right] {margin: 0;}
|
@ -0,0 +1,326 @@
|
|||||||
|
/* === README ===
|
||||||
|
Snippet: MCL Wide Views / Author: Faiz Khuzaimah / twitter: @faizkhuzaimah / github: https://github.com/efemkay
|
||||||
|
Version 0.6.3 (updated 2022-11-18)
|
||||||
|
- compatibility update to Minimal theme v6.1.9 especially multi column admonition and wide-page
|
||||||
|
Version 0.6.2 (updated 2022-10-22)
|
||||||
|
- update to support Obsidian 1.0.0
|
||||||
|
- Fix wide-page not renderring properly in editing view (conflict with global/vault wide settings
|
||||||
|
- Adjusted the variable for Adjustable RLL to make use of Obsidian default variable --file-line-width. Changes not break the settings as I mapped it to MCL own variable --adj-rll-max-width
|
||||||
|
- Fix for wide-table not renderring properly in editing view for Minimal theme.
|
||||||
|
Version 0.6.0 (updated 2022-09-25)
|
||||||
|
- fix to support Obsidian v0.16.x (mostly editing view and global settings)
|
||||||
|
- code cleanup
|
||||||
|
|
||||||
|
What is this snippet for?
|
||||||
|
- for any users to use with any theme to complement any missing page/block width control
|
||||||
|
- some features will require mgmeyer's Contextual Typography (CT) plugin
|
||||||
|
- available cssClass:
|
||||||
|
- wide-page
|
||||||
|
- wide-dataview (require CT plugin)
|
||||||
|
- wide-table (require CT plugin)
|
||||||
|
- wide-callout
|
||||||
|
- wide-backlinks
|
||||||
|
- narrow-page
|
||||||
|
- cssClass toggle: is-adj-rll and adj-rll-max-width
|
||||||
|
|
||||||
|
Credits
|
||||||
|
- Kevin Powell Youtube channel
|
||||||
|
- hydescarf for accomodating my snippets adjustment
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* @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 (any unit e.g. px, em, ch)
|
||||||
|
type: variable-text
|
||||||
|
default: 750px
|
||||||
|
|
||||||
|
-
|
||||||
|
id: wide-view-title
|
||||||
|
title: Wide Page/Dataview/Table/Backlinks/Callout Settings
|
||||||
|
description: Control max-width block for page with cssClass `wide-page`. RLL can be enabled or disabled
|
||||||
|
type: heading
|
||||||
|
level: 2
|
||||||
|
collapsed: true
|
||||||
|
-
|
||||||
|
id: normal-max-width
|
||||||
|
title: Max Width for Normal Width block (any unit e.g. px, em, ch)
|
||||||
|
type: variable-text
|
||||||
|
default: 750px
|
||||||
|
-
|
||||||
|
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
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
body{
|
||||||
|
--normal-max-width: var(--file-line-width);
|
||||||
|
--narrow-max-width: var(--file-line-width);
|
||||||
|
--adj-rll-max-width: 750px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === Wide Page === */
|
||||||
|
|
||||||
|
|
||||||
|
/* --- Editing View ---
|
||||||
|
- set Readable Line Length (RLL) to wide (100%) for any css class with "wide" word in it.
|
||||||
|
- "width:100%" added for Blue Topaz
|
||||||
|
- .cm-content added to override Mado 11
|
||||||
|
- focus to fix for v0.16.x -- .markdown-source-view.mod-cm6 .cm-sizer
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* - WPEV - */
|
||||||
|
/* Main code */
|
||||||
|
/* Set the containers (all relevant levels) to max-width 100%. Applicable to global and per note (cssClass) */
|
||||||
|
/* selector for editing container .cm-sizer */
|
||||||
|
:is(body[class*="wide-"], div[class*="wide-"].markdown-source-view.mod-cm6.is-readable-line-width) .cm-sizer,
|
||||||
|
/* selector for sub containers
|
||||||
|
- .cm-contentContainer, .cm-contentContainer > .cm-content, .cm-contentContainer > .cm-content > div
|
||||||
|
- .embedded-backlinks, .embedded-backlinks > div */
|
||||||
|
:is(body[class*="wide-"]:not(.max-view-enabled), div[class*="wide-"].markdown-source-view.mod-cm6) :is(.cm-contentContainer.cm-contentContainer, .cm-contentContainer.cm-contentContainer > .cm-content, .cm-contentContainer.cm-contentContainer > .cm-content > div, .embedded-backlinks, .embedded-backlinks > div)
|
||||||
|
{ max-width: 100%; width: 98%;}
|
||||||
|
|
||||||
|
/* Special adjustment - for Minimal
|
||||||
|
- it has table also set with max-width. but table require separate line because we don't want width: 100% as that would stretch the table
|
||||||
|
- but for callout, require width: auto */
|
||||||
|
div[class*="wide-"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > .cm-content table { max-width: 100% }
|
||||||
|
div[class*="wide-"].markdown-source-view.mod-cm6.is-readable-line-width .cm-embed-block:is(.cm-callout, .admonition-parent) > .callout { max-width: 100%; width: auto;}
|
||||||
|
/* overriding margin-left setting to obsidian "default" */
|
||||||
|
div[class*="wide-page"].markdown-source-view.mod-cm6 .embedded-backlinks,
|
||||||
|
div[class*="wide-page"].markdown-source-view.mod-cm6 .cm-contentContainer > .cm-content > div
|
||||||
|
{margin-left: 20px !important; }
|
||||||
|
div[class*="wide-"].markdown-source-view.mod-cm6.is-readable-line-width .cm-embed-block:is(.cm-callout, .admonition-parent) > .callout
|
||||||
|
{ margin-left: 0 !important; }
|
||||||
|
|
||||||
|
div[class*="wide-page"].markdown-source-view.mod-cm6.is-readable-line-width table
|
||||||
|
{margin-left: unset !important; }
|
||||||
|
|
||||||
|
/* Additional Note
|
||||||
|
- Yin Yang uses .markdown-source-view.mod-cm6 { width: !important;}. I'm skipping fixes for this until there's user request
|
||||||
|
- added :is(body:not(.max-view-enabled) .mod-root) to accomodate for Shimmering Focus, does not affect other themes */
|
||||||
|
|
||||||
|
|
||||||
|
/* --- Reading View --- */
|
||||||
|
/* -- similar to Editing View (WPEV), set the RLL to 100% for any css class with "wide" word in it
|
||||||
|
- :is() used for OR between global toggle and "cssClass" in yaml
|
||||||
|
- "width:100%" added for Blue Topaz */
|
||||||
|
|
||||||
|
/* - WPRV - */
|
||||||
|
/* Main code */
|
||||||
|
/* Set the containers (all relevant levels) to max-width 100%. Applicable to global and per note (cssClass) */
|
||||||
|
body[class*="wide-"] :is(.markdown-preview-sizer.markdown-preview-sizer, .markdown-preview-sizer.markdown-preview-sizer > div),
|
||||||
|
div[class*="wide-"].markdown-preview-view :is(.markdown-preview-sizer.markdown-preview-sizer, .markdown-preview-sizer.markdown-preview-sizer > div)
|
||||||
|
{ max-width: 100%; margin-inline: auto; width: 100%;}
|
||||||
|
|
||||||
|
/* Special adjustment - for Minimal theme */
|
||||||
|
div[class*="wide-"].markdown-preview-view {padding-inline: 30px;}
|
||||||
|
|
||||||
|
/* special line just for Atom theme -- commented out for now */
|
||||||
|
/*
|
||||||
|
div[class*="wide-"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer,
|
||||||
|
div[class*="wide-"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div
|
||||||
|
{ max-width: 100% !important; } */
|
||||||
|
|
||||||
|
|
||||||
|
/* === Wide Blocks (i.e. Dataview, Table, Callout & Backlink) === */
|
||||||
|
|
||||||
|
|
||||||
|
/* --- Editing View ---
|
||||||
|
- For Editing View, the approach is slightly different. After "wide-page" set all max-width to 100%, I adjust the .cm-content > * blocks to normal width and then selectively target blocks for wide width
|
||||||
|
- must note to ensure specificity rule over some theme), then
|
||||||
|
- global settings selector need to be separated to ensure it is not conditional to cssClass yaml
|
||||||
|
- `body[class*="wide-"]` used for global settings, `div[class*="wide-"].markdown-preview-view` used for per note cssClass
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* - WBEV - */
|
||||||
|
/* Main code */
|
||||||
|
/* Generally set all blocks to normal width, no need (yet) for global settings as I didn't adjust it Wide Page above */
|
||||||
|
/* set .cm-sizer > .inline-title to normal width. has to be separated because i don't want margin auto */
|
||||||
|
:is(body[class*="wide-"]:not(.max-view-enabled) .mod-root .markdown-source-view.mod-cm6:not(.wide-page), div.markdown-source-view.mod-cm6:is(.wide-dataview,.wide-table,.wide-backlinks,.wide-callout)) .cm-sizer > .inline-title
|
||||||
|
{ max-width: var(--normal-max-width); width: 100%; margin-inline: auto; }
|
||||||
|
/* set normal width to `.cm-content > div` and `.embedded-links` only (override the WPEV) */
|
||||||
|
:is(body[class*="wide-"]:not(.max-view-enabled) .markdown-source-view.mod-cm6:not(.wide-page), div[class*="wide-"].markdown-source-view.mod-cm6:not(.wide-page)) :is(.cm-contentContainer.cm-contentContainer > .cm-content > div, .cm-sizer > .embedded-backlinks)
|
||||||
|
{ max-width: var(--normal-max-width); margin-inline: auto !important; } /* important for margin needed because app.css:1473 use it for .cm-contentContainer > .cm-content > * */
|
||||||
|
|
||||||
|
/* selectors to set dataview, table, callout and/or backlinks to wide */
|
||||||
|
:is(body.wide-dataview-global:not(.max-view-enabled) .mod-root .markdown-source-view.mod-cm6, div[class*="-dataview"].markdown-source-view.mod-cm6) .cm-contentContainer.cm-contentContainer > div > div:is(.cm-preview-code-block),
|
||||||
|
:is(body.wide-table-global:not(.max-view-enabled) .mod-root .markdown-source-view.mod-cm6, div[class*="-table"].markdown-source-view.mod-cm6) .cm-contentContainer.cm-contentContainer > div > div:is(.HyperMD-table-row, .cm-table-widget),
|
||||||
|
:is(body.wide-callout-global:not(.max-view-enabled) .mod-root .markdown-source-view.mod-cm6, div[class*="-callout"].markdown-source-view.mod-cm6) .cm-contentContainer.cm-contentContainer > div > div:is(.cm-callout),
|
||||||
|
/* selectors to set backlinks to wide -- not fix yet for 0.16.x */
|
||||||
|
:is(body.wide-backlinks-global:not(.max-view-enabled) .mod-root .markdown-source-view.mod-cm6, div[class*="-backlinks"].markdown-source-view.mod-cm6) .cm-sizer > div:is(.embedded-backlinks)
|
||||||
|
{ max-width: 100%; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Special adjustment - for Minimal */
|
||||||
|
:is(body:not(.max-view-enabled) .mod-root) div[class*="-dataview"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div > div:is(.cm-preview-code-block) > div
|
||||||
|
{ width: unset;}
|
||||||
|
/* Special adjustment - for Minimal - to override custom margin-left that uses !important */
|
||||||
|
.wide-table.markdown-source-view.mod-cm6.is-readable-line-width table {margin-left: auto !important; }
|
||||||
|
|
||||||
|
/* Additional Notes
|
||||||
|
- Minimal removes inline padding for .markdown-source-view.mod-cm6 .cm-scroller so it is flushed to the very edges (no way to adjust currently)
|
||||||
|
- added :is(body:not(.max-view-enabled) .mod-root) to accomodate for Shimmering Focus, does not affect other themes */
|
||||||
|
|
||||||
|
|
||||||
|
/* --- Reading View ---
|
||||||
|
- Similar to WBEV, the approach is to leverage on WPRV setting all blocks to wide, set `.markdown-preview-sizer > div` to normal and set related block to wide again
|
||||||
|
- For Reading View, wide-dataview and wide-table will require Contextual Typography plugin
|
||||||
|
- :is() used to couple global toggle with yaml cssClass
|
||||||
|
- wide backlinks still cannot be implemented in 0.16.x as the it is located one div deeper than `.markdown-preview-sizer > div` which means I need to do "look-back", achievable only with :has()
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* - WBRV - */
|
||||||
|
/* Main code */
|
||||||
|
/* set the containers to normal width */
|
||||||
|
:is(body[class*="wide-"] .markdown-preview-view:not(.wide-page), div[class*="wide-"].markdown-preview-view:not(.wide-page)) .markdown-preview-sizer.markdown-preview-sizer > div
|
||||||
|
{ max-width: var(--normal-max-width); margin-inline: auto; } /* important is for Atom theme */
|
||||||
|
/* set the related blocks to wide width */
|
||||||
|
:is(body.wide-dataview-global, div[class*="-dataview"].markdown-preview-view) .markdown-preview-sizer.markdown-preview-sizer > div:is(.el-lang-dataview),
|
||||||
|
:is(body.wide-table-global, div[class*="-table"].markdown-preview-view) .markdown-preview-sizer.markdown-preview-sizer > div:is(.el-table),
|
||||||
|
:is(body.wide-callout-global, div[class*="-callout"].markdown-preview-view) .markdown-preview-sizer.markdown-preview-sizer > div[data-callout],
|
||||||
|
/* comment out wide backlinks as no possible fix (yet) for 0.16.x due to notes above *//*
|
||||||
|
:is(body.wide-backlinks-global, div[class*="-backlinks"].markdown-preview-view) .markdown-preview-sizer.markdown-preview-sizer > div:is(.embedded-backlinks)
|
||||||
|
{ max-width: 100%; }
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Special adjustment - for Minimal - it also somehow set the table width within dataview block */
|
||||||
|
:is(body.wide-dataview-global, div[class*="-dataview"].markdown-preview-view) .markdown-preview-sizer.markdown-preview-sizer > div:is(.el-lang-dataview) table
|
||||||
|
{ max-width: 100%; }
|
||||||
|
/* Special adjustment - for Minimal - to override Minimal custom width */
|
||||||
|
body[class*="global"].contextual-typography .markdown-preview-view.is-readable-line-width .markdown-preview-sizer > div { width: 100%; }
|
||||||
|
|
||||||
|
/* Additional Notes
|
||||||
|
- .markdown-preview-section is same div as .markdown-preview-sizer
|
||||||
|
- Atom uses !important for .markdown-preview-view.is-readable-line-width .markdown-preview-section {...}
|
||||||
|
- cannot adjust this at the moment without disrupting other theme's layout */
|
||||||
|
|
||||||
|
|
||||||
|
/* Editing and Reading View -- Special Adjustment
|
||||||
|
- for table for all theme, since its table not auto margin */
|
||||||
|
:is(body.wide-table-global, div[class*="wide-table"]) table { margin-inline: auto; }
|
||||||
|
|
||||||
|
|
||||||
|
/* === Narrow Page === */
|
||||||
|
/* cssClass YAML to allow users with disabled RLL to introduce RLL per page/note basis */
|
||||||
|
|
||||||
|
|
||||||
|
/* --- Editing View ---
|
||||||
|
- Set Readable Line Length (RLL) to wide (100%) for any css class with "wide" word in it
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* - NPEV - */
|
||||||
|
/* Main code */
|
||||||
|
/* set the containers to narrow width. `div.cm-content` added to override Mado 11 */
|
||||||
|
div[class*="narrow-"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer,
|
||||||
|
div[class*="narrow-"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > .cm-content,
|
||||||
|
div[class*="narrow-"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > .cm-content > div,
|
||||||
|
div[class*="narrow-"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > .embedded-backlinks,
|
||||||
|
div[class*="narrow-"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > .embedded-backlinks > div
|
||||||
|
{ max-width: var(--narrow-max-width); margin-inline: auto; }
|
||||||
|
|
||||||
|
/* Special adjustment - for Minimal */
|
||||||
|
/* it has table also set with max-width. but table require separate line because we don't want margin: auto that would center the table relative to other elements like para */
|
||||||
|
div[class*="narrow-"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > .cm-content table
|
||||||
|
{ max-width: var(--narrow-max-width); }
|
||||||
|
/* for Minimal theme but affecting all theme. Minimal apparently uses !important to control margin the adjustment is still safe because for narrow-page you would want margin: auto anyway */
|
||||||
|
div[class*="narrow-"].markdown-source-view.mod-cm6:not(.is-readable-line-width) .cm-contentContainer
|
||||||
|
{ margin-inline: auto !important; }
|
||||||
|
|
||||||
|
|
||||||
|
/* --- Reading View ---
|
||||||
|
- Similar to Editing View, set the RLL to 100% for any css class with "wide" word in it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* - NPRV - */
|
||||||
|
/* Main code */
|
||||||
|
/* set the note with cssClass: narrow- to max-width of the narrow width */
|
||||||
|
div[class*="narrow-"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer, /* double-up for specificity */
|
||||||
|
div[class*="narrow-"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div
|
||||||
|
{ max-width: var(--narrow-max-width); margin-inline: auto;}
|
||||||
|
|
||||||
|
/* Special adjustment - for Minimal theme */
|
||||||
|
div[class*="narrow-"].markdown-preview-view {padding-inline: 30px;}
|
||||||
|
|
||||||
|
|
||||||
|
/* === 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 -- just single line css ;) */
|
||||||
|
|
||||||
|
/* --- Editing and Reading View --- */
|
||||||
|
/* - AREV and ARRV - */
|
||||||
|
body.is-adj-rll { --file-line-width: var(--adj-rll-max-width); }
|
||||||
|
|
||||||
|
/* I still save below snippet for future references. May delete later */
|
||||||
|
|
||||||
|
/* --- Editing View ---
|
||||||
|
- Set Readable Line Length (RLL) to wide (100%) for any css class with "wide" word in it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* - AREV - */
|
||||||
|
/* Main code */
|
||||||
|
/* set the containers to the custom adj rll width. `div.cm-content` added to override Mado 11 *//*
|
||||||
|
.is-adj-rll .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer,
|
||||||
|
.is-adj-rll .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > .cm-content,
|
||||||
|
.is-adj-rll .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > .cm-content table, /* for minimal *//*
|
||||||
|
.is-adj-rll .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > .cm-content > div,
|
||||||
|
.is-adj-rll .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > .embedded-backlinks,
|
||||||
|
.is-adj-rll .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > .embedded-backlinks > div
|
||||||
|
{ max-width: var(--adj-rll-max-width); margin-inline: auto; }
|
||||||
|
|
||||||
|
/* --- Reading View ---
|
||||||
|
- Similar to Editing View, set the RLL to 100% for any css class with "wide" word in it
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* - ARRV - */
|
||||||
|
/* Main code */
|
||||||
|
/* set the containers to the custom adj rll width *//*
|
||||||
|
.is-adj-rll .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer, /* double-up for specificity *//*
|
||||||
|
.is-adj-rll .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div
|
||||||
|
{ max-width: var(--adj-rll-max-width); margin-inline: auto;}
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "AnuPpuccin",
|
"name": "AnuPpuccin",
|
||||||
"version": "1.1.4",
|
"version": "1.2.0",
|
||||||
"minAppVersion": "0.16.0",
|
"minAppVersion": "0.16.0",
|
||||||
"author": "Anubis",
|
"author": "Anubis",
|
||||||
"authorUrl": "https://github.com/AnubisNekhet"
|
"authorUrl": "https://github.com/AnubisNekhet"
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,114 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
title: "🗒 Daily Note"
|
||||||
|
allDay: true
|
||||||
|
date: 2022-11-09
|
||||||
|
Date: 2022-11-09
|
||||||
|
DocType: Note
|
||||||
|
Hierarchy:
|
||||||
|
TimeStamp:
|
||||||
|
location:
|
||||||
|
CollapseMetaTable: true
|
||||||
|
Sleep: 7
|
||||||
|
Happiness: 80
|
||||||
|
Gratefulness: 80
|
||||||
|
Stress: 30
|
||||||
|
FrontHeadBar: 5
|
||||||
|
EarHeadBar: 35
|
||||||
|
BackHeadBar: 25
|
||||||
|
Water: 3.75
|
||||||
|
Coffee: 5
|
||||||
|
Steps: 13538
|
||||||
|
Ski:
|
||||||
|
Riding:
|
||||||
|
Racket:
|
||||||
|
Football:
|
||||||
|
Swim:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
%% Parent:: [[@Life Admin]] %%
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
[[2022-11-08|<< 🗓 Previous ]]       [[@Main Dashboard|Back]]       [[2022-11-10|🗓 Next >>]]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```button
|
||||||
|
name Record today's health
|
||||||
|
type command
|
||||||
|
action MetaEdit: Run MetaEdit
|
||||||
|
id EditMetaData
|
||||||
|
```
|
||||||
|
^button-2022-11-09Edit
|
||||||
|
|
||||||
|
```button
|
||||||
|
name Save
|
||||||
|
type command
|
||||||
|
action Save current file
|
||||||
|
id Save
|
||||||
|
```
|
||||||
|
^button-2022-11-09NSave
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
# 2022-11-09
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
> [!summary]+
|
||||||
|
> Daily note for 2022-11-09
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```toc
|
||||||
|
style: number
|
||||||
|
```
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
### 📝 Memos
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
This section does serve for quick memos.
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
|
||||||
|
%% --- %%
|
||||||
|
 
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
### 🗒 Notes
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
- Departure to [[Madrid]] from [[@@Zürich|Zürich]]
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
### :link: Linked activity
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
Table from [[2022-11-09]]
|
||||||
|
```
|
||||||
|
|
||||||
|
 
|
||||||
|
 
|
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
|
|
||||||
title: 🍽 Dinner @ Swiss Re
|
|
||||||
allDay: false
|
|
||||||
startTime: 19:00
|
|
||||||
endTime: 20:30
|
|
||||||
date: 2022-11-10
|
|
||||||
CollapseMetaTable: true
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Dinner @ Swiss Re with [[@@MRCK|Meggi-mo]] [[2022-11-10|this day]].
|
|
@ -0,0 +1,115 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
title: "🗒 Daily Note"
|
||||||
|
allDay: true
|
||||||
|
date: 2022-11-10
|
||||||
|
Date: 2022-11-10
|
||||||
|
DocType: Note
|
||||||
|
Hierarchy:
|
||||||
|
TimeStamp:
|
||||||
|
location:
|
||||||
|
CollapseMetaTable: true
|
||||||
|
Sleep: 8.5
|
||||||
|
Happiness: 85
|
||||||
|
Gratefulness: 85
|
||||||
|
Stress: 25
|
||||||
|
FrontHeadBar: 5
|
||||||
|
EarHeadBar: 30
|
||||||
|
BackHeadBar: 20
|
||||||
|
Water: 2.32
|
||||||
|
Coffee: 4
|
||||||
|
Steps: 10784
|
||||||
|
Ski:
|
||||||
|
Riding:
|
||||||
|
Racket:
|
||||||
|
Football:
|
||||||
|
Swim:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
%% Parent:: [[@Life Admin]] %%
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
[[2022-11-09|<< 🗓 Previous ]]       [[@Main Dashboard|Back]]       [[2022-11-11|🗓 Next >>]]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```button
|
||||||
|
name Record today's health
|
||||||
|
type command
|
||||||
|
action MetaEdit: Run MetaEdit
|
||||||
|
id EditMetaData
|
||||||
|
```
|
||||||
|
^button-2022-11-10Edit
|
||||||
|
|
||||||
|
```button
|
||||||
|
name Save
|
||||||
|
type command
|
||||||
|
action Save current file
|
||||||
|
id Save
|
||||||
|
```
|
||||||
|
^button-2022-11-10NSave
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
# 2022-11-10
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
> [!summary]+
|
||||||
|
> Daily note for 2022-11-10
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```toc
|
||||||
|
style: number
|
||||||
|
```
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
### 📝 Memos
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
This section does serve for quick memos.
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
|
||||||
|
%% --- %%
|
||||||
|
 
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
### 🗒 Notes
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
- Return to [[@@Zürich|Zürich]] from [[Madrid]]
|
||||||
|
- Fin de lecture de [[Sérotonine]]
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
### :link: Linked activity
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
Table from [[2022-11-10]]
|
||||||
|
```
|
||||||
|
|
||||||
|
 
|
||||||
|
 
|
@ -0,0 +1,114 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
title: "🗒 Daily Note"
|
||||||
|
allDay: true
|
||||||
|
date: 2022-11-11
|
||||||
|
Date: 2022-11-11
|
||||||
|
DocType: Note
|
||||||
|
Hierarchy:
|
||||||
|
TimeStamp:
|
||||||
|
location:
|
||||||
|
CollapseMetaTable: true
|
||||||
|
Sleep: 7.5
|
||||||
|
Happiness: 80
|
||||||
|
Gratefulness: 80
|
||||||
|
Stress: 25
|
||||||
|
FrontHeadBar: 5
|
||||||
|
EarHeadBar: 30
|
||||||
|
BackHeadBar: 20
|
||||||
|
Water: 1.75
|
||||||
|
Coffee: 3
|
||||||
|
Steps: 13118
|
||||||
|
Ski:
|
||||||
|
Riding:
|
||||||
|
Racket:
|
||||||
|
Football:
|
||||||
|
Swim:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
%% Parent:: [[@Life Admin]] %%
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
[[2022-11-10|<< 🗓 Previous ]]       [[@Main Dashboard|Back]]       [[2022-11-12|🗓 Next >>]]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```button
|
||||||
|
name Record today's health
|
||||||
|
type command
|
||||||
|
action MetaEdit: Run MetaEdit
|
||||||
|
id EditMetaData
|
||||||
|
```
|
||||||
|
^button-2022-11-11Edit
|
||||||
|
|
||||||
|
```button
|
||||||
|
name Save
|
||||||
|
type command
|
||||||
|
action Save current file
|
||||||
|
id Save
|
||||||
|
```
|
||||||
|
^button-2022-11-11NSave
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
# 2022-11-11
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
> [!summary]+
|
||||||
|
> Daily note for 2022-11-11
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```toc
|
||||||
|
style: number
|
||||||
|
```
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
### 📝 Memos
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
This section does serve for quick memos.
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
|
||||||
|
%% --- %%
|
||||||
|
 
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
### 🗒 Notes
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
Loret ipsum
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
### :link: Linked activity
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
Table from [[2022-11-11]]
|
||||||
|
```
|
||||||
|
|
||||||
|
 
|
||||||
|
 
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue