/* THIS IS A GENERATED/BUNDLED FILE BY ROLLUP if you want to view the source visit the plugins github repository */ 'use strict'; var obsidian = require('obsidian'); /****************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ function __awaiter(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); } const DEFAULT_SETTINGS = { expansionMode: 'expanded', ignoreNulls: false, nullValue: '', skipKey: 'metatable', ignoredKeys: [], filterKeys: ['metatable', 'frontmatter'], filterMode: 'ignore', autolinks: false, naked: false, vault: null, }; class MetatableSettingTab extends obsidian.PluginSettingTab { constructor(app, plugin) { super(app, plugin); this.plugin = plugin; } display() { return __awaiter(this, void 0, void 0, function* () { const { containerEl, plugin } = this; containerEl.empty(); containerEl.createEl('h2', { text: 'Metatable Settings' }); new obsidian.Setting(containerEl) .setName('Expansion level') .setDesc('Level of expansion of the metatable tree') .addDropdown(drop => drop .addOption('expanded', 'Fully expanded') .addOption('leaf-collapsed', 'Collapse leafs') .addOption('all-collapsed', 'Collapse all') .addOption('root-collapsed', 'Collapse root') .setValue(plugin.settings.expansionMode) .onChange((value) => __awaiter(this, void 0, void 0, function* () { plugin.settings.expansionMode = value; yield plugin.saveSettings(); }))); new obsidian.Setting(containerEl) .setName('Skip key') .setDesc('When this key is found and `true`, the metatable will not be displayed') .addText(text => text .setValue(plugin.settings.skipKey) .onChange((value) => __awaiter(this, void 0, void 0, function* () { plugin.settings.skipKey = value; yield plugin.saveSettings(); }))); containerEl.createEl('h3', { text: 'Nulls' }); new obsidian.Setting(containerEl) .setName('Ignore null values') .setDesc('Ignore any member with a null value.') .addToggle(setting => setting .setValue(plugin.settings.ignoreNulls) .onChange((value) => __awaiter(this, void 0, void 0, function* () { plugin.settings.ignoreNulls = value; yield plugin.saveSettings(); this.display(); }))); if (!plugin.settings.ignoreNulls) { new obsidian.Setting(containerEl) .setName('Null value') .setDesc('Text to show when a key has no value. Defaults to nothing') .addText(text => text .setValue(plugin.settings.nullValue) .onChange((value) => __awaiter(this, void 0, void 0, function* () { plugin.settings.nullValue = value; yield plugin.saveSettings(); }))); } containerEl.createEl('h3', { text: 'Filter' }); new obsidian.Setting(containerEl) .setName('Filter mode') .setDesc('Either ignore or keep the filter keys') .addDropdown(drop => drop .addOption('ignore', 'Ignore') .addOption('keep', 'Keep') .setValue(plugin.settings.filterMode) .onChange((value) => __awaiter(this, void 0, void 0, function* () { plugin.settings.filterMode = value; yield plugin.saveSettings(); }))); new obsidian.Setting(containerEl) .setName('Filter keys') .setDesc('Any empty field will be ignored.'); let keyset = plugin.settings.filterKeys; let filterKeys = containerEl.createEl('ol'); for (const [idx, originalValue] of [...keyset].entries()) { if (originalValue === '') { continue; } addFilterInput(originalValue, filterKeys, keyset, plugin, idx); } new obsidian.Setting(containerEl) .addButton(x => x .setButtonText("Add key") .onClick(() => __awaiter(this, void 0, void 0, function* () { addFilterInput('', filterKeys, keyset, plugin, keyset.length); }))); containerEl.createEl('h3', { text: 'Experimental' }); new obsidian.Setting(containerEl) .setName('Autolink') .setDesc('Enables autolinks for wikilinks `[[target]]`, frontmatter links `%target%` and local links `./deep/target`') .addToggle(setting => setting .setValue(plugin.settings.autolinks) .onChange((value) => __awaiter(this, void 0, void 0, function* () { plugin.settings.autolinks = value; yield plugin.saveSettings(); }))); new obsidian.Setting(containerEl) .setName('Naked') .setDesc('Removes the Shadow DOM and the default CSS so you can bring your own via CSS snippets.') .addToggle(setting => setting .setValue(plugin.settings.naked) .onChange((value) => __awaiter(this, void 0, void 0, function* () { plugin.settings.naked = value; yield plugin.saveSettings(); }))); }); } } function addFilterInput(originalValue, el, keyset, plugin, idx) { const item = el.createEl('li'); const input = item.createEl('input'); item.setAttribute('id', `filter-${idx}`); input.setAttribute('type', 'text'); input.setAttribute('value', originalValue); input.setAttribute('data-prev', originalValue); input.addEventListener('input', (e) => __awaiter(this, void 0, void 0, function* () { let target = e.target; keyset[idx] = target.value; input.setAttribute('data-prev', target.value); plugin.settings.filterKeys = keyset; yield plugin.saveSettings(); })); } /** * A store of rules to apply to set members. * * Only one rule can be assigned to a member. If you add two rules against the * same member key it will only keep the last one. * * ## Example * * ``` * const rules = new RuleStore() * const tagsRule = { toHtml: tagslist, foldable: false } * rules.set('tags', tagsRule) * ``` */ class RuleStore extends Map { } function isEmptyArray(value) { if (typeof value === 'string') { return value === '[]'; } if (Array.isArray(value) && value.length === 0) { return true; } return false; } function toggle(trigger) { const isExpanded = trigger.getAttribute('aria-expanded') == 'true'; trigger.setAttribute('aria-expanded', String(!isExpanded)); } function clickHandler(event, searchFn, openLinkFn) { const trigger = event.target; if (trigger === null || trigger === void 0 ? void 0 : trigger.hasAttribute('aria-expanded')) { event.stopPropagation(); event.preventDefault(); toggle(trigger); return; } if (trigger === null || trigger === void 0 ? void 0 : trigger.hasAttribute('href')) { event.stopPropagation(); const href = trigger.getAttribute('href'); if (trigger.hasClass('internal-link')) { event.preventDefault(); openLinkFn(trigger.dataset.href, ''); } if (trigger.hasClass('tag')) { event.preventDefault(); searchFn(`tag:${href}`); } } } function keyHandler(event) { const trigger = event.target; if ((event.code == 'Space' || event.code == 'Enter') && (trigger === null || trigger === void 0 ? void 0 : trigger.hasAttribute('aria-expanded'))) { event.stopPropagation(); event.preventDefault(); toggle(trigger); } } function externalLink(value) { var _a, _b; const a = document.createElement('a'); // @ts-ignore (_a = a.part) === null || _a === void 0 ? void 0 : _a.add('link'); // @ts-ignore (_b = a.part) === null || _b === void 0 ? void 0 : _b.add('external-link'); a.classList.add('external-link'); a.setAttribute('target', '_blank'); a.setAttribute('rel', 'noopener'); a.setAttribute('href', value); a.append(value); return a; } function obsidianUrl(vaultName, fileName) { return `obsidian://open?vault=${vaultName}&file=${encodeURI(obsidian.getLinkpath(fileName))}`; } function internalLink(url, label) { var _a, _b; const a = document.createElement('a'); const localUrl = url.searchParams.get('file'); // const label = url.searchParams.get('file') a.dataset.href = localUrl; a.setAttribute('href', localUrl); // @ts-ignore (_a = a.part) === null || _a === void 0 ? void 0 : _a.add('link'); // @ts-ignore (_b = a.part) === null || _b === void 0 ? void 0 : _b.add('internal-link'); a.classList.add('internal-link'); a.setAttribute('target', '_blank'); a.setAttribute('rel', 'noopener'); a.append(label ? label : localUrl); return a; } /** /* Creates a link for internal links from a string of the form `[[text]]`. */ function wikiLink(value, vaultName) { const cleanValue = value.slice(2, -2); let url; let label; if (cleanValue.includes('|')) { const [urlValue, labelValue] = cleanValue.split('|'); url = new URL(obsidianUrl(vaultName, urlValue.trim())); label = labelValue.trim(); } else { url = new URL(obsidianUrl(vaultName, cleanValue)); } return internalLink(url, label); } /** /* Creates a link for internal links from a string of the form `%text%`. */ function frontmatterLink(value, vaultName) { const cleanValue = value.slice(1, -1); const url = new URL(obsidianUrl(vaultName, cleanValue)); return internalLink(url); } /** * Creates a link for local paths. */ function localLink(value, vaultName) { const url = new URL(obsidianUrl(vaultName, value)); return internalLink(url); } function isOpen(mode, depth) { if (mode == 'expanded') { return true; } // Keep the root open when leafs are collapsed if (mode == 'leaf-collapsed' && depth == 0) { return true; } // Keep the root close when leafs are opened if (mode == 'root-collapsed' && depth != 0) { return true; } // all-collapsed return false; } function isObsidianUrl(url) { return (url instanceof URL && url.protocol == 'obsidian:'); } function isUrl(url) { const allowedProtocols = ['http:', 'https:', 'evernote:', 'zotero:']; return (url instanceof URL && allowedProtocols.some(protocol => url.protocol == protocol)); } function isLocalLink(value) { return value.startsWith('./'); } function tryUrl(value) { try { return new URL(value); } catch (_) { } } function isWikiLink(value) { return (value.startsWith('[[') && value.endsWith(']]')); } function isFrontmatterLink(value) { return (value.startsWith('%') && value.endsWith('%')); } function enrichValue(value, context) { const { settings, vaultName } = context; const { autolinks } = settings; const cleanValue = value.toString().trim(); if (autolinks) { if (isWikiLink(cleanValue)) { return wikiLink(cleanValue, vaultName); } if (isFrontmatterLink(cleanValue)) { return frontmatterLink(cleanValue, vaultName); } if (isLocalLink(cleanValue)) { return localLink(cleanValue, vaultName); } } const url = tryUrl(cleanValue); if (isObsidianUrl(url)) { return internalLink(url); } if (isUrl(url)) { return externalLink(cleanValue); } return value.toString(); } function isNully(value) { if (typeof value == 'string') { return value.length == 0; } return value == null; } /** * A set member with a scalar value. */ function leafMember(label, data, context) { var _a, _b, _c; const { rules } = context; const root = document.createElement('tr'); const key = document.createElement('th'); const value = document.createElement('td'); const rule = rules.get(label.toLocaleLowerCase()); const datum = (rules.has(label.toLocaleLowerCase()) && !isNully(data)) ? rule.toHtml(data, rule) : enrichValue(data, context); // XXX: Note that `part` is an `Element` extension in draft. Checking for // undefined lets us get away with plain jest dom testing. // @ts-ignore (_a = key.part) === null || _a === void 0 ? void 0 : _a.add('key'); key.classList.add('key'); key.append(label); // @ts-ignore (_b = value.part) === null || _b === void 0 ? void 0 : _b.add('value'); value.classList.add('value'); value.append(datum); // @ts-ignore (_c = root.part) === null || _c === void 0 ? void 0 : _c.add('member'); root.classList.add('member'); root.append(key); root.append(value); return root; } /** * A set member with a complex value. */ function nodeMember(label, value, context) { var _a; const root = details(label, value, Object.assign(Object.assign({}, context), { depth: context.depth + 1 })); // @ts-ignore (_a = root.part) === null || _a === void 0 ? void 0 : _a.add('member'); root.classList.add('member'); return root; } /** * A set member. */ function member(label, value, context) { const { settings } = context; const patchedValue = value == null ? settings.nullValue : value; if (typeof patchedValue == 'object') { return nodeMember(label, value, context); } return leafMember(label, patchedValue, context); } /** * A set of members. */ function set(data, context) { var _a; const { settings, depth } = context; const { filterMode, filterKeys, ignoreNulls } = settings; const valueContext = Object.assign(Object.assign({}, context), { depth: depth + 1 }); const root = document.createElement('table'); // @ts-ignore (_a = root.part) === null || _a === void 0 ? void 0 : _a.add('set'); root.classList.add('set'); Object.entries(data).forEach(([label, value]) => { if (ignoreNulls && (value == null || isEmptyArray(value))) return; if (filterMode == 'ignore') { if (filterKeys.some(key => key == label)) return; } if (filterMode == 'keep') { if (!filterKeys.some(key => key == label)) return; } root.append(member(label, value, valueContext)); }); return root; } /** * A list of members. */ function list(data, context) { const { settings, depth } = context; const valueContext = Object.assign(Object.assign({}, context), { depth: depth + 1 }); const root = document.createElement('ul'); data.forEach((item) => { let value; const li = document.createElement('li'); if (Array.isArray(item)) { value = list(item, valueContext); } else if (typeof item == 'object') { value = set(item, valueContext); } else { value = enrichValue(item, valueContext); } li.append(value); root.append(li); }); return root; } function ordinaryValue(data, context) { return Array.isArray(data) ? list(data, context) : set(data, context); } /** * A collapsible group. */ function details(label, data, context) { var _a, _b, _c; const { settings, rules, depth } = context; const { mode } = settings; const root = document.createElement('tr'); const key = document.createElement('th'); const value = document.createElement('td'); const rule = rules.get(label.toLocaleLowerCase()); const valueId = `${label}-${depth}`; const datum = (rules.has(label.toLocaleLowerCase()) && !isNully(data)) ? rule.toHtml(data, rule) : ordinaryValue(data, Object.assign(Object.assign({}, context), { depth: depth + 1 })); // @ts-ignore (_a = key.part) === null || _a === void 0 ? void 0 : _a.add('key'); key.classList.add('key'); key.append(label); root.append(key); // @ts-ignore (_b = value.part) === null || _b === void 0 ? void 0 : _b.add('value'); value.classList.add('value'); value.setAttribute('id', valueId); value.append(datum); root.append(value); if (rule == undefined || rule.foldable) { const marker = document.createElement('div'); key.classList.add('toggle'); key.setAttribute('role', 'button'); key.setAttribute('aria-expanded', String(isOpen(mode, depth))); key.setAttribute('aria-controls', valueId); key.setAttribute('tabindex', '0'); (_c = marker.part) === null || _c === void 0 ? void 0 : _c.add('marker'); marker.classList.add('marker'); value.append(marker); } return root; } function sheath(data, context) { var _a; const { settings } = context; const root = document.createElement('details'); const summary = document.createElement('summary'); const value = set(data, context); if (isOpen(settings.mode, 0)) { root.setAttribute('open', ''); } summary.append('Metadata'); // @ts-ignore (_a = summary.part) === null || _a === void 0 ? void 0 : _a.add('summary'); root.classList.add('metatable'); root.append(summary); root.append(value); return root; } function metatable(data, context) { const { searchFn, openLinkFn } = context; const fragment = new DocumentFragment(); const root = sheath(data, context); root.addEventListener('click', (e) => clickHandler(e, searchFn, openLinkFn)); root.addEventListener('keydown', keyHandler); fragment.append(root); return fragment; } /** * Transforms a list of dirty tags into HTML. */ function taglist(data, rule) { const list = normaliseTags(data); // No valid tags found. if (list.length == 0) return null; const root = document.createElement('ul'); root.classList.add('tag-list'); list.forEach((item) => { const li = document.createElement('li'); const value = tag(item); li.append(value); root.append(li); }); return root; } /** * Normalises a list of tags as an array of strings. */ function normaliseTags(data) { if (data == null) { return []; } if (typeof data == 'string') { return data.split(',').map(x => x.trim()).filter(x => x && x.length != 0); } return data.filter(x => x && x.length != 0); } function tag(value) { var _a, _b; const a = document.createElement('a'); a.classList.add('tag'); // XXX: Note that `part` is an `Element` extension in draft. Checking for // undefined lets us get away with plain jest dom testing. // @ts-ignore (_a = a.part) === null || _a === void 0 ? void 0 : _a.add('tag'); // @ts-ignore (_b = a.part) === null || _b === void 0 ? void 0 : _b.add(encodeURI(value)); a.setAttribute('target', '_blank'); a.setAttribute('rel', 'noopener'); a.setAttribute('href', `#${value}`); a.append(`${value}`); return a; } var styles = ":host-context(.theme-light) {\n --metatable-foreground: var(--text-muted, darkslategrey);\n --metatable-key-background: var(--background-primary-alt, #f3f3f3);\n --metatable-key-border-color: var(--background-modifier-border, lightgrey);\n --metatable-key-border-color-focus: orange;\n --metatable-key-focus: var(--background-match-highlight, lightyellow);\n --metatable-tag-background: var(--background-primary-alt, #f3f3f3);\n --metatable-link-color: var(--text-accent, #705dcf);\n --metatable-link-color-hover: var(--text-accent-hover, #8875ff);\n --metatable-warning-background: lightgoldenrodyellow;\n --metatable-warning-foreground: brown;\n --metatable-warning-border: 2px solid palegoldenrod;\n}\n\n:host-context(.theme-dark) {\n --metatable-foreground: var(--text-muted, #999);\n --metatable-key-background: var(--background-primary-alt, #111);\n --metatable-key-border-color: var(--background-modifier-border, #333);\n --metatable-key-border-color-focus: orange;\n --metatable-key-focus: black;\n --metatable-tag-background: var(--background-primary-alt, #111);\n --metatable-link-color: var(--text-accent, #705dcf);\n --metatable-link-color-hover: var(--text-accent-hover, #8875ff);\n --metatable-warning-background: inherit;\n --metatable-warning-foreground: gold;\n --metatable-warning-border: 2px solid palegoldenrod;\n}\n\n:host {\n --metatable-background: transparent;\n --metatable-collapsed-symbol: \"▶︎\";\n --metatable-expanded-symbol: \"▼\";\n --metatable-external-link-color-hover: var(--metatable-link-color-hover);\n --metatable-external-link-color: var(--metatable-link-color);\n --metatable-external-link-icon: url(app://obsidian.md/public/images/874d8b8e340f75575caa.svg);\n --metatable-font-family: var(--text, sans-serif);\n --metatable-font-size: var(--font-small, 13px);\n --metatable-internal-link-color-hover: var(--metatable-link-color-hover);\n --metatable-internal-link-color: var(--metatable-link-color);\n --metatable-internal-link-icon: none;\n --metatable-key-border-width: 2px;\n --metatable-mark-symbol: \"…\";\n --metatable-member-gap: 2px;\n --metatable-tag-symbol: \"\";\n --metatable-value-background: transparent;\n}\n\n\n* {\n box-sizing: border-box;\n}\n\ndetails {\n background-color: var(--metatable-background);\n color: var(--metatable-foreground);\n font-family: var(--metatable-font-family);\n font-size: var(--metatable-font-size);\n}\n\nsummary {\n cursor: pointer;\n}\n\nsummary:focus {\n outline: none;\n}\n\nsummary:focus-visible {\n outline: none;\n background-color: var(--metatable-key-focus)\n}\n\n.set {\n background-color: var(--metatable-background);\n display: grid;\n grid-gap: 2px;\n margin-top: 0.4rem;\n}\n\n.member {\n display: grid;\n grid-gap: var(--metatable-member-gap);\n grid-template-columns: minmax(0, 1fr) minmax(0, 4fr);\n grid-template-areas: \"key value\";\n}\n\n.key[role=button] {\n cursor: pointer;\n}\n\n.member .key {\n background-color: var(--metatable-key-background);\n border-right: var(--metatable-key-border-width) solid var(--metatable-key-border-color);\n display: grid;\n grid-template-columns: 10px auto;\n grid-gap: 0.4rem;\n font-weight: bold;\n grid-area: key;\n overflow: hidden;\n padding: 0.4rem;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.member .value {\n background-color: var(--metatable-value-background);\n grid-area: value;\n margin: 0;\n overflow: auto;\n padding: 0.4rem;\n}\n\n.member .key:focus {\n outline: none;\n}\n\n.member .key:focus-visible {\n outline: none;\n border-right-color: var(--metatable-key-border-color-focus);\n background-color: var(--metatable-key-focus);\n}\n\n.value ul {\n margin: 0;\n padding: 0;\n}\n\n.value li {\n margin-left: 1rem;\n}\n\n.key[aria-expanded]::before {\n font-size: 0.6rem;\n padding-top: 0.3rem;\n}\n\n.key[aria-expanded=true]::before {\n content: var(--metatable-expanded-symbol);\n}\n\n.key[aria-expanded=false]::before {\n content: var(--metatable-collapsed-symbol);\n}\n\n.key[aria-expanded=false] + .value > :first-child {\n display: none;\n}\n\n.key[aria-expanded=false] + .value > .marker::after {\n content: var(--metatable-mark-symbol);\n display: block;\n}\n\n@media screen and (min-width: 400px) and (max-width: 550px) {\n .member {\n grid-template-columns: minmax(0, 1.5fr) minmax(0, 3fr);\n }\n .member .member {\n grid-template-areas: \"key key\" \"value value\";\n }\n\n .member .member .key {\n border-right: none;\n border-bottom: var(--metatable-key-border-width) solid var(--metatable-key-border-color);\n }\n\n}\n\n@media screen and (max-width: 400px) {\n .member {\n grid-template-areas: \"key key\" \"value value\";\n }\n\n .member .key {\n border-right: none;\n border-bottom: var(--metatable-key-border-width) solid var(--metatable-key-border-color);\n }\n}\n\n/* Mappers */\n\n.tag-list li {\n display: inline-block;\n margin: 0 0.4rem 0 2px;\n}\n\n.tag {\n background-color: var(--metatable-tag-background);\n border-radius: 1rem;\n color: var(--metatable-foreground);\n display: inline-block;\n padding: 0.1rem 0.6rem;\n text-decoration: none;\n}\n\n.tag::before {\n content: var(--metatable-tag-symbol);\n}\n\n.tag:hover {\n filter: brightness(0.8);\n}\n\n.tag:focus, .external-link:focus, .internal-link:focus {\n outline: none;\n}\n\n.tag:focus-visible, .external-link:focus-visible, .internal-link:focus-visible {\n outline: none;\n background-color: var(--metatable-key-focus)\n}\n\n.external-link {\n color: var(--metatable-external-link-color);\n display: inline-block;\n white-space: nowrap;\n}\n\n.external-link::after {\n content: var(--metatable-external-link-icon);\n display: inline-block;\n margin-left: 0.3rem;\n vertical-align: sub;\n}\n\n.external-link:hover {\n color: var(--metatable-external-link-color-hover);\n}\n\n.internal-link {\n color: var(--metatable-internal-link-color);\n display: inline-block;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 450px;\n white-space: nowrap;\n}\n\n.internal-link::after {\n content: var(--metatable-internal-link-icon);\n display: inline-block;\n margin-left: 0.3rem;\n vertical-align: sub;\n}\n\n.internal-link:hover {\n color: var(--metatable-internal-link-color-hover);\n}\n\n.warning {\n background-color: var(--metatable-warning-background);\n padding: 1rem;\n margin: 0;\n border: var(--metatable-warning-border);\n color: var(--metatable-warning-foreground);\n}\n"; function log(msg) { console.log(`metatable: ${msg}`); } function createMetatable(el, data, context) { const wrapper = el.createEl('div'); const fragment = new DocumentFragment(); wrapper.classList.add('obsidian-metatable'); if (!context.settings.naked) { wrapper.attachShadow({ mode: 'open' }); fragment.createEl('style', { text: styles }); } fragment.append(metatable(data, context)); if (context.settings.naked) { wrapper.append(fragment); } else { wrapper.shadowRoot.append(fragment); } } function createWarning(el, message, context) { const wrapper = el.createEl('div'); const fragment = new DocumentFragment(); wrapper.classList.add('obsidian-metatable'); if (!context.settings.naked) { wrapper.attachShadow({ mode: 'open' }); fragment.createEl('style', { text: styles }); } const warning = el.createEl('p'); warning.classList.add('warning'); warning.append(message); fragment.append(warning); if (context.settings.naked) { wrapper.append(fragment); } else { wrapper.shadowRoot.append(fragment); } } function isEmpty(data) { return Object.entries(data) .every(([_, value]) => value == null || isEmptyArray(value)); } function filterSet(data, filterKeys, filterMode) { const filterFn = filterMode == 'ignore' ? (x => !x) : (x => x); const newData = Object.entries(data) .filter(([key, _value]) => filterFn(filterKeys.some(x => x == key))); return Object.fromEntries(newData); } function frontmatterProcessor(el, ctx) { return __awaiter(this, void 0, void 0, function* () { const plugin = this; const frontmatter = el.querySelector('.frontmatter'); if (frontmatter !== null) { const embed = el.querySelector('.internal-embed'); // If an embed has already been loaded, writing after the embed expression // triggers a re-render for the embedded markdown wrongly injecting the // parent metatable for every keystroke. // // See https://github.com/arnau/obsidian-metatable/issues/12 if (embed !== null) { return; } const target = el.querySelector('.frontmatter-container'); target.style.display = 'none'; // @ts-ignore const searchFn = plugin.app.internalPlugins.getPluginById('global-search').instance.openGlobalSearch.bind(plugin); const openLinkFn = plugin.app.workspace.openLinkText.bind(plugin.app.workspace); const { ignoreNulls, filterMode, filterKeys, skipKey } = plugin.settings; const rules = new RuleStore(); rules.set('tags', { toHtml: taglist, foldable: false, }); const context = { vaultName: plugin.app.vault.getName(), rules, searchFn, openLinkFn, settings: { mode: plugin.settings.expansionMode, ignoreNulls, nullValue: plugin.settings.nullValue, filterKeys, filterMode, autolinks: plugin.settings.autolinks, naked: plugin.settings.naked, }, depth: 0, }; if (ctx.frontmatter) { const data = filterSet(ctx.frontmatter, filterKeys, filterMode); if (ctx.frontmatter[skipKey]) { return; } // Nothing to render if all top-level are null and nulls should be // ignored. if (ignoreNulls && isEmpty(data)) { return; } if (Object.isEmpty(data)) { return; } createMetatable(target.parentNode, data, context); } else { // When null, the frontmatter YAML is invalid. There is no insight to tap // on to give a meaningful error message though. const label = frontmatter.querySelector('.mod-error'); createWarning(target.parentNode, label.textContent, context); } } }); } class MetatablePlugin extends obsidian.Plugin { onload() { return __awaiter(this, void 0, void 0, function* () { yield this.loadSettings(); this.registerMarkdownPostProcessor(frontmatterProcessor.bind(this)); this.addSettingTab(new MetatableSettingTab(this.app, this)); log('loaded'); }); } onunload() { log('unloaded'); } loadSettings() { return __awaiter(this, void 0, void 0, function* () { this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData()); }); } saveSettings() { return __awaiter(this, void 0, void 0, function* () { yield this.saveData(this.settings); }); } } module.exports = MetatablePlugin; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNyYy9zZXR0aW5ncy50cyIsInNyYy9ydWxlLnRzIiwic3JjL3V0aWxzLnRzIiwic3JjL3RhYmxlLnRzIiwic3JjL21hcHBlcnMudHMiLCJzcmMvcGx1Z2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpudWxsLCJuYW1lcyI6WyJQbHVnaW5TZXR0aW5nVGFiIiwiU2V0dGluZyIsImdldExpbmtwYXRoIiwiUGx1Z2luIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdURBO0FBQ08sU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFO0FBQzdELElBQUksU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxLQUFLLFlBQVksQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxVQUFVLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ2hILElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQy9ELFFBQVEsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUNuRyxRQUFRLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFD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Q0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDMUUsS0FBQTtBQUVELElBQUEsT0FBUSxJQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUN4RCxDQUFDO0FBRUQsU0FBUyxHQUFHLENBQUMsS0FBYSxFQUFBOztJQUN4QixNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ3JDLElBQUEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7Ozs7SUFLdEIsQ0FBQSxFQUFBLEdBQUEsQ0FBQyxDQUFDLElBQUksTUFBQSxJQUFBLElBQUEsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7O0lBRWxCLENBQUEsRUFBQSxHQUFBLENBQUMsQ0FBQyxJQUFJLE1BQUUsSUFBQSxJQUFBLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBRTdCLElBQUEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDbEMsSUFBQSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUNqQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFJLENBQUEsRUFBQSxLQUFLLENBQUUsQ0FBQSxDQUFDLENBQUE7QUFDbkMsSUFBQSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFBLENBQUUs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