first commit test

Test for first commit
main
iOS 2 years ago
parent 90c5e65ed2
commit 66b0d50d6e

@ -3,7 +3,6 @@
"cssTheme": "Minimal",
"enabledCssSnippets": [
"blockquotes",
"BackToTop",
"Cards",
"folder_4_icon",
"colour-blocks",
@ -13,7 +12,8 @@
"inline-block-embeds",
"hyphenation_justification",
"big_icon_link",
"MCL Multi Column"
"MCL Multi Column",
"openweather"
],
"accentColor": "#3a87fe"
}

@ -15,10 +15,7 @@
"find-unlinked-files",
"obsidian-footnotes",
"garble-text",
"obsidian-itinerary",
"obsidian-journey-plugin",
"ledger-obsidian",
"obsidian-lineup-builder",
"obsidian-map-view",
"media-extended",
"meld-encrypt",
@ -34,14 +31,11 @@
"obsidian-reminder-plugin",
"obsidian-sortable",
"obsidian-stopwatch-plugin",
"obsidian-task-collector",
"taskbone-ocr-plugin",
"mrj-text-expand",
"obsidian-tracker",
"txt-as-md-obsidian",
"obsidian-wikipedia",
"obsidian-read-it-later",
"markdown-table-editor",
"obsidian-book-search-plugin",
"obsidian-media-db-plugin",
"tasks-packrat-plugin",
@ -63,11 +57,14 @@
"obsidian-scroll-to-top-plugin",
"obsidian-account-linker",
"cmdr",
"list-style",
"multi-column-markdown",
"obsidian-snippet-downloader",
"obsidian-full-calendar",
"obsidian-react-components",
"3d-graph",
"obsidian-tasks-plugin"
"obsidian-tasks-plugin",
"obsidian-full-calendar",
"obsidian-lineup-builder",
"email-block-plugin",
"better-word-count",
"obsidian-open-weather",
"obsidian-bulk-rename-plugin",
"recent-files-obsidian"
]

@ -0,0 +1,29 @@
{
"file-explorer": true,
"global-search": true,
"switcher": true,
"graph": true,
"backlink": true,
"outgoing-link": true,
"tag-pane": true,
"page-preview": true,
"daily-notes": true,
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": false,
"editor-status": true,
"starred": false,
"markdown-importer": true,
"zk-prefixer": false,
"random-note": false,
"outline": false,
"word-count": true,
"slides": false,
"audio-recorder": true,
"workspaces": false,
"file-recovery": true,
"publish": false,
"sync": false,
"canvas": true
}

@ -4,6 +4,7 @@
"switcher",
"graph",
"backlink",
"canvas",
"outgoing-link",
"tag-pane",
"page-preview",

@ -95,6 +95,6 @@
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 0.13214067549723676,
"scale": 0.16320109676838637,
"close": true
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,9 @@
{
"id": "better-word-count",
"name": "Better Word Count",
"version": "0.9.4",
"description": "Counts the words of selected text in the editor.",
"author": "Luke Leppan",
"authorUrl": "https://lukeleppan.com",
"isDesktopOnly": false
}

@ -0,0 +1,21 @@
details.bwc-sb-item-setting {
border: 1px solid var(--background-modifier-border);
border-radius: 10px;
padding: 10px 5px 20px 10px;
margin-top: 5px;
margin-bottom: 10px;
}
.bwc-sb-item-setting summary::marker {
font-size: 10px;
}
/* .bwc-sb-item-setting summary { */
/* margin-bottom: 5px; */
/* } */
.bwc-sb-item-setting summary span.bwc-sb-buttons {
float: right;
}
.bwc-status-bar-settings-title {
margin-bottom: 0px;
}

File diff suppressed because one or more lines are too long

@ -1,10 +1,11 @@
{
"id": "cmdr",
"name": "Commander",
"version": "0.4.1",
"minAppVersion": "0.16.0",
"version": "0.4.9",
"minAppVersion": "1.1.0",
"description": "Customize your workspace by adding commands everywhere, create Macros and supercharge your mobile toolbar.",
"author": "jsmorabito & phibr0",
"authorUrl": "https://github.com/phibr0",
"fundingUrl": "https://ko-fi.com/phibr0",
"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,7 +1,7 @@
{
"id": "customjs",
"name": "CustomJS",
"version": "1.0.12",
"version": "1.0.13",
"minAppVersion": "0.9.12",
"description": "This plugin allows for the loading and reuse of custom JS inside your vault.",
"author": "Sam Lewis",

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "dataview",
"name": "Dataview",
"version": "0.5.47",
"version": "0.5.55",
"minAppVersion": "0.13.11",
"description": "Complex data views for the data-obsessed.",
"author": "Michael Brenan <blacksmithgu@gmail.com>",

@ -3,6 +3,10 @@
line-height: 1.0;
}
.block-language-dataview {
overflow-y: auto;
}
/*****************/
/** Table Views **/
/*****************/

@ -0,0 +1,152 @@
/*
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: () => MailBlockPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian = require("obsidian");
var MailBlockPlugin = class extends import_obsidian.Plugin {
async onload() {
console.log("email block loading...");
this.registerMarkdownCodeBlockProcessor("email", async (src, el, ctx) => {
let parameters = null;
try {
parameters = this.readParameters(src, ctx);
} catch (e) {
el.createEl("h3", { text: "Email parameters invalid: \n" + e.message });
return;
}
console.log("Render the Email");
try {
const rootEl = el.createEl("div", { cls: "email-block" });
if (parameters.to !== void 0) {
rootEl.createEl("div", { cls: "email-block-info", text: "To:" });
rootEl.createEl("div", { cls: "email-block-info-value", text: this.renderAddress(parameters.to) });
}
if (parameters.cc !== void 0) {
rootEl.createEl("div", { cls: "email-block-info", text: "Cc:" });
rootEl.createEl("div", { cls: "email-block-info-value", text: this.renderAddress(parameters.cc) });
}
if (parameters.bcc !== void 0) {
rootEl.createEl("div", { cls: "email-block-info", text: "Bcc:" });
rootEl.createEl("div", { cls: "email-block-info-value", text: this.renderAddress(parameters.bcc) });
}
rootEl.createEl("div", { cls: "email-block-info", text: "Subject:" });
rootEl.createEl("div", { cls: "email-block-info-value", text: parameters.subject });
const bodyContent = rootEl.createEl("div", { cls: "email-block-body" });
await this.renderBody(bodyContent, parameters.body, parameters.variables, ctx);
const data = "mailto:" + this.encodeToHtml(parameters.to) + "?subject=" + this.encodeToHtml(parameters.subject) + "&cc=" + this.encodeToHtml(parameters.cc) + "&bcc=" + this.encodeToHtml(parameters.bcc) + "&body=" + this.encodeToHtml(bodyContent.innerText);
if (parameters.showmailto) {
rootEl.createEl("a", { href: data, text: "Mailto" });
}
} catch (error) {
el.createEl("h3", { text: error });
}
});
}
readParameters(jsonString, ctx) {
if (jsonString.contains("[[") && !jsonString.contains('"[[')) {
jsonString = jsonString.replace("[[", '"[[');
jsonString = jsonString.replace("]]", ']]"');
}
const parameters = (0, import_obsidian.parseYaml)(jsonString);
parameters.to = this.fixAddress(parameters.to);
parameters.cc = this.fixAddress(parameters.cc);
parameters.bcc = this.fixAddress(parameters.bcc);
if (parameters.subject == void 0) {
parameters.subject = "";
}
if (parameters.showmailto == void 0) {
parameters.showmailto = true;
}
if (parameters.body === void 0) {
parameters.body = "";
}
if (parameters.variables === void 0) {
parameters.variables = {};
}
const sourceFile = this.app.metadataCache.getFirstLinkpathDest(ctx.sourcePath, "");
if (sourceFile != null) {
const sourceCache = this.app.metadataCache.getFileCache(sourceFile);
if (sourceCache != null) {
if (sourceCache.frontmatter != void 0) {
for (const [key, value] of Object.entries(sourceCache.frontmatter)) {
parameters.variables[key] = value.toString();
}
}
}
}
return parameters;
}
fixAddress(address) {
if (address === void 0) {
return void 0;
}
let fixedAddress = address.replace(/\s/g, "").replace(";", ",");
return fixedAddress;
}
renderAddress(address) {
return address.split(",").join(", ");
}
async renderBody(bodyContentEl, bodyContent, variables, ctx) {
if (bodyContent === void 0) {
return;
}
if (bodyContent.startsWith("[[")) {
bodyContent = bodyContent.substring(2, bodyContent.length - 2);
const mdFile = this.app.metadataCache.getFirstLinkpathDest(bodyContent, ctx.sourcePath);
if (mdFile != null) {
let mdContent = await this.app.vault.read(mdFile);
for (const [variable, value] of Object.entries(variables)) {
if (value != void 0) {
mdContent = mdContent.replace("{{" + variable + "}}", value);
}
}
await import_obsidian.MarkdownRenderer.renderMarkdown(mdContent, bodyContentEl, mdFile.path, new import_obsidian.Component());
}
} else {
for (const [variable, value] of Object.entries(variables)) {
if (value != void 0) {
bodyContent = bodyContent == null ? void 0 : bodyContent.replace("{{" + variable + "}}", value);
}
}
let lines = bodyContent.split("\n");
lines.forEach((line) => {
bodyContentEl.createEl("div", { cls: "email-block-body-line", text: line });
});
}
}
encodeToHtml(rawStr) {
if (rawStr === void 0) {
return "";
}
let retStr = encodeURIComponent(rawStr);
return retStr;
}
onunload() {
console.log("Unloading email plugin...");
}
};

@ -0,0 +1,11 @@
{
"id": "email-block-plugin",
"name": "Email code block",
"version": "0.3.2",
"minAppVersion": "0.15.0",
"description": "This plugin renders an email code block.",
"author": "JoLeaf",
"authorUrl": "https://github.com/JoLeaf",
"fundingUrl": "https://ko-fi.com/joleaf",
"isDesktopOnly": false
}

@ -0,0 +1,41 @@
/* Styles */
.email-block {
display: grid;
grid-template-columns: 1fr 8fr;
row-gap: 5px;
border: 1px solid gray;
padding: 4px;
}
.email-block-info {
font-style: italic;
font-size: 80%;
align-self: center;
}
.email-block-info-value {
font-weight: bold;
font-size: 90%;
align-self: center;
}
.email-block-body {
grid-column-start: 1;
grid-column-end: span 2;
border-left: 1px gray solid;
padding-left: 5px;
}
.email-block-body-line {
}
.email-block-mailto {
grid-column-start: 1;
grid-column-end: span 2;
}
.email-block-error {
color: red !important;
}

@ -4,7 +4,69 @@
"historyPriority": true,
"historyLimit": 100,
"history": [
":soccer:",
":plate_with_cutlery:",
":car:",
":book:",
":crocodile:",
":ferris_wheel:",
":cake:",
":tv:",
":horse_racing:",
":fork_and_knife:",
":family_man_woman_girl_boy:",
":rugby_football:",
":birthday:",
":soccer:"
":medical_symbol:",
":clapper:",
":star:",
":racing_car:",
":hotel:",
":classical_building:",
":train2:",
":ski:",
":small_airplane:",
":bar_chart:",
":moneybag:",
":unicorn:",
":flight_departure:",
":mexico:",
":bell_pepper:",
":coconut:",
":skier:",
":ring:",
":house_with_garden:",
":ramen:",
":newspaper_roll:",
":church:",
":cocktail:",
":scroll:",
":bank:",
":shield:",
":test_tube:",
":scientist:",
":airplane:",
":film_strip:",
":dragon:",
":artist:",
":house:",
":cat2:",
":standing_person:",
":shopping:",
":croissant:",
":lemon:",
":wind_face:",
":candle:",
":fondue:",
":ice_skate:",
":family:",
":stopwatch:",
":ballot_box:",
":crown:",
":milk_glass:",
":apple:",
":cheese:",
":butter:",
":ballet_shoes:"
]
}

