From 014c61d0e8eabb78c65202eb22a91fa87856671e Mon Sep 17 00:00:00 2001 From: Bram Adams <3282661+bramses@users.noreply.github.com> Date: Sat, 17 Dec 2022 17:35:01 -0600 Subject: [PATCH] vault backup: 2022-12-17 17:35:01 --- .obsidian/community-plugins.json | 3 +- .../wikilinks-to-mdlinks-obsidian/main.js | 154 ++++++++++++++++++ .../manifest.json | 10 ++ .obsidian/workspace.json | 3 +- README.md | 28 ++-- 5 files changed, 183 insertions(+), 15 deletions(-) create mode 100644 .obsidian/plugins/wikilinks-to-mdlinks-obsidian/main.js create mode 100644 .obsidian/plugins/wikilinks-to-mdlinks-obsidian/manifest.json diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index 9b07cbd..ca1742e 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -29,5 +29,6 @@ "obsidian-plugin-update-tracker", "obsidian-linter", "lumberjack-obsidian", - "open-vscode" + "open-vscode", + "wikilinks-to-mdlinks-obsidian" ] \ No newline at end of file diff --git a/.obsidian/plugins/wikilinks-to-mdlinks-obsidian/main.js b/.obsidian/plugins/wikilinks-to-mdlinks-obsidian/main.js new file mode 100644 index 0000000..9b528fd --- /dev/null +++ b/.obsidian/plugins/wikilinks-to-mdlinks-obsidian/main.js @@ -0,0 +1,154 @@ +'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. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var WikilinksToMdlinks = /** @class */ (function (_super) { + __extends(WikilinksToMdlinks, _super); + function WikilinksToMdlinks() { + return _super !== null && _super.apply(this, arguments) || this; + } + WikilinksToMdlinks.prototype.onload = function () { + var _this = this; + console.log('loading wikilinks-to-mdlinks plugin...'); + this.addCommand({ + id: "toggle-wiki-md-links", + name: "Toggle selected wikilink to markdown link and vice versa", + checkCallback: function (checking) { + var currentView = _this.app.workspace.getActiveLeafOfViewType(obsidian.MarkdownView); + if ((currentView == null) || (currentView.getMode() !== 'source')) { + return false; + } + if (!checking) { + _this.toggleLink(); + } + return true; + }, + hotkeys: [{ + modifiers: ["Mod", "Shift"], + key: "L" + }] + }); + }; + WikilinksToMdlinks.prototype.onunload = function () { + console.log('unloading wikilinks-to-mdlinks plugin'); + }; + WikilinksToMdlinks.prototype.toggleLink = function () { + var currentView = this.app.workspace.getActiveLeafOfViewType(obsidian.MarkdownView); + var editor = currentView.sourceMode.cmEditor; + var cursor = editor.getCursor(); + var line = editor.getDoc().getLine(cursor.line); + var regexHasExtension = /^([^\\]*)\.(\w+)$/; + var regexWiki = /\[\[([^\]]+)\]\]/; + var regexParenthesis = /\((.*?)\)/; + var regexWikiGlobal = /\[\[([^\]]*)\]\]/g; + var regexMdGlobal = /\[([^\]]*)\]\(([^\(]*)\)/g; + var wikiMatches = line.match(regexWikiGlobal); + var mdMatches = line.match(regexMdGlobal); + var ifFoundMatch = false; + // If there are wikiMatches find if the cursor is inside the selected text + var i = 0; + if (wikiMatches) { + for (var _i = 0, wikiMatches_1 = wikiMatches; _i < wikiMatches_1.length; _i++) { + var item = wikiMatches_1[_i]; + var temp = line.slice(i, line.length); + var index = i + temp.indexOf(item); + var indexEnd = index + item.length; + i = indexEnd; + if ((cursor.ch >= index) && (cursor.ch <= indexEnd)) { + ifFoundMatch = true; + var text = item.match(regexWiki)[1]; + // Check if it is a markdown file + var matches = text.match(regexHasExtension); + var newText = text; + if (matches) { + var filename = matches[1]; + var extension = matches[2]; + } + else { + newText = newText + ".md"; + } + var encodedText = encodeURI(newText); + var newItem = "[" + text + "](" + encodedText + ")"; + var cursorStart = { + line: cursor.line, + ch: index + }; + var cursorEnd = { + line: cursor.line, + ch: indexEnd + }; + editor.replaceRange(newItem, cursorStart, cursorEnd); + } + } + } + i = 0; + if (ifFoundMatch == false) { + if (mdMatches) { + for (var _a = 0, mdMatches_1 = mdMatches; _a < mdMatches_1.length; _a++) { + var item = mdMatches_1[_a]; + var temp = line.slice(i, line.length); + var index = i + temp.indexOf(item); + var indexEnd = index + item.length; + i = indexEnd; + if ((cursor.ch >= index) && (cursor.ch <= indexEnd)) { + ifFoundMatch = true; + var text = item.match(regexParenthesis)[1]; + text = decodeURI(text); + // Check if it is a markdown file + var matches = text.match(regexHasExtension); + if (matches) { + var filename = matches[1]; + var extension = matches[2]; + if (extension == 'md') { + text = filename; + } + } + var newItem = "[[" + text + "]]"; + var cursorStart = { + line: cursor.line, + ch: index + }; + var cursorEnd = { + line: cursor.line, + ch: indexEnd + }; + editor.replaceRange(newItem, cursorStart, cursorEnd); + } + } + } + } + }; + return WikilinksToMdlinks; +}(obsidian.Plugin)); + +module.exports = WikilinksToMdlinks; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm1haW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgcHJpdmF0ZU1hcCkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcml2YXRlTWFwLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHByaXZhdGVNYXAuc2V0KHJlY2VpdmVyLCB2YWx1ZSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuIiwiaW1wb3J0IHsgc3RyaWN0IH0gZnJvbSAnYXNzZXJ0J1xyXG5pbXBvcnQgeyBBcHAsIE1vZGFsLCBOb3RpY2UsIFBsdWdpbiwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJ1xyXG5pbXBvcnQgeyBNYXJrZG93blZpZXcsIFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWtpbGlua3NUb01kbGlua3MgZXh0ZW5kcyBQbHVnaW4ge1xyXG5cdG9ubG9hZCgpIHtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkaW5nIHdpa2lsaW5rcy10by1tZGxpbmtzIHBsdWdpbi4uLicpXHJcblxyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6IFwidG9nZ2xlLXdpa2ktbWQtbGlua3NcIixcclxuXHRcdFx0bmFtZTogXCJUb2dnbGUgc2VsZWN0ZWQgd2lraWxpbmsgdG8gbWFya2Rvd24gbGluayBhbmQgdmljZSB2ZXJzYVwiLFxyXG5cdFx0XHRjaGVja0NhbGxiYWNrOiAoY2hlY2tpbmc6IGJvb2xlYW4pID0+IHtcclxuXHRcdFx0XHRjb25zdCBjdXJyZW50VmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVMZWFmT2ZWaWV3VHlwZShNYXJrZG93blZpZXcpXHJcblxyXG5cdFx0XHRcdGlmICgoY3VycmVudFZpZXcgPT0gbnVsbCkgfHwgKGN1cnJlbnRWaWV3LmdldE1vZGUoKSAhPT0gJ3NvdXJjZScpKSAge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoIWNoZWNraW5nKSB7XHJcblx0XHRcdFx0XHR0aGlzLnRvZ2dsZUxpbmsoKVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRydWVcclxuXHRcdFx0fSxcclxuXHRcdFx0aG90a2V5czogW3tcclxuXHRcdFx0XHRtb2RpZmllcnM6IFtcIk1vZFwiLCBcIlNoaWZ0XCJdLFxyXG5cdFx0XHRcdGtleTogXCJMXCJcclxuXHRcdFx0fV1cclxuXHRcdH0pXHJcblxyXG5cdH1cclxuXHJcblx0b251bmxvYWQoKSB7XHJcblx0XHRjb25zb2xlLmxvZygndW5sb2FkaW5nIHdpa2lsaW5rcy10by1tZGxpbmtzIHBsdWdpbicpXHJcblx0fVxyXG5cclxuXHR0b2dnbGVMaW5rKCkge1xyXG5cdFx0Y29uc3QgY3VycmVudFZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlTGVhZk9mVmlld1R5cGUoTWFya2Rvd25WaWV3KVxyXG5cdFx0Y29uc3QgZWRpdG9yID0gY3VycmVudFZpZXcuc291cmNlTW9kZS5jbUVkaXRvclxyXG5cclxuXHJcblx0XHRjb25zdCBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yKClcclxuXHRcdGNvbnN0IGxpbmUgPSBlZGl0b3IuZ2V0RG9jKCkuZ2V0TGluZShjdXJzb3IubGluZSk7XHJcblxyXG5cdFx0Y29uc3QgcmVnZXhIYXNFeHRlbnNpb24gPSAvXihbXlxcXFxdKilcXC4oXFx3KykkL1xyXG5cclxuXHRcdGNvbnN0IHJlZ2V4V2lraSA9IC9cXFtcXFsoW15cXF1dKylcXF1cXF0vXHJcblx0XHRjb25zdCByZWdleFBhcmVudGhlc2lzID0gL1xcKCguKj8pXFwpL1xyXG5cdFx0Y29uc3QgcmVnZXhXaWtpR2xvYmFsID0gL1xcW1xcWyhbXlxcXV0qKVxcXVxcXS9nXHJcblx0XHRjb25zdCByZWdleE1kR2xvYmFsID0gL1xcWyhbXlxcXV0qKVxcXVxcKChbXlxcKF0qKVxcKS9nXHJcblxyXG5cdFx0bGV0IHdpa2lNYXRjaGVzID0gbGluZS5tYXRjaChyZWdleFdpa2lHbG9iYWwpXHJcblx0XHRsZXQgbWRNYXRjaGVzID0gbGluZS5tYXRjaChyZWdleE1kR2xvYmFsKVxyXG5cclxuXHRcdGxldCBpZkZvdW5kTWF0Y2ggPSBmYWxzZVxyXG5cclxuXHRcdC8vIElmIHRoZXJlIGFyZSB3aWtpTWF0Y2hlcyBmaW5kIGlmIHRoZSBjdXJzb3IgaXMgaW5zaWRlIHRoZSBzZWxlY3RlZCB0ZXh0XHJcblx0XHRsZXQgaSA9IDBcclxuXHRcdGlmICh3aWtpTWF0Y2hlcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2Ygd2lraU1hdGNoZXMpIHtcclxuXHJcblx0XHRcdFx0bGV0IHRlbXAgPSBsaW5lLnNsaWNlKGksIGxpbmUubGVuZ3RoKVxyXG5cclxuXHRcdFx0XHRsZXQgaW5kZXggPSBpICsgdGVtcC5pbmRleE9mKGl0ZW0pXHJcblx0XHRcdFx0bGV0IGluZGV4RW5kID0gaW5kZXggKyBpdGVtLmxlbmd0aFxyXG5cclxuXHRcdFx0XHRpID0gaW5kZXhFbmRcclxuXHRcdFx0XHRpZiAoKGN1cnNvci5jaCA+PSBpbmRleCApICYmIChjdXJzb3IuY2ggPD0gaW5kZXhFbmQgKSkge1xyXG5cdFx0XHRcdFx0aWZGb3VuZE1hdGNoID0gdHJ1ZVxyXG5cdFx0XHRcdFx0bGV0IHRleHQgPSBpdGVtLm1hdGNoKHJlZ2V4V2lraSlbMV1cclxuXHRcdFx0XHRcdC8vIENoZWNrIGlmIGl0IGlzIGEgbWFya2Rvd24gZmlsZVxyXG5cdFx0XHRcdFx0Y29uc3QgbWF0Y2hlcyA9IHRleHQubWF0Y2gocmVnZXhIYXNFeHRlbnNpb24pO1xyXG5cdFx0XHRcdFx0bGV0IG5ld1RleHQgPSB0ZXh0XHJcblx0XHRcdFx0XHRpZiAobWF0Y2hlcykge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBmaWxlbmFtZSA9IG1hdGNoZXNbMV1cclxuXHRcdFx0XHRcdFx0Y29uc3QgZXh0ZW5zaW9uID0gbWF0Y2hlc1syXVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0bmV3VGV4dCA9IG5ld1RleHQgKyBcIi5tZFwiXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjb25zdCBlbmNvZGVkVGV4dCA9IGVuY29kZVVSSShuZXdUZXh0KVxyXG5cdFx0XHRcdFx0bGV0IG5ld0l0ZW0gPSBgWyR7dGV4dH1dKCR7ZW5jb2RlZFRleHR9KWBcclxuXHJcblx0XHRcdFx0XHRjb25zdCBjdXJzb3JTdGFydCA9IHtcclxuXHRcdFx0XHRcdFx0bGluZTogY3Vyc29yLmxpbmUsXHJcblx0XHRcdFx0XHRcdGNoOiBpbmRleFxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29uc3QgY3Vyc29yRW5kID0ge1xyXG5cdFx0XHRcdFx0XHRsaW5lOiBjdXJzb3IubGluZSxcclxuXHRcdFx0XHRcdFx0Y2g6IGluZGV4RW5kXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VSYW5nZShuZXdJdGVtLCBjdXJzb3JTdGFydCwgY3Vyc29yRW5kKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpID0gMFxyXG5cdFx0aWYgKGlmRm91bmRNYXRjaCA9PSBmYWxzZSkge1xyXG5cdFx0XHRpZiAobWRNYXRjaGVzKSB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIG1kTWF0Y2hlcykge1xyXG5cdFx0XHRcdFx0bGV0IHRlbXAgPSBsaW5lLnNsaWNlKGksIGxpbmUubGVuZ3RoKVxyXG5cdFx0XHRcdFx0bGV0IGluZGV4ID0gaSArIHRlbXAuaW5kZXhPZihpdGVtKVxyXG5cdFx0XHRcdFx0bGV0IGluZGV4RW5kID0gaW5kZXggKyBpdGVtLmxlbmd0aFxyXG5cdFx0XHRcdFx0aSA9IGluZGV4RW5kXHJcblxyXG5cdFx0XHRcdFx0aWYgKChjdXJzb3IuY2ggPj0gaW5kZXggKSAmJiAoY3Vyc29yLmNoIDw9IGluZGV4RW5kICkpIHtcclxuXHRcdFx0XHRcdFx0aWZGb3VuZE1hdGNoID0gdHJ1ZVxyXG5cdFx0XHRcdFx0XHRsZXQgdGV4dCA9IGl0ZW0ubWF0Y2gocmVnZXhQYXJlbnRoZXNpcylbMV1cclxuXHRcdFx0XHRcdFx0dGV4dCA9IGRlY29kZVVSSSh0ZXh0KVxyXG5cclxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgaXQgaXMgYSBtYXJrZG93biBmaWxlXHJcblx0XHRcdFx0XHRcdGNvbnN0IG1hdGNoZXMgPSB0ZXh0Lm1hdGNoKHJlZ2V4SGFzRXh0ZW5zaW9uKTtcclxuXHRcdFx0XHRcdFx0aWYgKG1hdGNoZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBmaWxlbmFtZSA9IG1hdGNoZXNbMV1cclxuXHRcdFx0XHRcdFx0XHRjb25zdCBleHRlbnNpb24gPSBtYXRjaGVzWzJdXHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChleHRlbnNpb24gPT0gJ21kJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGV4dCA9IGZpbGVuYW1lXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGxldCBuZXdJdGVtID0gYFtbJHt0ZXh0fV1dYFxyXG5cclxuXHRcdFx0XHRcdFx0Y29uc3QgY3Vyc29yU3RhcnQgPSB7XHJcblx0XHRcdFx0XHRcdFx0bGluZTogY3Vyc29yLmxpbmUsXHJcblx0XHRcdFx0XHRcdFx0Y2g6IGluZGV4XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgY3Vyc29yRW5kID0ge1xyXG5cdFx0XHRcdFx0XHRcdGxpbmU6IGN1cnNvci5saW5lLFxyXG5cdFx0XHRcdFx0XHRcdGNoOiBpbmRleEVuZFxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGVkaXRvci5yZXBsYWNlUmFuZ2UobmV3SXRlbSwgY3Vyc29yU3RhcnQsIGN1cnNvckVuZCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiJdLCJuYW1lcyI6WyJNYXJrZG93blZpZXciLCJQbHVnaW4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNuQyxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYztBQUN6QyxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxZQUFZLEtBQUssSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDcEYsUUFBUSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDMUcsSUFBSSxPQUFPLGFBQWEs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 diff --git a/.obsidian/plugins/wikilinks-to-mdlinks-obsidian/manifest.json b/.obsidian/plugins/wikilinks-to-mdlinks-obsidian/manifest.json new file mode 100644 index 0000000..12ee2fa --- /dev/null +++ b/.obsidian/plugins/wikilinks-to-mdlinks-obsidian/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "wikilinks-to-mdlinks-obsidian", + "name": "Wikilinks to MDLinks", + "version": "0.0.12", + "minAppVersion": "0.9.12", + "description": "A plugin that converts wikilinks to markdown links and vice versa", + "author": "Agatha Uy", + "authorUrl": "https://github.com/agathauy", + "isDesktopOnly": false +} diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index a295c8d..1c42cd8 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -100,7 +100,8 @@ } ], "direction": "horizontal", - "width": 300 + "width": 300, + "collapsed": true }, "right": { "id": "b2837026535a9eaa", diff --git a/README.md b/README.md index fb2e531..7fa3401 100644 --- a/README.md +++ b/README.md @@ -566,27 +566,27 @@ I use my CRM to keep track of important days like birthdays as well as items dis ### Ribbon Commands -![[Screenshot 2022-12-17 17-18-40.png]] - Add a quick thought to Project_Name/Scratchpad. Good for project specific thoughts. +![Screenshot 2022-12-17 17-18-40.png](Screenshot%202022-12-17%2017-18-40.png) - Add a quick thought to Project_Name/Scratchpad. Good for project specific thoughts. -![[Screenshot 2022-12-17 17-18-53.png]] - Create a new task in a project kanban. Good for an open specific project task. +![Screenshot 2022-12-17 17-18-53.png](Screenshot%202022-12-17%2017-18-53.png) - Create a new task in a project kanban. Good for an open specific project task. -![[Screenshot 2022-12-17 17-18-44.png]] - create a new project with an optional Kanban Board, Resources page, and Scratchpad. +![Screenshot 2022-12-17 17-18-44.png](Screenshot%202022-12-17%2017-18-44.png) - create a new project with an optional Kanban Board, Resources page, and Scratchpad. -![[Screenshot 2022-12-17 17-18-58.png]] - Lint a file. Can also by triggered with `cmd + s` +![Screenshot 2022-12-17 17-18-58.png](Screenshot%202022-12-17%2017-18-58.png) - Lint a file. Can also by triggered with `cmd + s` -![[Screenshot 2022-12-17 17-19-03.png]] - capture a thought to your daily note (if it exists) +![Screenshot 2022-12-17 17-19-03.png](Screenshot%202022-12-17%2017-19-03.png) - capture a thought to your daily note (if it exists) -![[Screenshot 2022-12-17 17-19-10.png]] - Insert a link to another Zettel using the **Luhmann** plugin +![Screenshot 2022-12-17 17-19-10.png](Screenshot%202022-12-17%2017-19-10.png) - Insert a link to another Zettel using the **Luhmann** plugin -![[Screenshot 2022-12-17 17-19-15.png]] - open daily note +![Screenshot 2022-12-17 17-19-15.png](Screenshot%202022-12-17%2017-19-15.png) - open daily note -![[Screenshot 2022-12-17 17-19-19.png]] - move a zettelkasten note from the root to the `Private` folder +![Screenshot 2022-12-17 17-19-19.png](Screenshot%202022-12-17%2017-19-19.png) - move a zettelkasten note from the root to the `Private` folder -![[Screenshot 2022-12-17 17-19-24.png]] - Open a map view of all your notes using the **Map View** plugin. Looks for `location: [lat,long]` in frontmatter +![Screenshot 2022-12-17 17-19-24.png](Screenshot%202022-12-17%2017-19-24.png) - Open a map view of all your notes using the **Map View** plugin. Looks for `location: [lat,long]` in frontmatter -![[Screenshot 2022-12-17 17-19-28.png]] - open a new Excalidraw drawing using the **Excalidraw** plugin +![Screenshot 2022-12-17 17-19-28.png](Screenshot%202022-12-17%2017-19-28.png) - open a new Excalidraw drawing using the **Excalidraw** plugin -![[Screenshot 2022-12-17 17-19-36.png]] - Open active file (and vault) in VSCode +![Screenshot 2022-12-17 17-19-36.png](Screenshot%202022-12-17%2017-19-36.png) - Open active file (and vault) in VSCode @@ -650,9 +650,9 @@ Publish is another official obsidian paid service that allows you to share your shortcuts are small bits of code that run on your phone. The small workflows allow for macro style functionality. In the near future I will publish the shortcuts that I use daily in a sister repo. -### Mobile Integration (General) +## Mobile Integration (General) -`todo` +In BHOV-2023, mobile is mainly used for "upstream" and "downstream" work. Upstream work is raw note insertion. On my phone, I have a "battalion" of shortcuts that manage putting notes into my Obsidian vault. From there, I do most of my processing work on the computer. ## Installation @@ -777,6 +777,8 @@ The following is a list of these plugins as well as a one sentence blurb of how - Note Refactor - [Frontmatter Links](obsidian://show-plugin?id=frontmatter-links) - If you have URLs in your frontmatter/sources, this plugin is for you. Gives the ability to click links in YAML and open in the browser +- [WikiLinks to MDLinks](obsidian://show-plugin?id=wikilinks-to-mdlinks-obsidian) + - Used to make the process of getting screenshots into BHOV for the GitHub README. Helpful if you're doing something similar! ### Migration Guide for Current Obsidian Users