@ -1,7 +1,7 @@
{
"tutorialIndex": 0,
"currencySymbol": "CHF",
"ledgerFile": "06.01 Finances/2022.ledger",
"ledgerFile": "06.01 Finances/2023.ledger",
"assetAccountsPrefix": "assets",
"expenseAccountsPrefix": "expenses",
"incomeAccountsPrefix": "income",

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "meld-encrypt",
"name": "Meld Encrypt",
"version": "2.0.3",
"version": "2.0.4",
"minAppVersion": "0.12.15",
"description": "Hide secrets in your valut",
"author": "meld-cp",

@ -58,12 +58,15 @@ function get_root_for_style(node) {
}
function append_stylesheet(node, style) {
append(node.head || node, style);
return style.sheet;
}
function insert(target, node, anchor) {
target.insertBefore(node, anchor || null);
}
function detach(node) {
node.parentNode.removeChild(node);
if (node.parentNode) {
node.parentNode.removeChild(node);
}
}
function destroy_each(iterations, detaching) {
for (let i = 0; i < iterations.length; i += 1) {
@ -133,6 +136,15 @@ function get_current_component() {
throw new Error('Function called outside component initialization');
return current_component;
}
/**
* The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.
* It must be called during the component's initialisation (but doesn't need to live *inside* the component;
* it can be called from an external module).
*
* `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).
*
* https://svelte.dev/docs#run-time-svelte-onmount
*/
function onMount(fn) {
get_current_component().$$.on_mount.push(fn);
}
@ -173,15 +185,29 @@ function add_render_callback(fn) {
const seen_callbacks = new Set();
let flushidx = 0; // Do *not* move this inside the flush() function
function flush() {
// Do not reenter flush while dirty components are updated, as this can
// result in an infinite loop. Instead, let the inner flush handle it.
// Reentrancy is ok afterwards for bindings etc.
if (flushidx !== 0) {
return;
}
const saved_component = current_component;
do {
// first, call beforeUpdate functions
// and update components
while (flushidx < dirty_components.length) {
const component = dirty_components[flushidx];
flushidx++;
set_current_component(component);
update(component.$$);
try {
while (flushidx < dirty_components.length) {
const component = dirty_components[flushidx];
flushidx++;
set_current_component(component);
update(component.$$);
}
}
catch (e) {
// reset dirty state to not end up in a deadlocked state and then rethrow
dirty_components.length = 0;
flushidx = 0;
throw e;
}
set_current_component(null);
dirty_components.length = 0;
@ -226,14 +252,17 @@ function transition_in(block, local) {
}
}
function mount_component(component, target, anchor, customElement) {
const { fragment, on_mount, on_destroy, after_update } = component.$$;
const { fragment, after_update } = component.$$;
fragment && fragment.m(target, anchor);
if (!customElement) {
// onMount happens before the initial afterUpdate
add_render_callback(() => {
const new_on_destroy = on_mount.map(run).filter(is_function);
if (on_destroy) {
on_destroy.push(...new_on_destroy);
const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);
// if the component was destroyed immediately
// it will update the `$$.on_destroy` reference to `null`.
// the destructured on_destroy may still reference to the old array
if (component.$$.on_destroy) {
component.$$.on_destroy.push(...new_on_destroy);
}
else {
// Edge case - component was destroyed immediately,
@ -269,7 +298,7 @@ function init(component, options, instance, create_fragment, not_equal, props, a
set_current_component(component);
const $$ = component.$$ = {
fragment: null,
ctx: null,
ctx: [],
// state
props,
update: noop,
@ -334,6 +363,9 @@ class SvelteComponent {
this.$destroy = noop;
}
$on(type, callback) {
if (!is_function(callback)) {
return noop;
}
const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
callbacks.push(callback);
return () => {
@ -358,7 +390,7 @@ var ProgressPropertyOptions;
ProgressPropertyOptions["TaskIncomplete"] = "Incomplete Tasks";
})(ProgressPropertyOptions || (ProgressPropertyOptions = {}));
/* src/Modals/ProgressPropertiesSettingModal/ProgressPropertiesModalContent.svelte generated by Svelte v3.46.4 */
/* src/Modals/ProgressPropertiesSettingModal/ProgressPropertiesModalContent.svelte generated by Svelte v3.55.1 */
function add_css$3(target) {
append_styles(target, "svelte-kqcr7b", ".buttonContainer.svelte-kqcr7b{display:flex;justify-content:center;margin-top:1rem}select.svelte-kqcr7b{border-radius:4px;width:100%;height:30px;border:1px solid #dbdbdc;color:#383a42;background-color:#fff;padding:3px}button.svelte-kqcr7b{margin-left:5px;margin-right:5px;font-size:15px}");
@ -690,7 +722,7 @@ class ProgressPropertiesModalContent extends SvelteComponent {
}
}
/* src/Modals/AutoPropertiesSettingModal/AutoPropertiesModalContent.svelte generated by Svelte v3.46.4 */
/* src/Modals/AutoPropertiesSettingModal/AutoPropertiesModalContent.svelte generated by Svelte v3.55.1 */
function add_css$2(target) {
append_styles(target, "svelte-kqcr7b", ".buttonContainer.svelte-kqcr7b{display:flex;justify-content:center;margin-top:1rem}button.svelte-kqcr7b{margin-left:5px;margin-right:5px;font-size:15px}");
@ -1256,38 +1288,57 @@ var max = Math.max;
var min = Math.min;
var round = Math.round;
function getBoundingClientRect(element, includeScale) {
function getUAString() {
var uaData = navigator.userAgentData;
if (uaData != null && uaData.brands) {
return uaData.brands.map(function (item) {
return item.brand + "/" + item.version;
}).join(' ');
}
return navigator.userAgent;
}
function isLayoutViewport() {
return !/^((?!chrome|android).)*safari/i.test(getUAString());
}
function getBoundingClientRect(element, includeScale, isFixedStrategy) {
if (includeScale === void 0) {
includeScale = false;
}
var rect = element.getBoundingClientRect();
if (isFixedStrategy === void 0) {
isFixedStrategy = false;
}
var clientRect = element.getBoundingClientRect();
var scaleX = 1;
var scaleY = 1;
if (isHTMLElement(element) && includeScale) {
var offsetHeight = element.offsetHeight;
var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale
// Fallback to 1 in case both values are `0`
if (offsetWidth > 0) {
scaleX = round(rect.width) / offsetWidth || 1;
}
if (offsetHeight > 0) {
scaleY = round(rect.height) / offsetHeight || 1;
}
if (includeScale && isHTMLElement(element)) {
scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
}
var _ref = isElement(element) ? getWindow(element) : window,
visualViewport = _ref.visualViewport;
var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
var width = clientRect.width / scaleX;
var height = clientRect.height / scaleY;
return {
width: rect.width / scaleX,
height: rect.height / scaleY,
top: rect.top / scaleY,
right: rect.right / scaleX,
bottom: rect.bottom / scaleY,
left: rect.left / scaleX,
x: rect.left / scaleX,
y: rect.top / scaleY
width: width,
height: height,
top: y,
right: x + width,
bottom: y + height,
left: x,
x: x,
y: y
};
}
@ -1382,8 +1433,8 @@ function getTrueOffsetParent(element) {
function getContainingBlock(element) {
var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;
var isIE = navigator.userAgent.indexOf('Trident') !== -1;
var isFirefox = /firefox/i.test(getUAString());
var isIE = /Trident/i.test(getUAString());
if (isIE && isHTMLElement(element)) {
// In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
@ -1396,6 +1447,10 @@ function getContainingBlock(element) {
var currentNode = getParentNode(element);
if (isShadowRoot(currentNode)) {
currentNode = currentNode.host;
}
while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that
// create a containing block.
@ -1628,7 +1683,7 @@ function mapToStyles(_ref2) {
if (placement === top || (placement === left || placement === right) && variation === end) {
sideY = bottom;
var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
offsetParent[heightProp];
y -= offsetY - popperRect.height;
y *= gpuAcceleration ? 1 : -1;
@ -1636,7 +1691,7 @@ function mapToStyles(_ref2) {
if (placement === left || (placement === top || placement === bottom) && variation === end) {
sideX = right;
var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
offsetParent[widthProp];
x -= offsetX - popperRect.width;
x *= gpuAcceleration ? 1 : -1;
@ -1819,31 +1874,21 @@ function getWindowScrollBarX(element) {
return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
}
function getViewportRect(element) {
function getViewportRect(element, strategy) {
var win = getWindow(element);
var html = getDocumentElement(element);
var visualViewport = win.visualViewport;
var width = html.clientWidth;
var height = html.clientHeight;
var x = 0;
var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper
// can be obscured underneath it.
// Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even
// if it isn't open, so if this isn't available, the popper will be detected
// to overflow the bottom of the screen too early.
var y = 0;
if (visualViewport) {
width = visualViewport.width;
height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)
// In Chrome, it returns a value very close to 0 (+/-) but contains rounding
// errors due to floating point numbers, so we need to check precision.
// Safari returns a number <= 0, usually < -1 when pinch-zoomed
// Feature detection fails in mobile emulation mode in Chrome.
// Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <
// 0.001
// Fallback here: "Not Safari" userAgent
if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
height = visualViewport.height;
var layoutViewport = isLayoutViewport();
if (layoutViewport || !layoutViewport && strategy === 'fixed') {
x = visualViewport.offsetLeft;
y = visualViewport.offsetTop;
}
@ -1937,8 +1982,8 @@ function rectToClientRect(rect) {
});
}
function getInnerBoundingClientRect(element) {
var rect = getBoundingClientRect(element);
function getInnerBoundingClientRect(element, strategy) {
var rect = getBoundingClientRect(element, false, strategy === 'fixed');
rect.top = rect.top + element.clientTop;
rect.left = rect.left + element.clientLeft;
rect.bottom = rect.top + element.clientHeight;
@ -1950,8 +1995,8 @@ function getInnerBoundingClientRect(element) {
return rect;
}
function getClientRectFromMixedType(element, clippingParent) {
return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
function getClientRectFromMixedType(element, clippingParent, strategy) {
return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
} // A "clipping parent" is an overflowable container with the characteristic of
// clipping (or hiding) overflowing elements with a position different from
// `initial`
@ -1974,18 +2019,18 @@ function getClippingParents(element) {
// clipping parents
function getClippingRect(element, boundary, rootBoundary) {
function getClippingRect(element, boundary, rootBoundary, strategy) {
var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
var firstClippingParent = clippingParents[0];
var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
var rect = getClientRectFromMixedType(element, clippingParent);
var rect = getClientRectFromMixedType(element, clippingParent, strategy);
accRect.top = max(rect.top, accRect.top);
accRect.right = min(rect.right, accRect.right);
accRect.bottom = min(rect.bottom, accRect.bottom);
accRect.left = max(rect.left, accRect.left);
return accRect;
}, getClientRectFromMixedType(element, firstClippingParent));
}, getClientRectFromMixedType(element, firstClippingParent, strategy));
clippingRect.width = clippingRect.right - clippingRect.left;
clippingRect.height = clippingRect.bottom - clippingRect.top;
clippingRect.x = clippingRect.left;
@ -2066,6 +2111,8 @@ function detectOverflow(state, options) {
var _options = options,
_options$placement = _options.placement,
placement = _options$placement === void 0 ? state.placement : _options$placement,
_options$strategy = _options.strategy,
strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
_options$boundary = _options.boundary,
boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
_options$rootBoundary = _options.rootBoundary,
@ -2080,7 +2127,7 @@ function detectOverflow(state, options) {
var altContext = elementContext === popper ? reference : popper;
var popperRect = state.rects.popper;
var element = state.elements[altBoundary ? altContext : elementContext];
var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);
var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
var referenceClientRect = getBoundingClientRect(state.elements.reference);
var popperOffsets = computeOffsets({
reference: referenceClientRect,
@ -2598,7 +2645,7 @@ function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
var isOffsetParentAnElement = isHTMLElement(offsetParent);
var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
var documentElement = getDocumentElement(offsetParent);
var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);
var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
var scroll = {
scrollLeft: 0,
scrollTop: 0
@ -3237,7 +3284,7 @@ class LogManager {
LogManager.loggers = [];
const log = new LogManager();
/* src/Modals/KanbanHelperSetting/KanbanHelperSettingContent.svelte generated by Svelte v3.46.4 */
/* src/Modals/KanbanHelperSetting/KanbanHelperSettingContent.svelte generated by Svelte v3.55.1 */
function add_css$1(target) {
append_styles(target, "svelte-kqcr7b", ".buttonContainer.svelte-kqcr7b{display:flex;justify-content:center;margin-top:1rem}button.svelte-kqcr7b{margin-left:5px;margin-right:5px;font-size:15px}");
@ -3570,7 +3617,7 @@ class KanbanHelperSettingContent extends SvelteComponent {
}
}
/* src/Modals/shared/SingleValueTableEditorContent.svelte generated by Svelte v3.46.4 */
/* src/Modals/shared/SingleValueTableEditorContent.svelte generated by Svelte v3.55.1 */
function add_css(target) {
append_styles(target, "svelte-kqcr7b", ".buttonContainer.svelte-kqcr7b{display:flex;justify-content:center;margin-top:1rem}button.svelte-kqcr7b{margin-left:5px;margin-right:5px;font-size:15px}");
@ -4145,12 +4192,8 @@ async function hasDepInstalled(dep) {
return (depCheckCache[dep] = result);
}
exports.hasDepInstalled = hasDepInstalled;
const REMOTE_SRC_PATTERN = /^(https?:)?\/\//;
function isValidLocalPath(path) {
return (path.match(REMOTE_SRC_PATTERN) == null &&
// only literal strings allowed
!path.startsWith('{') &&
!path.endsWith('}'));
return path.startsWith('.');
}
exports.isValidLocalPath = isValidLocalPath;
// finds a existing path up the tree
@ -4375,17 +4418,15 @@ class MetaEditParser {
}
async parseInlineFields(file) {
const content = await this.app.vault.cachedRead(file);
return content.split("\n").reduce((obj, str) => {
let parts = str.split("::");
if (parts[0] && parts[1]) {
obj.push({ key: parts[0], content: parts[1].trim(), type: MetaType.Dataview });
}
else if (str.includes("::")) {
const key = str.replace("::", '');
obj.push({ key, content: "", type: MetaType.Dataview });
}
return obj;
}, []);
const regex = /[\[\(]?([^\n\r\(\[]*)::[ ]*([^\)\]\n\r]*)[\]\)]?/g;
const properties = [];
let match;
while ((match = regex.exec(content)) !== null) {
const key = match[1].trim();
const value = match[2].trim();
properties.push({ key, content: value, type: MetaType.Dataview });
}
return properties;
}
}
@ -4420,7 +4461,7 @@ class GenericTextSuggester extends TextInputSuggest {
}
}
/* src/Modals/GenericPrompt/GenericPromptContent.svelte generated by Svelte v3.46.4 */
/* src/Modals/GenericPrompt/GenericPromptContent.svelte generated by Svelte v3.55.1 */
function create_fragment(ctx) {
let div;
@ -4558,6 +4599,10 @@ class GenericPromptContent extends SvelteComponent {
}
class GenericPrompt extends obsidian.Modal {
static Prompt(app, header, placeholder, value, suggestValues) {
const newPromptModal = new GenericPrompt(app, header, placeholder, value, suggestValues);
return newPromptModal.waitForClose;
}
constructor(app, header, placeholder, value, suggestValues) {
super(app);
this.didSubmit = false;
@ -4582,10 +4627,6 @@ class GenericPrompt extends obsidian.Modal {
});
this.open();
}
static Prompt(app, header, placeholder, value, suggestValues) {
const newPromptModal = new GenericPrompt(app, header, placeholder, value, suggestValues);
return newPromptModal.waitForClose;
}
onOpen() {
super.onOpen();
const modalPrompt = document.querySelector('.metaEditPrompt');
@ -4604,6 +4645,10 @@ class GenericPrompt extends obsidian.Modal {
}
class GenericSuggester extends obsidian.FuzzySuggestModal {
static Suggest(app, displayItems, items) {
const newSuggester = new GenericSuggester(app, displayItems, items);
return newSuggester.promise;
}
constructor(app, displayItems, items) {
super(app);
this.displayItems = displayItems;
@ -4611,10 +4656,6 @@ class GenericSuggester extends obsidian.FuzzySuggestModal {
this.promise = new Promise((resolve) => (this.resolvePromise = resolve));
this.open();
}
static Suggest(app, displayItems, items) {
const newSuggester = new GenericSuggester(app, displayItems, items);
return newSuggester.promise;
}
getItemText(item) {
return this.displayItems[this.items.indexOf(item)];
}
@ -4880,25 +4921,29 @@ class MetaController {
const fileContent = await this.app.vault.read(file);
const newFileContent = fileContent.split("\n").map(line => {
if (this.lineMatch(property, line)) {
return this.updatePropertyLine(property, newValue);
return this.updatePropertyLine(property, newValue, line);
}
return line;
}).join("\n");
await this.app.vault.modify(file, newFileContent);
}
escapeSpecialCharacters(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
}
lineMatch(property, line) {
const propertyRegex = new RegExp(`^\s*${property.key}\:{1,2}`);
const tagRegex = new RegExp(`^\s*${property.key}`);
const propertyRegex = new RegExp(`${this.escapeSpecialCharacters(property.key)}\:{1,2}`);
const tagRegex = new RegExp(`^\s*${this.escapeSpecialCharacters(property.key)}`);
if (property.key.contains('#')) {
return tagRegex.test(line);
}
return propertyRegex.test(line);
}
updatePropertyLine(property, newValue) {
updatePropertyLine(property, newValue, line) {
let newLine;
switch (property.type) {
case MetaType.Dataview:
newLine = `${property.key}:: ${newValue}`;
const propertyRegex = new RegExp(`([\\(\\[]?)${this.escapeSpecialCharacters(property.key)}::[ ]*[^\\)\\]\n\r]*([\\]\\)]?)`, 'g');
newLine = line.replace(propertyRegex, `$1${property.key}:: ${newValue}$2`);
break;
case MetaType.YAML:
newLine = `${property.key}: ${newValue}`;
@ -4930,7 +4975,7 @@ class MetaController {
for (const prop of properties) {
fileContent = fileContent.map(line => {
if (this.lineMatch(prop, line)) {
return this.updatePropertyLine(prop, prop.content);
return this.updatePropertyLine(prop, prop.content, line);
}
return line;
});
@ -5263,15 +5308,17 @@ class OnFileModifyAutomatorManager {
return;
// Return on Excalidraw files to prevent conflict with its auto-save feature.
const metadata = await this.app.metadataCache.getFileCache(outfile);
const keys = Object.keys(metadata === null || metadata === void 0 ? void 0 : metadata.frontmatter);
if (keys && keys.some(key => key.toLowerCase().contains("excalidraw"))) {
return;
}
const fileContent = await this.app.vault.cachedRead(outfile);
if (!this.updatedFileCache.set(outfile.path, fileContent))
return;
if (this.updateFileQueue.enqueue(outfile)) {
this.notifyAutomators();
if (metadata.frontmatter != null) { // Don't try to use frontmatter if it doesn't exist.
const keys = Object.keys(metadata === null || metadata === void 0 ? void 0 : metadata.frontmatter);
if (keys && keys.some(key => key.toLowerCase().contains("excalidraw"))) {
return;
}
const fileContent = await this.app.vault.cachedRead(outfile);
if (!this.updatedFileCache.set(outfile.path, fileContent))
return;
if (this.updateFileQueue.enqueue(outfile)) {
this.notifyAutomators();
}
}
}
}

@ -1,7 +1,7 @@
{
"id": "metaedit",
"name": "MetaEdit",
"version": "1.7.2",
"version": "1.8.0",
"minAppVersion": "0.12.0",
"description": "MetaEdit helps you manage your metadata.",
"author": "Christian B. B. Houmann",

@ -0,0 +1,46 @@
{
"websites": [
{
"name": "Twitter",
"color": "#3e9cec",
"urlTemplate": "https://farside.link/nitter/{{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://imginn.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
}
]
}

@ -12,8 +12,8 @@
"checkpointList": [
{
"path": "/",
"date": "2022-12-16",
"size": 10262235
"date": "2023-03-04",
"size": 13353588
}
],
"activityHistory": [
@ -1382,7 +1382,319 @@
},
{
"date": "2022-12-16",
"value": 5420
"value": 5945
},
{
"date": "2022-12-17",
"value": 6369
},
{
"date": "2022-12-18",
"value": 6159
},
{
"date": "2022-12-19",
"value": 268903
},
{
"date": "2022-12-20",
"value": 1270
},
{
"date": "2022-12-21",
"value": 29218
},
{
"date": "2022-12-22",
"value": 6375
},
{
"date": "2022-12-23",
"value": 6308
},
{
"date": "2022-12-24",
"value": 2295
},
{
"date": "2022-12-25",
"value": 3742
},
{
"date": "2022-12-26",
"value": 8654
},
{
"date": "2022-12-27",
"value": 1535
},
{
"date": "2022-12-28",
"value": 1148
},
{
"date": "2022-12-29",
"value": 1122
},
{
"date": "2022-12-30",
"value": 3243
},
{
"date": "2022-12-31",
"value": 3018
},
{
"date": "2023-01-01",
"value": 2735
},
{
"date": "2023-01-02",
"value": 5904
},
{
"date": "2023-01-03",
"value": 9051
},
{
"date": "2023-01-04",
"value": 63027
},
{
"date": "2023-01-05",
"value": 6843
},
{
"date": "2023-01-06",
"value": 15839
},
{
"date": "2023-01-07",
"value": 27251
},
{
"date": "2023-01-08",
"value": 172664
},
{
"date": "2023-01-09",
"value": 2363
},
{
"date": "2023-01-10",
"value": 2715
},
{
"date": "2023-01-11",
"value": 2981
},
{
"date": "2023-01-12",
"value": 2735
},
{
"date": "2023-01-13",
"value": 16524
},
{
"date": "2023-01-14",
"value": 5307
},
{
"date": "2023-01-15",
"value": 228352
},
{
"date": "2023-01-16",
"value": 3257
},
{
"date": "2023-01-17",
"value": 9206
},
{
"date": "2023-01-18",
"value": 63943
},
{
"date": "2023-01-19",
"value": 343079
},
{
"date": "2023-01-20",
"value": 4577
},
{
"date": "2023-01-21",
"value": 10596
},
{
"date": "2023-01-22",
"value": 126302
},
{
"date": "2023-01-23",
"value": 4768
},
{
"date": "2023-01-24",
"value": 1714
},
{
"date": "2023-01-25",
"value": 3490
},
{
"date": "2023-01-26",
"value": 78860
},
{
"date": "2023-01-27",
"value": 52684
},
{
"date": "2023-01-28",
"value": 9835
},
{
"date": "2023-01-29",
"value": 204464
},
{
"date": "2023-01-30",
"value": 2747
},
{
"date": "2023-01-31",
"value": 121331
},
{
"date": "2023-02-01",
"value": 4938
},
{
"date": "2023-02-02",
"value": 3973
},
{
"date": "2023-02-03",
"value": 7826
},
{
"date": "2023-02-04",
"value": 10362
},
{
"date": "2023-02-05",
"value": 244587
},
{
"date": "2023-02-06",
"value": 4834
},
{
"date": "2023-02-07",
"value": 44980
},
{
"date": "2023-02-08",
"value": 35076
},
{
"date": "2023-02-09",
"value": 33050
},
{
"date": "2023-02-10",
"value": 1385
},
{
"date": "2023-02-11",
"value": 1648
},
{
"date": "2023-02-12",
"value": 296646
},
{
"date": "2023-02-13",
"value": 2177
},
{
"date": "2023-02-14",
"value": 57063
},
{
"date": "2023-02-15",
"value": 10187
},
{
"date": "2023-02-16",
"value": 36532
},
{
"date": "2023-02-17",
"value": 25551
},
{
"date": "2023-02-18",
"value": 30303
},
{
"date": "2023-02-19",
"value": 17723
},
{
"date": "2023-02-20",
"value": 21972
},
{
"date": "2023-02-21",
"value": 3378
},
{
"date": "2023-02-22",
"value": 34785
},
{
"date": "2023-02-23",
"value": 21365
},
{
"date": "2023-02-24",
"value": 70887
},
{
"date": "2023-02-25",
"value": 17830
},
{
"date": "2023-02-26",
"value": 208914
},
{
"date": "2023-02-27",
"value": 1700
},
{
"date": "2023-02-28",
"value": 1689
},
{
"date": "2023-03-01",
"value": 3238
},
{
"date": "2023-03-02",
"value": 3193
},
{
"date": "2023-03-03",
"value": 23510
},
{
"date": "2023-03-04",
"value": 36467
}
]
}

@ -106,7 +106,7 @@
},
"syntaxHighlight": false,
"copyButton": true,
"version": "9.0.5",
"version": "9.2.1",
"autoCollapse": false,
"defaultCollapseType": "open",
"injectColor": true,

File diff suppressed because one or more lines are too long

@ -1,8 +1,8 @@
{
"id": "obsidian-admonition",
"name": "Admonition",
"version": "9.0.5",
"minAppVersion": "0.14.0",
"version": "9.2.1",
"minAppVersion": "1.1.0",
"description": "Enhanced callouts for Obsidian.md",
"author": "Jeremy Valentine",
"authorUrl": "",

File diff suppressed because one or more lines are too long

@ -4,7 +4,8 @@
"description": "Advanced modes for Obsidian URI",
"isDesktopOnly": false,
"js": "main.js",
"version": "1.31.1",
"fundingUrl": "https://ko-fi.com/vinzent",
"version": "1.33.0",
"author": "Vinzent",
"authorUrl": "https://github.com/Vinzent03"
}

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "obsidian-auto-link-title",
"name": "Auto Link Title",
"version": "1.2.5",
"version": "1.4.1",
"minAppVersion": "0.12.17",
"description": "This plugin automatically fetches the titles of links from the web",
"author": "Matt Furden",

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "obsidian-book-search-plugin",
"name": "Book Search",
"version": "0.5.8",
"version": "0.5.9",
"minAppVersion": "0.15.0",
"description": "Helps you find books and create notes.",
"author": "anpigon",

File diff suppressed because one or more lines are too long

@ -0,0 +1,10 @@
{
"id": "obsidian-bulk-rename-plugin",
"name": "Bulk Rename",
"version": "0.5.2",
"minAppVersion": "0.15.0",
"description": "Purpose of this plugin rename files based on pattern",
"author": "Oleg Lustenko",
"authorUrl": "https://obsidian.md",
"isDesktopOnly": false
}

@ -0,0 +1,155 @@
.bulk_rename_plugin {
padding-right: 1rem;
}
.bulk_rename {
width: calc(100% - 20px);
}
.bulk_rename_preview {
width: 80%;
height: 100%;
gap: 0;
}
@media screen and (max-width: 983px) {
.bulk_rename_preview {
display: flex;
flex-direction: column;
max-height: 300px;
}
}
.flex {
display: flex;
}
.flex-col {
flex-direction: column;
}
.m-auto {
margin: auto;
}
.bulk_info {
display: flex;
justify-content: space-between;
margin: auto;
width: 100%;
}
.bulk_rename_preview > textarea {
height: 360px;
}
.replaceRenderSymbols {
display: flex;
width: 100%;
padding-top: 0.5rem;
}
.setting-item-control.replaceRenderSymbols .bulk_input {
min-height: 80px;
}
.setting-item-control .bulk_preview_textarea {
min-width: 19em;
}
.bulk_preview_textarea {
margin-left: 5px;
margin-right: 5px;
font-size: 14px;
width: 100%;
height: 400px;
resize: none;
}
.bulk_button {
width: 100%;
}
.bulk_preview_header {
margin-top: 5px;
margin-bottom: 5px;
}
.setting-item-control .bulk_input {
width: 100%;
resize: none;
min-width: auto;
}
.setting-item-control .bulk_input:first-child {
margin-right: 15px;
}
.bulk_regexp_search {
padding-right: 1rem;
}
.bulk_toggle {
border-top: none;
}
.bulk_preview_label:first-child {
margin-right: 15px;
}
.bulk_preview_label {
text-align: center;
}
.bulk_regexp_container {
justify-content: space-between;
}
.bulk_regexp_control {
background: var(--background-modifier-form-field);
border: 1px solid var(--background-modifier-border);
transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;
font-family: inherit;
border-radius: var(--input-radius);
outline: none;
max-width: 400px;
}
.bulk_regexp_control:hover,
.bulk_regexp_control:focus,
.bulk_regexp_control:focus-visible {
box-shadow: 0 0 0 2px var(--background-modifier-border-hover);
}
.bulk_regexp_control > input {
border: none;
margin: 0;
padding: 0;
}
.bulk_regexp,
.bulk_regexp_flags {
width: 100%;
}
.bulk_regexp:hover,
.bulk_regexp:focus,
.bulk_regexp:focus-visible .bulk_regexp_flags:hover,
.bulk_regexp_flags:focus,
.bulk_regexp_flags:focus-visible {
border: none !important;
box-shadow: none !important;
}
.bulk_regexp_flags {
caret-color: transparent;
max-width: 80px;
}
.bulk_regexp_slash {
font-size: 1.5em;
opacity: 0.5;
}
.bulk-flag-selected {
background-color: lavender !important;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "obsidian-dice-roller",
"name": "Dice Roller",
"version": "8.8.0",
"version": "8.9.0",
"minAppVersion": "0.12.15",
"description": "Inline dice rolling for Obsidian.md",
"author": "Jeremy Valentine",

File diff suppressed because one or more lines are too long

@ -2,8 +2,8 @@
"calendarSources": [
{
"type": "local",
"color": "#4d95f7",
"directory": "00.01 Admin/Calendars"
"color": "#012f7b",
"directory": "00.01 Admin/Calendars/Events"
}
],
"defaultCalendar": 0,

@ -26089,8 +26089,8 @@ var require_moment = __commonJS({
return input instanceof Date || Object.prototype.toString.call(input) === "[object Date]";
}
function map(arr, fn) {
var res = [], i3;
for (i3 = 0; i3 < arr.length; ++i3) {
var res = [], i3, arrLen = arr.length;
for (i3 = 0; i3 < arrLen; ++i3) {
res.push(fn(arr[i3], i3));
}
return res;
@ -26179,7 +26179,7 @@ var require_moment = __commonJS({
}
var momentProperties = hooks.momentProperties = [], updateInProgress = false;
function copyConfig(to2, from2) {
var i3, prop, val;
var i3, prop, val, momentPropertiesLen = momentProperties.length;
if (!isUndefined2(from2._isAMomentObject)) {
to2._isAMomentObject = from2._isAMomentObject;
}
@ -26210,8 +26210,8 @@ var require_moment = __commonJS({
if (!isUndefined2(from2._locale)) {
to2._locale = from2._locale;
}
if (momentProperties.length > 0) {
for (i3 = 0; i3 < momentProperties.length; i3++) {
if (momentPropertiesLen > 0) {
for (i3 = 0; i3 < momentPropertiesLen; i3++) {
prop = momentProperties[i3];
val = from2[prop];
if (!isUndefined2(val)) {
@ -26248,8 +26248,8 @@ var require_moment = __commonJS({
hooks.deprecationHandler(null, msg);
}
if (firstTime) {
var args = [], arg, i3, key;
for (i3 = 0; i3 < arguments.length; i3++) {
var args = [], arg, i3, key, argLen = arguments.length;
for (i3 = 0; i3 < argLen; i3++) {
arg = "";
if (typeof arguments[i3] === "object") {
arg += "\n[" + i3 + "] ";
@ -26565,8 +26565,8 @@ var require_moment = __commonJS({
function stringSet(units, value) {
if (typeof units === "object") {
units = normalizeObjectUnits(units);
var prioritized = getPrioritizedUnits(units), i3;
for (i3 = 0; i3 < prioritized.length; i3++) {
var prioritized = getPrioritizedUnits(units), i3, prioritizedLen = prioritized.length;
for (i3 = 0; i3 < prioritizedLen; i3++) {
this[prioritized[i3].unit](units[prioritized[i3].unit]);
}
} else {
@ -26600,7 +26600,7 @@ var require_moment = __commonJS({
}
var tokens = {};
function addParseToken(token2, callback) {
var i3, func = callback;
var i3, func = callback, tokenLen;
if (typeof token2 === "string") {
token2 = [token2];
}
@ -26609,7 +26609,8 @@ var require_moment = __commonJS({
array[callback] = toInt(input);
};
}
for (i3 = 0; i3 < token2.length; i3++) {
tokenLen = token2.length;
for (i3 = 0; i3 < tokenLen; i3++) {
tokens[token2[i3]] = func;
}
}
@ -27410,9 +27411,12 @@ var require_moment = __commonJS({
}
return globalLocale;
}
function isLocaleNameSane(name) {
return name.match("^[^/\\\\]*$") != null;
}
function loadLocale(name) {
var oldLocale = null, aliasedRequire;
if (locales[name] === void 0 && typeof module2 !== "undefined" && module2 && module2.exports) {
if (locales[name] === void 0 && typeof module2 !== "undefined" && module2 && module2.exports && isLocaleNameSane(name)) {
try {
oldLocale = globalLocale._abbr;
aliasedRequire = require;
@ -27588,10 +27592,10 @@ var require_moment = __commonJS({
PST: -8 * 60
};
function configFromISO(config2) {
var i3, l4, string = config2._i, match5 = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), allowTime, dateFormat, timeFormat, tzFormat;
var i3, l4, string = config2._i, match5 = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), allowTime, dateFormat, timeFormat, tzFormat, isoDatesLen = isoDates.length, isoTimesLen = isoTimes.length;
if (match5) {
getParsingFlags(config2).iso = true;
for (i3 = 0, l4 = isoDates.length; i3 < l4; i3++) {
for (i3 = 0, l4 = isoDatesLen; i3 < l4; i3++) {
if (isoDates[i3][1].exec(match5[1])) {
dateFormat = isoDates[i3][0];
allowTime = isoDates[i3][2] !== false;
@ -27603,7 +27607,7 @@ var require_moment = __commonJS({
return;
}
if (match5[3]) {
for (i3 = 0, l4 = isoTimes.length; i3 < l4; i3++) {
for (i3 = 0, l4 = isoTimesLen; i3 < l4; i3++) {
if (isoTimes[i3][1].exec(match5[3])) {
timeFormat = (match5[2] || " ") + isoTimes[i3][0];
break;
@ -27655,7 +27659,7 @@ var require_moment = __commonJS({
return year;
}
function preprocessRFC28222(s4) {
return s4.replace(/\([^)]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").replace(/^\s\s*/, "").replace(/\s\s*$/, "");
return s4.replace(/\([^()]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").replace(/^\s\s*/, "").replace(/\s\s*$/, "");
}
function checkWeekday(weekdayStr, parsedInput, config2) {
if (weekdayStr) {
@ -27838,9 +27842,10 @@ var require_moment = __commonJS({
}
config2._a = [];
getParsingFlags(config2).empty = true;
var string = "" + config2._i, i3, parsedInput, tokens2, token2, skipped, stringLength = string.length, totalParsedInputLength = 0, era;
var string = "" + config2._i, i3, parsedInput, tokens2, token2, skipped, stringLength = string.length, totalParsedInputLength = 0, era, tokenLen;
tokens2 = expandFormat(config2._f, config2._locale).match(formattingTokens) || [];
for (i3 = 0; i3 < tokens2.length; i3++) {
tokenLen = tokens2.length;
for (i3 = 0; i3 < tokenLen; i3++) {
token2 = tokens2[i3];
parsedInput = (string.match(getParseRegexForToken(token2, config2)) || [])[0];
if (parsedInput) {
@ -27900,13 +27905,13 @@ var require_moment = __commonJS({
}
}
function configFromStringAndArray(config2) {
var tempConfig, bestMoment, scoreToBeat, i3, currentScore, validFormatFound, bestFormatIsValid = false;
if (config2._f.length === 0) {
var tempConfig, bestMoment, scoreToBeat, i3, currentScore, validFormatFound, bestFormatIsValid = false, configfLen = config2._f.length;
if (configfLen === 0) {
getParsingFlags(config2).invalidFormat = true;
config2._d = new Date(NaN);
return;
}
for (i3 = 0; i3 < config2._f.length; i3++) {
for (i3 = 0; i3 < configfLen; i3++) {
currentScore = 0;
validFormatFound = false;
tempConfig = copyConfig({}, config2);
@ -28080,13 +28085,13 @@ var require_moment = __commonJS({
"millisecond"
];
function isDurationValid(m3) {
var key, unitHasDecimal = false, i3;
var key, unitHasDecimal = false, i3, orderLen = ordering.length;
for (key in m3) {
if (hasOwnProp(m3, key) && !(indexOf.call(ordering, key) !== -1 && (m3[key] == null || !isNaN(m3[key])))) {
return false;
}
}
for (i3 = 0; i3 < ordering.length; ++i3) {
for (i3 = 0; i3 < orderLen; ++i3) {
if (m3[ordering[i3]]) {
if (unitHasDecimal) {
return false;
@ -28436,8 +28441,8 @@ var require_moment = __commonJS({
"milliseconds",
"millisecond",
"ms"
], i3, property;
for (i3 = 0; i3 < properties.length; i3 += 1) {
], i3, property, propertyLen = properties.length;
for (i3 = 0; i3 < propertyLen; i3 += 1) {
property = properties[i3];
propertyTest = propertyTest || hasOwnProp(input, property);
}
@ -29692,7 +29697,7 @@ var require_moment = __commonJS({
addParseToken("x", function(input, array, config2) {
config2._d = new Date(toInt(input));
});
hooks.version = "2.29.1";
hooks.version = "2.29.4";
setHookCallback(createLocal);
hooks.fn = proto;
hooks.min = min;
@ -51520,6 +51525,7 @@ var main_default6 = main6;
function renderCalendar(containerEl, eventSources, settings) {
var _a;
const isMobile = window.innerWidth < 500;
const isNarrow = (settings == null ? void 0 : settings.forceNarrow) || isMobile;
const {
eventClick,
select,
@ -51548,13 +51554,16 @@ function renderCalendar(containerEl, eventSources, settings) {
main_default6
],
googleCalendarApiKey: "AIzaSyDIiklFwJXaLWuT_4y6I9ZRVVsPuf4xGrk",
initialView: ((_a = settings == null ? void 0 : settings.initialView) == null ? void 0 : _a[isMobile ? "mobile" : "desktop"]) || (isMobile ? "timeGrid3Days" : "timeGridWeek"),
initialView: ((_a = settings == null ? void 0 : settings.initialView) == null ? void 0 : _a[isNarrow ? "mobile" : "desktop"]) || (isNarrow ? "timeGrid3Days" : "timeGridWeek"),
nowIndicator: true,
scrollTimeReset: false,
headerToolbar: !isMobile ? {
headerToolbar: !isNarrow ? {
left: "prev,next today",
center: "title",
right: "dayGridMonth,timeGridWeek,timeGridDay,listWeek"
} : !isMobile ? {
right: "today,prev,next",
left: "timeGrid3Days,timeGridDay,listWeek"
} : false,
footerToolbar: isMobile ? {
right: "today,prev,next",
@ -51564,7 +51573,7 @@ function renderCalendar(containerEl, eventSources, settings) {
timeGridDay: {
type: "timeGrid",
duration: { days: 1 },
buttonText: isMobile ? "1" : "day"
buttonText: isNarrow ? "1" : "day"
},
timeGrid3Days: {
type: "timeGrid",
@ -56194,8 +56203,11 @@ var _NoteEvent = class extends LocalEvent {
}
return event;
}
openIn(leaf) {
openIn(leaf, workspace) {
return __async(this, null, function* () {
if (leaf.getViewState().pinned) {
leaf = workspace.getLeaf("tab");
}
yield leaf.openFile(this.file);
});
}
@ -56484,8 +56496,11 @@ var _DailyNoteEvent = class extends LocalEvent {
this.lineNumber = lineNumber;
this.heading = heading;
}
openIn(leaf) {
openIn(leaf, workspace) {
return __async(this, null, function* () {
if (leaf.getViewState().pinned) {
leaf = workspace.getLeaf("tab");
}
yield leaf.openFile(this.file);
if (leaf.view instanceof import_obsidian4.MarkdownView) {
leaf.view.editor.setCursor({
@ -56716,8 +56731,10 @@ var EventModal = class extends import_obsidian5.Modal {
open: this.event instanceof LocalEvent ? () => __async(this, null, function* () {
if (this.event instanceof LocalEvent) {
let leaf = this.app.workspace.getMostRecentLeaf();
yield this.event.openIn(leaf);
this.close();
if (leaf) {
yield this.event.openIn(leaf, this.app.workspace);
this.close();
}
}
}) : void 0,
deleteEvent: this.event instanceof LocalEvent ? () => __async(this, null, function* () {
@ -57749,18 +57766,23 @@ function renderOnboarding(app, plugin, el) {
// src/ui/view.ts
var import_obsidian_daily_notes_interface5 = __toModule(require_main());
var FULL_CALENDAR_VIEW_TYPE = "full-calendar-view";
var FULL_CALENDAR_SIDEBAR_VIEW_TYPE = "full-calendar-sidebar-view";
var CalendarView = class extends import_obsidian11.ItemView {
constructor(leaf, plugin) {
constructor(leaf, plugin, inSidebar = false) {
super(leaf);
this.plugin = plugin;
this.calendar = null;
this.cacheCallback = this.onCacheUpdate.bind(this);
this.inSidebar = inSidebar;
}
getIcon() {
return "calendar-glyph";
}
getViewType() {
return FULL_CALENDAR_VIEW_TYPE;
}
getDisplayText() {
return "Calendar";
return this.inSidebar ? "Full Calendar" : "Calendar";
}
onCacheUpdate(file) {
return __async(this, null, function* () {
@ -57827,12 +57849,17 @@ var CalendarView = class extends import_obsidian11.ItemView {
new import_obsidian11.Notice(err.message);
}
this.calendar = renderCalendar(calendarEl, sources, {
forceNarrow: this.inSidebar,
eventClick: (info) => __async(this, null, function* () {
if (info.jsEvent.getModifierState("Control") || info.jsEvent.getModifierState("Meta")) {
let file = this.app.vault.getAbstractFileByPath(info.event.id);
if (file instanceof import_obsidian11.TFile) {
let leaf = this.app.workspace.getMostRecentLeaf();
yield leaf.openFile(file);
console.log("open", info.event.id);
const event = yield eventFromApi(this.app.metadataCache, this.app.vault, this.plugin.settings, info.event);
if (!event) {
return;
}
let leaf = this.app.workspace.getMostRecentLeaf();
if (leaf) {
event.openIn(leaf, this.app.workspace);
}
} else {
new EventModal(this.app, this.plugin, this.calendar).editInModal(info.event);
@ -57877,7 +57904,7 @@ var CalendarView = class extends import_obsidian11.ItemView {
initialView: this.plugin.settings.initialView,
timeFormat24h: this.plugin.settings.timeFormat24h,
openContextMenuForEvent: (e3, mouseEvent) => __async(this, null, function* () {
const menu = new import_obsidian11.Menu(this.app);
const menu = new import_obsidian11.Menu();
const event = yield eventFromApi(this.app.metadataCache, this.app.vault, this.plugin.settings, e3);
if (event instanceof EditableEvent) {
if (!event.isTask) {
@ -57894,8 +57921,10 @@ var CalendarView = class extends import_obsidian11.ItemView {
menu.addSeparator();
menu.addItem((item) => item.setTitle("Go to note").onClick(() => {
let leaf = this.app.workspace.getMostRecentLeaf();
event.openIn(leaf);
new import_obsidian11.Notice(`Opening "${e3.title}"`);
if (leaf) {
event.openIn(leaf, this.app.workspace);
new import_obsidian11.Notice(`Opening "${e3.title}"`);
}
}));
menu.addItem((item) => item.setTitle("Delete").onClick(() => __async(this, null, function* () {
yield event.delete();
@ -58007,21 +58036,26 @@ var FullCalendarPlugin = class extends import_obsidian12.Plugin {
}
activateView() {
return __async(this, null, function* () {
this.app.workspace.detachLeavesOfType(FULL_CALENDAR_VIEW_TYPE);
yield this.app.workspace.getUnpinnedLeaf().setViewState({
type: FULL_CALENDAR_VIEW_TYPE,
active: true
});
this.app.workspace.revealLeaf(this.app.workspace.getLeavesOfType(FULL_CALENDAR_VIEW_TYPE)[0]);
const leaves = this.app.workspace.getLeavesOfType(FULL_CALENDAR_VIEW_TYPE).filter((l4) => l4.view.inSidebar === false);
if (leaves.length === 0) {
const leaf = this.app.workspace.getLeaf("tab");
yield leaf.setViewState({
type: FULL_CALENDAR_VIEW_TYPE,
active: true
});
} else {
yield Promise.all(leaves.map((l4) => l4.view.onOpen()));
}
});
}
onload() {
return __async(this, null, function* () {
yield this.loadSettings();
this.registerView(FULL_CALENDAR_VIEW_TYPE, (leaf) => new CalendarView(leaf, this));
this.addRibbonIcon("calendar-glyph", "Open Full Calendar", (_3) => {
this.activateView();
});
this.registerView(FULL_CALENDAR_VIEW_TYPE, (leaf) => new CalendarView(leaf, this, false));
this.registerView(FULL_CALENDAR_SIDEBAR_VIEW_TYPE, (leaf) => new CalendarView(leaf, this, true));
this.addRibbonIcon("calendar-glyph", "Open Full Calendar", (_3) => __async(this, null, function* () {
yield this.activateView();
}));
this.addSettingTab(new FullCalendarSettingTab(this.app, this));
this.addCommand({
id: "full-calendar-new-event",
@ -58037,6 +58071,18 @@ var FullCalendarPlugin = class extends import_obsidian12.Plugin {
this.activateView();
}
});
this.addCommand({
id: "full-calendar-open-sidebar",
name: "Open in sidebar",
callback: () => {
if (this.app.workspace.getLeavesOfType(FULL_CALENDAR_SIDEBAR_VIEW_TYPE).length) {
return;
}
this.app.workspace.getRightLeaf(false).setViewState({
type: FULL_CALENDAR_SIDEBAR_VIEW_TYPE
});
}
});
this.addCommand({
id: "full-calendar-upgrade-note",
name: "Upgrade note to event",
@ -58056,6 +58102,7 @@ var FullCalendarPlugin = class extends import_obsidian12.Plugin {
}
onunload() {
this.app.workspace.detachLeavesOfType(FULL_CALENDAR_VIEW_TYPE);
this.app.workspace.detachLeavesOfType(FULL_CALENDAR_SIDEBAR_VIEW_TYPE);
}
loadSettings() {
return __async(this, null, function* () {
@ -58142,4 +58189,4 @@ PERFORMANCE OF THIS SOFTWARE.
//! license : MIT
//! moment.js
//! momentjs.com
//! version : 2.29.1
//! version : 2.29.4

@ -1,10 +1,11 @@
{
"id": "obsidian-full-calendar",
"name": "Full Calendar",
"version": "0.9.1",
"minAppVersion": "0.12.0",
"version": "0.9.5",
"minAppVersion": "0.16.3",
"description": "Obsidian integration with Full Calendar (fullcalendar.io)",
"author": "Davis Haupt",
"authorUrl": "https://davi.sh",
"isDesktopOnly": false
"isDesktopOnly": false,
"fundingUrl": "https://ko-fi.com/davish"
}

@ -1,11 +0,0 @@
{
"useForwardLinks": true,
"useBackLinks": true,
"useTags": true,
"skipMOCs": false,
"MOCMaxLinks": 30,
"enableHighContrast": false,
"skipFolders": "",
"enableLinks": false,
"enableTransclusion": false
}

File diff suppressed because one or more lines are too long

@ -1,10 +0,0 @@
{
"id": "obsidian-journey-plugin",
"name": "Journey",
"version": "0.0.7",
"minAppVersion": "0.10.10",
"description": "Discover the stories between your notes.",
"author": "Alexis Rondeau",
"authorUrl": "https://publish.obsidian.md/alexisrondeau",
"isDesktopOnly": false
}

@ -1,106 +0,0 @@
.journey-search-form select, .journey-search-form input[type=text], .journey-input-button {
width: 100%;
height: 50px !important;
font-size: 24px;
padding: 5px;
padding-left: 10px;
margin-bottom: 20px;
}
.show-me {
display: block;
}
.hide-me {
display: none;
}
.journey-search-form .journey-search-autocomplete-results-container {
position: relative;
height: 0px;
top: -20px;
width: 730px;
min-width: 730px;
max-width: 730px;
}
.journey-search-autocomplete-results-container .journey-search-autocomplete-results-content {
background-color: #222;
}
.journey-search-autocomplete-results-content-item {
font-size: 24px;
color: white;
border-bottom: 1px solid #000000;
padding: 10px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.journey-input-button {
background-color: black;
color: white;
}
/** Search Results */
.journey-result-list .journey-result-list-item-note,
.journey-result-list .journey-result-list-item-start,
.journey-result-list .journey-result-list-item-end,
.journey-result-list .journey-result-list-item-tag {
font-size: 24px;
padding: 10px;
margin-bottom: 10px;
background-color: #555;
border: 5px solid #777;
border-radius: 10px 10px 10px 10px;
}
.journey-result-list .journey-result-list-item-start {
background-color: darkgreen;
border: 3px solid forestgreen;
}
.journey-result-list .journey-result-list-item-end {
background-color: darkgreen;
border: 3px solid forestgreen;
}
.journey-result-list .journey-result-list-item-tag {
background-color: darkblue;
border: 3px solid royalblue;
}
.journey-result-list-high-contrast .journey-result-list-item-note,
.journey-result-list-high-contrast .journey-result-list-item-start,
.journey-result-list-high-contrast .journey-result-list-item-end,
.journey-result-list-high-contrast .journey-result-list-item-tag {
font-size: 24px;
padding: 10px;
margin-bottom: 10px;
background-color: #000;
color: white;
border: 5px solid #333;
border-radius: 10px 10px 10px 10px;
}
.journey-result-list-reset-link {
text-align: center;
text-decoration: underline;
}
.discovery-settings {
font-size: 9px;
text-align: center;
}
.journey-search-lucky {
text-align: center;
text-decoration: underline;
}
.moc-max-links-counter {
text-align: right;
}

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "obsidian-kanban",
"name": "Kanban",
"version": "1.5.1",
"version": "1.5.2",
"minAppVersion": "1.0.0",
"description": "Create markdown-backed Kanban boards in Obsidian.",
"author": "mgmeyers",

@ -17,7 +17,8 @@
"iconDetails": {
"prefix": "fas",
"icon": "fa-circle",
"markerColor": "blue"
"markerColor": "blue",
"innerHTML": "<svg class=\"map-view-icon\"><use xlink:href=\"#icon-1804148836\"></use></svg>"
}
},
{
@ -30,7 +31,7 @@
}
},
{
"ruleName": "#Investment",
"ruleName": "#💰",
"preset": false,
"iconDetails": {
"prefix": "fas",
@ -39,7 +40,7 @@
}
},
{
"ruleName": "#Hotel",
"ruleName": "#🏨",
"preset": false,
"iconDetails": {
"prefix": "fas",
@ -47,7 +48,7 @@
}
},
{
"ruleName": "#Restaurant",
"ruleName": "#🍴",
"preset": false,
"iconDetails": {
"prefix": "fas",
@ -56,7 +57,7 @@
}
},
{
"ruleName": "#Bar",
"ruleName": "#🍸",
"preset": false,
"iconDetails": {
"prefix": "fas",
@ -74,7 +75,7 @@
}
},
{
"ruleName": "#Person",
"ruleName": "#🧍",
"preset": false,
"iconDetails": {
"prefix": "fas",
@ -83,7 +84,7 @@
}
},
{
"ruleName": "#Service",
"ruleName": "#🛍️",
"preset": false,
"iconDetails": {
"prefix": "fas",
@ -92,18 +93,59 @@
}
},
{
"ruleName": "#Football",
"ruleName": "#⚽️",
"preset": false,
"iconDetails": {
"prefix": "fas",
"icon": "fa-futbol",
"markerColor": "red"
}
},
{
"ruleName": "#🏔️",
"preset": false,
"iconDetails": {
"prefix": "fas",
"markerColor": "green-dark",
"icon": "fa-mountain"
}
},
{
"ruleName": "#✈",
"preset": false,
"iconDetails": {
"prefix": "fas",
"icon": "fa-plane",
"markerColor": "blue-dark"
}
},
{
"ruleName": "#🏢",
"preset": false,
"iconDetails": {
"prefix": "fas",
"icon": "fa-city",
"markerColor": "green"
}
},
{
"ruleName": "#🏡",
"preset": false,
"iconDetails": {
"prefix": "fas",
"markerColor": "red",
"icon": "fa-house"
}
}
],
"zoomOnGoFromNote": 15,
"autoZoom": true,
"markerClickBehavior": "samePane",
"markerClickBehavior": "replaceCurrent",
"markerCtrlClickBehavior": "dedicatedPane",
"markerMiddleClickBehavior": "dedicatedTab",
"openMapBehavior": "replaceCurrent",
"openMapCtrlClickBehavior": "dedicatedPane",
"openMapMiddleClickBehavior": "dedicatedTab",
"newNoteNameFormat": "Location added on {{date:YYYY-MM-DD}}T{{date:HH-mm}}",
"showNoteNamePopup": true,
"showNotePreview": true,
@ -153,6 +195,7 @@
"letZoomBeyondMax": false,
"queryForFollowActiveNote": "path:\"$PATH$\"",
"supportRealTimeGeolocation": false,
"fixFrontMatterOnPaste": true,
"tilesUrl": null,
"snippetLines": 3,
"darkMode": false,

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "obsidian-map-view",
"name": "Map View",
"version": "2.2.0",
"version": "3.0.1",
"minAppVersion": "0.15.3",
"description": "An interactive map view.",
"isDesktopOnly": false

@ -48,6 +48,10 @@
display: none;
}
.mv-control-button {
display: inline;
}
.controls-toggle:checked
+ .lbl-triangle
+ .lbl-toggle
@ -157,3 +161,33 @@
div.map-view-highlight.marker-cluster {
box-shadow: 0 0 5px blue;
}
.map-view-icon {
margin: 10px;
width: 15px;
height: 15px;
}
.mv-map-control {
margin: 1px;
}
.block-language-mapview {
height: 300px;
}
.markdown-reading-view .graph-control-div {
display: none;
}
.markdown-reading-view .map-view-graph-controls {
padding: 0;
}
@media print {
.map-view-graph-controls {
display: none;
}
.leaflet-control-zoom {
display: none;
}
}

@ -154,7 +154,7 @@
{
"property": "tags",
"newProperty": "",
"mapping": "default",
"mapping": "remove",
"locked": false
}
]
@ -303,7 +303,7 @@
{
"property": "tags",
"newProperty": "",
"mapping": "default",
"mapping": "remove",
"locked": false
}
]
@ -404,7 +404,7 @@
{
"property": "tags",
"newProperty": "",
"mapping": "default",
"mapping": "remove",
"locked": false
}
]
@ -481,7 +481,7 @@
{
"property": "tags",
"newProperty": "",
"mapping": "default",
"mapping": "remove",
"locked": false
}
]
@ -564,7 +564,7 @@
{
"property": "tags",
"newProperty": "",
"mapping": "default",
"mapping": "remove",
"locked": false
}
]
@ -689,7 +689,7 @@
{
"property": "tags",
"newProperty": "",
"mapping": "default",
"mapping": "remove",
"locked": false
}
]

@ -2115,13 +2115,22 @@ function add_render_callback(fn2) {
var seen_callbacks = new Set();
var flushidx = 0;
function flush() {
if (flushidx !== 0) {
return;
}
const saved_component = current_component;
do {
while (flushidx < dirty_components.length) {
const component = dirty_components[flushidx];
flushidx++;
set_current_component(component);
update(component.$$);
try {
while (flushidx < dirty_components.length) {
const component = dirty_components[flushidx];
flushidx++;
set_current_component(component);
update(component.$$);
}
} catch (e) {
dirty_components.length = 0;
flushidx = 0;
throw e;
}
set_current_component(null);
dirty_components.length = 0;
@ -3911,7 +3920,11 @@ var OMDbAPI = class extends APIModel {
}
const data = yield fetchData.json();
if (data.Response === "False") {
throw Error(`MDB | Received error from ${this.apiName}: ${data.Error}`);
if (data.Error === "Movie not found!") {
return [];
}
throw Error(`MDB | Received error from ${this.apiName}:
${JSON.stringify(data, void 0, 4)}`);
}
if (!data.Search) {
return [];

@ -1,7 +1,7 @@
{
"id": "obsidian-media-db-plugin",
"name": "Media DB Plugin",
"version": "0.5.0",
"version": "0.5.1",
"minAppVersion": "0.14.0",
"description": "A plugin that can query multiple APIs for movies, series, anime, games, music and wiki articles, and import them into your vault.",
"author": "Moritz Jung",

@ -76,7 +76,7 @@ var Effects = null;
var ExecCount = 0;
var [transPending, setTransPending] = /* @__PURE__ */ createSignal(false);
function createRoot(fn, detachedOwner) {
const listener = Listener, owner = Owner, unowned = fn.length === 0, root = unowned && true ? UNOWNED : {
const listener = Listener, owner = Owner, unowned = fn.length === 0, root = unowned ? UNOWNED : {
owned: null,
cleanups: null,
context: null,
@ -139,11 +139,13 @@ function createMemo(fn, value, options) {
return readSignal.bind(c);
}
function untrack(fn) {
let result, listener = Listener;
const listener = Listener;
Listener = null;
result = fn();
Listener = listener;
return result;
try {
return fn();
} finally {
Listener = listener;
}
}
function onMount(fn) {
createEffect(() => untrack(fn));
@ -198,7 +200,7 @@ function startTransition(fn) {
return t ? t.done : void 0;
});
}
function createContext(defaultValue) {
function createContext(defaultValue, options) {
const id = Symbol("context");
return {
id,
@ -212,12 +214,12 @@ function useContext(context) {
}
function children(fn) {
const children2 = createMemo(fn);
const memo2 = createMemo(() => resolveChildren(children2()));
memo2.toArray = () => {
const c = memo2();
const memo = createMemo(() => resolveChildren(children2()));
memo.toArray = () => {
const c = memo();
return Array.isArray(c) ? c : c != null ? [c] : [];
};
return memo2;
return memo;
}
var SuspenseContext;
function readSignal() {
@ -308,7 +310,9 @@ function updateComputation(node) {
queueMicrotask(() => {
runUpdates(() => {
Transition && (Transition.running = true);
Listener = Owner = node;
runComputation(node, node.tValue, time);
Listener = Owner = null;
}, false);
});
}
@ -320,8 +324,17 @@ function runComputation(node, value, time) {
try {
nextValue = node.fn(value);
} catch (err) {
if (node.pure)
Transition && Transition.running ? node.tState = STALE : node.state = STALE;
if (node.pure) {
if (Transition && Transition.running) {
node.tState = STALE;
node.tOwned && node.tOwned.forEach(cleanNode);
node.tOwned = void 0;
} else {
node.state = STALE;
node.owned && node.owned.forEach(cleanNode);
node.owned = null;
}
}
handleError(err);
}
if (!node.updatedAt || node.updatedAt <= time) {
@ -449,39 +462,41 @@ function completeUpdates(wait) {
if (wait)
return;
let res;
if (Transition && Transition.running) {
if (Transition.promises.size || Transition.queue.size) {
if (Transition) {
if (!Transition.promises.size && !Transition.queue.size) {
const sources = Transition.sources;
const disposed = Transition.disposed;
Effects.push.apply(Effects, Transition.effects);
res = Transition.resolve;
for (const e2 of Effects) {
"tState" in e2 && (e2.state = e2.tState);
delete e2.tState;
}
Transition = null;
runUpdates(() => {
for (const d of disposed)
cleanNode(d);
for (const v of sources) {
v.value = v.tValue;
if (v.owned) {
for (let i = 0, len = v.owned.length; i < len; i++)
cleanNode(v.owned[i]);
}
if (v.tOwned)
v.owned = v.tOwned;
delete v.tValue;
delete v.tOwned;
v.tState = 0;
}
setTransPending(false);
}, false);
} else if (Transition.running) {
Transition.running = false;
Transition.effects.push.apply(Transition.effects, Effects);
Effects = null;
setTransPending(true);
return;
}
const sources = Transition.sources;
const disposed = Transition.disposed;
res = Transition.resolve;
for (const e2 of Effects) {
"tState" in e2 && (e2.state = e2.tState);
delete e2.tState;
}
Transition = null;
runUpdates(() => {
for (const d of disposed)
cleanNode(d);
for (const v of sources) {
v.value = v.tValue;
if (v.owned) {
for (let i = 0, len = v.owned.length; i < len; i++)
cleanNode(v.owned[i]);
}
if (v.tOwned)
v.owned = v.tOwned;
delete v.tValue;
delete v.tOwned;
v.tState = 0;
}
setTransPending(false);
}, false);
}
const e = Effects;
Effects = null;
@ -505,10 +520,6 @@ function scheduleQueue(queue) {
runUpdates(() => {
Transition.running = true;
runTop(item);
if (!tasks.size) {
Effects.push.apply(Effects, Transition.effects);
Transition.effects = [];
}
}, false);
Transition && (Transition.running = false);
});
@ -640,7 +651,7 @@ function resolveChildren(children2) {
}
return children2;
}
function createProvider(id) {
function createProvider(id, options) {
return function provider(props) {
let res;
createRenderEffect(() => res = untrack(() => {
@ -648,7 +659,7 @@ function createProvider(id) {
[id]: props.value
};
return children(() => props.children);
}));
}), void 0);
return res;
};
}
@ -764,7 +775,7 @@ function For(props) {
const fallback = "fallback" in props && {
fallback: () => props.fallback
};
return createMemo(mapArray(() => props.each, props.children, fallback ? fallback : void 0));
return createMemo(mapArray(() => props.each, props.children, fallback || void 0));
}
function Show(props) {
let strictEqual = false;
@ -781,11 +792,12 @@ function Show(props) {
return fn ? untrack(() => child(c)) : child;
}
return props.fallback;
});
}, void 0, void 0);
}
function Switch(props) {
let strictEqual = false;
let keyed = false;
const equals = (a, b) => a[0] === b[0] && (strictEqual ? a[1] === b[1] : !a[1] === !b[1]) && a[2] === b[2];
const conditions = children(() => props.children), evalConditions = createMemo(() => {
let conds = conditions();
if (!Array.isArray(conds))
@ -799,7 +811,7 @@ function Switch(props) {
}
return [-1];
}, void 0, {
equals: (a, b) => a[0] === b[0] && (strictEqual ? a[1] === b[1] : !a[1] === !b[1]) && a[2] === b[2]
equals
});
return createMemo(() => {
const [index, when, cond] = evalConditions();
@ -809,7 +821,7 @@ function Switch(props) {
const fn = typeof c === "function" && c.length > 0;
strictEqual = keyed || fn;
return fn ? untrack(() => c(when)) : c;
});
}, void 0, void 0);
}
function Match(props) {
return props;
@ -820,7 +832,7 @@ function ErrorBoundary(props) {
let v;
if (sharedConfig.context && sharedConfig.load && (v = sharedConfig.load(sharedConfig.context.id + sharedConfig.context.count)))
err = v[0];
const [errored, setErrored] = createSignal(err);
const [errored, setErrored] = createSignal(err, void 0);
Errors || (Errors = /* @__PURE__ */ new Set());
Errors.add(setErrored);
onCleanup(() => Errors.delete(setErrored));
@ -834,18 +846,13 @@ function ErrorBoundary(props) {
}
onError(setErrored);
return props.children;
});
}, void 0, void 0);
}
var SuspenseListContext = createContext();
// node_modules/solid-js/web/dist/web.js
var booleans = ["allowfullscreen", "async", "autofocus", "autoplay", "checked", "controls", "default", "disabled", "formnovalidate", "hidden", "indeterminate", "ismap", "loop", "multiple", "muted", "nomodule", "novalidate", "open", "playsinline", "readonly", "required", "reversed", "seamless", "selected"];
var Properties = /* @__PURE__ */ new Set(["className", "value", "readOnly", "formNoValidate", "isMap", "noModule", "playsInline", ...booleans]);
function memo(fn, equals) {
return createMemo(fn, void 0, !equals ? {
equals
} : void 0);
}
function reconcileArrays(parentNode, a, b) {
let bLength = b.length, aEnd = a.length, bEnd = bLength, aStart = 0, bStart = 0, after = a[aEnd - 1].nextSibling, map = null;
while (aStart < aEnd || bStart < bEnd) {
@ -903,12 +910,12 @@ function reconcileArrays(parentNode, a, b) {
}
}
var $$EVENTS = "_$DX_DELEGATE";
function render(code, element, init) {
function render(code, element, init, options = {}) {
let disposer;
createRoot((dispose2) => {
disposer = dispose2;
element === document ? code() : insert(element, code(), element.firstChild ? null : void 0, init);
});
}, options.owner);
return () => {
disposer();
element.textContent = "";
@ -971,9 +978,16 @@ function eventHandler(e) {
});
if (sharedConfig.registry && !sharedConfig.done) {
sharedConfig.done = true;
document.querySelectorAll("[id^=pl-]").forEach((elem) => elem.remove());
document.querySelectorAll("[id^=pl-]").forEach((elem) => {
while (elem && elem.nodeType !== 8 && elem.nodeValue !== "pl-" + e) {
let x = elem.nextSibling;
elem.remove();
elem = x;
}
elem && elem.remove();
});
}
while (node !== null) {
while (node) {
const handler = node[key];
if (handler && !node.disabled) {
const data = node[`${key}Data`];
@ -981,7 +995,7 @@ function eventHandler(e) {
if (e.cancelBubble)
return;
}
node = node.host && node.host !== node && node.host instanceof Node ? node.host : node.parentNode;
node = node._$host || node.parentNode || node.host;
}
}
function insertExpression(parent, value, current, marker, unwrapArray) {
@ -1097,7 +1111,7 @@ function normalizeIncomingArray(normalized, array, current, unwrap) {
}
return dynamic;
}
function appendNodes(parent, array, marker) {
function appendNodes(parent, array, marker = null) {
for (let i = 0, len = array.length; i < len; i++)
parent.insertBefore(array[i], marker);
}
@ -1859,7 +1873,7 @@ function String2(props) {
get children() {
return [createComponent(Match, {
get when() {
return memo(() => !!settings.autolinks, true)() && isInternalLink(value);
return createMemo(() => !!settings.autolinks)() && isInternalLink(value);
},
get children() {
return createComponent(InternalLink, {
@ -1868,7 +1882,7 @@ function String2(props) {
}
}), createComponent(Match, {
get when() {
return memo(() => !!settings.autolinks, true)() && isExternalLink(value);
return createMemo(() => !!settings.autolinks)() && isExternalLink(value);
},
get children() {
return createComponent(ExternalLink, {
@ -1877,7 +1891,7 @@ function String2(props) {
}
}), createComponent(Match, {
get when() {
return memo(() => !!settings.autolinks, true)() && MD_LINK_RE.test(value.trim());
return createMemo(() => !!settings.autolinks)() && MD_LINK_RE.test(value.trim());
},
get children() {
return createComponent(MarkdownLink, {

@ -1,7 +1,7 @@
{
"id": "obsidian-metatable",
"name": "Metatable",
"version": "0.14.3",
"version": "0.14.4",
"minAppVersion": "0.15.9",
"description": "Displays the full frontmatter as a table.",
"author": "Arnau Siches",

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "obsidian-minimal-settings",
"name": "Minimal Theme Settings",
"version": "6.1.1",
"version": "6.3.1",
"minAppVersion": "0.16.0",
"description": "Change the colors, fonts and features of Minimal Theme.",
"author": "@kepano",

@ -0,0 +1,13 @@
{
"location": "Zürich",
"key": "3fc1914d4808eb2920b4ea1ba9137423",
"units": "metric",
"excludeFolder": "",
"weatherFormat1": "%desc% • Current Temp: %temp%°C • Feels Like: %feels%°C\n",
"weatherFormat2": "%name%: %dateMonth4% %dateDay2% - %timeH2%:%timeM% %ampm1%\nCurrent Temp: %temp%°C • Feels Like: %feels%°C\nWind: %wind-speed% Km/h from the %wind-dir%^ with gusts up to %wind-gust% Km/h^\nSunrise: %sunrise% • Sunset: %sunset%\n",
"weatherFormat3": "%icon%&nbsp;%dateDay2% %dateMonth4% %dateYear1% 🔹 %timeH2%:%timeM% %ampm1% 🔹 %desc%<br>&nbsp;Recorded Temp: %temp% 🔹 Felt like: %feels%<br>&nbsp;Wind: %wind-speed% Km/h from the %wind-dir%^ with gusts up to %wind-gust% Km/h^<br>&nbsp;Sunrise: %sunrise% 🔹 Sunset: %sunset%",
"weatherFormat4": "%icon%&nbsp;%dateMonth4% %dateDay2% %dateYear1% • %timeH2%:%timeM% %ampm1% • %desc%<br>&nbsp;Current Temp: %temp% • Feels like: %feels%<br>&nbsp;Wind: %wind-speed% Km/h from the %wind-dir%^ with gusts up to %wind-gust% Km/h^<br>&nbsp;Sunrise: %sunrise% • Sunset: %sunset%",
"statusbarActive": false,
"weatherFormatSB": " | %desc% | Current Temp: %temp%°C | Feels Like: %feels%°C | ",
"statusbarUpdateFreq": "15"
}

@ -0,0 +1,658 @@
/*
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: () => OpenWeather
});
module.exports = __toCommonJS(main_exports);
var import_obsidian = require("obsidian");
var displayErrorMsg = true;
var DEFAULT_SETTINGS = {
location: "",
key: "",
units: "metric",
excludeFolder: "",
weatherFormat1: "%desc% \u2022 Current Temp: %temp%\xB0C \u2022 Feels Like: %feels%\xB0C\n",
weatherFormat2: "%name%: %dateMonth4% %dateDay2% - %timeH2%:%timeM% %ampm1%\nCurrent Temp: %temp%\xB0C \u2022 Feels Like: %feels%\xB0C\nWind: %wind-speed% Km/h from the %wind-dir%^ with gusts up to %wind-gust% Km/h^\nSunrise: %sunrise% \u2022 Sunset: %sunset%\n",
weatherFormat3: "%icon%&nbsp;%dateMonth4% %dateDay2% %dateYear1% \u2022 %timeH2%:%timeM% %ampm1% \u2022 %desc%<br>&nbsp;Recorded Temp: %temp% \u2022 Felt like: %feels%<br>&nbsp;Wind: %wind-speed% Km/h from the %wind-dir%^ with gusts up to %wind-gust% Km/h^<br>&nbsp;Sunrise: %sunrise% \u2022 Sunset: %sunset%",
weatherFormat4: "%icon%&nbsp;%dateMonth4% %dateDay2% %dateYear1% \u2022 %timeH2%:%timeM% %ampm1% \u2022 %desc%<br>&nbsp;Current Temp: %temp% \u2022 Feels like: %feels%<br>&nbsp;Wind: %wind-speed% Km/h from the %wind-dir%^ with gusts up to %wind-gust% Km/h^<br>&nbsp;Sunrise: %sunrise% \u2022 Sunset: %sunset%",
statusbarActive: true,
weatherFormatSB: " | %desc% | Current Temp: %temp%\xB0C | Feels Like: %feels%\xB0C | ",
statusbarUpdateFreq: "15"
};
var FormatWeather = class {
constructor(location, key, units, format) {
this.location = location;
this.key = key;
this.units = units;
this.format = format;
}
async getWeather() {
let weatherData;
let weatherString;
let url = `https://api.openweathermap.org/data/2.5/weather?q=${this.location}&appid=${this.key}&units=${this.units}`;
let req = await fetch(url);
let json = await req.json();
let conditions = json.weather[0].description;
conditions = conditions.replace(/^\w|\s\w/g, (c2) => c2.toUpperCase());
let iconName = json.weather[0].icon;
const iconApi = await fetch("http://openweathermap.org/img/w/" + iconName + ".png");
let iconUrl = iconApi.url;
let temp = json.main.temp;
temp = Math.round(temp);
let feelsLike = json.main.feels_like;
feelsLike = Math.round(feelsLike);
let tempMin = json.main.temp_min;
tempMin = Math.round(tempMin);
let tempMax = json.main.temp_max;
tempMax = Math.round(tempMax);
let pressure = json.main.pressure;
let humidity = json.main.humidity;
let seaLevel = json.main.sea_level;
let groundLevel = json.main.grnd_level;
let visibility = json.visibility;
let windSpeed = json.wind.speed;
if (this.units == "metric") {
windSpeed = Math.round(windSpeed * 3.6);
} else {
windSpeed = Math.round(windSpeed);
}
let windDirection = json.wind.deg;
windDirection = this.getCardinalDirection(windDirection);
let windGust = json.wind.gust;
if (windGust != void 0) {
if (this.units == "metric") {
windGust = Math.round(windGust * 3.6);
} else {
windGust = Math.round(windGust);
}
} else {
windGust = "N/A";
}
let dt = json.dt;
let a = new Date(dt * 1e3);
const months1 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"];
const months2 = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"];
const months3 = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
const months4 = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
let year1 = a.getFullYear();
let year2str = String(year1).slice(-2);
let year2 = Number(year2str);
let month1 = months1[a.getMonth()];
let month2 = months2[a.getMonth()];
let month3 = months3[a.getMonth()];
let month4 = months4[a.getMonth()];
let date1 = a.getDate();
let date2 = a.getDate() < 10 ? "0" + a.getDate() : a.getDate();
let ampm1 = "AM";
let ampm2 = "am";
if (a.getHours() > 11) {
ampm1 = "PM";
ampm2 = "pm";
}
let hour1 = a.getHours();
let hour2 = a.getHours();
if (a.getHours() > 12) {
hour2 = a.getHours() - 12;
}
if (a.getHours() == 0) {
hour1 = 12;
hour2 = 12;
}
let min = a.getMinutes() < 10 ? "0" + a.getMinutes() : a.getMinutes();
let sec = a.getSeconds() < 10 ? "0" + a.getSeconds() : a.getSeconds();
let sr = json.sys.sunrise;
let b = new Date(sr * 1e3);
let srhour = b.getHours() < 10 ? "0" + b.getHours() : b.getHours();
let srmin = b.getMinutes() < 10 ? "0" + b.getMinutes() : b.getMinutes();
let srsec = b.getSeconds() < 10 ? "0" + b.getSeconds() : b.getSeconds();
let sunrise = srhour + ":" + srmin + ":" + srsec;
let ss = json.sys.sunset;
let c = new Date(ss * 1e3);
let sshour = c.getHours() < 10 ? "0" + c.getHours() : c.getHours();
let ssmin = c.getMinutes() < 10 ? "0" + c.getMinutes() : c.getMinutes();
let sssec = c.getSeconds() < 10 ? "0" + c.getSeconds() : c.getSeconds();
let sunset = sshour + ":" + ssmin + ":" + sssec;
let name = json.name;
weatherData = {
"status": "ok",
"conditions": conditions,
"icon": iconUrl,
"temp": temp,
"feelsLike": feelsLike,
"tempMin": tempMin,
"tempMax": tempMax,
"pressure": pressure,
"humidity": humidity,
"seaLevel": seaLevel,
"groundLevel": groundLevel,
"visibility": visibility,
"windSpeed": windSpeed,
"windDirection": windDirection,
"windGust": windGust,
"year1": year1,
"year2": year2,
"month1": month1,
"month2": month2,
"month3": month3,
"month4": month4,
"date1": date1,
"date2": date2,
"ampm1": ampm1,
"ampm2": ampm2,
"hour1": hour1,
"hour2": hour2,
"min": min,
"sec": sec,
"sunrise": sunrise,
"sunset": sunset,
"name": name
};
weatherString = this.format.replace(/%desc%/g, weatherData.conditions);
weatherString = weatherString.replace(/%icon%/g, `<img src=${weatherData.icon} />`);
weatherString = weatherString.replace(/%temp%/g, weatherData.temp);
weatherString = weatherString.replace(/%feels%/g, weatherData.feelsLike);
weatherString = weatherString.replace(/%tempmin%/g, weatherData.tempMin);
weatherString = weatherString.replace(/%tempmax%/g, weatherData.tempMax);
weatherString = weatherString.replace(/%pressure%/g, weatherData.pressure);
weatherString = weatherString.replace(/%humidity%/g, weatherData.humidity);
weatherString = weatherString.replace(/%pressure-sl%/g, weatherData.seaLevel);
weatherString = weatherString.replace(/%pressure-gl%/g, weatherData.groundLevel);
weatherString = weatherString.replace(/%visibility%/g, weatherData.visibility);
weatherString = weatherString.replace(/%wind-speed%/g, weatherData.windSpeed);
weatherString = weatherString.replace(/%wind-dir%/g, weatherData.windDirection);
if (weatherData.windGust == "N/A") {
weatherString = weatherString.replace(/\^.+\^/g, "");
} else {
weatherString = weatherString.replace(/%wind-gust%/g, weatherData.windGust);
weatherString = weatherString.replace(/\^(.+)\^/g, "$1");
}
weatherString = weatherString.replace(/%dateYear1%/g, `${weatherData.year1}`);
weatherString = weatherString.replace(/%dateYear2%/g, `${weatherData.year2}`);
weatherString = weatherString.replace(/%dateMonth1%/g, `${weatherData.month1}`);
weatherString = weatherString.replace(/%dateMonth2%/g, `${weatherData.month2}`);
weatherString = weatherString.replace(/%dateMonth3%/g, `${weatherData.month3}`);
weatherString = weatherString.replace(/%dateMonth4%/g, `${weatherData.month4}`);
weatherString = weatherString.replace(/%dateDay1%/g, `${weatherData.date1}`);
weatherString = weatherString.replace(/%dateDay2%/g, `${weatherData.date2}`);
weatherString = weatherString.replace(/%ampm1%/g, `${weatherData.ampm1}`);
weatherString = weatherString.replace(/%ampm2%/g, `${weatherData.ampm2}`);
weatherString = weatherString.replace(/%timeH1%/g, `${weatherData.hour1}`);
weatherString = weatherString.replace(/%timeH2%/g, `${weatherData.hour2}`);
weatherString = weatherString.replace(/%timeM%/g, `${weatherData.min}`);
weatherString = weatherString.replace(/%timeS%/g, `${weatherData.sec}`);
weatherString = weatherString.replace(/%sunrise%/g, `${weatherData.sunrise}`);
weatherString = weatherString.replace(/%sunset%/g, `${weatherData.sunset}`);
weatherString = weatherString.replace(/%name%/g, `${weatherData.name}`);
return weatherString;
}
async getWeatherString() {
let weatherString = await this.getWeather();
return weatherString;
}
getCardinalDirection(angle) {
const directions = ["North", "Northeast", "East", "Southeast", "South", "Southwest", "West", "Northwest"];
return directions[Math.round(angle / 45) % 8];
}
};
var OpenWeather = class extends import_obsidian.Plugin {
async onload() {
await this.loadSettings();
this.addRibbonIcon("thermometer-snowflake", "OpenWeather", (evt) => {
const view = this.app.workspace.getActiveViewOfType(import_obsidian.MarkdownView);
if (!view) {
new import_obsidian.Notice("Open a Markdown file first.");
return;
}
if (view.getViewType() === "markdown") {
const md = view;
if (md.getMode() === "source") {
new InsertWeatherPicker(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat1, this.settings.weatherFormat2, this.settings.weatherFormat3, this.settings.weatherFormat4).open();
} else {
new import_obsidian.Notice("Markdown file must be in source mode to insert weather string.");
}
} else {
new import_obsidian.Notice("Open a Markdown file first.");
}
});
this.statusBar = this.addStatusBarItem();
if (this.settings.statusbarActive) {
if (this.settings.key.length == 0 || this.settings.location.length == 0) {
if (displayErrorMsg) {
new import_obsidian.Notice("OpenWeather plugin settings are undefined, check your settings.", 8e3);
this.statusBar.setText("");
console.log("Err:", displayErrorMsg);
displayErrorMsg = false;
}
} else {
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormatSB);
let weatherStr = await wstr.getWeatherString();
this.statusBar.setText(weatherStr);
}
} else {
this.statusBar.setText("");
}
this.addCommand({
id: "replace-template-string",
name: "Replace template strings",
editorCallback: async (editor, view) => {
if (this.settings.weatherFormat1.length > 0) {
if (view.data.contains("%weather1%")) {
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat1);
let weatherStr = await wstr.getWeatherString();
let doc = editor.getValue().replace(/%weather1%/gmi, weatherStr);
editor.setValue(doc);
}
}
if (this.settings.weatherFormat2.length > 0) {
if (view.data.contains("%weather2%")) {
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat2);
let weatherStr = await wstr.getWeatherString();
let doc = editor.getValue().replace(/%weather2%/gmi, weatherStr);
editor.setValue(doc);
}
}
if (this.settings.weatherFormat3.length > 0) {
if (view.data.contains("%weather3%")) {
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat3);
let weatherStr = await wstr.getWeatherString();
let doc = editor.getValue().replace(/%weather3%/gmi, weatherStr);
editor.setValue(doc);
}
}
if (this.settings.weatherFormat4.length > 0) {
if (view.data.contains("%weather4%")) {
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat4);
let weatherStr = await wstr.getWeatherString();
let doc = editor.getValue().replace(/%weather4%/gmi, weatherStr);
editor.setValue(doc);
}
}
}
});
this.addCommand({
id: "insert-format-one",
name: "Insert weather format one",
editorCallback: async (editor, view) => {
if (this.settings.weatherFormat1.length > 0) {
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat1);
let weatherStr = await wstr.getWeatherString();
editor.replaceSelection(`${weatherStr}`);
} else {
new import_obsidian.Notice("Weather string 1 is undefined! Please add a definition for it in the OpenWeather plugin settings.", 5e3);
}
}
});
this.addCommand({
id: "insert-format-two",
name: "Insert weather format two",
editorCallback: async (editor, view) => {
if (this.settings.weatherFormat2.length > 0) {
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat2);
let weatherStr = await wstr.getWeatherString();
editor.replaceSelection(`${weatherStr}`);
} else {
new import_obsidian.Notice("Weather string 2 is undefined! Please add a definition for it in the OpenWeather plugin settings.", 5e3);
}
}
});
this.addCommand({
id: "insert-format-three",
name: "Insert weather format three",
editorCallback: async (editor, view) => {
if (this.settings.weatherFormat3.length > 0) {
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat3);
let weatherStr = await wstr.getWeatherString();
editor.replaceSelection(`${weatherStr}`);
} else {
new import_obsidian.Notice("Weather string 3 is undefined! Please add a definition for it in the OpenWeather plugin settings.", 5e3);
}
}
});
this.addCommand({
id: "insert-format-four",
name: "Insert weather format four",
editorCallback: async (editor, view) => {
if (this.settings.weatherFormat4.length > 0) {
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat4);
let weatherStr = await wstr.getWeatherString();
editor.replaceSelection(`${weatherStr}`);
} else {
new import_obsidian.Notice("Weather string 4 is undefined! Please add a definition for it in the OpenWeather plugin settings.", 5e3);
}
}
});
this.addSettingTab(new OpenWeatherSettingsTab(this.app, this));
this.registerEvent(this.app.workspace.on("file-open", async (file) => {
if (file) {
await new Promise((r) => setTimeout(r, 2e3));
await this.replaceTemplateStrings();
await this.updateCurrentWeatherDiv();
}
}));
this.registerEvent(this.app.metadataCache.on("resolved", async () => {
await this.replaceTemplateStrings();
await this.updateCurrentWeatherDiv();
}));
let updateFreq = this.settings.statusbarUpdateFreq;
this.registerInterval(window.setInterval(() => this.updateWeather(), Number(updateFreq) * 60 * 1e3));
this.registerInterval(window.setInterval(() => this.updateCurrentWeatherDiv(), Number(updateFreq) * 60 * 1e3));
}
async updateCurrentWeatherDiv() {
const view = this.app.workspace.getActiveViewOfType(import_obsidian.MarkdownView);
if (!view)
return;
if (document.getElementsByClassName("weather_current_1").length === 1) {
const divEl = document.getElementsByClassName("weather_current_1")[0];
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat1);
let weatherStr = await wstr.getWeatherString();
divEl.innerHTML = weatherStr;
}
if (document.getElementsByClassName("weather_current_2").length === 1) {
const divEl = document.getElementsByClassName("weather_current_2")[0];
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat2);
let weatherStr = await wstr.getWeatherString();
divEl.innerHTML = weatherStr;
}
if (document.getElementsByClassName("weather_current_3").length === 1) {
const divEl = document.getElementsByClassName("weather_current_3")[0];
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat3);
let weatherStr = await wstr.getWeatherString();
divEl.innerHTML = weatherStr;
}
if (document.getElementsByClassName("weather_current_4").length === 1) {
const divEl = document.getElementsByClassName("weather_current_4")[0];
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat4);
let weatherStr = await wstr.getWeatherString();
divEl.innerHTML = weatherStr;
}
}
async replaceTemplateStrings() {
const view = this.app.workspace.getActiveViewOfType(import_obsidian.MarkdownView);
if (!view)
return;
const file = app.workspace.getActiveFile();
if (view.file.parent.path === this.settings.excludeFolder)
return;
let editor = view.getViewData();
if (editor == null)
return;
if (this.settings.weatherFormat1.length > 0) {
if (editor.contains("%weather1%")) {
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat1);
let weatherStr = await wstr.getWeatherString();
editor = editor.replace(/%weather1%/gmi, weatherStr);
file == null ? void 0 : file.vault.modify(file, editor);
}
}
if (this.settings.weatherFormat2.length > 0) {
if (editor.contains("%weather2%")) {
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat2);
let weatherStr = await wstr.getWeatherString();
editor = editor.replace(/%weather2%/gmi, weatherStr);
file == null ? void 0 : file.vault.modify(file, editor);
}
}
if (this.settings.weatherFormat3.length > 0) {
if (editor.contains("%weather3%")) {
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat3);
let weatherStr = await wstr.getWeatherString();
editor = editor.replace(/%weather3%/gmi, weatherStr);
file == null ? void 0 : file.vault.modify(file, editor);
}
}
if (this.settings.weatherFormat4.length > 0) {
if (editor.contains("%weather4%")) {
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormat4);
let weatherStr = await wstr.getWeatherString();
editor = editor.replace(/%weather4%/gmi, weatherStr);
file == null ? void 0 : file.vault.modify(file, editor);
}
}
}
async updateWeather() {
if (this.settings.statusbarActive) {
if (this.settings.key.length == 0 || this.settings.location.length == 0) {
if (displayErrorMsg) {
new import_obsidian.Notice("OpenWeather plugin settings are undefined, check your settings.");
this.statusBar.setText("");
displayErrorMsg = false;
}
} else {
let wstr = new FormatWeather(this.settings.location, this.settings.key, this.settings.units, this.settings.weatherFormatSB);
let weatherStr = await wstr.getWeatherString();
this.statusBar.setText(weatherStr);
}
} else {
this.statusBar.setText("");
}
}
onunload() {
}
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
}
async saveSettings() {
await this.saveData(this.settings);
}
};
var ALL_COMMANDS = [];
var InsertWeatherPicker = class extends import_obsidian.SuggestModal {
constructor(location, key, units, weatherFormat1, weatherFormat2, weatherFormat3, weatherFormat4) {
super(app);
this.location = location;
this.key = key;
this.units = units;
this.weatherFormat1 = weatherFormat1;
this.weatherFormat2 = weatherFormat2;
this.weatherFormat3 = weatherFormat3;
this.weatherFormat4 = weatherFormat4;
}
async getSuggestions(query) {
ALL_COMMANDS = [];
if (this.weatherFormat1.length > 0) {
let wstr = new FormatWeather(this.location, this.key, this.units, this.weatherFormat1);
let weatherStr = await wstr.getWeatherString();
this.weatherFormat1 = weatherStr;
ALL_COMMANDS.push({ command: "Insert Weather String - Format 1", format: this.weatherFormat1 });
}
if (this.weatherFormat2.length > 0) {
let wstr = new FormatWeather(this.location, this.key, this.units, this.weatherFormat2);
let weatherStr = await wstr.getWeatherString();
this.weatherFormat2 = weatherStr;
ALL_COMMANDS.push({ command: "Insert Weather String - Format 2", format: this.weatherFormat2 });
}
if (this.weatherFormat3.length > 0) {
let wstr = new FormatWeather(this.location, this.key, this.units, this.weatherFormat3);
let weatherStr = await wstr.getWeatherString();
this.weatherFormat3 = weatherStr;
ALL_COMMANDS.push({ command: "Insert Weather String - Format 3", format: this.weatherFormat3 });
}
if (this.weatherFormat4.length > 0) {
let wstr = new FormatWeather(this.location, this.key, this.units, this.weatherFormat4);
let weatherStr = await wstr.getWeatherString();
this.weatherFormat4 = weatherStr;
ALL_COMMANDS.push({ command: "Insert Weather String - Format 4", format: this.weatherFormat4 });
}
ALL_COMMANDS.push({ command: "Replace Template Strings", format: "Replace all occurences of %weather1%, %weather2%, %weather3% and %weather4%\nin the current document." });
return ALL_COMMANDS.filter((command) => command.command.toLowerCase().includes(query.toLowerCase()));
}
renderSuggestion(command, el) {
el.createEl("div", { text: command.command });
el.createEl("small", { text: command.format });
}
async onChooseSuggestion(command, evt) {
this.command = command.command;
this.format = command.format;
this.close();
const view = this.app.workspace.getActiveViewOfType(import_obsidian.MarkdownView);
if (!view)
return;
if (view.file.parent.path === "Templates")
return;
let editor = view.getViewData();
if (editor == null)
return;
if (command.command == "Replace Template Strings") {
if (this.weatherFormat1.length > 0) {
editor = editor.replace(/%weather1%/gmi, this.weatherFormat1);
view.setViewData(editor, false);
}
if (this.weatherFormat2.length > 0) {
editor = editor.replace(/%weather2%/gmi, this.weatherFormat2);
view.setViewData(editor, false);
}
if (this.weatherFormat3.length > 0) {
editor = editor.replace(/%weather3%/gmi, this.weatherFormat3);
view.setViewData(editor, false);
}
if (this.weatherFormat4.length > 0) {
editor = editor.replace(/%weather4%/gmi, this.weatherFormat4);
view.setViewData(editor, false);
}
} else {
view.editor.replaceSelection(this.format);
}
}
};
var OpenWeatherSettingsTab = class extends import_obsidian.PluginSettingTab {
constructor(app2, plugin) {
super(app2, plugin);
this.plugin = plugin;
}
display() {
const { containerEl } = this;
containerEl.empty();
const abstractFiles = app.vault.getAllLoadedFiles();
const folders = [];
abstractFiles.forEach((folder) => {
if (folder instanceof import_obsidian.TFolder && folder.name.length > 0) {
folders.push(folder);
}
});
containerEl.createEl("h2", { text: "Settings for calling OpenWeather API" });
new import_obsidian.Setting(containerEl).setName("Enter Location").setDesc("Name of the city you want to retrieve weather for").addText((text) => text.setPlaceholder("Enter city Eg. edmonton").setValue(this.plugin.settings.location).onChange(async (value) => {
this.plugin.settings.location = value;
await this.plugin.saveSettings();
await this.plugin.updateWeather();
}));
new import_obsidian.Setting(containerEl).setName("OpenWeather API Key").setDesc("A free OpenWeather API key is required for the plugin to work. Go to https://openweathermap.org to register and get a key").addText((text) => text.setPlaceholder("Enter OpenWeather API Key").setValue(this.plugin.settings.key).onChange(async (value) => {
this.plugin.settings.key = value;
await this.plugin.saveSettings();
await this.plugin.updateWeather();
}));
new import_obsidian.Setting(containerEl).setName("Units of Measurement").setDesc("Units of measurement. Standard, Metric and Imperial units are available").addDropdown((dropDown) => {
dropDown.addOption("standard", "Standard");
dropDown.addOption("metric", "Metric");
dropDown.addOption("imperial", "Imperial");
dropDown.onChange(async (value) => {
this.plugin.settings.units = value;
await this.plugin.saveSettings();
await this.plugin.updateWeather();
}).setValue(this.plugin.settings.units);
});
containerEl.createEl("br");
containerEl.createEl("h2", { text: "Folder to Exclude From Automatic Template Strings Replacement" });
new import_obsidian.Setting(containerEl).setName("Exclude Folder").setDesc("Folder to Exclude from Automatic Template String Replacement").addDropdown((dropDown) => {
folders.forEach((e) => {
dropDown.addOption(e.name, e.name);
});
dropDown.onChange(async (value) => {
this.plugin.settings.excludeFolder = value;
await this.plugin.saveSettings();
}).setValue(this.plugin.settings.excludeFolder);
});
containerEl.createEl("br");
containerEl.createEl("h2", { text: "Weather Strings Formatting (Up to 4 Strings are Available)" });
new import_obsidian.Setting(containerEl).setName("Weather String Format 1").setDesc("Weather string format one").addTextArea((textArea) => {
textArea.setPlaceholder("Weather String Format 1").setValue(this.plugin.settings.weatherFormat1).onChange(async (value) => {
this.plugin.settings.weatherFormat1 = value;
await this.plugin.saveSettings();
});
textArea.inputEl.setAttr("rows", 10);
textArea.inputEl.setAttr("cols", 60);
});
new import_obsidian.Setting(containerEl).setName("Weather String Format 2").setDesc("Weather string format two").addTextArea((textArea) => {
textArea.setPlaceholder("Weather String Format 2").setValue(this.plugin.settings.weatherFormat2).onChange(async (value) => {
this.plugin.settings.weatherFormat2 = value;
await this.plugin.saveSettings();
});
textArea.inputEl.setAttr("rows", 10);
textArea.inputEl.setAttr("cols", 60);
});
new import_obsidian.Setting(containerEl).setName("Weather String Format 3").setDesc("Weather string format three").addTextArea((textArea) => {
textArea.setPlaceholder("Weather String Format 3").setValue(this.plugin.settings.weatherFormat3).onChange(async (value) => {
this.plugin.settings.weatherFormat3 = value;
await this.plugin.saveSettings();
});
textArea.inputEl.setAttr("rows", 10);
textArea.inputEl.setAttr("cols", 60);
});
new import_obsidian.Setting(containerEl).setName("Weather String Format 4").setDesc("Weather string format four").addTextArea((textArea) => {
textArea.setPlaceholder("Weather String Format 4").setValue(this.plugin.settings.weatherFormat4).onChange(async (value) => {
this.plugin.settings.weatherFormat4 = value;
await this.plugin.saveSettings();
});
textArea.inputEl.setAttr("rows", 10);
textArea.inputEl.setAttr("cols", 60);
});
if (import_obsidian.Platform.isDesktop) {
containerEl.createEl("br");
containerEl.createEl("h2", { text: "Show Weather in Statusbar Options" });
new import_obsidian.Setting(containerEl).setName("Show Weather in Statusbar").setDesc("Enable weather display in statusbar").addToggle((toggle) => toggle.setValue(this.plugin.settings.statusbarActive).onChange(async (value) => {
this.plugin.settings.statusbarActive = value;
await this.plugin.saveSettings();
await this.plugin.updateWeather();
}));
new import_obsidian.Setting(containerEl).setName("Weather String Format Statusbar").setDesc("Weather string format for the statusbar").addTextArea((textArea) => {
textArea.setPlaceholder("Statusbar Weather Format").setValue(this.plugin.settings.weatherFormatSB).onChange(async (value) => {
this.plugin.settings.weatherFormatSB = value;
await this.plugin.saveSettings();
await this.plugin.updateWeather();
});
textArea.inputEl.setAttr("rows", 10);
textArea.inputEl.setAttr("cols", 60);
});
} else {
this.plugin.settings.statusbarActive = false;
}
containerEl.createEl("br");
containerEl.createEl("h2", { text: `Show Weather in Statusbar and Dynamic DIV's Delay` });
new import_obsidian.Setting(containerEl).setName("Update Frequency").setDesc("Update frequency for weather information displayed on the statusbar and dynamic DIV's").addDropdown((dropDown) => {
dropDown.addOption("1", "Every Minute");
dropDown.addOption("5", "Every 5 Minutes");
dropDown.addOption("10", "Every 10 Minutes");
dropDown.addOption("15", "Every 15 Minutes");
dropDown.addOption("20", "Every 20 Minutes");
dropDown.addOption("30", "Every 30 Minutes");
dropDown.addOption("60", "Every Hour");
dropDown.onChange(async (value) => {
this.plugin.settings.statusbarUpdateFreq = value;
await this.plugin.saveSettings();
await this.plugin.updateWeather();
}).setValue(this.plugin.settings.statusbarUpdateFreq);
});
}
};

@ -0,0 +1 @@
{"id":"obsidian-open-weather","name":"OpenWeather","version":"1.1.0","minAppVersion":"0.15.0","description":"This plugin returns the current weather from OpenWeather in a configurable string format.","author":"willasm","authorUrl":"https://github.com/willasm/obsidian-open-weather","isDesktopOnly":false}

@ -4,13 +4,24 @@
"openNewNote": false,
"youtubeNoteTitle": "Youtube - %title%",
"youtubeNote": "[[Youtube]]\n\n# [%videoTitle%](%videoURL%)\n\n%videoPlayer%",
"bilibiliNoteTitle": "Bilibili - %title%",
"bilibiliNote": "[[ReadItLater]] [[Bilibili]]\n\n# [%videoTitle%](%videoURL%)\n\n%videoPlayer%",
"twitterNoteTitle": "Tweet from %tweetAuthorName% (%date%)",
"twitterNote": "---\n\nAlias: [\"\"]\nTag: [\"\", \"\"]\nDate: <% tp.date.now(\"YYYY-MM-DD\") %>\nDocType: \"WebClipping\"\nHierarchy:\nTimeStamp: <% tp.date.now(\"YYYY-MM-DD\") %>\nLink: %tweetURL%\nlocation:\nCollapseMetaTable: true\n\n---\n\nParent:: [[Twitter]]\nRead:: No\n\n---\n\n&emsp;\n\n```button\nname Save\ntype command\naction Save current file\nid Save\n```\n^button-%tweetAuthorName%NSave\n\n&emsp;\n\n# %tweetAuthorName%\n\n%tweetContent%",
"twitterNote": "---\n\nAlias: [\"\"]\nTag: [\"\", \"\"]\nDate: <% tp.date.now(\"YYYY-MM-DD\") %>\nDocType: \"WebClipping\"\nHierarchy:\nTimeStamp: <% tp.date.now(\"YYYY-MM-DD\") %>\nLink: %tweetURL%\nlocation:\nCollapseMetaTable: true\n\n---\n\nParent:: [[Twitter]]\nRead:: 🟥\n\n---\n\n&emsp;\n\n```button\nname Save\ntype command\naction Save current file\nid Save\n```\n^button-%tweetAuthorName%NSave\n\n&emsp;\n\n# %tweetAuthorName%\n\n%tweetContent%",
"parseableArticleNoteTitle": "%title%",
"parsableArticleNote": "---\n\ndg-publish: true\nAlias: [\"\"]\nTag: [\"\", \"\"]\nDate: <% tp.date.now(\"YYYY-MM-DD\") %>\nDocType: \"WebClipping\"\nHierarchy:\nTimeStamp: <% tp.date.now(\"YYYY-MM-DD\") %>\nLink: %articleURL%\nlocation:\nCollapseMetaTable: true\n\n---\n\nParent:: [[@News|News]]\nRead:: No\n\n---\n\n&emsp;\n\n```button\nname Save\ntype command\naction Save current file\nid Save\n```\n^button-%articleTitle%NSave\n\n&emsp;\n\n# %articleTitle%\n\n%articleContent%\n\n&emsp;\n&emsp;\n\n---\n`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString(\"fr-FR\"))`",
"parsableArticleNote": "---\n\ndg-publish: true\nAlias: [\"\"]\nTag: [\"\", \"\"]\nDate: <% tp.date.now(\"YYYY-MM-DD\") %>\nDocType: \"WebClipping\"\nHierarchy:\nTimeStamp: <% tp.date.now(\"YYYY-MM-DD\") %>\nLink: %articleURL%\nlocation:\nCollapseMetaTable: true\n\n---\n\nParent:: [[@News|News]]\nRead:: 🟥\n\n---\n\n&emsp;\n\n```button\nname Save\ntype command\naction Save current file\nid Save\n```\n^button-%articleTitle%NSave\n\n&emsp;\n\n# %articleTitle%\n\n%articleContent%\n\n&emsp;\n&emsp;\n\n---\n`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString(\"fr-FR\"))`",
"notParseableArticleNoteTitle": "Article %date%",
"notParsableArticleNote": "---\n\nAlias: [\"\"]\nTag: [\"\", \"\"]\nDate: <% tp.date.now(\"YYYY-MM-DD\") %>\nDocType: \"WebClipping\"\nHierarchy:\nTimeStamp: <% tp.date.now(\"YYYY-MM-DD\") %>\nLink: %articleURL%\nlocation:\nCollapseMetaTable: true\n\n---\n\nParent:: [[@News|News]]\nRead:: No\n\n---\n\n&emsp;\n\n```button\nname Save\ntype command\naction Save current file\nid Save\n```\n^button-%articleURL%NSave\n\n&emsp;\n\n%articleURL%",
"notParsableArticleNote": "---\n\nAlias: [\"\"]\nTag: [\"\", \"\"]\nDate: <% tp.date.now(\"YYYY-MM-DD\") %>\nDocType: \"WebClipping\"\nHierarchy:\nTimeStamp: <% tp.date.now(\"YYYY-MM-DD\") %>\nLink: %articleURL%\nlocation:\nCollapseMetaTable: true\n\n---\n\nParent:: [[@News|News]]\nRead:: 🟥\n\n---\n\n&emsp;\n\n```button\nname Save\ntype command\naction Save current file\nid Save\n```\n^button-%articleURL%NSave\n\n&emsp;\n\n%articleURL%",
"textSnippetNoteTitle": "Notice %date%",
"textSnippetNote": "---\n\nAlias: [\"\"]\nTag: [\"\", \"\"]\nDate: <% tp.date.now(\"YYYY-MM-DD\") %>\nDocType: \"WebClipping\"\nHierarchy:\nTimeStamp: <% tp.date.now(\"YYYY-MM-DD\") %>\nLink:\nlocation:\nCollapseMetaTable: true\n\n---\n\nParent:: [[@News|News]]\nRead:: No\n\n---\n\n&emsp;\n\n```button\nname Save\ntype command\naction Save current file\nid Save\n```\n^button-%date%NSave\n\n&emsp;\n\n%content%",
"downloadImages": true
"textSnippetNote": "---\n\nAlias: [\"\"]\nTag: [\"\", \"\"]\nDate: <% tp.date.now(\"YYYY-MM-DD\") %>\nDocType: \"WebClipping\"\nHierarchy:\nTimeStamp: <% tp.date.now(\"YYYY-MM-DD\") %>\nLink:\nlocation:\nCollapseMetaTable: true\n\n---\n\nParent:: [[@News|News]]\nRead:: 🟥\n\n---\n\n&emsp;\n\n```button\nname Save\ntype command\naction Save current file\nid Save\n```\n^button-%date%NSave\n\n&emsp;\n\n%content%",
"mastodonNoteTitle": "Toot from %tootAuthorName% (%date%)",
"mastodonNote": "[[ReadItLater]] [[Toot]]\n\n# [%tootAuthorName%](%tootURL%)\n\n> %tootContent%",
"downloadImages": true,
"downloadImagesInArticleDir": false,
"dateTitleFmt": "YYYY-MM-DD HH-mm-ss",
"dateContentFmt": "YYYY-MM-DD",
"downloadMastodonMediaAttachments": true,
"downloadMastodonMediaAttachmentsInDir": false,
"saveMastodonReplies": false,
"mastodonReply": "[%tootAuthorName%](%tootURL%)\n\n> %tootContent%"
}

File diff suppressed because one or more lines are too long

@ -1,9 +1,9 @@
{
"id": "obsidian-read-it-later",
"name": "ReadItLater",
"version": "0.0.16",
"minAppVersion": "0.9.12",
"description": "Saves the clipboard to a new notice.",
"version": "0.1.0",
"minAppVersion": "0.15.9",
"description": "Saves the clipboard to a new note.",
"author": "Dominik Pieper",
"authorUrl": "https://github.com/DominikPieper",
"isDesktopOnly": false

@ -2,54 +2,59 @@
"scanned": true,
"reminders": {
"05.01 Computer setup/Storage and Syncing.md": [
{
"title": ":cloud: [[Storage and Syncing|Storage & Sync]]: Backup Volumes to [[Sync|Sync.com]] %%done_del%%",
"time": "2023-03-13",
"rowNumber": 186
},
{
"title": "Backup [[Storage and Syncing#Instructions for Anchor|Anchor Wallet]] %%done_del%%",
"time": "2023-01-05",
"rowNumber": 176
"time": "2023-04-06",
"rowNumber": 177
},
{
"title": ":cloud: [[Storage and Syncing|Storage & Sync]]: Backup Standard Notes (PC) %%done_del%%",
"time": "2023-01-06",
"time": "2023-04-07",
"rowNumber": 174
},
{
"title": ":floppy_disk: Backup [[Storage and Syncing#Instructions for FV|Folder Vault]] %%done_del%%",
"time": "2023-01-06",
"rowNumber": 180
"time": "2023-04-07",
"rowNumber": 183
},
{
"title": ":iphone: Backup [[Storage and Syncing#Instructions for iPhone|iPhone]] %%done_del%%",
"time": "2023-01-10",
"rowNumber": 178
"time": "2023-04-11",
"rowNumber": 180
},
{
"title": ":camera: [[Storage and Syncing|Storage & Sync]]: Transfer pictures to ED %%done_del%%",
"time": "2023-01-12",
"rowNumber": 185
},
{
"title": ":cloud: [[Storage and Syncing|Storage & Sync]]: Backup Volumes to [[Sync|Sync.com]] %%done_del%%",
"time": "2023-03-13",
"rowNumber": 182
"time": "2023-04-13",
"rowNumber": 189
}
],
"06.01 Finances/hLedger.md": [
{
"title": ":heavy_dollar_sign: [[hLedger]]: Update Price file",
"time": "2023-01-06",
"rowNumber": 395
"title": ":heavy_dollar_sign: [[hLedger]]: Update Price file %%done_del%%",
"time": "2023-04-07",
"rowNumber": 416
},
{
"title": ":heavy_dollar_sign: [[hLedger]]: Update current ledger %%done_del%%",
"time": "2023-04-07",
"rowNumber": 417
}
],
"05.02 Networks/Server Cloud.md": [
{
"title": ":cloud: [[Selfhosting]], [[Server Cloud|Cloud]]: Upgrader & Health checks %%done_del%%",
"time": "2023-01-01",
"rowNumber": 283
},
{
"title": ":cloud: [[Server Cloud]]: Backup server %%done_del%%",
"time": "2023-03-07",
"rowNumber": 281
},
{
"title": ":cloud: [[Selfhosting]], [[Server Cloud|Cloud]]: Upgrader & Health checks %%done_del%%",
"time": "2023-05-01",
"rowNumber": 283
}
],
"05.02 Networks/Server Alias.md": [
@ -65,31 +70,31 @@
}
],
"05.02 Networks/Server Tools.md": [
{
"title": ":hammer_and_wrench: [[Server Tools]]: Backup server %%done_del%%",
"time": "2023-04-04",
"rowNumber": 696
},
{
"title": ":closed_lock_with_key: [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Bitwarden & Health checks %%done_del%%",
"time": "2022-12-18",
"rowNumber": 709
"time": "2023-04-18",
"rowNumber": 708
},
{
"title": ":hammer_and_wrench: [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Standard Notes & Health checks %%done_del%%",
"time": "2023-01-18",
"time": "2023-05-18",
"rowNumber": 713
},
{
"title": ":desktop_computer: [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Gitea & Health checks %%done_del%%",
"time": "2023-02-18",
"rowNumber": 705
},
{
"title": ":hammer_and_wrench: [[Server Tools]]: Backup server %%done_del%%",
"time": "2023-04-04",
"rowNumber": 698
"time": "2023-06-18",
"rowNumber": 703
}
],
"05.02 Networks/Server VPN.md": [
{
"title": ":shield: [[Selfhosting]], [[Server VPN|VPN]]: Check VPN state & dashboard %%done_del%%",
"time": "2022-12-18",
"time": "2023-03-18",
"rowNumber": 293
},
{
@ -100,55 +105,60 @@
],
"04.01 lebv.org/Hosting Tasks.md": [
{
"title": ":fleur_de_lis: [[Hosting Tasks|Hosting]]: [[Hosting Tasks#Backup procedure|backup]] the DB & Files",
"time": "2023-01-04",
"rowNumber": 74
"title": ":fleur_de_lis: [[Hosting Tasks|Hosting]]: [[Hosting Tasks#Backup procedure|backup]] the DB & Files %%done_del%%",
"time": "2023-04-05",
"rowNumber": 71
},
{
"title": ":fleur_de_lis: [[Hosting Tasks|Hosting]]: [[Hosting Tasks#PHP versioning|check the PHP version]] server-side",
"time": "2023-01-04",
"rowNumber": 77
"title": ":fleur_de_lis: [[Hosting Tasks|Hosting]]: [[Hosting Tasks#PHP versioning|Check the php version]] of the website %%done_del%%",
"time": "2023-04-05",
"rowNumber": 72
},
{
"title": ":fleur_de_lis: [[Hosting Tasks|Hosting]]: Explore the possibility of webhosting through [[Hosting Tasks#Decentralised hosting|decentralised services]] (Blockchain)",
"time": "2023-12-31",
"rowNumber": 73
"rowNumber": 70
}
],
"04.01 lebv.org/WebPublishing Tasks.md": [
{
"title": ":fleur_de_lis: [[WebPublishing Tasks|Website]]: Upgrade UltimateMember to [[WebPublishing Tasks#UltimateMember Pro|Pro]]",
"time": "2023-06-30",
"rowNumber": 73
"rowNumber": 70
},
{
"title": ":fleur_de_lis: [[WebPublishing Tasks|Website]]: Replace integration with Discord with [[Element|Element.io]]",
"time": "2023-12-15",
"rowNumber": 74
"rowNumber": 71
}
],
"04.01 lebv.org/lebv Research Tasks.md": [
{
"title": ":fleur_de_lis: [[lebv Research Tasks|Research]]: <mark style=\"background:grey\">Lieux</mark>: que sont devenus Fleurimont & Le Pavillon aujourd'hui?",
"time": "2023-02-15",
"rowNumber": 72
"time": "2023-03-31",
"rowNumber": 69
},
{
"title": ":fleur_de_lis: [[lebv Research Tasks|Research]]: <mark style=\"background:grey\">membres de la famille</mark>: reprendre les citations militaires (promotion/décoration)",
"time": "2023-02-15",
"rowNumber": 73
"time": "2023-03-31",
"rowNumber": 70
},
{
"title": ":fleur_de_lis: [[lebv Research Tasks|Research]]: <mark style=\"Background:grey\">membres de la famille</mark>: éplucher les mentions du Nobiliaire de Guyenne & Gascogne",
"time": "2023-02-20",
"rowNumber": 74
"time": "2023-03-31",
"rowNumber": 71
}
],
"01.03 Family/Amaury de Villeneuve.md": [
{
"title": ":crown: Fête des pères %%done_del%%",
"time": "2023-06-18",
"rowNumber": 128
},
{
"title": ":birthday: **[[Amaury de Villeneuve|Papa]]** %%done_del%%",
"time": "2023-08-30",
"rowNumber": 103
"rowNumber": 125
}
],
"01.03 Family/Laurence Bédier.md": [
@ -156,137 +166,142 @@
"title": ":birthday: **[[Laurence Bédier|Maman]]** %%done_del%%",
"time": "2023-09-04",
"rowNumber": 105
},
{
"title": ":crown: Fête des mères %%done_del%%",
"time": "2023-06-04",
"rowNumber": 107
}
],
"01.03 Family/Noémie de Villeneuve.md": [
{
"title": ":birthday: **[[Noémie de Villeneuve|Noémie]]**",
"title": ":birthday: **[[Noémie de Villeneuve|Noémie]]** %%done_del%%",
"time": "2023-06-20",
"rowNumber": 105
}
],
"01.03 Family/Marguerite de Villeneuve.md": [
{
"title": ":birthday: **[[Marguerite de Villeneuve|Marguerite]]**",
"title": ":birthday: **[[Marguerite de Villeneuve|Marguerite]]** %%done_del%%",
"time": "2023-05-02",
"rowNumber": 105
}
],
"01.03 Family/Eloi de Villeneuve.md": [
{
"title": ":birthday: **[[Eloi de Villeneuve|Éloi]]**",
"title": ":birthday: **[[Eloi de Villeneuve|Éloi]]** %%done_del%%",
"time": "2023-05-09",
"rowNumber": 105
"rowNumber": 100
}
],
"01.03 Family/Philomène de Villeneuve.md": [
{
"title": ":birthday: **[[Philomène de Villeneuve|Philomène]]**",
"title": ":birthday: **[[Philomène de Villeneuve|Philomène]]** %%done_del%%",
"time": "2023-04-18",
"rowNumber": 105
}
],
"01.03 Family/Opportune de Villeneuve.md": [
{
"title": ":birthday: **[[Opportune de Villeneuve|Opportune]]**",
"title": ":birthday: **[[Opportune de Villeneuve|Opportune]]** %%done_del%%",
"time": "2023-07-14",
"rowNumber": 105
}
],
"01.03 Family/Séraphine Priso Le Bastart.md": [
{
"title": ":birthday: **[[Séraphine Priso Le Bastart|Séraphine]]**",
"title": ":birthday: **[[Séraphine Priso Le Bastart|Séraphine]]** %%done_del%%",
"time": "2023-11-27",
"rowNumber": 100
}
],
"01.03 Family/Evrard de Villeneuve.md": [
{
"title": ":birthday: **[[Evrard de Villeneuve|Évrard]]**",
"title": ":birthday: **[[Evrard de Villeneuve|Évrard]]** %%done_del%%",
"time": "2023-10-14",
"rowNumber": 105
}
],
"01.03 Family/Hortense de Villeneuve.md": [
{
"title": ":birthday: **[[Hortense de Villeneuve|Hortense BV]]**",
"time": "2023-02-27",
"title": ":birthday: **[[Hortense de Villeneuve|Hortense BV]]** %%done_del%%",
"time": "2024-02-27",
"rowNumber": 105
}
],
"01.03 Family/Marc de Villeneuve.md": [
{
"title": ":birthday: **[[Marc de Villeneuve|Marc BV]]**",
"title": ":birthday: **[[Marc de Villeneuve|Marc BV]]** %%done_del%%",
"time": "2023-12-04",
"rowNumber": 105
}
],
"01.03 Family/Quentin de Villeneuve.md": [
{
"title": ":birthday: **[[Quentin de Villeneuve|Quentin BV]]**",
"title": ":birthday: **[[Quentin de Villeneuve|Quentin BV]]** %%done_del%%",
"time": "2023-04-21",
"rowNumber": 105
}
],
"01.03 Family/Armand de Villeneuve.md": [
{
"title": ":birthday: **[[Armand de Villeneuve|Armand BV]]**",
"time": "2023-01-03",
"title": ":birthday: **[[Armand de Villeneuve|Armand BV]]** %%done_del%%",
"time": "2024-01-03",
"rowNumber": 105
}
],
"01.03 Family/Pierre Bédier.md": [
{
"title": ":birthday: **[[Pierre Bédier|Bon Papa]]**",
"title": ":birthday: **[[Pierre Bédier|Bon Papa]]** %%done_del%%",
"time": "2023-12-07",
"rowNumber": 106
}
],
"01.03 Family/Jacqueline Bédier.md": [
{
"title": ":birthday: **[[Jacqueline Bédier|Bonne Maman]]**",
"title": ":birthday: **[[Jacqueline Bédier|Bonne Maman]]** %%done_del%%",
"time": "2023-07-13",
"rowNumber": 105
}
],
"01.03 Family/Jérôme Bédier.md": [
{
"title": ":birthday: **[[Jérôme Bédier|Jérôme]]**",
"time": "2023-01-14",
"title": ":birthday: **[[Jérôme Bédier|Jérôme]]** %%done_del%%",
"time": "2024-01-14",
"rowNumber": 105
}
],
"01.03 Family/Joséphine Bédier.md": [
{
"title": ":birthday: **[[Joséphine Bédier|Joséphine]]**",
"time": "2023-01-21",
"title": ":birthday: **[[Joséphine Bédier|Joséphine]]** %%done_del%%",
"time": "2024-01-21",
"rowNumber": 105
}
],
"01.03 Family/Louis Bédier.md": [
{
"title": ":birthday: **[[Louis Bédier|Louis]]**",
"title": ":birthday: **[[Louis Bédier|Louis]]** %%done_del%%",
"time": "2023-03-31",
"rowNumber": 106
}
],
"01.03 Family/Gabrielle Bédier.md": [
{
"title": ":birthday: **[[Gabrielle Bédier|Gabrielle]]**",
"title": ":birthday: **[[Gabrielle Bédier|Gabrielle]]** %%done_del%%",
"time": "2023-11-12",
"rowNumber": 105
}
],
"01.03 Family/Hortense Bédier.md": [
{
"title": ":birthday: **[[Hortense Bédier|Hortense]]**",
"title": ":birthday: **[[Hortense Bédier|Hortense]]** %%done_del%%",
"time": "2023-05-19",
"rowNumber": 105
}
],
"01.03 Family/Olympe Bédier.md": [
{
"title": ":birthday: **[[Olympe Bédier|Olympe]]**",
"title": ":birthday: **[[Olympe Bédier|Olympe]]** %%done_del%%",
"time": "2023-10-14",
"rowNumber": 105
}
@ -300,7 +315,7 @@
],
"01.03 Family/Isaure Bédier.md": [
{
"title": ":birthday: **[[Isaure Bédier|Isaure]]**",
"title": ":birthday: **[[Isaure Bédier|Isaure]]** %%done_del%%",
"time": "2023-04-21",
"rowNumber": 105
}
@ -328,53 +343,43 @@
],
"01.03 Family/Auguste Bédier.md": [
{
"title": ":birthday: **[[Auguste Bédier|Auguste]]**",
"title": ":birthday: **[[Auguste Bédier|Auguste]]** %%done_del%%",
"time": "2023-09-30",
"rowNumber": 105
}
],
"01.03 Family/Eustache Bédier.md": [
{
"title": ":birthday: **[[Eustache Bédier|Eustache]]**",
"title": ":birthday: **[[Eustache Bédier|Eustache]]** %%done_del%%",
"time": "2023-12-08",
"rowNumber": 105
}
],
"01.02 Home/Household.md": [
{
"title": "♻ [[Household]]: *Cardboard* recycling collection %%done_del%%",
"time": "2023-03-07",
"rowNumber": 79
},
{
"title": "🛎 🧻 REMINDER [[Household]]: check need for toilet paper %%done_del%%",
"time": "2022-12-19",
"rowNumber": 88
"time": "2023-03-13",
"rowNumber": 91
},
{
"title": "♻ [[Household]]: *Paper* recycling collection %%done_del%%",
"time": "2022-12-20",
"time": "2023-03-14",
"rowNumber": 75
},
{
"title": ":bed: [[Household]] Change bedsheets %%done_del%%",
"time": "2022-12-24",
"rowNumber": 91
},
{
"title": "♻ [[Household]]: *Cardboard* recycling collection %%done_del%%",
"time": "2022-12-27",
"rowNumber": 77
},
{
"title": ":couch_and_lamp: [[Household]]: Replace the sofa",
"time": "2022-12-31",
"rowNumber": 59
},
{
"title": "🛎️ 💵 [[Household]]: Pay rent %%done_del%%",
"time": "2022-12-31",
"rowNumber": 85
"time": "2023-03-18",
"rowNumber": 97
},
{
"title": "🛎 🛍 REMINDER [[Household]]: Monthly shop in France %%done_del%%",
"time": "2022-12-31",
"rowNumber": 87
"time": "2023-03-25",
"rowNumber": 89
},
{
"title": ":coffee: [[Household]]: Buy a Cappuccino machine",
@ -385,44 +390,69 @@
"title": ":bed: [[Household]]: Buy bed-side tables",
"time": "2023-03-31",
"rowNumber": 60
},
{
"title": "🛎️ :house: [[Household]]: Pay rent %%done_del%%",
"time": "2023-03-31",
"rowNumber": 87
},
{
"title": ":couch_and_lamp: [[Household]]: Replace the sofa",
"time": "2023-06-30",
"rowNumber": 59
}
],
"01.03 Family/Pia Bousquié.md": [
{
"title": ":birthday: **[[Pia Bousquié|Pia]]**",
"time": "2023-01-17",
"title": ":birthday: **[[Pia Bousquié|Pia]]** %%done_del%%",
"time": "2024-01-17",
"rowNumber": 103
}
],
"01.03 Family/Thaïs Bédier.md": [
{
"title": ":birthday: **[[Thaïs Bédier|Thaïs]]**",
"time": "2023-02-06",
"title": ":birthday: **[[Thaïs Bédier|Thaïs]]** %%done_del%%",
"time": "2024-02-06",
"rowNumber": 105
}
],
"01.01 Life Orga/@Finances.md": [
{
"title": ":heavy_dollar_sign: [[@Finances]]: update crypto prices within Obsidian",
"time": "2023-01-10",
"rowNumber": 118
"title": ":heavy_dollar_sign: [[@Finances|Finances]]: update crypto prices within Obsidian %%done_del%%",
"time": "2023-03-14",
"rowNumber": 113
},
{
"title": ":moneybag: [[@Finances]]: Transfer UK pension to CH %%done_del%%",
"time": "2023-10-31",
"rowNumber": 112
},
{
"title": ":heavy_dollar_sign: [[@Finances|Finances]]: Close yearly accounts %%done_del%%",
"time": "2024-01-07",
"rowNumber": 115
},
{
"title": ":heavy_dollar_sign: [[@Finances|Finances]]: Swiss tax self declaration %%done_del%%",
"time": "2024-01-07",
"rowNumber": 116
}
],
"01.01 Life Orga/@Personal projects.md": [
{
"title": ":art: Continuer à construire un petit trousseau d'[[@Personal projects#art|art]]",
"time": "2023-02-21",
"rowNumber": 76
"title": "🖋 Caligraph & frame life mementos",
"time": "2023-06-30",
"rowNumber": 77
},
{
"title": ":fleur_de_lis: Continue [[@lebv.org Tasks|lebv.org]]",
"time": "2023-02-28",
"time": "2023-09-28",
"rowNumber": 78
},
{
"title": "🖋 Caligraph & frame life mementos",
"time": "2023-06-30",
"rowNumber": 77
"title": ":art: Continuer à construire un petit trousseau d'[[@Personal projects#art|art]]",
"time": "2023-12-21",
"rowNumber": 76
},
{
"title": ":fleur_de_lis: Refaire [[@Personal projects#Chevalière|chevalière]] (Bastard & Flourville)",
@ -430,54 +460,40 @@
"rowNumber": 75
}
],
"01.03 Family/Aglaé de Villeneuve.md": [
{
"title": ":birthday: **[[Aglaé de Villeneuve|Aglaé]]**",
"time": "2023-02-25",
"rowNumber": 100
}
],
"01.03 Family/Elise Bédier.md": [
{
"title": ":birthday: **[[Elise Bédier|Élise]]**",
"time": "2023-02-28",
"title": ":birthday: **[[Elise Bédier|Élise]]** %%done_del%%",
"time": "2024-02-28",
"rowNumber": 105
}
],
"06.02 Investments/Crypto Tasks.md": [
{
"title": ":ballot_box: [[Crypto Tasks]]: Vote for [[EOS]] block producers %%done_del%%",
"time": "2023-01-03",
"rowNumber": 75
"time": "2023-03-07",
"rowNumber": 72
},
{
"title": ":chart: Check [[Nimbus]] earnings %%done_del%%",
"time": "2023-01-09",
"rowNumber": 76
"time": "2023-03-13",
"rowNumber": 75
}
],
"05.02 Networks/Configuring UFW.md": [
{
"title": "🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix %%done_del%%",
"time": "2022-12-17",
"time": "2023-03-11",
"rowNumber": 239
},
{
"title": "🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list",
"time": "2022-12-17",
"rowNumber": 286
}
],
"00.01 Admin/Calendars/2022-01-22.md": [
{
"title": "22:46 :moneybag: [[2022-01-22|Memo]], [[@Finances]]: GBP account re moving to ZH",
"time": "2022-12-30",
"rowNumber": 87
"title": "🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list %%done_del%%",
"time": "2023-03-11",
"rowNumber": 245
}
],
"01.03 Family/Amélie Solanet.md": [
{
"title": ":birthday: **[[Amélie Solanet|Amélie]]**",
"title": ":birthday: **[[Amélie Solanet|Amélie]]** %%done_del%%",
"time": "2023-06-27",
"rowNumber": 100
}
@ -489,59 +505,38 @@
"rowNumber": 169
}
],
"00.01 Admin/Calendars/2022-08-22.md": [
{
"title": "16:14 :ring: [[@life admin|Life]], [[@@MRCK|Meggi-mo]]: find a ring",
"time": "2023-06-30",
"rowNumber": 89
}
],
"00.01 Admin/Calendars/2022-08-25.md": [
{
"title": "13:01 :soccer: [[2022-08-25|Memo]], [[@Sport Zürich|Sport in Zürich]]: go to see the FC Zürich",
"time": "2023-02-27",
"rowNumber": 90
}
],
"00.01 Admin/Calendars/2022-08-26.md": [
{
"title": "12:24 :racing_car: [[2022-08-26|Memo]], [[@Lifestyle|Lifestyle]]: organise F1 Grand Prix around CH",
"time": "2023-03-31",
"rowNumber": 90
}
],
"00.08 Bookmarks/Bookmarks - Media.md": [
{
"title": ":label: [[Bookmarks - Media]]: review bookmarls",
"time": "2023-02-07",
"time": "2023-05-07",
"rowNumber": 80
}
],
"00.08 Bookmarks/Bookmarks - Admin & services.md": [
{
"title": ":label: [[Bookmarks - Admin & services]]: Review bookmarks",
"time": "2023-01-30",
"rowNumber": 129
"time": "2023-04-30",
"rowNumber": 96
}
],
"00.08 Bookmarks/Bookmarks - Obsidian.md": [
{
"title": ":label: [[Bookmarks - Obsidian]]: Review bookmarks",
"time": "2023-02-15",
"rowNumber": 297
"time": "2023-05-15",
"rowNumber": 319
}
],
"00.08 Bookmarks/Bookmarks - Selfhosted Apps.md": [
{
"title": ":label: [[Bookmarks - Selfhosted apps]]: Review bookmarks",
"time": "2023-02-22",
"time": "2023-05-22",
"rowNumber": 196
}
],
"00.08 Bookmarks/Bookmarks - Utilities.md": [
{
"title": ":label: [[Bookmarks - Utilities]]: review bookmarks",
"time": "2023-03-02",
"time": "2023-06-02",
"rowNumber": 172
}
],
@ -549,7 +544,7 @@
{
"title": ":label: [[Bookmarks - Mac applications]]: review bookmarks",
"time": "2023-03-09",
"rowNumber": 82
"rowNumber": 93
}
],
"00.08 Bookmarks/Bookmarks - Work.md": [
@ -561,19 +556,34 @@
],
"01.04 MRCK/@@MRCK.md": [
{
"title": ":birthday: **[[@@MRCK|Meggi-mo]]'s Papa** (1962)",
"time": "2023-02-02",
"rowNumber": 282
"title": "☘️ [[@@MRCK|Meggi-mo]] **Saint Patrick's Day** %%done_del%%",
"time": "2023-03-17",
"rowNumber": 297
},
{
"title": ":birthday: **[[@@MRCK|Meggi-mo]]**",
"time": "2023-02-28",
"rowNumber": 280
"title": "💍 [[@@MRCK|Meggi-mo]]: Start looking for a ring",
"time": "2023-06-30",
"rowNumber": 265
},
{
"title": "[[@@MRCK|Meggi-mo]] Saint Patrick's Day",
"time": "2023-03-17",
"rowNumber": 284
"title": ":birthday: **[[@@MRCK|Meggi-mo]]s Mama** (1952) %%done_del%%",
"time": "2024-01-10",
"rowNumber": 296
},
{
"title": ":birthday: **[[@@MRCK|Meggi-mo]]'s Papa** (1962) %%done_del%%",
"time": "2024-02-02",
"rowNumber": 295
},
{
"title": "👑 [[@@MRCK|Meggi-mo]] **Valentines Day** %%done_del%%",
"time": "2024-02-14",
"rowNumber": 298
},
{
"title": ":birthday: **[[@@MRCK|Meggi-mo]]** %%done_del%%",
"time": "2024-02-28",
"rowNumber": 293
}
],
"00.08 Bookmarks/Bookmarks - Travels & Sport.md": [
@ -590,25 +600,181 @@
"rowNumber": 113
}
],
"00.01 Admin/Calendars/2022-12-14.md": [
"02.02 Paris/@@Paris.md": [
{
"title": ":birthday: **Virginie Parent**, [[@@Paris|Paris]] %%done_del%%",
"time": "2023-12-12",
"rowNumber": 116
}
],
"00.01 Admin/Calendars/2022-08-22.md": [
{
"title": "16:14 :ring: [[@life admin|Life]], [[@@MRCK|Meggi-mo]]: find a ring",
"time": "2023-06-30",
"rowNumber": 89
}
],
"00.01 Admin/Calendars/2022-08-26.md": [
{
"title": "12:24 :racing_car: [[2022-08-26|Memo]], [[@Lifestyle|Lifestyle]]: organise F1 Grand Prix around CH (Austria)",
"time": "2023-12-28",
"rowNumber": 90
}
],
"00.01 Admin/Calendars/2023-01-03.md": [
{
"title": "16:26 :car: [[@Life admin|Admin]], [[2022-12-14|Memo]]: replace windscreen wipers & cleaning liquid",
"time": "2022-12-31",
"title": "10:30 :bed: [[2023-01-03|Memo]], [[@Life Admin|Admin]], [[@@MRCK|Meggi]]: Replace the bed",
"time": "2023-12-31",
"rowNumber": 84
},
{
"title": "10:31 :tooth: [[2023-01-03|Memo]], [[@Life Admin|Admin]]: Find a dentist",
"time": "2023-03-31",
"rowNumber": 85
},
{
"title": "10:35 :chair: [[2023-01-03|Memo]], [[@Life Admin|Admin]], [[@@MRCK|Meggi]]: Find a person to repair Meggi's chair",
"time": "2023-03-31",
"rowNumber": 88
},
{
"title": "10:42 :desktop_computer: [[2023-01-03|Memo]], [[@IT & Computer|IT]]: Re-deploy my Tools server",
"time": "2023-03-31",
"rowNumber": 89
},
{
"title": "10:43 :tornado: [[2023-01-03|Memo]], [[@Life Admin|Admin]]: Sort out 🌬",
"time": "2023-03-31",
"rowNumber": 90
},
{
"title": "11:03 🍽 [[2023-01-03|Memo]], [[@Life Admin|Admin]], [[@@MRCK|Meggi]]: Find a dining table",
"time": "2023-06-30",
"rowNumber": 91
},
{
"title": "11:27 :coat: [[2023-01-03|Memo]], [[@Lifestyle|Lifestyle]]: Find a winter coat (sporty)",
"time": "2023-04-30",
"rowNumber": 93
},
{
"title": "13:08 🛞 [[2023-01-03|Memo]], [[@Life Admin|Admin]]: Buy summer tires",
"time": "2023-03-31",
"rowNumber": 97
},
{
"title": "16:26 :hiking_boot: [[2023-01-03|Memo]], [[@Lifestyle|Lifestyle]]: Find a pair of winter boots",
"time": "2023-03-31",
"rowNumber": 98
}
],
"00.01 Admin/Calendars/2022-12-15.md": [
"01.01 Life Orga/@Life Admin.md": [
{
"title": "12:16 :moneybag: [[2022-12-15|Memo]], [[@Investment master|Investment]], [[Equity Investments|Equity]]: liquidate Saxo account positions",
"time": "2022-12-26",
"rowNumber": 83
"title": ":scissors: [[@Life Admin|Life Admin]]: Cut hair %%done_del%%",
"time": "2023-04-08",
"rowNumber": 128
}
],
"02.02 Paris/@@Paris.md": [
"00.01 Admin/Calendars/2023-01-04.md": [
{
"title": ":birthday: **Virginie Parent**, [[@@Paris|Paris]] %%done_del%%",
"time": "2023-12-12",
"rowNumber": 115
"title": "12:57 :stopwatch: [[2023-01-04|Memo]], [[@Lifestyle|Lifestyle]]: Buy the Watch Winder machine",
"time": "2023-07-01",
"rowNumber": 86
}
],
"02.01 London/@@London.md": [
{
"title": ":birthday: **Stefan Schmidt**, [[@@London|London]] %%done_del%%",
"time": "2023-06-29",
"rowNumber": 118
},
{
"title": ":birthday: **Alex Houyvet**, [[@@London|London]] %%done_del%%",
"time": "2023-07-13",
"rowNumber": 119
}
],
"01.02 Home/Real Estate.md": [
{
"title": "🏡 [[Real Estate|RE Project]]: Get an appointment with [[@@MRCK|Meggi-mo]] with UBS on mortgages",
"time": "2023-03-31",
"rowNumber": 63
}
],
"01.01 Life Orga/@Lifestyle.md": [
{
"title": "🤵🏻 [[@Lifestyle|Lifestyle]]: Etre plus social",
"time": "2023-12-31",
"rowNumber": 79
},
{
"title": "🏃🏻‍♂️ [[@Lifestyle|Lifestyle]]: Etre plus actif & plus sain",
"time": "2023-12-31",
"rowNumber": 80
}
],
"06.02 Investments/Equity Tasks.md": [
{
"title": "📊 Review holdings of UBS Savings account",
"time": "2023-06-30",
"rowNumber": 70
},
{
"title": "📊 Re-open Equity positions",
"time": "2024-03-31",
"rowNumber": 69
}
],
"00.01 Admin/Calendars/2023-02-01.md": [
{
"title": "12:29 :moneybag: [[2023-02-01|Memo]], [[@Finances|Finances]]: Tax declaration 2022",
"time": "2023-03-15",
"rowNumber": 103
}
],
"00.01 Admin/Calendars/2023-02-17.md": [
{
"title": "17:33 👰‍♀️ [[2023-02-17|Memo]]: Répondre à l'invitation de marige de JB & Camila",
"time": "2023-03-04",
"rowNumber": 103
}
],
"00.01 Admin/Calendars/2023-02-18.md": [
{
"title": "18:18 :crocodile: [[2023-02-18|Memo]], [[Miami]]: Book a NYE party",
"time": "2023-05-31",
"rowNumber": 104
},
{
"title": "18:05 :crocodile: [[2023-02-18|Memo]], [[Miami]]: Look for sporting events to book",
"time": "2023-07-31",
"rowNumber": 103
},
{
"title": "19:02 :crocodile: :passport_control: [[2023-02-18|Memo]], [[Miami]]: Apply for ESTA visa",
"time": "2023-12-15",
"rowNumber": 105
}
],
"00.01 Admin/Calendars/2023-02-20.md": [
{
"title": "12:54 :crocodile: :racing_car: [[2023-02-20|Memo]], [[Miami]]: pay for the rental car",
"time": "2023-03-27",
"rowNumber": 103
}
],
"01.03 Family/Aglaé de Villeneuve.md": [
{
"title": ":birthday: **[[Aglaé de Villeneuve|Aglaé]]** %%done_del%%",
"time": "2024-02-25",
"rowNumber": 100
}
],
"00.01 Admin/Calendars/2023-03-03.md": [
{
"title": "16:32 :cat2: [[2023-03-03|Memo]], [[Pet note|Pet]]: Tell Wincasa about the arrival of the kitten in June",
"time": "2023-03-31",
"rowNumber": 106
}
]
},

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "obsidian-sortable",
"name": "Sortable",
"version": "0.2.6",
"version": "0.3.1",
"minAppVersion": "0.12.0",
"description": "Wiki-like table sorting.",
"author": "Alexandru Dinu",

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "obsidian-style-settings",
"name": "Style Settings",
"version": "0.4.12",
"version": "1.0.3",
"minAppVersion": "0.11.5",
"description": "Offers controls for adjusting theme, plugin, and snippet CSS variables.",
"author": "mgmeyers",

File diff suppressed because one or more lines are too long

@ -1,15 +0,0 @@
{
"completedAreaHeader": "### Completed to-dos",
"removeExpression": "",
"appendDateFormat": "",
"incompleteTaskValues": " ",
"supportCanceledTasks": true,
"rightClickComplete": false,
"rightClickMark": false,
"rightClickMove": true,
"rightClickReset": false,
"rightClickResetTask": false,
"rightClickResetAll": false,
"rightClickToggleAll": false,
"completedAreaRemoveCheckbox": false
}

@ -1,765 +0,0 @@
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
var __export = (target, all) => {
__markAsModule(target);
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __reExport = (target, module2, desc) => {
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
for (let key of __getOwnPropNames(module2))
if (!__hasOwnProp.call(target, key) && key !== "default")
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
}
return target;
};
var __toModule = (module2) => {
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
};
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());
});
};
// src/main.ts
__export(exports, {
default: () => main_default
});
// src/taskcollector-Plugin.ts
var import_obsidian4 = __toModule(require("obsidian"));
// src/taskcollector-TaskCollector.ts
var import_obsidian = __toModule(require("obsidian"));
var TaskCollector = class {
constructor(app) {
this.app = app;
this.app = app;
this.anyListItem = new RegExp(/^([\s>]*- )([^\\[].*)$/);
this.anyTaskMark = new RegExp(/^([\s>]*- \[).(\] .*)$/);
this.blockQuote = new RegExp(/^(\s*>[\s>]*)(.*)$/);
this.blockRef = new RegExp(/^(.*?)( \^[A-Za-z0-9-]+)?$/);
this.continuation = new RegExp(/^( {2,}|\t)/);
this.stripTask = new RegExp(/^([\s>]*-) \[.\] (.*)$/);
}
updateSettings(settings) {
this.settings = settings;
let momentMatchString = null;
if (settings.appendDateFormat) {
const literals = [];
const regex1 = RegExp("(\\[.*?\\]\\]?)", "g");
let match;
let i = 0;
momentMatchString = settings.appendDateFormat;
while ((match = regex1.exec(momentMatchString)) !== null) {
momentMatchString = momentMatchString.replace(match[0], `%$${i}$%`);
literals.push(match[0].substring(1, match[0].length - 1).replace(/\(/g, "\\(").replace(/\)/g, "\\)").replace(/\[/g, "\\[").replace(/\]/g, "\\]"));
i++;
}
momentMatchString = momentMatchString.replace("YYYY", "\\d{4}").replace("YY", "\\d{2}").replace("DD", "\\d{2}").replace("D", "\\d{1,2}").replace("MMM", "[A-Za-z]{3}").replace("MM", "\\d{2}").replace("M", "\\d{1,2}").replace("HH", "\\d{2}").replace("H", "\\d{1,2}").replace("hh", "\\d{2}").replace("h", "\\d{1,2}").replace("mm", "\\d{2}").replace("m", "\\d{1,2}");
if (literals.length > 0) {
for (let i2 = 0; i2 < literals.length; i2++) {
momentMatchString = momentMatchString.replace(`%$${i2}$%`, literals[i2]);
}
}
}
const completedTasks = (this.settings.onlyLowercaseX ? "x" : "xX") + (this.settings.supportCanceledTasks ? "-" : "");
if (this.settings.incompleteTaskValues.indexOf(" ") < 0) {
this.settings.incompleteTaskValues = " " + this.settings.incompleteTaskValues;
}
const rightClickTaskMenu = this.settings.rightClickComplete || this.settings.rightClickMark || this.settings.rightClickMove || this.settings.rightClickResetTask || this.settings.rightClickResetAll || this.settings.rightClickToggleAll;
this.initSettings = {
removeRegExp: this.tryCreateRemoveRegex(this.settings.removeExpression),
resetRegExp: this.tryCreateResetRegex(momentMatchString),
incompleteTaskRegExp: this.tryCreateIncompleteRegex(this.settings.incompleteTaskValues),
rightClickTaskMenu,
completedTasks,
completedTaskRegExp: this.tryCreateCompleteRegex(completedTasks)
};
console.debug("TC: updated configuration %o, %o", this.settings, this.initSettings);
}
tryCreateRemoveRegex(param) {
return param ? new RegExp(param, "g") : null;
}
tryCreateResetRegex(param) {
return param ? new RegExp(param + "( \\^[A-Za-z0-9-]+)?$") : null;
}
tryCreateCompleteRegex(param) {
return new RegExp(`^([\\s>]*- \\[)[${param}](\\] .*)$`);
}
tryCreateIncompleteRegex(param) {
return new RegExp(`^([\\s>]*- \\[)[${param}](\\] .*)$`);
}
removeCheckboxFromLine(lineText) {
return lineText.replace(this.stripTask, "$1 $2");
}
completeTaskLine(lineText, mark) {
let marked = lineText.replace(this.initSettings.incompleteTaskRegExp, "$1" + mark + "$2");
if (this.initSettings.removeRegExp) {
marked = marked.replace(this.initSettings.removeRegExp, "");
}
if (this.settings.appendDateFormat) {
const strictLineEnding = lineText.endsWith(" ");
let blockid = "";
const match = this.blockRef.exec(marked);
if (match && match[2]) {
marked = match[1];
blockid = match[2];
}
if (!marked.endsWith(" ")) {
marked += " ";
}
marked += (0, import_obsidian.moment)().format(this.settings.appendDateFormat) + blockid;
if (strictLineEnding) {
marked += " ";
}
}
return marked;
}
completeEditorLineTask(editor, mark, i) {
const lineText = editor.getLine(i);
const incompleteTask = this.initSettings.incompleteTaskRegExp.exec(lineText);
if (incompleteTask) {
const marked = this.completeTaskLine(lineText, mark);
editor.setLine(i, marked);
}
}
markAllTasksComplete(source, mark) {
const lines = source.split("\n");
const result = [];
for (const line of lines) {
if (this.initSettings.incompleteTaskRegExp.exec(line)) {
result.push(this.completeTaskLine(line, mark));
} else {
result.push(line);
}
}
return result.join("\n");
}
markTaskInSource(source, mark, lines = []) {
const split = source.split("\n");
for (const n of lines) {
if (!this.anyTaskMark.test(split[n])) {
const match = this.anyListItem.exec(split[n]);
if (match && match[2]) {
console.debug("TC: list item, convert to a task %s", split[n]);
split[n] = match[1] + "[ ] " + match[2];
} else {
console.debug("TC: not a task or list item %s", split[n]);
continue;
}
}
if (this.initSettings.completedTasks.indexOf(mark) >= 0) {
if (this.isIncompleteTaskLine(split[n])) {
console.debug("TC: complete task with %s: %s", mark, split[n]);
split[n] = this.completeTaskLine(split[n], mark);
} else {
console.debug("TC: task already completed (%s): %s", mark, split[n]);
}
} else if (this.settings.incompleteTaskValues.indexOf(mark) >= 0) {
console.debug("TC: reset task with %s: %s", mark, split[n]);
split[n] = this.resetTaskLine(split[n], mark);
} else if (mark === "Backspace") {
split[n] = this.removeCheckboxFromLine(split[n]);
} else {
console.debug("TC: unrecognized mark %s, check configuration settings", mark);
}
}
return split.join("\n");
}
resetTaskLine(lineText, mark = " ") {
let marked = lineText.replace(this.anyTaskMark, "$1" + mark + "$2");
const strictLineEnding = lineText.endsWith(" ");
let blockid = "";
const match = this.blockRef.exec(marked);
if (match && match[2]) {
marked = match[1];
blockid = match[2];
}
if (this.initSettings.resetRegExp) {
marked = marked.replace(this.initSettings.resetRegExp, "");
}
marked = marked.replace(/\s*$/, blockid);
if (strictLineEnding) {
marked += " ";
}
return marked;
}
resetTaskOnLine(editor, i, mark) {
const lineText = editor.getLine(i);
const marked = this.resetTaskLine(lineText, mark);
editor.setLine(i, marked);
}
resetAllTasks(source) {
const LOG_HEADING = this.settings.completedAreaHeader || "## Log";
const lines = source.split("\n");
const result = [];
let inCompletedSection = false;
for (const line of lines) {
if (inCompletedSection) {
if (line.startsWith("#") || line.trim() === "---") {
inCompletedSection = false;
}
result.push(line);
} else if (line.trim() === LOG_HEADING) {
inCompletedSection = true;
result.push(line);
} else if (this.isCompletedTaskLine(line)) {
result.push(this.resetTaskLine(line));
} else {
result.push(line);
}
}
return result.join("\n");
}
moveCompletedTasksInFile(source) {
const LOG_HEADING = this.settings.completedAreaHeader || "## Log";
const lines = source.split("\n");
if (source.indexOf(LOG_HEADING) < 0) {
if (lines[lines.length - 1].trim() !== "") {
lines.push("");
}
lines.push(LOG_HEADING);
}
const remaining = [];
const completedSection = [];
const newTasks = [];
let inCompletedSection = false;
let inTask = false;
let inCallout = false;
let completedItemsIndex = lines.length;
for (let line of lines) {
if (inCompletedSection) {
if (line.startsWith("#") || line.trim() === "---") {
inCompletedSection = false;
remaining.push(line);
} else {
completedSection.push(line);
}
} else if (line.trim() === LOG_HEADING) {
inCompletedSection = true;
completedItemsIndex = remaining.push(line);
remaining.push("%%%COMPLETED_ITEMS_GO_HERE%%%");
} else {
if (this.isCompletedTaskLine(line)) {
if (this.settings.completedAreaRemoveCheckbox) {
line = this.removeCheckboxFromLine(line);
}
inTask = true;
inCallout = this.isCallout(line);
newTasks.push(line);
} else if (inTask && !this.isTaskLine(line) && this.isContinuation(line, inCallout)) {
newTasks.push(line);
} else {
inTask = false;
inCallout = false;
remaining.push(line);
}
}
}
let result = remaining.slice(0, completedItemsIndex).concat(...newTasks).concat(...completedSection);
if (completedItemsIndex < remaining.length - 1) {
result = result.concat(remaining.slice(completedItemsIndex + 1));
}
return result.join("\n");
}
isCompletedTaskLine(lineText) {
return this.initSettings.completedTaskRegExp.test(lineText);
}
isIncompleteTaskLine(lineText) {
return this.initSettings.incompleteTaskRegExp.test(lineText);
}
isTaskLine(lineText) {
return this.anyTaskMark.test(lineText);
}
isContinuation(lineText, inCallout) {
if (inCallout) {
const match = this.blockQuote.exec(lineText);
if (match) {
return match[1].endsWith(">") || match[1].endsWith(" ") || match[1].endsWith(" ");
}
}
return this.continuation.test(lineText);
}
isCallout(lineText) {
return this.blockQuote.test(lineText);
}
};
// src/taskcollector-Settings.ts
var DEFAULT_SETTINGS = {
completedAreaHeader: "## Log",
removeExpression: "",
appendDateFormat: "",
incompleteTaskValues: " ",
supportCanceledTasks: false,
rightClickComplete: false,
rightClickMark: false,
rightClickMove: false,
rightClickReset: false,
rightClickResetTask: false,
rightClickResetAll: false,
rightClickToggleAll: false,
completedAreaRemoveCheckbox: false,
onlyLowercaseX: false
};
// src/taskcollector-SettingsTab.ts
var import_obsidian2 = __toModule(require("obsidian"));
var TaskCollectorSettingsTab = class extends import_obsidian2.PluginSettingTab {
constructor(app, plugin, taskCollector) {
super(app, plugin);
this.plugin = plugin;
this.taskCollector = taskCollector;
}
display() {
this.containerEl.empty();
this.containerEl.createEl("h1", { text: "Task Collector" });
const tempSettings = Object.assign(this.taskCollector.settings);
new import_obsidian2.Setting(this.containerEl).setName("Only support x for completed tasks").setDesc("Only use 'x' (lower case) to indicate completed tasks.").addToggle((toggle) => toggle.setValue(tempSettings.onlyLowercaseX).onChange((value) => __async(this, null, function* () {
tempSettings.onlyLowercaseX = value;
this.taskCollector.updateSettings(tempSettings);
yield this.plugin.saveSettings();
})));
new import_obsidian2.Setting(this.containerEl).setName("Support canceled tasks").setDesc("Use a - to indicate canceled tasks. Canceled tasks are processed in the same way as completed tasks using options below.").addToggle((toggle) => toggle.setValue(tempSettings.supportCanceledTasks).onChange((value) => __async(this, null, function* () {
tempSettings.supportCanceledTasks = value;
this.taskCollector.updateSettings(tempSettings);
yield this.plugin.saveSettings();
})));
new import_obsidian2.Setting(this.containerEl).setName("Additional task types").setDesc("Specify the set of single characters that indicate in-progress or incomplete tasks, e.g. 'i> !?D'.").addText((text) => text.setPlaceholder("> !?").setValue(tempSettings.incompleteTaskValues).onChange((value) => __async(this, null, function* () {
if (value.contains("x")) {
console.log(`Set of characters should not contain the marker for completed tasks (x): ${value}`);
} else if (!tempSettings.onlyLowercaseX && value.contains("X")) {
console.log(`Set of characters should not contain the marker for canceled tasks (X): ${value}`);
} else if (tempSettings.supportCanceledTasks && value.contains("-")) {
console.log(`Set of characters should not contain the marker for canceled tasks (-): ${value}`);
} else {
if (!value.contains(" ")) {
value = " " + value;
}
tempSettings.incompleteTaskValues = value;
this.taskCollector.updateSettings(tempSettings);
yield this.plugin.saveSettings();
}
})));
this.containerEl.createEl("h2", { text: "Completing tasks" });
this.containerEl.createEl("p", {
text: "Completed tasks, marked by 'x', 'X' (and optionally '-' for canceled items) gain special treatment based on the settings below."
});
new import_obsidian2.Setting(this.containerEl).setName("Append date to completed task").setDesc("If non-empty, append today's date in the given moment.js string format to the end of the task text.").addMomentFormat((momentFormat) => momentFormat.setPlaceholder("YYYY-MM-DD").setValue(tempSettings.appendDateFormat).onChange((value) => __async(this, null, function* () {
try {
(0, import_obsidian2.moment)().format(value);
tempSettings.appendDateFormat = value;
this.taskCollector.updateSettings(tempSettings);
yield this.plugin.saveSettings();
} catch (e) {
console.log(`Error parsing specified date format: ${value}`);
}
})));
new import_obsidian2.Setting(this.containerEl).setName("Remove text in completed task").setDesc("Text matching this regular expression should be removed from the task text. Be careful! Test your expression first. The global flag, 'g' is used for a per-line match.").addText((text) => text.setPlaceholder(" #(todo|task)").setValue(tempSettings.removeExpression).onChange((value) => __async(this, null, function* () {
try {
this.taskCollector.tryCreateRemoveRegex(value);
tempSettings.removeExpression = value;
this.taskCollector.updateSettings(tempSettings);
yield this.plugin.saveSettings();
} catch (e) {
console.log(`Error parsing regular expression for text replacement: ${value}`);
}
})));
this.containerEl.createEl("h2", { text: "Moving completed tasks" });
new import_obsidian2.Setting(this.containerEl).setName("Completed area header").setDesc(`Completed (or canceled) items will be inserted under the specified header (most recent at the top). When scanning the document for completed/canceled tasks, the contents from this configured header to the next heading or separator (---) will be ignored. This heading will be created if the command is invoked and the heading does not exist. The default heading is '${DEFAULT_SETTINGS.completedAreaHeader}'.`).addText((text) => text.setPlaceholder("## Log").setValue(tempSettings.completedAreaHeader).onChange((value) => __async(this, null, function* () {
tempSettings.completedAreaHeader = value.trim();
this.taskCollector.updateSettings(tempSettings);
yield this.plugin.saveSettings();
})));
new import_obsidian2.Setting(this.containerEl).setName("Remove the checkbox from moved items").setDesc(`Remove the checkbox from completed (or canceled) tasks during the move to the completed area. This transforms tasks into normal list items. Task Collector will not be able to reset these items. They also will not appear in task searches or queries. The default value is: '${DEFAULT_SETTINGS.completedAreaRemoveCheckbox}'.`).addToggle((toggle) => toggle.setValue(tempSettings.completedAreaRemoveCheckbox).onChange((value) => __async(this, null, function* () {
tempSettings.completedAreaRemoveCheckbox = value;
this.taskCollector.updateSettings(tempSettings);
yield this.plugin.saveSettings();
})));
this.containerEl.createEl("h2", { text: "Right-click Menu items" });
this.containerEl.createEl("p", {
text: "Task Collector creates commands that can be bound to hotkeys or accessed using slash commands for marking tasks complete (or canceled) and resetting tasks to an incomplete state. The following settings add right click context menu items for those commands."
});
new import_obsidian2.Setting(this.containerEl).setName("Add menu item for marking a task").setDesc("Add an item to the right-click menu in edit mode to mark the task _on the current line (or within the current selection)_. This menu item will trigger a quick pop-up modal to select the desired mark value. The selected value will determine follow-on actions: complete, cancel, or reset.").addToggle((toggle) => toggle.setValue(tempSettings.rightClickMark).onChange((value) => __async(this, null, function* () {
tempSettings.rightClickMark = value;
this.taskCollector.updateSettings(tempSettings);
yield this.plugin.saveSettings();
})));
new import_obsidian2.Setting(this.containerEl).setName("Add menu item for completing a task").setDesc("Add an item to the right-click menu in edit mode to mark the task _on the current line (or within the current selection)_ complete. If canceled items are supported, an additional menu item will be added to mark selected tasks as canceled.").addToggle((toggle) => toggle.setValue(tempSettings.rightClickComplete).onChange((value) => __async(this, null, function* () {
tempSettings.rightClickComplete = value;
this.taskCollector.updateSettings(tempSettings);
yield this.plugin.saveSettings();
})));
new import_obsidian2.Setting(this.containerEl).setName("Add menu item for resetting a task").setDesc("Add an item to the right-click menu in edit mode to reset the task _on the current line (or within the current selection)_.").addToggle((toggle) => toggle.setValue(tempSettings.rightClickResetTask).onChange((value) => __async(this, null, function* () {
tempSettings.rightClickResetTask = value;
this.taskCollector.updateSettings(tempSettings);
yield this.plugin.saveSettings();
})));
new import_obsidian2.Setting(this.containerEl).setName("Add menu items for completing all tasks").setDesc("Add an item to the right-click menu in edit mode to mark _all_ incomplete tasks in the current document complete.").addToggle((toggle) => toggle.setValue(tempSettings.rightClickToggleAll).onChange((value) => __async(this, null, function* () {
tempSettings.rightClickToggleAll = value;
this.taskCollector.updateSettings(tempSettings);
yield this.plugin.saveSettings();
})));
new import_obsidian2.Setting(this.containerEl).setName("Add menu item for resetting all tasks").setDesc("Add an item to the right-click menu to reset _all_ completed (or canceled) tasks.").addToggle((toggle) => toggle.setValue(tempSettings.rightClickResetAll).onChange((value) => __async(this, null, function* () {
tempSettings.rightClickResetAll = value;
this.taskCollector.updateSettings(tempSettings);
yield this.plugin.saveSettings();
})));
new import_obsidian2.Setting(this.containerEl).setName("Add menu item for moving all completed tasks").setDesc("Add an item to the right-click menu to move _all_ completed (or canceled) tasks.").addToggle((toggle) => toggle.setValue(tempSettings.rightClickMove).onChange((value) => __async(this, null, function* () {
tempSettings.rightClickMove = value;
this.taskCollector.updateSettings(tempSettings);
yield this.plugin.saveSettings();
})));
}
};
// src/taskcollector-TaskMarkModal.ts
var import_obsidian3 = __toModule(require("obsidian"));
function getMark(app, taskCollector) {
return new Promise((resolve) => {
const modal = new TaskMarkModal(app, taskCollector);
modal.onClose = () => {
resolve(modal.chosenMark);
};
modal.open();
});
}
var TaskMarkModal = class extends import_obsidian3.Modal {
constructor(app, taskCollector) {
super(app);
this.taskCollector = taskCollector;
this.containerEl.id = "taskcollector-modal";
}
onOpen() {
const selector = this.contentEl.createDiv("taskcollector-selector markdown-preview-view");
const completedTasks = (this.taskCollector.settings.onlyLowercaseX ? "x" : "xX") + (this.taskCollector.settings.supportCanceledTasks ? "-" : "");
const completedList = selector.createEl("ul");
completedList.addClass("contains-task-list");
this.addTaskValues(completedList, completedTasks, true);
const list = selector.createEl("ul");
list.addClass("contains-task-list");
this.addTaskValues(list, this.taskCollector.settings.incompleteTaskValues, false);
const footer = selector.createEl("nav");
const esc = footer.createSpan();
esc.innerHTML = "<b>esc</b> to dismiss";
const bksp = footer.createSpan();
bksp.innerHTML = "<b>bksp</b> to remove <code>[]</code>";
const self = this;
const keyListener = function(event) {
self.chosenMark = event.key;
event.preventDefault();
event.stopImmediatePropagation();
self.close();
};
this.scope.register([], null, keyListener);
this.scope.register(["Shift"], null, keyListener);
}
addTaskValues(list, choices, markComplete) {
const self = this;
for (const character of choices) {
const li = list.createEl("li", {
cls: "task-list-item " + (character == " " ? "" : " is-checked"),
attr: {
"data-task": character
}
});
li.addEventListener("click", function(event) {
self.chosenMark = character;
self.close();
});
const input = li.createEl("input", {
cls: "task-list-item-checkbox",
attr: {
id: "task-list-item-checkbox-" + character,
type: "checkbox",
style: "pointer-events: none;"
}
});
if (character != " ") {
input.setAttribute("checked", "");
}
li.createEl("span", {
text: character == " " ? "\u2423" : character,
attr: {
style: "pointer-events: none;"
}
});
}
}
onClose() {
this.contentEl.empty();
}
};
// src/taskcollector-Plugin.ts
var Icons;
(function(Icons2) {
Icons2["COMPLETE"] = "tc-complete-item";
Icons2["CANCEL"] = "tc-cancel-item";
Icons2["RESET"] = "tc-reset-item";
Icons2["MARK"] = "tc-mark-item";
Icons2["COMPLETE_ALL"] = "tc-complete-all-items";
Icons2["CLEAR"] = "tc-clear-all-items";
Icons2["MOVE"] = "tc-move-all-checked-items";
})(Icons || (Icons = {}));
var TaskCollectorPlugin = class extends import_obsidian4.Plugin {
constructor() {
super(...arguments);
this.handlersRegistered = false;
}
onload() {
return __async(this, null, function* () {
console.log("loading Task Collector (TC)");
this.taskCollector = new TaskCollector(this.app);
this.addSettingTab(new TaskCollectorSettingsTab(this.app, this, this.taskCollector));
yield this.loadSettings();
(0, import_obsidian4.addIcon)(Icons.COMPLETE, '<svg xmlns="http://www.w3.org/2000/svg" width="100px" height="100px" fill="currentColor" class="bi bi-check-square-fill" viewBox="0 0 16 16"> <path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm10.03 4.97a.75.75 0 0 1 .011 1.05l-3.992 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.75.75 0 0 1 1.08-.022z"/></svg>');
(0, import_obsidian4.addIcon)(Icons.CANCEL, '<svg xmlns="http://www.w3.org/2000/svg" width="100px" height="100px" fill="currentColor" class="bi bi-dash-square-fill" viewBox="0 0 16 16"> <path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm2.5 7.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1z"/></svg>');
(0, import_obsidian4.addIcon)(Icons.RESET, '<svg xmlns="http://www.w3.org/2000/svg" width="100px" height="100px" fill="currentColor" class="bi bi-square-fill" viewBox="0 0 16 16"><path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2z"/></svg>');
(0, import_obsidian4.addIcon)(Icons.MARK, '<svg class="bi bi-square-fill" width="100px" height="100px" fill="currentColor" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path transform="scale(.16)" d="m12.5 0a12.5 12.5 0 00-12.5 12.5v75a12.5 12.5 0 0012.5 12.5h75a12.5 12.5 0 0012.5-12.5v-75a12.5 12.5 0 00-12.5-12.5h-75zm38.146 21.135 8.7324 19.098 20.684 3.6328-15.465 14.207 2.9355 20.793-18.289-10.316-18.869 9.2188 4.1602-20.584-14.598-15.098 20.861-2.4043 9.8477-18.547z" stroke-width="6.25"/></svg>');
(0, import_obsidian4.addIcon)(Icons.COMPLETE_ALL, '<svg class="bi bi-square-fill" fill="currentColor" version="1.1" width="100px" height="100px" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m2 0a2 2 0 00-2 2v12a2 2 0 002 2h12a2 2 0 002-2v-12a2 2 0 00-2-2h-12zm1.5098 2.041h1.5a1.5 1.5 0 011.5 1.5v1.5a1.5 1.5 0 01-1.5 1.5h-1.5a1.5 1.5 0 01-1.5-1.5v-1.5a1.5 1.5 0 011.5-1.5zm4.3945 1.2207h5.6895a.40645.5 0 01.40625.5v1a.40645.5 0 01-.40625.5h-5.6895a.40645.5 0 01-.40625-.5v-1a.40645.5 0 01.40625-.5zm-4.4023 6.2656h1.5a1.5 1.5 0 011.5 1.5v1.5a1.5 1.5 0 01-1.5 1.5h-1.5a1.5 1.5 0 01-1.5-1.5v-1.5a1.5 1.5 0 011.5-1.5zm4.4023 1.2656h5.6895a.40645.5 0 01.40625.5v1a.40645.5 0 01-.40625.5h-5.6895a.40645.5 0 01-.40625-.5v-1a.40645.5 0 01.40625-.5z"/><g transform="translate(.49737 -.0026315)" fill="currentColor"><path d="m3.6171 13.149a.5.5 0 01-.708 0l-1-1a.50063.50063 0 01.708-.708l.646.647 1.646-1.647a.50063.50063 0 01.708.708z"/><path d="m3.6171 5.6181a.5.5 0 01-.708 0l-1-1a.50063.50063 0 11.708-.708l.646.647 1.646-1.647a.50063.50063 0 11.708.708z"/></g></svg>');
(0, import_obsidian4.addIcon)(Icons.CLEAR, '<svg class="bi bi-square-fill" fill="currentColor" version="1.1" width="100px" height="100px" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m2 0a2 2 0 00-2 2v12a2 2 0 002 2h12a2 2 0 002-2v-12a2 2 0 00-2-2h-12zm1.5098 2.041h1.5a1.5 1.5 0 011.5 1.5v1.5a1.5 1.5 0 01-1.5 1.5h-1.5a1.5 1.5 0 01-1.5-1.5v-1.5a1.5 1.5 0 011.5-1.5zm4.3945 1.2207h5.6895a.40645.5 0 01.40625.5v1a.40645.5 0 01-.40625.5h-5.6895a.40645.5 0 01-.40625-.5v-1a.40645.5 0 01.40625-.5zm-4.4023 6.2656h1.5a1.5 1.5 0 011.5 1.5v1.5a1.5 1.5 0 01-1.5 1.5h-1.5a1.5 1.5 0 01-1.5-1.5v-1.5a1.5 1.5 0 011.5-1.5zm4.4023 1.2656h5.6895a.40645.5 0 01.40625.5v1a.40645.5 0 01-.40625.5h-5.6895a.40645.5 0 01-.40625-.5v-1a.40645.5 0 01.40625-.5z"/></svg>');
(0, import_obsidian4.addIcon)(Icons.MOVE, '<svg xmlns="http://www.w3.org/2000/svg" width="100px" height="100px" fill="currentColor" class="bi bi-save-fill" viewBox="0 0 16 16"> <path d="M8.5 1.5A1.5 1.5 0 0 1 10 0h4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h6c-.314.418-.5.937-.5 1.5v7.793L4.854 6.646a.5.5 0 1 0-.708.708l3.5 3.5a.5.5 0 0 0 .708 0l3.5-3.5a.5.5 0 0 0-.708-.708L8.5 9.293V1.5z"/></svg>');
const completeTaskCommand = {
id: "task-collector-mark-done",
name: "Complete item",
icon: Icons.COMPLETE,
editorCallback: (editor, view) => {
this.markTaskOnLines("x", this.getCurrentLinesFromEditor(editor));
}
};
const cancelTaskCommand = {
id: "task-collector-mark-canceled",
name: "Cancel item",
icon: Icons.CANCEL,
editorCallback: (editor, view) => {
this.markTaskOnLines("-", this.getCurrentLinesFromEditor(editor));
}
};
const resetTaskCommand = {
id: "task-collector-mark-reset",
name: "Reset item",
icon: Icons.RESET,
editorCallback: (editor, view) => {
this.markTaskOnLines(" ", this.getCurrentLinesFromEditor(editor));
}
};
const markTaskCommand = {
id: "task-collector-mark",
name: "Mark item",
icon: Icons.MARK,
editorCallback: (editor, view) => __async(this, null, function* () {
const mark = yield getMark(this.app, this.taskCollector);
if (mark) {
this.markTaskOnLines(mark, this.getCurrentLinesFromEditor(editor));
}
})
};
const completeAllTasksCommand = {
id: "task-collector-mark-all-done",
name: "Complete all tasks",
icon: Icons.COMPLETE_ALL,
callback: () => __async(this, null, function* () {
this.completeAllTasks();
})
};
const clearAllTasksCommand = {
id: "task-collector-clear-all-items",
name: "Reset all completed tasks",
icon: Icons.CLEAR,
callback: () => __async(this, null, function* () {
this.resetAllTasks();
})
};
const moveTaskCommand = {
id: "task-collector-move-completed-tasks",
name: "Move all completed tasks to configured heading",
icon: Icons.MOVE,
callback: () => __async(this, null, function* () {
this.moveAllTasks();
})
};
this.addCommand(completeTaskCommand);
if (this.taskCollector.settings.supportCanceledTasks) {
this.addCommand(cancelTaskCommand);
}
this.addCommand(markTaskCommand);
this.addCommand(resetTaskCommand);
this.addCommand(moveTaskCommand);
this.addCommand(completeAllTasksCommand);
this.addCommand(clearAllTasksCommand);
this.registerHandlers();
});
}
getCurrentLinesFromEditor(editor) {
const lines = [];
if (editor.somethingSelected()) {
const cursorStart = editor.getCursor("from");
const cursorEnd = editor.getCursor("to");
for (let i = cursorStart.line; i <= cursorEnd.line; i++) {
lines.push(i);
}
} else {
const anchor = editor.getCursor("from");
lines.push(anchor.line);
}
return lines;
}
buildMenu(menu, lines) {
if (this.taskCollector.settings.rightClickMark) {
menu.addItem((item) => item.setTitle("(TC) Mark Task").setIcon(Icons.MARK).onClick(() => __async(this, null, function* () {
const mark = yield getMark(this.app, this.taskCollector);
if (mark) {
this.markTaskOnLines(mark, lines);
}
})));
}
if (this.taskCollector.settings.rightClickComplete) {
menu.addItem((item) => item.setTitle("(TC) Complete Task").setIcon(Icons.COMPLETE).onClick(() => {
this.markTaskOnLines("x", lines);
}));
if (this.taskCollector.settings.supportCanceledTasks) {
menu.addItem((item) => item.setTitle("(TC) Cancel Task").setIcon(Icons.CANCEL).onClick(() => {
this.markTaskOnLines("-", lines);
}));
}
}
if (this.taskCollector.settings.rightClickResetTask) {
menu.addItem((item) => item.setTitle("(TC) Reset Task").setIcon(Icons.RESET).onClick(() => {
this.markTaskOnLines(" ", lines);
}));
}
if (this.taskCollector.settings.rightClickMove) {
menu.addItem((item) => item.setTitle("(TC) Move completed tasks").setIcon(Icons.MOVE).onClick(() => __async(this, null, function* () {
this.moveAllTasks();
})));
}
if (this.taskCollector.settings.rightClickToggleAll) {
menu.addItem((item) => item.setTitle("(TC) Complete All Tasks").setIcon(Icons.COMPLETE_ALL).onClick(() => __async(this, null, function* () {
this.completeAllTasks();
})));
}
if (this.taskCollector.settings.rightClickResetAll) {
menu.addItem((item) => item.setTitle("(TC) Reset All Tasks").setIcon(Icons.CLEAR).onClick(() => __async(this, null, function* () {
this.resetAllTasks();
})));
}
}
markTaskOnLines(mark, lines) {
return __async(this, null, function* () {
const activeFile = this.app.workspace.getActiveFile();
const source = yield this.app.vault.read(activeFile);
const result = this.taskCollector.markTaskInSource(source, mark, lines);
this.app.vault.modify(activeFile, result);
});
}
moveAllTasks() {
return __async(this, null, function* () {
const activeFile = this.app.workspace.getActiveFile();
const source = yield this.app.vault.read(activeFile);
const result = this.taskCollector.moveCompletedTasksInFile(source);
this.app.vault.modify(activeFile, result);
});
}
completeAllTasks() {
return __async(this, null, function* () {
const activeFile = this.app.workspace.getActiveFile();
const source = yield this.app.vault.read(activeFile);
const result = this.taskCollector.markAllTasksComplete(source, "x");
this.app.vault.modify(activeFile, result);
});
}
resetAllTasks() {
return __async(this, null, function* () {
const activeFile = this.app.workspace.getActiveFile();
const source = yield this.app.vault.read(activeFile);
const result = this.taskCollector.resetAllTasks(source);
this.app.vault.modify(activeFile, result);
});
}
registerHandlers() {
if (this.taskCollector.initSettings.rightClickTaskMenu && !this.handlersRegistered) {
this.handlersRegistered = true;
this.registerEvent(this.eventRef = this.app.workspace.on("editor-menu", (menu, editor) => {
this.buildMenu(menu, this.getCurrentLinesFromEditor(editor));
}));
this.registerMarkdownPostProcessor(this.postProcessor = (el, ctx) => {
const checkboxes = el.querySelectorAll(".task-list-item-checkbox");
if (!checkboxes.length)
return;
const section = ctx.getSectionInfo(el);
if (!section)
return;
const { lineStart } = section;
for (const checkbox of Array.from(checkboxes)) {
const line = Number(checkbox.dataset.line);
this.registerDomEvent(checkbox.parentElement, "contextmenu", (ev) => {
ev.preventDefault();
const view = this.app.workspace.getActiveViewOfType(import_obsidian4.MarkdownView);
if (view && view.editor) {
const menu = new import_obsidian4.Menu(this.app);
this.buildMenu(menu, [lineStart + line]);
menu.showAtMouseEvent(ev);
}
});
}
});
}
}
unregisterHandlers() {
this.handlersRegistered = false;
this.app.workspace.offref(this.eventRef);
this.eventRef = null;
import_obsidian4.MarkdownPreviewRenderer.unregisterPostProcessor(this.postProcessor);
}
onunload() {
console.log("unloading Task Collector");
}
loadSettings() {
return __async(this, null, function* () {
const settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
this.taskCollector.updateSettings(settings);
});
}
saveSettings() {
return __async(this, null, function* () {
yield this.saveData(this.taskCollector.settings);
if (this.taskCollector.initSettings.rightClickTaskMenu && !this.handlersRegistered) {
this.registerHandlers();
}
if (!this.taskCollector.initSettings.rightClickTaskMenu && this.handlersRegistered) {
this.unregisterHandlers();
}
});
}
};
// src/main.ts
var main_default = TaskCollectorPlugin;

@ -1,10 +0,0 @@
{
"id": "obsidian-task-collector",
"name": "Task Collector (TC)",
"version": "0.7.8",
"minAppVersion": "0.13.10",
"description": "Manage completed tasks within a document",
"author": "ebullient",
"authorUrl": "https://github.com/ebullient",
"isDesktopOnly": false
}

@ -1,57 +0,0 @@
#taskcollector-modal .modal-close-button {
display: none;
}
#taskcollector-modal .modal {
padding: 10px;
min-width: 200px;
max-width: 300px;
}
#taskcollector-modal .modal-content {
background-color: var(--background-secondary);
margin-top: 0px;
}
#taskcollector-modal .modal .markdown-preview-view {
padding: 5px;
}
#taskcollector-modal .modal .markdown-preview-view ul {
display: flex;
flex-wrap: wrap;
--gap: 3px;
--square: 45px;
margin: calc(-1 * var(--gap)) calc(1 * var(--gap));
margin-block-start: 0;
margin-block-end: 0;
padding-inline-start: 0;
}
#taskcollector-modal .modal .markdown-preview-view ul > li {
margin: var(--gap);
display: block;
width: var(--square);
height: var(--square);
background-color: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 2px;
text-indent: unset;
line-height: var(--square);
text-align: center;
}
#taskcollector-modal .modal .markdown-preview-view ul > li::before {
display: none;
}
#taskcollector-modal .modal .markdown-preview-view ul > li > span {
font-family: var(--font-monospace);
}
#taskcollector-modal .modal .markdown-preview-view ul > li.task-list-item .task-list-item-checkbox {
margin-right: 4px;
margin-left: unset;
}
#taskcollector-modal .modal .markdown-preview-view nav {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
}
#taskcollector-modal .modal .markdown-preview-view nav span {
display: block;
font-size: .8em;
color: var(--text-muted);
}

@ -0,0 +1,207 @@
{
"globalFilter": "",
"removeGlobalFilter": false,
"setDoneDate": true,
"autoSuggestInEditor": false,
"autoSuggestMinMatch": 0,
"autoSuggestMaxItems": 6,
"provideAccessKeys": true,
"useFilenameAsScheduledDate": false,
"filenameAsDateFolders": [],
"statusSettings": {
"coreStatuses": [
{
"symbol": " ",
"name": "Todo",
"nextStatusSymbol": "x",
"availableAsCommand": true,
"type": "TODO"
},
{
"symbol": "x",
"name": "Done",
"nextStatusSymbol": " ",
"availableAsCommand": true,
"type": "DONE"
}
],
"customStatuses": [
{
"symbol": "/",
"name": "In Progress",
"nextStatusSymbol": "x",
"availableAsCommand": true,
"type": "IN_PROGRESS"
},
{
"symbol": "-",
"name": "Cancelled",
"nextStatusSymbol": " ",
"availableAsCommand": true,
"type": "CANCELLED"
},
{
"symbol": " ",
"name": "to-do",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "/",
"name": "incomplete",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "IN_PROGRESS"
},
{
"symbol": "x",
"name": "done",
"nextStatusSymbol": " ",
"availableAsCommand": false,
"type": "DONE"
},
{
"symbol": "-",
"name": "canceled",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "CANCELLED"
},
{
"symbol": ">",
"name": "forwarded",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "<",
"name": "scheduling",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "?",
"name": "question",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "!",
"name": "important",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "*",
"name": "star",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "\"",
"name": "quote",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "l",
"name": "location",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "b",
"name": "bookmark",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "i",
"name": "information",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "S",
"name": "savings",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "I",
"name": "idea",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "p",
"name": "pros",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "c",
"name": "cons",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "f",
"name": "fire",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "k",
"name": "key",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "w",
"name": "win",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "u",
"name": "up",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
},
{
"symbol": "d",
"name": "down",
"nextStatusSymbol": "x",
"availableAsCommand": false,
"type": "TODO"
}
]
},
"features": {
"INTERNAL_TESTING_ENABLED_BY_DEFAULT": true
},
"generalSettings": {},
"headingOpened": {
"Core Statuses": true,
"Custom Statuses": true
}
}

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "obsidian-tasks-plugin",
"name": "Tasks",
"version": "1.20.0",
"version": "1.25.0",
"minAppVersion": "0.14.6",
"description": "Task management for Obsidian",
"author": "Martin Schenck and Clare Macrae",

@ -1,3 +1,8 @@
:root {
--tasks-details-icon: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M8.59 16.58L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.42z'/></svg>");
}
.plugin-tasks-query-explanation{
/* Prevent long explanation lines wrapping, so they are more readable,
especially on small screens.
@ -60,6 +65,10 @@
font-weight: bold;
}
/**------------------------------------------------------------------------
** MODAL
*------------------------------------------------------------------------**/
.tasks-modal-section + .tasks-modal-section {
margin-top: 16px;
}
@ -154,6 +163,15 @@
justify-content: space-between;
}
.tasks-modal-error {
border: 1px solid red !important;
}
.tasks-modal button:disabled {
pointer-events: none !important;
opacity: 0.3 !important;
}
@media (max-width: 649px) {
.tasks-modal-priorities {
grid-template-columns: 4em 7.5em 5em;
@ -197,3 +215,84 @@
grid-row: 1;
}
}
/**------------------------------------------------------------------------
** SETTINGS
*------------------------------------------------------------------------**/
.tasks-settings-is-invalid {
/* Dark red text on pale background*/
color: var(--text-error) !important;
background-color: rgba(var(--background-modifier-error-rgb), 0.2) !important;
}
.tasks-settings .additional {
margin: 6px 12px;
}
.tasks-settings .additional > .setting-item {
border-top: 0;
padding-top: 9px;
}
.tasks-settings details > summary {
outline: none;
display: block !important;
list-style: none !important;
list-style-type: none !important;
min-height: 1rem;
border-top-left-radius: 0.1rem;
border-top-right-radius: 0.1rem;
cursor: pointer;
position: relative;
}
.tasks-settings details > summary::-webkit-details-marker,
.tasks-settings details > summary::marker {
display: none !important;
}
.tasks-settings details > summary > .collapser {
position: absolute;
top: 50%;
right: 8px;
transform: translateY(-50%);
content: "";
}
.tasks-settings details > summary > .collapser > .handle {
transform: rotate(0deg);
transition: transform 0.25s;
background-color: currentColor;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-size: contain;
mask-size: contain;
-webkit-mask-image: var(--tasks-details-icon);
mask-image: var(--tasks-details-icon);
width: 20px;
height: 20px;
}
.tasks-settings details[open] > summary > .collapser > .handle {
transform: rotate(90deg);
}
.tasks-nested-settings .setting-item {
border: 0px;
padding-bottom: 0;
}
.tasks-nested-settings {
padding-bottom: 18px;
}
.tasks-nested-settings[open] .setting-item-heading,
.tasks-nested-settings:not(details) .setting-item-heading {
border-top: 0px;
border-bottom: 1px solid var(--background-modifier-border);
}
.tasks-settings .row-for-status {
margin-top: 0px;
margin-bottom: 0px;
}

@ -1,5 +1,8 @@
{
"pluginList": [
"willasm/obsidian-open-weather",
"joleaf/obsidian-email-block-plugin",
"akaalias/obsidian-extract-pdf",
"thingnotok/obsidian-google-mail",
"GamerGirlandCo/obsidian-task-completer/",
"joethei/obsidian-tagcloud",

@ -0,0 +1,4 @@
{
"createNewFile": true,
"copyToClipboard": true
}

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
{"id":"pdf-to-markdown-plugin","name":"PDF to Markdown","version":"0.0.7","description":"Save a PDF's text (headings, paragraphs, lists, etc.) to a Markdown file.","author":"Alexis Rondeau","authorUrl":"https://publish.obsidian.md/alexisrondeau","js":"main.js"}

File diff suppressed because it is too large Load Diff

@ -1,10 +1,11 @@
{
"id": "podnotes",
"name": "PodNotes",
"version": "2.3.1",
"version": "2.10.6",
"minAppVersion": "0.15.9",
"description": "Helps you write notes on podcasts.",
"author": "Christian B. B. Houmann",
"authorUrl": "https://bagerbach.com",
"fundingUrl": "https://buymeacoffee.com/chhoumann",
"isDesktopOnly": false
}

@ -45,5 +45,12 @@
}
],
"inputPrompt": "single-line",
"devMode": false
"devMode": false,
"templateFolderPath": "00.01 Admin/Templates",
"migrations": {
"migrateToMacroIDFromEmbeddedMacro": true,
"useQuickAddTemplateFolder": true,
"incrementFileNameSettingMoveToDefaultBehavior": true,
"mutualExclusionInsertAfterAndWriteToBottomOfFile": true
}
}

File diff suppressed because it is too large Load Diff

@ -1,10 +1,11 @@
{
"id": "quickadd",
"name": "QuickAdd",
"version": "0.8.0",
"version": "0.11.6",
"minAppVersion": "0.13.19",
"description": "Quickly add new pages or content to your vault.",
"author": "Christian B. B. Houmann",
"authorUrl": "https://bagerbach.com",
"fundingUrl": "https://www.buymeacoffee.com/chhoumann",
"isDesktopOnly": false
}

@ -1,210 +1,177 @@
/* src/styles.css */
.configureMacroDiv {
display: grid;
grid-template-rows: 1fr;
min-width: 12rem;
display: grid;
grid-template-rows: 1fr;
min-width: 12rem;
}
.configureMacroDivItem {
display: flex;
align-content: center;
justify-content: space-between;
margin-bottom: 10px;
display: flex;
align-content: center;
justify-content: space-between;
margin-bottom: 10px;
}
.configureMacroDivItemButton {
display: flex;
align-content: center;
justify-content: center;
margin-bottom: 10px;
display: flex;
align-content: center;
justify-content: center;
margin-bottom: 10px;
}
.macroContainer {
display: grid;
grid-template-rows: repeat(auto-fill, 120px);
grid-gap: 40px;
overflow-y: auto;
max-height: 30em;
padding: 2em;
}
/* Mobile */
display: grid;
grid-template-rows: repeat(auto-fill, 120px);
grid-gap: 40px;
overflow-y: auto;
max-height: 30em;
padding: 2em;
}
@media screen and (max-width: 540px) {
.macroContainer1 {
grid-template-columns: repeat(1, 1fr);
}
.macroContainer2 {
grid-template-columns: repeat(1, 1fr);
}
.macroContainer3 {
grid-template-columns: repeat(1, 1fr);
}
.wideInputPromptInputEl {
width: 20rem;
max-width: 100%;
height: 3rem;
}
}
/* Tablet */
.macroContainer1 {
grid-template-columns: repeat(1, 1fr);
}
.macroContainer2 {
grid-template-columns: repeat(1, 1fr);
}
.macroContainer3 {
grid-template-columns: repeat(1, 1fr);
}
.wideInputPromptInputEl {
width: 20rem;
max-width: 100%;
height: 3rem;
}
}
@media screen and (max-width: 540px) and (max-width: 780px) {
.macroContainer1 {
grid-template-columns: repeat(1, 1fr);
}
.macroContainer2 {
grid-template-columns: repeat(2, 1fr);
}
.macroContainer3 {
grid-template-columns: repeat(2, 1fr);
}
.wideInputPromptInputEl {
width: 30rem;
max-width: 100%;
height: 20rem;
}
}
/* Everything else */
.macroContainer1 {
grid-template-columns: repeat(1, 1fr);
}
.macroContainer2 {
grid-template-columns: repeat(2, 1fr);
}
.macroContainer3 {
grid-template-columns: repeat(2, 1fr);
}
.wideInputPromptInputEl {
width: 30rem;
max-width: 100%;
height: 20rem;
}
}
@media screen and (min-width: 781px) {
.macroContainer1 {
grid-template-columns: repeat(1, 1fr);
}
.macroContainer2 {
grid-template-columns: repeat(2, 1fr);
}
.macroContainer3 {
grid-template-columns: repeat(2, 1fr);
}
.wideInputPromptInputEl {
width: 40rem;
max-width: 100%;
height: 20rem;
}
}
.macroContainer1 {
grid-template-columns: repeat(1, 1fr);
}
.macroContainer2 {
grid-template-columns: repeat(2, 1fr);
}
.macroContainer3 {
grid-template-columns: repeat(2, 1fr);
}
.wideInputPromptInputEl {
width: 40rem;
max-width: 100%;
height: 20rem;
}
}
.addMacroBarContainer {
display: flex;
align-content: center;
justify-content: space-around;
margin-top: 20px;
display: flex;
align-content: center;
justify-content: space-around;
margin-top: 20px;
}
.captureToActiveFileContainer {
display: flex;
align-content: center;
justify-content: space-between;
margin-bottom: 10px;
display: flex;
align-content: center;
justify-content: space-between;
margin-bottom: 10px;
}
.choiceNameHeader {
text-align: center;
text-align: center;
}
.choiceNameHeader:hover {
cursor: pointer;
cursor: pointer;
}
.folderInputContainer {
display: flex;
align-content: center;
justify-content: space-between;
margin-bottom: 8px;
gap: 4px;
display: flex;
align-content: center;
justify-content: space-between;
margin-bottom: 8px;
gap: 4px;
}
.selectMacroDropdownContainer {
display: flex;
align-content: center;
justify-content: center;
display: flex;
align-content: center;
justify-content: center;
}
.quickAddModal .modal {
min-width: 35%;
overflow-y: auto;
max-height: 70%;
min-width: 35%;
overflow-y: auto;
max-height: 70%;
}
.checkboxRowContainer {
display: grid;
grid-template-rows: auto;
align-content: center;
margin: 30px 0px;
display: grid;
grid-template-rows: auto;
align-content: center;
gap: 5px;
}
.checkboxRow {
display: flex;
justify-content: space-between;
align-content: center;
display: flex;
justify-content: space-between;
align-content: center;
}
.checkboxRow .checkbox-container {
flex-shrink: 0;
flex-shrink: 0;
}
.checkboxRow span {
font-size: 16px;
word-break: break-all;
font-size: 16px;
word-break: break-all;
}
.submitButtonContainer {
display: flex;
align-content: center;
justify-content: center;
display: flex;
align-content: center;
justify-content: center;
}
.chooseFolderWhenCreatingNoteContainer {
display: flex;
align-content: center;
justify-content: space-between;
margin-bottom: 10px;
display: flex;
align-content: center;
justify-content: space-between;
margin-bottom: 10px;
}
.chooseFolderFromSubfolderContainer {
margin: 20px 0 0 0;
}
.clickable:hover {
cursor: pointer;
cursor: pointer;
}
.quickAddCommandListItem {
display: flex;
flex: 1 1 auto;
align-items: center;
justify-content: space-between;
display: flex;
flex: 1 1 auto;
align-items: center;
justify-content: space-between;
}
.quickCommandContainer {
display: flex;
justify-content: flex-end;
align-content: center;
margin-bottom: 1em;
display: flex;
justify-content: flex-end;
align-content: center;
margin-bottom: 1em;
}
.yesNoPromptButtonContainer {
display: flex;
align-items: center;
justify-content: space-around;
margin-top: 2rem;
display: flex;
align-items: center;
justify-content: space-around;
margin-top: 2rem;
}
.yesNoPromptParagraph {
text-align: center;
text-align: center;
}
.qaFileSuggestionItem {
display: flex;
flex-direction: column;
width: 100%;
display: flex;
flex-direction: column;
width: 100%;
}
.qaFileSuggestionItem .suggestion-main-text {
font-weight: bold;
font-weight: bold;
}
.qaFileSuggestionItem .suggestion-sub-text {
font-style: italic;
font-style: italic;
}

@ -0,0 +1,43 @@
{
"recentFiles": [
{
"basename": "Server Tools",
"path": "05.02 Networks/Server Tools.md"
},
{
"basename": "@Main Dashboard",
"path": "01.02 Home/@Main Dashboard.md"
},
{
"basename": "2023-03-04 PSG - FC Nantes (4-2)",
"path": "00.01 Admin/Calendars/Events/2023-03-04 PSG - FC Nantes (4-2).md"
},
{
"basename": "Paris SG",
"path": "02.02 Paris/Paris SG.md"
},
{
"basename": "2023-03-04",
"path": "00.01 Admin/Calendars/2023-03-04.md"
},
{
"basename": "Bandes Dessinées",
"path": "01.02 Home/Bandes Dessinées.md"
},
{
"basename": "Life After Food",
"path": "00.03 News/Life After Food.md"
},
{
"basename": "2023-03-03",
"path": "00.01 Admin/Calendars/2023-03-03.md"
},
{
"basename": "@Shopping list",
"path": "01.02 Home/@Shopping list.md"
}
],
"omittedPaths": [],
"maxLength": null,
"openType": "tab"
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,10 @@
{
"id": "recent-files-obsidian",
"name": "Recent Files",
"version": "1.3.5",
"minAppVersion": "0.16.3",
"description": "List files by most recently opened",
"author": "Tony Grosinger",
"authorUrl": "https://grosinger.net",
"isDesktopOnly": false
}

@ -0,0 +1,33 @@
.recent-files-title {
display: flex;
justify-content: space-between;
}
.recent-files-title-content {
flex-grow: 1;
}
.recent-files-file-delete {
display: none;
color: var(--nav-item-color);
height: 17px;
}
.recent-files-title:hover .recent-files-file-delete {
display: block;
cursor: pointer;
}
.recent-files-file-delete:hover {
color: var(--nav-item-color-hover);
}
.recent-files-donation {
width: 70%;
margin: 0 auto;
text-align: center;
}
.recent-files-donate-button {
margin: 10px;
}

@ -6,6 +6,7 @@
"description": "Improved table navigation, formatting, manipulation, and formulas",
"isDesktopOnly": false,
"minAppVersion": "1.0.0",
"version": "0.18.0",
"js": "main.js"
"version": "0.18.1",
"js": "main.js",
"donation": "https://buymeacoffee.com/tgrosinger"
}

@ -2,6 +2,11 @@
--advanced-tables-helper-size: 28px;
}
.HyperMD-table-row span.cm-inline-code {
font-size: 100%;
padding: 0px;
}
.advanced-tables-buttons>div>.title {
font-weight: var(--font-medium);
font-size: var(--nav-item-size);

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save