added first true commit
This commit is contained in:
1 parent
d8ce45f44a
commit
c5605678f0
463 files changed
+175645
No files matched your search
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"attachmentFolderPath": "Attachments",
|
||||
"alwaysUpdateLinks": true,
|
||||
"livePreview": true,
|
||||
"defaultViewMode": "source",
|
||||
"promptDelete": false
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
[
|
||||
"templater-obsidian"
|
||||
]
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"file-explorer": true,
|
||||
"global-search": true,
|
||||
"switcher": true,
|
||||
"graph": true,
|
||||
"backlink": true,
|
||||
"outgoing-link": false,
|
||||
"tag-pane": true,
|
||||
"page-preview": true,
|
||||
"daily-notes": true,
|
||||
"templates": true,
|
||||
"note-composer": true,
|
||||
"command-palette": true,
|
||||
"slash-command": false,
|
||||
"editor-status": true,
|
||||
"markdown-importer": true,
|
||||
"zk-prefixer": true,
|
||||
"random-note": true,
|
||||
"outline": true,
|
||||
"word-count": false,
|
||||
"slides": false,
|
||||
"audio-recorder": false,
|
||||
"workspaces": true,
|
||||
"file-recovery": true,
|
||||
"publish": false,
|
||||
"sync": false,
|
||||
"canvas": true,
|
||||
"properties": false,
|
||||
"bookmarks": true,
|
||||
"footnotes": false,
|
||||
"bases": true,
|
||||
"webviewer": false
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"folder": "Daily",
|
||||
"template": "Templates/Daily Note Template"
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"editor:insert-wikilink": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt",
|
||||
"Shift"
|
||||
],
|
||||
"key": "L"
|
||||
}
|
||||
],
|
||||
"zk-prefixer": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt",
|
||||
"Shift"
|
||||
],
|
||||
"key": "N"
|
||||
}
|
||||
],
|
||||
"templater-obsidian:insert-templater": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt",
|
||||
"Shift"
|
||||
],
|
||||
"key": "T"
|
||||
}
|
||||
],
|
||||
"daily-notes": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt",
|
||||
"Shift"
|
||||
],
|
||||
"key": "D"
|
||||
}
|
||||
]
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"command_timeout": 5,
|
||||
"templates_folder": "Templates",
|
||||
"templates_pairs": [
|
||||
[
|
||||
"",
|
||||
""
|
||||
]
|
||||
],
|
||||
"trigger_on_file_creation": false,
|
||||
"auto_jump_to_cursor": false,
|
||||
"enable_system_commands": false,
|
||||
"shell_path": "",
|
||||
"user_scripts_folder": "",
|
||||
"enable_folder_templates": true,
|
||||
"folder_templates": [
|
||||
{
|
||||
"folder": "",
|
||||
"template": ""
|
||||
}
|
||||
],
|
||||
"enable_file_templates": false,
|
||||
"file_templates": [
|
||||
{
|
||||
"regex": ".*",
|
||||
"template": ""
|
||||
}
|
||||
],
|
||||
"syntax_highlighting": true,
|
||||
"syntax_highlighting_mobile": false,
|
||||
"enabled_templates_hotkeys": [
|
||||
""
|
||||
],
|
||||
"startup_templates": [
|
||||
""
|
||||
],
|
||||
"intellisense_render": 1
|
||||
}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||
if you want to view the source, please visit the github repository of this plugin
|
||||
*/
|
||||
|
||||
var va=Object.create;var Rn=Object.defineProperty;var wa=Object.getOwnPropertyDescriptor;var ba=Object.getOwnPropertyNames;var Ea=Object.getPrototypeOf,Ta=Object.prototype.hasOwnProperty;var Vi=n=>Rn(n,"__esModule",{value:!0});var ka=(n,e)=>{Vi(n);for(var t in e)Rn(n,t,{get:e[t],enumerable:!0})},Sa=(n,e,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ba(e))!Ta.call(n,r)&&r!=="default"&&Rn(n,r,{get:()=>e[r],enumerable:!(t=wa(e,r))||t.enumerable});return n},X=n=>Sa(Vi(Rn(n!=null?va(Ea(n)):{},"default",n&&n.__esModule&&"default"in n?{get:()=>n.default,enumerable:!0}:{value:n,enumerable:!0})),n);var zi=(()=>{for(var n=new Uint8Array(128),e=0;e<64;e++)n[e<26?e+65:e<52?e+71:e<62?e-4:e*4-205]=e;return t=>{for(var r=t.length,i=new Uint8Array((r-(t[r-1]=="=")-(t[r-2]=="="))*3/4|0),o=0,a=0;o<r;){var l=n[t.charCodeAt(o++)],c=n[t.charCodeAt(o++)],d=n[t.charCodeAt(o++)],m=n[t.charCodeAt(o++)];i[a++]=l<<2|c>>4,i[a++]=c<<4|d>>2,i[a++]=d<<6|m}return i}})();ka(exports,{default:()=>Fi});var Er=X(require("obsidian"));var L=X(require("obsidian"));var Ji=X(require("obsidian"));function oe(n){let e=new Ji.Notice("",8e3),t=createFragment(r=>{r.createEl("b",{text:"Templater Error"}),r.createEl("span",{text:":"}),r.createEl("br"),r.createEl("span",{text:n.message}),n instanceof P&&n.console_msg&&(r.createEl("br"),r.createEl("span",{text:"Check console for more information"}),console.error("Templater Error:",n.message,`
|
||||
`,n.console_msg))});e.noticeEl.appendChild(t)}var P=class extends Error{constructor(e,t){super(e);this.console_msg=t;this.name=this.constructor.name,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}};async function Se(n,e){try{return await n()}catch(t){return t instanceof P?oe(t):oe(new P(e,t.message)),null}}function Ce(n,e){try{return n()}catch(t){return oe(new P(e,t.message)),null}}var re=function(){function n(){}return n.explainIfInvalidTSDocTagName=function(e){if(e[0]!=="@")return'A TSDoc tag name must start with an "@" symbol';if(!n._tsdocTagNameRegExp.test(e))return"A TSDoc tag name must start with a letter and contain only letters and numbers"},n.validateTSDocTagName=function(e){var t=n.explainIfInvalidTSDocTagName(e);if(t)throw new Error(t)},n.explainIfInvalidLinkUrl=function(e){if(e.length===0)return"The URL cannot be empty";if(!n._urlSchemeRegExp.test(e))return'An @link URL must begin with a scheme comprised only of letters and numbers followed by "://". (For general URLs, use an HTML "<a>" tag instead.)';if(!n._urlSchemeAfterRegExp.test(e))return'An @link URL must have at least one character after "://"'},n.explainIfInvalidHtmlName=function(e){if(!n._htmlNameRegExp.test(e))return"An HTML name must be an ASCII letter followed by zero or more letters, digits, or hyphens"},n.validateHtmlName=function(e){var t=n.explainIfInvalidHtmlName(e);if(t)throw new Error(t)},n.explainIfInvalidPackageName=function(e){if(e.length===0)return"The package name cannot be an empty string";if(!n._validPackageNameRegExp.test(e))return"The package name ".concat(JSON.stringify(e)," is not a valid package name")},n.explainIfInvalidImportPath=function(e,t){if(e.length>0){if(e.indexOf("//")>=0)return'An import path must not contain "//"';if(e[e.length-1]==="/")return'An import path must not end with "/"';if(!t&&e[0]==="/")return'An import path must not start with "/" unless prefixed by a package name'}},n.isSystemSelector=function(e){return n._systemSelectors.has(e)},n.explainIfInvalidUnquotedIdentifier=function(e){if(e.length===0)return"The identifier cannot be an empty string";if(n._identifierBadCharRegExp.test(e))return"The identifier cannot non-word characters";if(n._identifierNumberStartRegExp.test(e))return"The identifier must not start with a number"},n.explainIfInvalidUnquotedMemberIdentifier=function(e){var t=n.explainIfInvalidUnquotedIdentifier(e);if(t!==void 0)return t;if(n.isSystemSelector(e))return'The identifier "'.concat(e,'" must be quoted because it is a TSDoc system selector name')},n._tsdocTagNameRegExp=/^@[a-z][a-z0-9]*$/i,n._urlSchemeRegExp=/^[a-z][a-z0-9]*\:\/\//i,n._urlSchemeAfterRegExp=/^[a-z][a-z0-9]*\:\/\/./i,n._htmlNameRegExp=/^[a-z]+[a-z0-9\-]*$/i,n._identifierBadCharRegExp=/[^a-z0-9_$]/i,n._identifierNumberStartRegExp=/^[0-9]/,n._validPackageNameRegExp=/^(?:@[a-z0-9\-_\.]+\/)?[a-z0-9\-_\.]+$/i,n._systemSelectors=new Set(["instance","static","constructor","class","enum","function","interface","namespace","type","variable"]),n}();var Pr=function(){function n(){this._docNodeDefinitionsByKind=new Map,this._docNodeDefinitionsByConstructor=new Map}return n.prototype.registerDocNodes=function(e,t){var r=re.explainIfInvalidPackageName(e);if(r)throw new Error("Invalid NPM package name: "+r);for(var i=0,o=t;i<o.length;i++){var a=o[i];if(!n._nodeKindRegExp.test(a.docNodeKind))throw new Error("The DocNode kind ".concat(JSON.stringify(a.docNodeKind)," is not a valid identifier.")+" It must start with an underscore or letter, and be comprised of letters, numbers, and underscores");var l=this._docNodeDefinitionsByKind.get(a.docNodeKind);if(l!==void 0)throw new Error('The DocNode kind "'.concat(a.docNodeKind,'" was already registered')+" by ".concat(l.packageName));if(l=this._docNodeDefinitionsByConstructor.get(a.constructor),l!==void 0)throw new Error("This DocNode constructor was already registered by ".concat(l.packageName)+" as ".concat(l.docNodeKind));var c={docNodeKind:a.docNodeKind,constructor:a.constructor,packageName:e,allowedChildKinds:new Set};this._docNodeDefinitionsByKind.set(a.docNodeKind,c),this._docNodeDefinitionsByConstructor.set(a.constructor,c)}},n.prototype.throwIfNotRegisteredKind=function(e){if(!this._docNodeDefinitionsByKind.has(e))throw new Error('The DocNode kind "'.concat(e,'" was not registered with this TSDocConfiguration'))},n.prototype.registerAllowableChildren=function(e,t){for(var r=this._getDefinition(e),i=0,o=t;i<o.length;i++){var a=o[i];this._getDefinition(a),r.allowedChildKinds.add(a)}},n.prototype.isAllowedChild=function(e,t){var r=this._getDefinition(e);return r.allowedChildKinds.has(t)},n.prototype._getDefinition=function(e){var t=this._docNodeDefinitionsByKind.get(e);if(t===void 0)throw new Error('The DocNode kind "'.concat(e,'" was not registered with this TSDocConfiguration'));return t},n._nodeKindRegExp=/^[_a-z][_a-z0-9]*$/i,n}();var U;(function(n){n.Core="Core",n.Extended="Extended",n.Discretionary="Discretionary",n.None="None"})(U||(U={}));var
Line truncated
|
||||
`:this.range.toString()},n}();var Oa=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),y;(function(n){n.Spacing="Spacing",n.BlockTag="BlockTag",n.CodeSpan_OpeningDelimiter="CodeSpan_OpeningDelimiter",n.CodeSpan_Code="CodeSpan_Code",n.CodeSpan_ClosingDelimiter="CodeSpan_ClosingDelimiter",n.DeclarationReference_PackageName="DeclarationReference_PackageName",n.DeclarationReference_ImportPath="DeclarationReference_ImportPath",n.DeclarationReference_ImportHash="DeclarationReference_ImportHash",n.ErrorText="ErrorText",n.NonstandardText="NonstandardText",n.EscapedText="EscapedText",n.FencedCode_OpeningFence="FencedCode_OpeningFence",n.FencedCode_Language="FencedCode_Language",n.FencedCode_Code="FencedCode_Code",n.FencedCode_ClosingFence="FencedCode_ClosingFence",n.HtmlAttribute_Name="HtmlAttribute_Name",n.HtmlAttribute_Equals="HtmlAttribute_Equals",n.HtmlAttribute_Value="HtmlAttribute_Value",n.HtmlEndTag_OpeningDelimiter="HtmlEndTag_OpeningDelimiter",n.HtmlEndTag_Name="HtmlEndTag_Name",n.HtmlEndTag_ClosingDelimiter="HtmlEndTag_ClosingDelimiter",n.HtmlStartTag_OpeningDelimiter="HtmlStartTag_OpeningDelimiter",n.HtmlStartTag_Name="HtmlStartTag_Name",n.HtmlStartTag_ClosingDelimiter="HtmlStartTag_ClosingDelimiter",n.InlineTag_OpeningDelimiter="InlineTag_OpeningDelimiter",n.InlineTag_TagName="InlineTag_TagName",n.InlineTag_TagContent="InlineTag_TagContent",n.InlineTag_ClosingDelimiter="InlineTag_ClosingDelimiter",n.LinkTag_UrlDestination="LinkTag_UrlDestination",n.LinkTag_Pipe="LinkTag_Pipe",n.LinkTag_LinkText="LinkTag_LinkText",n.MemberIdentifier_LeftQuote="MemberIdentifier_LeftQuote",n.MemberIdentifier_Identifier="MemberIdentifier_Identifier",n.MemberIdentifier_RightQuote="MemberIdentifier_RightQuote",n.MemberReference_Dot="MemberReference_Dot",n.MemberReference_LeftParenthesis="MemberReference_LeftParenthesis",n.MemberReference_Colon="MemberReference_Colon",n.MemberReference_RightParenthesis="MemberReference_RightParenthesis",n.MemberSelector="MemberSelector",n.DocMemberSymbol_LeftBracket="DocMemberSymbol_LeftBracket",n.DocMemberSymbol_RightBracket="DocMemberSymbol_RightBracket",n.ParamBlock_ParameterName="ParamBlock_ParameterName",n.ParamBlock_Hyphen="ParamBlock_Hyphen",n.PlainText="PlainText",n.SoftBreak="SoftBreak"})(y||(y={}));var j=function(n){Oa(e,n);function e(t){var r=n.call(this,t)||this;if(t.excerptKind===y.Spacing)for(var i=0,o=t.content.tokens;i<o.length;i++){var a=o[i];switch(a.kind){case u.Spacing:case u.Newline:case u.EndOfInput:break;default:throw new Error("The excerptKind=Spacing but the range contains a non-whitespace token")}}return r._excerptKind=t.excerptKind,r._content=t.content,r}return Object.defineProperty(e.prototype,"kind",{get:function(){return g.Excerpt},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"excerptKind",{get:function(){return this._excerptKind},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"content",{get:function(){return this._content},enumerable:!1,configurable:!0}),e}(T);var Ba=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),Yn=function(n){Ba(e,n);function e(t){var r=n.call(this,t)||this;return re.validateTSDocTagName(t.tagName),r._tagName=t.tagName,r._tagNameWithUpperCase=t.tagName.toUpperCase(),T.isParsedParameters(t)&&(r._tagNameExcerpt=new j({configuration:r.configuration,excerptKind:y.BlockTag,content:t.tagNameExcerpt})),r}return Object.defineProperty(e.prototype,"kind",{get:function(){return g.BlockTag},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tagName",{get:function(){return this._tagName},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tagNameWithUpperCase",{get:function(){return this._tagNameWithUpperCase},enumerable:!1,configurable:!0}),e.prototype.onGetChildNodes=function(){return[this._tagNameExcerpt]},e.prototype.getTokenSequence=function(){if(!this._tagNameExcerpt)throw new Error("DocBlockTag.getTokenSequence() failed because this object did not originate from a parsed input");return this._tagNameExcerpt.content},e}(T);var Ia=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}|
Line truncated
|
||||
`,this._emitCommentFraming=!0,this._lineState=he.Closed,this._previousLineHadContent=!1,this._hangingParagraph=!1}return n.prototype.renderComment=function(e,t){this._emitCommentFraming=!0,this._renderCompleteObject(e,t)},n.prototype.renderHtmlTag=function(e,t){this._emitCommentFraming=!1,this._renderCompleteObject(e,t)},n.prototype.renderDeclarationReference=function(e,t){this._emitCommentFraming=!1,this._renderCompleteObject(e,t)},n.prototype._renderCompleteObject=function(e,t){this._output=e,this._lineState=he.Closed,this._previousLineHadContent=!1,this._hangingParagraph=!1,this._renderNode(t),this._writeEnd()},n.prototype._renderNode=function(e){var t=this;if(e!==void 0)switch(e.kind){case g.Block:var r=e;this._ensureLineSkipped(),this._renderNode(r.blockTag),r.blockTag.tagNameWithUpperCase===G.returns.tagNameWithUpperCase&&(this._writeContent(" "),this._hangingParagraph=!0),this._renderNode(r.content);break;case g.BlockTag:var i=e;this._lineState===he.MiddleOfLine&&this._writeContent(" "),this._writeContent(i.tagName);break;case g.CodeSpan:var o=e;this._writeContent("`"),this._writeContent(o.code),this._writeContent("`");break;case g.Comment:var a=e;this._renderNodes(qr(qr(qr([a.summarySection,a.remarksBlock,a.privateRemarks,a.deprecatedBlock,a.params,a.typeParams,a.returnsBlock],a.customBlocks,!0),a.seeBlocks,!0),[a.inheritDocTag],!1)),a.modifierTagSet.nodes.length>0&&(this._ensureLineSkipped(),this._renderNodes(a.modifierTagSet.nodes));break;case g.DeclarationReference:var l=e;this._writeContent(l.packageName),this._writeContent(l.importPath),(l.packageName!==void 0||l.importPath!==void 0)&&this._writeContent("#"),this._renderNodes(l.memberReferences);break;case g.ErrorText:var c=e;this._writeContent(c.text);break;case g.EscapedText:var d=e;this._writeContent(d.encodedText);break;case g.FencedCode:var m=e;this._ensureAtStartOfLine(),this._writeContent("```"),this._writeContent(m.language),this._writeNewline(),this._writeContent(m.code),this._writeContent("```"),this._writeNewline(),this._writeNewline();break;case g.HtmlAttribute:var _=e;this._writeContent(_.name),this._writeContent(_.spacingAfterName),this._writeContent("="),this._writeContent(_.spacingAfterEquals),this._writeContent(_.value),this._writeContent(_.spacingAfterValue);break;case g.HtmlEndTag:var w=e;this._writeContent("</"),this._writeContent(w.name),this._writeContent(">");break;case g.HtmlStartTag:var b=e;this._writeContent("<"),this._writeContent(b.name),this._writeContent(b.spacingAfterName);for(var S=b.spacingAfterName===void 0||b.spacingAfterName.length===0,k=0,E=b.htmlAttributes;k<E.length;k++){var O=E[k];S&&this._writeContent(" "),this._renderNode(O),S=O.spacingAfterValue===void 0||O.spacingAfterValue.length===0}this._writeContent(b.selfClosingTag?"/>":">");break;case g.InheritDocTag:var $=e;this._renderInlineTag($,function(){$.declarationReference&&(t._writeContent(" "),t._renderNode($.declarationReference))});break;case g.InlineTag:var K=e;this._renderInlineTag(K,function(){K.tagContent.length>0&&(t._writeContent(" "),t._writeContent(K.tagContent))});break;case g.LinkTag:var D=e;this._renderInlineTag(D,function(){(D.urlDestination!==void 0||D.codeDestination!==void 0)&&(D.urlDestination!==void 0?(t._writeContent(" "),t._writeContent(D.urlDestination)):D.codeDestination!==void 0&&(t._writeContent(" "),t._renderNode(D.codeDestination))),D.linkText!==void 0&&(t._writeContent(" "),t._writeContent("|"),t._writeContent(" "),t._writeContent(D.linkText))});break;case g.MemberIdentifier:var H=e;H.hasQuotes?(this._writeContent('"'),this._writeContent(H.identifier),this._writeContent('"')):this._writeContent(H.identifier);break;case g.MemberReference:var F=e;F.hasDot&&this._writeContent("."),F.selector&&this._writeContent("("),F.memberSymbol?this._renderNode(F.memberSymbol):this._renderNode(F.memberIdentifier),F.selector&&(this._writeContent(":"),this._renderNode(F.selector),this._writeContent(")"));break;case g.MemberSelector:var J=e;this._writeContent(J.selector);break;case g.MemberSymbol:var te=e;this._writeContent("["),this._renderNode(te.symbolReference),this._writeContent("]");break;case g.Section:var ne=e;this._renderNodes(ne.nodes);break;case g.Paragraph:var Q=Fr.trimSpacesInParagraph(e);Q.nodes.length>0&&(this._hangingParagraph?this._hangingParagraph=!1:this._ensureLineSkipped(),this._renderNodes(Q.nodes),this._writeNewline());break;case g.ParamBlock:var h=e;this._ensureLineSkipped(),this._renderNode(h.blockTag),this._writeContent(" "),this._writeContent(h.parameterName),this._writeContent(" - "),this._hangingParagraph=!0,this._renderNode(h.content),this._hangingParagraph=!1;break;case g.ParamCollection:var C=e;this._renderNodes(C.blocks);break;case g.PlainText:var f=e;this._writeContent(f.text);break}},n.prototype._renderInlineTag=function(e,t){this._writeContent("{"),this._writeContent(e.tagName),t(),this._writeContent("}")},n.prototype._renderNodes=function(e){for(var t=0,r=e;t<r.length;t++){var i=r[t];this._renderNode(i)}},
Line truncated
|
||||
`?(++t,r=1):++r)}return{line:t,column:r}},n.prototype._validateBounds=function(){if(this.pos<0)throw new Error("TextRange.pos cannot be negative");if(this.end<0)throw new Error("TextRange.end cannot be negative");if(this.end<this.pos)throw new Error("TextRange.end cannot be smaller than TextRange.pos");if(this.pos>this.buffer.length)throw new Error("TextRange.pos cannot exceed the associated text buffer length");if(this.end>this.buffer.length)throw new Error("TextRange.end cannot exceed the associated text buffer length")},n.empty=new n("",0,0),n}();var hn=function(){function n(e){this.messageId=e.messageId,this.unformattedText=e.messageText,this.textRange=e.textRange,this.tokenSequence=e.tokenSequence,this.docNode=e.docNode,this._text=void 0}return n._formatMessageText=function(e,t){if(e||(e="An unknown error occurred"),t.pos!==0||t.end!==0){var r=t.getLocation(t.pos);if(r.line)return"(".concat(r.line,",").concat(r.column,"): ")+e}return e},Object.defineProperty(n.prototype,"text",{get:function(){return this._text===void 0&&(this._text=n._formatMessageText(this.unformattedText,this.textRange)),this._text},enumerable:!1,configurable:!0}),n.prototype.toString=function(){return this.text},n}();var Lr=function(){function n(){this._messages=[]}return Object.defineProperty(n.prototype,"messages",{get:function(){return this._messages},enumerable:!1,configurable:!0}),n.prototype.addMessage=function(e){this._messages.push(e)},n.prototype.addMessageForTextRange=function(e,t,r){this.addMessage(new hn({messageId:e,messageText:t,textRange:r}))},n.prototype.addMessageForTokenSequence=function(e,t,r,i){this.addMessage(new hn({messageId:e,messageText:t,textRange:r.getContainingTextRange(),tokenSequence:r,docNode:i}))},n.prototype.addMessageForDocErrorText=function(e){var t;e.textExcerpt?t=e.textExcerpt:t=e.errorLocation,this.addMessage(new hn({messageId:e.messageId,messageText:e.errorMessage,textRange:t.getContainingTextRange(),tokenSequence:t,docNode:e}))},n}();var Hr=function(){function n(e,t){this.commentRange=ze.empty,this.lines=[],this.tokens=[],this.configuration=e,this.sourceRange=t,this.docComment=new Gn({configuration:this.configuration}),this.log=new Lr}return n}();var yt=function(){function n(e){this.parserContext=e.parserContext,this._startIndex=e.startIndex,this._endIndex=e.endIndex,this._validateBounds()}return n.createEmpty=function(e){return new n({parserContext:e,startIndex:0,endIndex:0})},Object.defineProperty(n.prototype,"startIndex",{get:function(){return this._startIndex},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"endIndex",{get:function(){return this._endIndex},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"tokens",{get:function(){return this.parserContext.tokens.slice(this._startIndex,this._endIndex)},enumerable:!1,configurable:!0}),n.prototype.getNewSequence=function(e,t){return new n({parserContext:this.parserContext,startIndex:e,endIndex:t})},n.prototype.getContainingTextRange=function(){return this.isEmpty()?ze.empty:this.parserContext.sourceRange.getNewRange(this.parserContext.tokens[this._startIndex].range.pos,this.parserContext.tokens[this._endIndex-1].range.end)},n.prototype.isEmpty=function(){return this._startIndex===this._endIndex},n.prototype.toString=function(){return this.tokens.map(function(e){return e.toString()}).join("")},n.prototype._validateBounds=function(){if(this.startIndex<0)throw new Error("TokenSequence.startIndex cannot be negative");if(this.endIndex<0)throw new Error("TokenSequence.endIndex cannot be negative");if(this.endIndex<this.startIndex)throw new Error("TokenSequence.endIndex cannot be smaller than TokenSequence.startIndex");if(this.startIndex>this.parserContext.tokens.length)throw new Error("TokenSequence.startIndex cannot exceed the associated token array");if(this.endIndex>this.parserContext.tokens.length)throw new Error("TokenSequence.endIndex cannot exceed the associated token array")},n}();var pe;(function(n){n[n.BeginComment1=0]="BeginComment1",n[n.BeginComment2=1]="BeginComment2",n[n.CollectingFirstLine=2]="CollectingFirstLine",n[n.CollectingLine=3]="CollectingLine",n[n.AdvancingLine=4]="AdvancingLine",n[n.Done=5]="Done"})(pe||(pe={}));var no=function(){function n(){}return n.extract=function(e){for(var t=e.sourceRange,r=t.buffer,i=0,o=0,a=0,l=0,c=t.pos,d=pe.BeginComment1,m=[];d!==pe.Done;){if(c>=t.end)switch(d){case pe.BeginComment1:case pe.BeginComment2:return e.log.addMessageForTextRange(v.CommentNotFound,'Expecting a "/**" comment',t),!1;default:return e.log.addMessageForTextRange(v.CommentMissingClosingDelimiter,"Unexpected end of input",t),!1}var _=r[c],w=c;++c;var b=c<t.end?r[c]:"";switch(d){case pe.BeginComment1:if(_==="/"&&b==="*")i=w,++c,d=pe.BeginComment2;else if(!n._whitespaceCharacterRegExp.test(_))return e.log.addMessageForTextRange(v.CommentOpeningDelimiterSyntax,'Expecting a leading "/**"',t.getNewRange(w,w+1)),!1;break;case pe.BeginComment2:if(_==="*")b===" "&&++c,a=c,l=c,d=pe.CollectingFirstLine
Line truncated
|
||||
`?((d!==pe.CollectingFirstLine||l>a)&&m.push(t.getNewRange(a,l)),a=c,l=c,d=pe.AdvancingLine):_==="*"&&b==="/"?(l>a&&m.push(t.getNewRange(a,l)),a=0,l=0,++c,o=c,d=pe.Done):n._whitespaceCharacterRegExp.test(_)||(l=c);break;case pe.AdvancingLine:_==="*"?b==="/"?(a=0,l=0,++c,o=c,d=pe.Done):(b===" "&&++c,a=c,l=c,d=pe.CollectingLine):_===`
|
||||
`?(m.push(t.getNewRange(w,w)),a=c):n._whitespaceCharacterRegExp.test(_)||(l=c,d=pe.CollectingLine);break}}return e.commentRange=t.getNewRange(i,o),e.lines=m,!0},n._whitespaceCharacterRegExp=/^\s$/,n}();var An=function(){function n(){}return n.readTokens=function(e){n._ensureInitialized();for(var t=[],r=void 0,i=0,o=e;i<o.length;i++){var a=o[i];n._pushTokensForLine(t,a),r=a}return r?t.push(new Pt(u.EndOfInput,r.getNewRange(r.end,r.end),r)):t.push(new Pt(u.EndOfInput,ze.empty,ze.empty)),t},n.isPunctuation=function(e){return n._ensureInitialized(),n._punctuationTokens[e]||!1},n._pushTokensForLine=function(e,t){for(var r=t.buffer,i=t.end,o=t.pos,a=void 0,l=o;o<i;){var c=r.charCodeAt(o),d=n._charCodeMap[c];d===void 0&&(d=u.Other),a!==void 0&&d===a&&n._isMultiCharacterToken(a)||(a!==void 0&&e.push(new Pt(a,t.getNewRange(l,o),t)),l=o,a=d),++o}a!==void 0&&e.push(new Pt(a,t.getNewRange(l,o),t)),e.push(new Pt(u.Newline,t.getNewRange(t.end,t.end),t))},n._isMultiCharacterToken=function(e){switch(e){case u.Spacing:case u.AsciiWord:case u.Other:return!0}return!1},n._ensureInitialized=function(){if(!n._charCodeMap){n._charCodeMap={},n._punctuationTokens={};for(var e=n._commonMarkPunctuationCharacters,t=0;t<e.length;++t){var r=e.charCodeAt(t);n._charCodeMap[r]=u.OtherPunctuation}for(var i={"\\":u.Backslash,"<":u.LessThan,">":u.GreaterThan,"=":u.Equals,"'":u.SingleQuote,'"':u.DoubleQuote,"/":u.Slash,"-":u.Hyphen,"@":u.AtSign,"{":u.LeftCurlyBracket,"}":u.RightCurlyBracket,"`":u.Backtick,".":u.Period,":":u.Colon,",":u.Comma,"[":u.LeftSquareBracket,"]":u.RightSquareBracket,"|":u.Pipe,"(":u.LeftParenthesis,")":u.RightParenthesis,"#":u.PoundSymbol,"+":u.Plus,$:u.DollarSign},o=0,a=Object.getOwnPropertyNames(i);o<a.length;o++){var l=a[o];n._charCodeMap[l.charCodeAt(0)]=i[l],n._punctuationTokens[i[l]]=!0}n._punctuationTokens[u.OtherPunctuation]=!0;for(var c=n._wordCharacters,t=0;t<c.length;++t){var r=c.charCodeAt(t);n._charCodeMap[r]=u.AsciiWord}n._charCodeMap[" ".charCodeAt(0)]=u.Spacing,n._charCodeMap[" ".charCodeAt(0)]=u.Spacing}},n._commonMarkPunctuationCharacters="!\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~",n._wordCharacters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",n}();var $r=function(){function n(e,t){if(this._parserContext=e,this.tokens=e.tokens,t){if(t.parserContext!==this._parserContext)throw new Error("The embeddedTokenSequence must use the same parser context");this._readerStartIndex=t.startIndex,this._readerEndIndex=t.endIndex}else this._readerStartIndex=0,this._readerEndIndex=this.tokens.length;this._currentIndex=this._readerStartIndex,this._accumulatedStartIndex=this._readerStartIndex}return n.prototype.extractAccumulatedSequence=function(){if(this._accumulatedStartIndex===this._currentIndex)throw new Error("Parser assertion failed: The queue should not be empty when extractAccumulatedSequence() is called");var e=new yt({parserContext:this._parserContext,startIndex:this._accumulatedStartIndex,endIndex:this._currentIndex});return this._accumulatedStartIndex=this._currentIndex,e},n.prototype.isAccumulatedSequenceEmpty=function(){return this._accumulatedStartIndex===this._currentIndex},n.prototype.tryExtractAccumulatedSequence=function(){if(!this.isAccumulatedSequenceEmpty())return this.extractAccumulatedSequence()},n.prototype.assertAccumulatedSequenceIsEmpty=function(){if(!this.isAccumulatedSequenceEmpty()){var e=new yt({parserContext:this._parserContext,startIndex:this._accumulatedStartIndex,endIndex:this._currentIndex}),t=e.tokens.map(function(r){return r.toString()});throw new Error(`Parser assertion failed: The queue should be empty, but it contains:
|
||||
`+JSON.stringify(t))}},n.prototype.peekToken=function(){return this.tokens[this._currentIndex]},n.prototype.peekTokenKind=function(){return this._currentIndex>=this._readerEndIndex?u.EndOfInput:this.tokens[this._currentIndex].kind},n.prototype.peekTokenAfterKind=function(){return this._currentIndex+1>=this._readerEndIndex?u.EndOfInput:this.tokens[this._currentIndex+1].kind},n.prototype.peekTokenAfterAfterKind=function(){return this._currentIndex+2>=this._readerEndIndex?u.EndOfInput:this.tokens[this._currentIndex+2].kind},n.prototype.readToken=function(){if(this._currentIndex>=this._readerEndIndex)throw new Error("Cannot read past end of stream");var e=this.tokens[this._currentIndex];if(e.kind===u.EndOfInput)throw new Error("The EndOfInput token cannot be read");return this._currentIndex++,e},n.prototype.peekPreviousTokenKind=function(){return this._currentIndex===0?u.EndOfInput:this.tokens[this._currentIndex-1].kind},n.prototype.createMarker=function(){return this._currentIndex},n.prototype.backtrackToMarker=function(e){if(e>this._currentIndex)throw new Error("The marker has expired");this._currentIndex=e,e<this._accumulatedStartIndex&&(this._accumulatedStartIndex=e)},n}();var lr=function(){return lr=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},lr.apply(this,arguments)};function _n(n){return n!==void 0&&Object.hasOwnProperty.call(n,"failureMessage")}var ro=function(){function n(e){this._parserContext=e,this._configuration=e.configuration,this._currentSection=e.docComment.summarySection}return n.prototype.parse=function(){for(var e=new $r(this._parserContext),t=!1;!t;)switch(e.peekTokenKind()){case u.EndOfInput:t=!0;break;case u.Newline:this._pushAccumulatedPlainText(e),e.readToken(),this._pushNode(new rr({parsed:!0,configuration:this._configuration,softBreakExcerpt:e.extractAccumulatedSequence()}));break;case u.Backslash:this._pushAccumulatedPlainText(e),this._pushNode(this._parseBackslashEscape(e));break;case u.AtSign:this._pushAccumulatedPlainText(e),this._parseAndPushBlock(e);break;case u.LeftCurlyBracket:{this._pushAccumulatedPlainText(e);var r=e.createMarker(),i=this._parseInlineTag(e),o=this._parserContext.docComment;if(i instanceof dn){var a=e.createMarker()-1;o.inheritDocTag===void 0?this._parserContext.docComment.inheritDocTag=i:this._pushNode(this._backtrackAndCreateErrorRange(e,r,a,v.ExtraInheritDocTag,"A doc comment cannot have more than one @inheritDoc tag"))}else this._pushNode(i);break}case u.RightCurlyBracket:this._pushAccumulatedPlainText(e),this._pushNode(this._createError(e,v.EscapeRightBrace,'The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag'));break;case u.LessThan:this._pushAccumulatedPlainText(e),e.peekTokenAfterKind()===u.Slash?this._pushNode(this._parseHtmlEndTag(e)):this._pushNode(this._parseHtmlStartTag(e));break;case u.GreaterThan:this._pushAccumulatedPlainText(e),this._pushNode(this._createError(e,v.EscapeGreaterThan,'The ">" character should be escaped using a backslash to avoid confusion with an HTML tag'));break;case u.Backtick:this._pushAccumulatedPlainText(e),e.peekTokenAfterKind()===u.Backtick&&e.peekTokenAfterAfterKind()===u.Backtick?this._pushNode(this._parseFencedCode(e)):this._pushNode(this._parseCodeSpan(e));break;default:e.readToken();break}this._pushAccumulatedPlainText(e),this._performValidationChecks()},n.prototype._performValidationChecks=function(){var e=this._parserContext.docComment;e.deprecatedBlock&&(cr.hasAnyTextContent(e.deprecatedBlock)||this._parserContext.log.addMessageForTokenSequence(v.MissingDeprecationMessage,"The ".concat(e.deprecatedBlock.blockTag.tagName," block must include a deprecation message,")+" e.g. describing the recommended alternative",e.deprecatedBlock.blockTag.getTokenSequence(),e.deprecatedBlock)),e.inheritDocTag&&(e.remarksBlock&&this._parserContext.log.addMessageForTokenSequence(v.InheritDocIncompatibleTag,'A "'.concat(e.remarksBlock.blockTag.tagName,'" block must not be used, because that')+" content is provided by the @inheritDoc tag",e.remarksBlock.blockTag.getTokenSequence(),e.remarksBlock.blockTag),cr.hasAnyTextContent(e.summarySection)&&this._parserContext.log.addMessageForTextRange(v.InheritDocIncompatibleSummary,"The summary section must not have any content, because that content is provided by the @inheritDoc tag",this._parserContext.commentRange))},n.prototype._validateTagDefinition=function(e,t,r,i,o){if(e){var a=e.syntaxKind===R.InlineTag;a!==r?r?this._parserContext.log.addMessageForTokenSequence(v.TagShouldNotHaveBraces,'The TSDoc tag "'.concat(t,'" is not an inline tag; it must not be enclosed in "{ }" braces'),i,o):this._parserContext.log.addMessageForTokenSequence(v.InlineTagMissingBraces,'The TSDoc tag "'.concat(t,'" is an inline tag; it must be enclosed in "{ }" braces'),i,o):this._parserContext.configuration.validation.reportUnsupportedTags&&(this._
Line truncated
|
||||
`)).join(`
|
||||
`)}catch{console.error("Failed to parse summary section")}}function ss(n){if(!n)return"";try{return n.content.nodes[0].getChildNodes()[0].text.trim()}catch{return""}}function cs(n){try{return n.blocks.map(r=>{let i=r.parameterName,o=r.content.getChildNodes()[0].getChildNodes().filter(a=>a instanceof Ve).map(a=>a.text).join(" ");return new Yr(i,o)})}catch{return[]}}function Mt(n,e,t){if(t<0||t===n.length)return;let r=n[e];n[e]=n[t],n[t]=r}function Xt(n){return n.workspace.activeEditor?.file??n.workspace.getActiveFile()}function lo(n){let e=n.lastIndexOf("/");return e!==-1?n.slice(0,e):""}function xn(n){return n!==null&&typeof n=="object"}function po(n){let e=n.toString(),t=e.indexOf("(");return e.substring(t+1,e.indexOf(")")).replace(/ /g,"").split(",")}function Ur(n,e,t){let r=n instanceof HTMLOListElement?"li":"p",i=n.createEl(r),o=n.createEl("b",{text:e});return i.appendChild(o),i.appendChild(document.createTextNode(`: ${t}`)),i}function pr(n,e){if(Object.keys(e).length!==0){for(let t in e)if(e.hasOwnProperty(t))if(n.hasOwnProperty(t)){let r=n[t],i=e[t];if(Array.isArray(r)||Array.isArray(i)){let o=Array.isArray(r)?r:[r],a=Array.isArray(i)?i:[i];n[t]=o.concat(a).unique()}else xn(r)&&xn(i)?pr(r,i):i!=null&&i!==""&&(n[t]=i)}else n[t]=e[t]}}function yn(n){let e={},t=(0,Te.getFrontMatterInfo)(n);return t.frontmatter&&(e=(0,Te.parseYaml)(t.frontmatter)),{frontmatter:e,content:n.slice(t.contentStart)}}var Bo=X(require("obsidian"));var Mo=X(require("obsidian"));var ie="top",ue="bottom",ce="right",ae="left",ur="auto",vt=[ie,ue,ce,ae],pt="start",Ot="end",uo="clippingParents",fr="viewport",Zt="popper",fo="reference",Gr=vt.reduce(function(n,e){return n.concat([e+"-"+pt,e+"-"+Ot])},[]),dr=[].concat(vt,[ur]).reduce(function(n,e){return n.concat([e,e+"-"+pt,e+"-"+Ot])},[]),ls="beforeRead",ps="read",us="afterRead",fs="beforeMain",ds="main",ms="afterMain",gs="beforeWrite",hs="write",As="afterWrite",mo=[ls,ps,us,fs,ds,ms,gs,hs,As];function me(n){return n?(n.nodeName||"").toLowerCase():null}function Z(n){if(n==null)return window;if(n.toString()!=="[object Window]"){var e=n.ownerDocument;return e&&e.defaultView||window}return n}function Me(n){var e=Z(n).Element;return n instanceof e||n instanceof Element}function fe(n){var e=Z(n).HTMLElement;return n instanceof e||n instanceof HTMLElement}function en(n){if(typeof ShadowRoot=="undefined")return!1;var e=Z(n).ShadowRoot;return n instanceof e||n instanceof ShadowRoot}function _s(n){var e=n.state;Object.keys(e.elements).forEach(function(t){var r=e.styles[t]||{},i=e.attributes[t]||{},o=e.elements[t];!fe(o)||!me(o)||(Object.assign(o.style,r),Object.keys(i).forEach(function(a){var l=i[a];l===!1?o.removeAttribute(a):o.setAttribute(a,l===!0?"":l)}))})}function xs(n){var e=n.state,t={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,t.popper),e.styles=t,e.elements.arrow&&Object.assign(e.elements.arrow.style,t.arrow),function(){Object.keys(e.elements).forEach(function(r){var i=e.elements[r],o=e.attributes[r]||{},a=Object.keys(e.styles.hasOwnProperty(r)?e.styles[r]:t[r]),l=a.reduce(function(c,d){return c[d]="",c},{});!fe(i)||!me(i)||(Object.assign(i.style,l),Object.keys(o).forEach(function(c){i.removeAttribute(c)}))})}}var go={name:"applyStyles",enabled:!0,phase:"write",fn:_s,effect:xs,requires:["computeStyles"]};function ge(n){return n.split("-")[0]}var qe=Math.max,Bt=Math.min,ut=Math.round;function tn(){var n=navigator.userAgentData;return n!=null&&n.brands&&Array.isArray(n.brands)?n.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function jn(){return!/^((?!chrome|android).)*safari/i.test(tn())}function Oe(n,e,t){e===void 0&&(e=!1),t===void 0&&(t=!1);var r=n.getBoundingClientRect(),i=1,o=1;e&&fe(n)&&(i=n.offsetWidth>0&&ut(r.width)/n.offsetWidth||1,o=n.offsetHeight>0&&ut(r.height)/n.offsetHeight||1);var a=Me(n)?Z(n):window,l=a.visualViewport,c=!jn()&&t,d=(r.left+(c&&l?l.offsetLeft:0))/i,m=(r.top+(c&&l?l.offsetTop:0))/o,_=r.width/i,w=r.height/o;return{width:_,height:w,top:m,right:d+_,bottom:m+w,left:d,x:d,y:m}}function It(n){var e=Oe(n),t=n.offsetWidth,r=n.offsetHeight;return Math.abs(e.width-t)<=1&&(t=e.width),Math.abs(e.height-r)<=1&&(r=e.height),{x:n.offsetLeft,y:n.offsetTop,width:t,height:r}}function vn(n,e){var t=e.getRootNode&&e.getRootNode();if(n.contains(e))return!0;if(t&&en(t)){var r=e;do{if(r&&n.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function we(n){return Z(n).getComputedStyle(n)}function Wr(n){return["table","td","th"].indexOf(me(n))>=0}function Ae(n){return((Me(n)?n.ownerDocument:n.document)||window.document).documentElement}function ft(n){return me(n)==="html"?n:n.assignedSlot||n.parentNode||(en(n)?n.host:null)||Ae(n)}function ho(n){return!fe(n)||we(n).position==="fixed"?null:n.offsetParent}function ys(n){var e=/firefox/i.test(tn()),t=/Trident/i.test(tn());if(t&&fe(n)){var r=we(n);if(r.position==="fixed")return nu
Line truncated
|
||||
> \u2014 ${o}`}catch{return new P("Error generating daily quote"),"Error generating daily quote"}}}generate_random_picture(){return async(e,t,r=!1)=>{try{let i=await this.getRequest(`https://templater-unsplash-2.fly.dev/${t?"?q="+t:""}`).then(a=>a.json),o=i.full;if(e&&!r)if(e.includes("x")){let[a,l]=e.split("x");o=o.concat(`&w=${a}&h=${l}`)}else o=o.concat(`&w=${e}`);return r?``:``}catch{return new P("Error generating random picture"),"Error generating random picture"}}}generate_request(){return async(e,t)=>{try{let i=await(await this.getRequest(e)).json;return t&&i?t.split(".").reduce((o,a)=>{if(o&&o.hasOwnProperty(a))return o[a];throw new Error(`Path ${t} not found in the JSON response`)},i):i}catch(r){throw console.error(r),new P("Error fetching and extracting value")}}}};var ui=class extends be{constructor(){super(...arguments);this.name="hooks";this.event_refs=[]}async create_static_templates(){this.static_functions.set("on_all_templates_executed",this.generate_on_all_templates_executed())}async create_dynamic_templates(){}async teardown(){this.event_refs.forEach(e=>{e.e.offref(e)}),this.event_refs=[]}generate_on_all_templates_executed(){return e=>{let t=this.plugin.app.workspace.on("templater:all-templates-executed",async()=>{await jt(1),e()});t&&this.event_refs.push(t)}}};var fi=class extends be{constructor(){super(...arguments);this.name="frontmatter"}async create_static_templates(){}async create_dynamic_templates(){let e=this.plugin.app.metadataCache.getFileCache(this.config.target_file);this.dynamic_functions=new Map(Object.entries(e?.frontmatter||{}))}async teardown(){}};var Qe=X(require("obsidian"));var di=class extends Qe.Modal{constructor(e,t,r,i){super(e);this.prompt_text=t;this.default_value=r;this.multi_line=i;this.submitted=!1}onOpen(){this.titleEl.setText(this.prompt_text),this.createForm()}onClose(){this.contentEl.empty(),this.submitted||this.reject(new P("Cancelled prompt"))}createForm(){let e=this.contentEl.createDiv();e.addClass("templater-prompt-div");let t;if(this.multi_line){t=new Qe.TextAreaComponent(e);let r=this.contentEl.createDiv();r.addClass("templater-button-div");let i=new Qe.ButtonComponent(r);i.buttonEl.addClass("mod-cta"),i.setButtonText("Submit").onClick(o=>{this.resolveAndClose(o)})}else t=new Qe.TextComponent(e);this.value=this.default_value??"",t.inputEl.addClass("templater-prompt-input"),t.setPlaceholder("Type text here"),t.setValue(this.value),t.onChange(r=>this.value=r),t.inputEl.focus(),t.inputEl.addEventListener("keydown",r=>this.enterCallback(r))}enterCallback(e){e.isComposing||e.keyCode===229||(this.multi_line?Qe.Platform.isDesktop&&e.key==="Enter"&&!e.shiftKey&&this.resolveAndClose(e):e.key==="Enter"&&this.resolveAndClose(e))}resolveAndClose(e){this.submitted=!0,e.preventDefault(),this.resolve(this.value),this.close()}async openAndGetValue(e,t){this.resolve=e,this.reject=t,this.open()}};var Uo=X(require("obsidian")),mi=class extends Uo.FuzzySuggestModal{constructor(e,t,r,i,o){super(e);this.text_items=t;this.items=r;this.submitted=!1;this.setPlaceholder(i),o&&(this.limit=o)}getItems(){return this.items}onClose(){this.submitted||this.reject(new P("Cancelled prompt"))}selectSuggestion(e,t){this.submitted=!0,this.close(),this.onChooseSuggestion(e,t)}getItemText(e){return this.text_items instanceof Function?this.text_items(e):this.text_items[this.items.indexOf(e)]||"Undefined Text Item"}onChooseItem(e){this.resolve(e)}async openAndGetValue(e,t){this.resolve=e,this.reject=t,this.open()}};var De=X(require("obsidian")),gi=class extends De.Modal{constructor(e,t,r,i,o){super(e);this.text_items=t;this.items=r;this.submitted=!1;this.selectedItems=[];this.setTitle(i),this.listEl=this.contentEl.createDiv("templater-multisuggester-list");let a=this.contentEl.createDiv("templater-multisuggester-div"),l=new De.TextComponent(a);l.inputEl.addClass("templater-multisuggester-input"),this.suggester=new Go(e,l.inputEl,this.getItemText.bind(this),r,o).onSelect(this.onChooseItem.bind(this));let c=this.contentEl.createDiv("modal-button-container");new De.ButtonComponent(c).setButtonText("Save").setCta().onClick(()=>this.save()),new De.ButtonComponent(c).setButtonText("Cancel").onClick(()=>this.close())}onOpen(){this.display()}display(){this.listEl.empty(),this.selectedItems.forEach(e=>{let t=this.listEl.createDiv("mobile-option-setting-item");t.createSpan("mobile-option-setting-item-name").setText(this.getItemText(e)),t.createDiv("clickable-icon mobile-option-setting-item-option-icon",r=>{(0,De.setIcon)(r,"lucide-x"),r.addEventListener("click",()=>{this.onRemoveItem(e)})})})}getItemText(e){return this.text_items instanceof Function?this.text_items(e):this.text_items[this.items.indexOf(e)]||"Undefined Text Item"}onChooseItem(e){this.selectedItems.push(e);let t=this.items.filter(r=>!this.selectedItems.some(i=>i===r));this.suggester.setItems(t),this.display()}onRemoveIt
Line truncated
|
||||
})`)(r,o,i)}catch(c){throw new P(`Failed to load user script at "${e.path}".`,c.message)}let l=i.default??o.exports;if(!l)throw new P(`Failed to load user script at "${e.path}". No exports detected.`);if(typeof l=="function")t.set(e.basename,l);else if(typeof l=="object"&&l!==null){if(!Object.values(l).every(d=>typeof d=="function"))throw new P(`Exported object in "${e.path}" must contain only functions.`);t.set(e.basename,l)}else throw new P(`Invalid export in "${e.path}". Must be a function or object of functions.`)}async generate_object(){let e=await this.generate_user_script_functions();return Object.fromEntries(e)}};var ji=class{constructor(e){this.plugin=e;this.user_system_functions=new xi(e),this.user_script_functions=new yi(e)}async generate_object(e){let t={},r={};return this.plugin.settings.enable_system_commands&&(t=await this.user_system_functions.generate_object(e)),this.plugin.settings.user_scripts_folder&&(r=await this.user_script_functions.generate_object()),{...t,...r}}};var Rs=X(require("obsidian")),Xe;(function(t){t[t.INTERNAL=0]="INTERNAL",t[t.USER_INTERNAL=1]="USER_INTERNAL"})(Xe||(Xe={}));var vi=class{constructor(e){this.plugin=e;this.internal_functions=new _i(this.plugin),this.user_functions=new ji(this.plugin)}async init(){await this.internal_functions.init()}async teardown(){await this.internal_functions.teardown()}additional_functions(){return{app:this.plugin.app,obsidian:Rs}}async generate_object(e,t=1){let r={},i=this.additional_functions(),o=await this.internal_functions.generate_object(e),a={};switch(Object.assign(r,i),t){case 0:Object.assign(r,o);break;case 1:a=await this.user_functions.generate_object(e),Object.assign(r,{...o,user:a});break}return r}};var Zs={},M,Ke=new Array(32).fill(void 0);Ke.push(void 0,null,!0,!1);function Pe(n){return Ke[n]}var Dn=Ke.length;function Ys(n){n<36||(Ke[n]=Dn,Dn=n)}function wi(n){let e=Pe(n);return Ys(n),e}var Wo=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});Wo.decode();var _r=new Uint8Array;function xr(){return _r.byteLength===0&&(_r=new Uint8Array(M.memory.buffer)),_r}function bt(n,e){return Wo.decode(xr().subarray(n,n+e))}function Et(n){Dn===Ke.length&&Ke.push(Ke.length+1);let e=Dn;return Dn=Ke[e],Ke[e]=n,e}var Re=0,yr=new TextEncoder("utf-8"),Us=typeof yr.encodeInto=="function"?function(n,e){return yr.encodeInto(n,e)}:function(n,e){let t=yr.encode(n);return e.set(t),{read:n.length,written:t.length}};function gt(n,e,t){if(t===void 0){let l=yr.encode(n),c=e(l.length);return xr().subarray(c,c+l.length).set(l),Re=l.length,c}let r=n.length,i=e(r),o=xr(),a=0;for(;a<r;a++){let l=n.charCodeAt(a);if(l>127)break;o[i+a]=l}if(a!==r){a!==0&&(n=n.slice(a)),i=t(i,r,r=a+n.length*3);let l=xr().subarray(i+a,i+r);a+=Us(n,l).written}return Re=a,i}function Gs(n){return n==null}var jr=new Int32Array;function Ne(){return jr.byteLength===0&&(jr=new Int32Array(M.memory.buffer)),jr}function bi(n){let e=typeof n;if(e=="number"||e=="boolean"||n==null)return`${n}`;if(e=="string")return`"${n}"`;if(e=="symbol"){let i=n.description;return i==null?"Symbol":`Symbol(${i})`}if(e=="function"){let i=n.name;return typeof i=="string"&&i.length>0?`Function(${i})`:"Function"}if(Array.isArray(n)){let i=n.length,o="[";i>0&&(o+=bi(n[0]));for(let a=1;a<i;a++)o+=", "+bi(n[a]);return o+="]",o}let t=/\[object ([^\]]+)\]/.exec(toString.call(n)),r;if(t.length>1)r=t[1];else return toString.call(n);if(r=="Object")try{return"Object("+JSON.stringify(n)+")"}catch{return"Object"}return n instanceof Error?`${n.name}: ${n.message}
|
||||
${n.stack}`:r}function Ws(n,e){if(!(n instanceof e))throw new Error(`expected instance of ${e.name}`);return n.ptr}var vr=32;function Vs(n){if(vr==1)throw new Error("out of js stack");return Ke[--vr]=n,vr}function Ei(n,e){try{return n.apply(this,e)}catch(t){M.__wbindgen_exn_store(Et(t))}}var Kt=class{static __wrap(e){let t=Object.create(Kt.prototype);return t.ptr=e,t}__destroy_into_raw(){let e=this.ptr;return this.ptr=0,e}free(){let e=this.__destroy_into_raw();M.__wbg_parserconfig_free(e)}get interpolate(){let e=M.__wbg_get_parserconfig_interpolate(this.ptr);return String.fromCodePoint(e)}set interpolate(e){M.__wbg_set_parserconfig_interpolate(this.ptr,e.codePointAt(0))}get execution(){let e=M.__wbg_get_parserconfig_execution(this.ptr);return String.fromCodePoint(e)}set execution(e){M.__wbg_set_parserconfig_execution(this.ptr,e.codePointAt(0))}get single_whitespace(){let e=M.__wbg_get_parserconfig_single_whitespace(this.ptr);return String.fromCodePoint(e)}set single_whitespace(e){M.__wbg_set_parserconfig_single_whitespace(this.ptr,e.codePointAt(0))}get multiple_whitespace(){let e=M.__wbg_get_parserconfig_multiple_whitespace(this.ptr);return String.fromCodePoint(e)}set multiple_whitespace(e){M.__wbg_set_parserconfig_multiple_whitespace(this.ptr,e.codePointAt(0))}constructor(e,t,r,i,o,a,l){let c=gt(e,M.__wbindgen_malloc,M.__wbindgen_realloc),d=Re,m=gt(t,M.__wbindgen_malloc,M.__wbindgen_realloc),_=Re,w=gt(l,M.__wbindgen_malloc,M.__wbindgen_realloc),b=Re,S=M.parserconfig_new(c,d,m,_,r.codePointAt(0),i.codePointAt(0),o.codePointAt(0),a.codePointAt(0),w,b);return Kt.__wrap(S)}get opening_tag(){try{let r=M.__wbindgen_add_to_stack_pointer(-16);M.parserconfig_opening_tag(r,this.ptr);var e=Ne()[r/4+0],t=Ne()[r/4+1];return bt(e,t)}finally{M.__wbindgen_add_to_stack_pointer(16),M.__wbindgen_free(e,t)}}set opening_tag(e){let t=gt(e,M.__wbindgen_malloc,M.__wbindgen_realloc),r=Re;M.parserconfig_set_opening_tag(this.ptr,t,r)}get closing_tag(){try{let r=M.__wbindgen_add_to_stack_pointer(-16);M.parserconfig_closing_tag(r,this.ptr);var e=Ne()[r/4+0],t=Ne()[r/4+1];return bt(e,t)}finally{M.__wbindgen_add_to_stack_pointer(16),M.__wbindgen_free(e,t)}}set closing_tag(e){let t=gt(e,M.__wbindgen_malloc,M.__wbindgen_realloc),r=Re;M.parserconfig_set_closing_tag(this.ptr,t,r)}get global_var(){try{let r=M.__wbindgen_add_to_stack_pointer(-16);M.parserconfig_global_var(r,this.ptr);var e=Ne()[r/4+0],t=Ne()[r/4+1];return bt(e,t)}finally{M.__wbindgen_add_to_stack_pointer(16),M.__wbindgen_free(e,t)}}set global_var(e){let t=gt(e,M.__wbindgen_malloc,M.__wbindgen_realloc),r=Re;M.parserconfig_set_global_var(this.ptr,t,r)}},sn=class{static __wrap(e){let t=Object.create(sn.prototype);return t.ptr=e,t}__destroy_into_raw(){let e=this.ptr;return this.ptr=0,e}free(){let e=this.__destroy_into_raw();M.__wbg_renderer_free(e)}constructor(e){Ws(e,Kt);var t=e.ptr;e.ptr=0;let r=M.renderer_new(t);return sn.__wrap(r)}render_content(e,t){try{let a=M.__wbindgen_add_to_stack_pointer(-16),l=gt(e,M.__wbindgen_malloc,M.__wbindgen_realloc),c=Re;M.renderer_render_content(a,this.ptr,l,c,Vs(t));var r=Ne()[a/4+0],i=Ne()[a/4+1],o=Ne()[a/4+2];if(o)throw wi(i);return wi(r)}finally{M.__wbindgen_add_to_stack_pointer(16),Ke[vr++]=void 0}}};async function zs(n,e){if(typeof Response=="function"&&n instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(n,e)}catch(r){if(n.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",r);else throw r}let t=await n.arrayBuffer();return await WebAssembly.instantiate(t,e)}else{let t=await WebAssembly.instantiate(n,e);return t instanceof WebAssembly.Instance?{instance:t,module:n}:t}}function Js(){let n={};return n.wbg={},n.wbg.__wbindgen_object_drop_ref=function(e){wi(e)},n.wbg.__wbindgen_string_new=function(e,t){let r=bt(e,t);return Et(r)},n.wbg.__wbindgen_string_get=function(e,t){let r=Pe(t),i=typeof r=="string"?r:void 0;var o=Gs(i)?0:gt(i,M.__wbindgen_malloc,M.__wbindgen_realloc),a=Re;Ne()[e/4+1]=a,Ne()[e/4+0]=o},n.wbg.__wbg_call_97ae9d8645dc388b=function(){return Ei(function(e,t){let r=Pe(e).call(Pe(t));return Et(r)},arguments)},n.wbg.__wbg_new_8d2af00bc1e329ee=function(e,t){let r=new Error(bt(e,t));return Et(r)},n.wbg.__wbg_message_fe2af63ccc8985bc=function(e){let t=Pe(e).message;return Et(t)},n.wbg.__wbg_newwithargs_8fe23e3842840c8e=function(e,t,r,i){let o=new Function(bt(e,t),bt(r,i));return Et(o)},n.wbg.__wbg_call_168da88779e35f61=function(){return Ei(function(e,t,r){let i=Pe(e).call(Pe(t),Pe(r));return Et(i)},arguments)},n.wbg.__wbg_call_3999bee59e9f7719=function(){return Ei(function(e,t,r,i){let o=Pe(e).call(Pe(t),Pe(r),Pe(i));return Et(o)},arguments)},n.wbg.__wbindgen_debug_string=function(e,t){let r=bi(Pe(t)),i=gt(r,M.__wbindgen_malloc,M.__wbindgen_realloc),o=Re;Ne
Line truncated
|
||||
${(0,de.stringifyYaml)(b)}---
|
||||
`),_+=w+d,o.editor.setValue(_),o.editor.setSelection({line:0,ch:0},{line:0,ch:0}),await jt(100),await i.save()}else await this.plugin.app.vault.process(t,_=>{let w="",{content:b,frontmatter:S}=yn(_);return pr(S,m),Object.keys(S).length>0&&(w+=`---
|
||||
${(0,de.stringifyYaml)(S)}---
|
||||
`),w+=b+d,c=w,w});this.plugin.app.workspace.trigger("templater:new-note-from-template",{file:t,content:c}),await this.plugin.editor_handler.jump_to_next_cursor_location(t,!0),await this.end_templater_task(r)}overwrite_active_file_commands(){let e=this.plugin.app.workspace.activeEditor;if(!e||!e.file){oe(new P("Active editor is null, can't overwrite content"));return}this.overwrite_file_commands(e.file,!0)}async overwrite_file_commands(e,t=!1){let{path:r}=e;this.start_templater_task(r);let i=this.create_running_config(e,e,t?3:2),o=await Se(async()=>this.read_and_parse_template(i),"Template parsing error, aborting.");if(o==null){await this.end_templater_task(r);return}await this.plugin.app.vault.modify(e,o),this.plugin.app.workspace.trigger("templater:overwrite-file",{file:e,content:o}),await this.plugin.editor_handler.jump_to_next_cursor_location(e,!0),await this.end_templater_task(r)}async process_dynamic_templates(e,t){let r=so(),i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT),o,a=!1,l;for(;o=i.nextNode();){let c=o.nodeValue;if(c!==null){let d=r.exec(c);if(d!==null){let m=this.plugin.app.metadataCache.getFirstLinkpathDest("",t.sourcePath);if(!m||!(m instanceof de.TFile))return;if(!a){a=!0;let _=this.create_running_config(m,m,4);l=await this.functions_generator.generate_object(_,Xe.USER_INTERNAL),this.current_functions_object=l}}for(;d!=null;){let m=d[1]+d[2],_=await Se(async()=>await this.parser.parse_commands(m,l),`Command Parsing error in dynamic command '${m}'`);if(_==null)return;let w=r.lastIndex-d[0].length,b=r.lastIndex;c=c.substring(0,w)+_+c.substring(b),r.lastIndex+=_.length-d[0].length,d=r.exec(c)}o.nodeValue=c}}}get_new_file_template_for_folder(e){do{let t=this.plugin.settings.folder_templates.find(r=>r.folder==e.path);if(t&&t.template)return t.template;e=e.parent}while(e)}get_new_file_template_for_file(e){let t=this.plugin.settings.file_templates.find(r=>new RegExp(r.regex).test(e.path));if(t&&t.template)return t.template}static async on_file_creation(e,t,r){if(!(r instanceof de.TFile)||r.extension!=="md")return;let i=(0,de.normalizePath)(e.plugin.settings.templates_folder);if(r.path.includes(i)&&i!=="/"||(await jt(300),e.files_with_pending_templates.has(r.path)))return;let o=await t.vault.read(r),a=(0,de.getFrontMatterInfo)(o),l=o.length-a.contentStart;if(l==0&&e.plugin.settings.enable_folder_templates){let c=e.get_new_file_template_for_folder(r.parent);if(!c)return;let d=await Se(async()=>Nt(t,c),`Couldn't find template ${c}`);if(d==null)return;await e.write_template_to_file(d,r)}else if(l==0&&e.plugin.settings.enable_file_templates){let c=e.get_new_file_template_for_file(r);if(!c)return;let d=await Se(async()=>Nt(t,c),`Couldn't find template ${c}`);if(d==null)return;await e.write_template_to_file(d,r)}else{let c=1e5;r.stat.size<=c?await e.overwrite_file_commands(r):console.log(`Templater skipped parsing ${r.path} because file size exceeds ${c}`)}}async execute_startup_scripts(){for(let e of this.plugin.settings.startup_templates){if(!e)continue;let t=Ce(()=>Nt(this.plugin.app,e),`Couldn't find startup template "${e}"`);if(!t)continue;let{path:r}=t;this.start_templater_task(r);let i=this.create_running_config(t,t,5);await Se(async()=>this.read_and_parse_template(i),"Startup Template parsing error, aborting."),await this.end_templater_task(r)}}};var Qo=X(require("obsidian")),wr=class{constructor(e,t,r){this.plugin=e;this.templater=t;this.settings=r}setup(){Array.isArray(this.plugin.app.workspace.onLayoutReadyCallbacks)?this.plugin.app.workspace.onLayoutReadyCallbacks.unshift({pluginId:this.plugin.manifest.id,callback:()=>{this.update_trigger_file_on_creation()}}):this.plugin.app.workspace.onLayoutReady(()=>{this.update_trigger_file_on_creation()}),this.update_syntax_highlighting(),this.update_file_menu()}update_syntax_highlighting(){let e=this.plugin.editor_handler.desktopShouldHighlight(),t=this.plugin.editor_handler.mobileShouldHighlight();e||t?this.plugin.editor_handler.enable_highlighter():this.plugin.editor_handler.disable_highlighter()}update_trigger_file_on_creation(){this.settings.trigger_on_file_creation?(this.trigger_on_file_creation_event=this.plugin.app.vault.on("create",e=>Pn.on_file_creation(this.templater,this.plugin.app,e)),this.plugin.registerEvent(this.trigger_on_file_creation_event)):this.trigger_on_file_creation_event&&(this.plugin.app.vault.offref(this.trigger_on_file_creation_event),this.trigger_on_file_creation_event=void 0)}update_file_menu(){this.plugin.registerEvent(this.plugin.app.workspace.on("file-menu",(e,t)=>{t instanceof Qo.TFolder&&e.addItem(r=>{r.setTitle("Create new note from template").setIcon("templater-icon").onClick(()=>{this.plugin.fuzzy_suggester.create_new_note_from_template(t)})})}))}};var br=X(require("obsidian"));var ki=class{constructor(e){this.plugin=e}setup(){this.plugin.addCommand({id:"insert-templater",name:"Open insert template modal",icon:"templater-icon",hotkeys:br.Platform.isMacOS?void 0:[{modifiers:["Alt"],key:"e"}],callback:()=>{thi
Line truncated
|
||||
`,a+1))!==-1;i++,o=a);o+=1;let l=e.slice(o,t).length;return{line:i,ch:l}}replace_and_get_cursor_positions(e){let t=[],r,i=new RegExp("<%\\s*tp.file.cursor\\((?<order>[0-9]*)\\)\\s*%>","g");for(;(r=i.exec(e))!=null;)t.push(r);if(t.length===0)return{};t.sort((c,d)=>Number(c.groups&&c.groups.order)-Number(d.groups&&d.groups.order));let o=t[0][0];t=t.filter(c=>c[0]===o);let a=[],l=0;for(let c of t){let d=c.index-l;if(a.push(this.get_editor_position_from_index(e,d)),e=e.replace(new RegExp(ao(c[0])),""),l+=c[0].length,c[1]==="")break}return{new_content:e,positions:a}}set_cursor_location(e){let t=this.app.workspace.activeEditor;if(!t||!t.editor)return;let r=t.editor,i=[];for(let a of e)i.push({from:a});let o={selections:i};r.transaction(o)}};var ta=X(require("obsidian"));var tc={app:{name:"app",description:"This module exposes the app instance. Prefer to use this over the global app instance."},user:{name:"user",description:"This module exposes custom made scripts, written by yourself within the script file folder location"},config:{name:"config",description:`This module exposes Templater's running configuration.
|
||||
|
||||
This is mostly useful when writing scripts requiring some context information.
|
||||
`,functions:{template_file:{name:"template_file",description:"The `TFile` object representing the template file.",definition:"tp.config.template_file"},target_file:{name:"target_file",description:"The `TFile` object representing the target file where the template will be inserted.",definition:"tp.config.target_file"},run_mode:{name:"run_mode",description:"The `RunMode`, representing the way Templater was launched (Create new from template, Append to active file, ...).",definition:"tp.config.run_mode"},active_file:{name:"active_file",description:"The active file (if existing) when launching Templater.",definition:"tp.config.active_file?"}}},date:{name:"date",description:"This module contains every internal function related to dates.",functions:{now:{name:"now",description:"Retrieves the date.",definition:'tp.date.now(format: string = "YYYY-MM-DD", offset?: number\u23AEstring, reference?: string, reference_format?: string)',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD"`. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/).'},{name:"offset",description:"Duration to offset the date from. If a number is provided, duration will be added to the date in days. You can also specify the offset as a string using the ISO 8601 format."},{name:"reference",description:"The date referential, e.g. set this to the note's title."},{name:"reference_format",description:"The format for the reference date. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/)."}],examples:[{name:"Date now",example:"<% tp.date.now() %>"},{name:"Date now with format",example:'<% tp.date.now("Do MMMM YYYY") %>'},{name:"Last week",example:'<% tp.date.now("YYYY-MM-DD", -7) %>'},{name:"Next week",example:'<% tp.date.now("YYYY-MM-DD", 7) %>'},{name:"Last month",example:'<% tp.date.now("YYYY-MM-DD", "P-1M") %>'},{name:"Next year",example:'<% tp.date.now("YYYY-MM-DD", "P1Y") %>'},{name:"File's title date + 1 day (tomorrow)",example:'<% tp.date.now("YYYY-MM-DD", 1, tp.file.title, "YYYY-MM-DD") %>'},{name:"File's title date - 1 day (yesterday)",example:'<% tp.date.now("YYYY-MM-DD", -1, tp.file.title, "YYYY-MM-DD") %>'}]},tomorrow:{name:"tomorrow",description:"Retrieves tomorrow's date.",definition:'tp.date.tomorrow(format: string = "YYYY-MM-DD")',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD"`. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/).'}],examples:[{name:"Date tomorrow",example:"<% tp.date.tomorrow() %>"},{name:"Date tomorrow with format",example:'<% tp.date.tomorrow("Do MMMM YYYY") %>'}]},yesterday:{name:"yesterday",description:"Retrieves yesterday's date.",definition:'tp.date.yesterday(format: string = "YYYY-MM-DD")',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD"`. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/).'}],examples:[{name:"Date yesterday",example:"<% tp.date.yesterday() %>"},{name:"Date yesterday with format",example:'<% tp.date.yesterday("Do MMMM YYYY") %>'}]},weekday:{name:"weekday",description:"",definition:'tp.date.weekday(format: string = "YYYY-MM-DD", weekday: number, reference?: string, reference_format?: string)',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD"`. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/).'},{name:"weekday",description:"Week day number. If the locale assigns Monday as the first day of the week, `0` will be Monday, `-7` will be last week's day."},{name:"reference",description:"The date referential, e.g. set this to the note's title."},{name:"reference_format",description:"The format for the reference date. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/)."}],examples:[{name:"This week's Monday",example:'<% tp.date.weekday("YYYY-MM-DD", 0) %>'},{name:"Next Monday",example:'<% tp.date.weekday("YYYY-MM-DD", 7) %>'},{name:"File's title Monday",example:'<% tp.date.weekday("YYYY-MM-DD", 0, tp.file.title, "YYYY-MM-DD") %>'},{name:"File's title previous Monday",example:'<% tp.date.weekday("YYYY-MM-DD", -7, tp.file.title, "YYYY-MM-DD") %>'}]}},momentjs:{examples:[{name:"Date now",example:'<% moment(tp.file.title, "YYYY-MM-DD").format("YYYY-MM-DD") %>'},{name:"Get start of month from note title",example:'<% moment(tp.file.title, "YYYY-MM-DD").startOf("month").format("YYYY-MM-DD") %>'},{name:"Get end of month from note title",example:'<% moment(tp.file.title, "YYYY-MM-DD").endOf("month").format("YYYY-MM-DD") %>'}]}},file:{name:"file",description:"This module contains every internal function related to files.",functions:{content:{name:"content",description:"The string contents of the file at the time that Templater was executed. Manipulating this string will *not* update the current file.",definition:"tp.file.content",examples:[{name:"Retrieve file content",example:"<% tp.file.content %>"}]},create_new:{name:"create_new
Line truncated
|
||||
|
||||
You can navigate between the different cursors using the configured hotkey in Obsidian settings.
|
||||
`,definition:"tp.file.cursor(order?: number)",args:[{name:"order",description:`The order of the different cursors jump, e.g. it will jump from 1 to 2 to 3, and so on.
|
||||
If you specify multiple tp.file.cursor with the same order, the editor will switch to multi-cursor.
|
||||
`}],examples:[{name:"File cursor",example:"<% tp.file.cursor() %>"},{name:"File multi-cursor",example:"<% tp.file.cursor(1) %>Content<% tp.file.cursor(1) %>"}]},cursor_append:{name:"cursor_append",description:"Appends some content after the active cursor in the file.",definition:"tp.file.cursor_append(content: string)",args:[{name:"content",description:"The content to append after the active cursor."}],examples:[{name:"File cursor append",example:'<% tp.file.cursor_append("Some text") %>'}]},exists:{name:"exists",description:"Check to see if a file exists by it's file path. The full path to the file, relative to the Vault and containing the extension, must be provided.",definition:"tp.file.exists(filepath: string)",args:[{name:"filepath",description:"The full file path of the file we want to check existence for."}],examples:[{name:"File existence",example:'<% await tp.file.exists("MyFolder/MyFile.md") %>'},{name:"File existence of current file",example:'<% await tp.file.exists(tp.file.folder(true) + "/" + tp.file.title + ".md") %>'}]},find_tfile:{name:"find_tfile",description:"Search for a file and returns its `TFile` instance.",definition:"tp.file.find_tfile(filename: string)",args:[{name:"filename",description:"The filename we want to search and resolve as a `TFile`."}],examples:[{name:"File find TFile",example:'<% tp.file.find_tfile("MyFile").basename %>'}]},folder:{name:"folder",description:"Retrieves the file's folder name.",definition:"tp.file.folder(absolute: boolean = false)",args:[{name:"absolute",description:"If set to `true`, returns the vault-absolute path of the folder. If `false`, only returns the basename of the folder (the last part). Defaults to `false`."}],examples:[{name:"File folder (Folder)",example:"<% tp.file.folder() %>"},{name:"File folder with vault-absolute path (Path/To/Folder)",example:"<% tp.file.folder(true) %>"}]},include:{name:"include",description:"Includes the file's link content. Templates in the included content will be resolved.",definition:"tp.file.include(include_link: string \u23AE TFile)",args:[{name:"include_link",description:'The link to the file to include, e.g. `"[[MyFile]]"`, or a TFile object. Also supports sections or blocks inclusions.'}],examples:[{name:"File include",example:'<% await tp.file.include("[[Template1]]") %>'},{name:"File include TFile",example:'<% await tp.file.include(tp.file.find_tfile("MyFile")) %>'},{name:"File include section",example:'<% await tp.file.include("[[MyFile#Section1]]") %>'},{name:"File include block",example:'<% await tp.file.include("[[MyFile#^block1]]") %>'}]},last_modified_date:{name:"last_modified_date",description:"Retrieves the file's last modification date.",definition:'tp.file.last_modified_date(format: string = "YYYY-MM-DD HH:mm")',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD HH:mm"`. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/).'}],examples:[{name:"File last modified date",example:"<% tp.file.last_modified_date() %>"},{name:"File last modified date with format",example:'<% tp.file.last_modified_date("dddd Do MMMM YYYY HH:mm") %>'}]},move:{name:"move",description:"Moves the file to the desired vault location.",definition:"tp.file.move(new_path: string, file_to_move?: TFile)",args:[{name:"new_path",description:'The new vault relative path of the file, without the file extension. Note: the new path needs to include the folder and the filename, e.g. `"/Notes/MyNote"`.'},{name:"file_to_move",description:"The file to move, defaults to the current file."}],examples:[{name:"File move",example:'<%* await tp.file.move("/A/B/" + tp.file.title) %>'},{name:"File move and rename",example:'<%* await tp.file.move("/A/B/NewTitle") %>'}]},path:{name:"path",description:"Retrieves the file's absolute path on the system.",definition:"tp.file.path(relative: boolean = false)",args:[{name:"relative",description:"If set to `true`, only retrieves the vault's relative path."}],examples:[{name:"File path",example:"<% tp.file.path() %>"},{name:"File relative path (relative to vault root)",example:"<% tp.file.path(true) %>"}]},rename:{name:"rename",description:"Renames the file (keeps the same file extension).",definition:"tp.file.rename(new_title: string)",args:[{name:"new_title",description:"The new file title."}],examples:[{name:"File rename",example:'<%* await tp.file.rename("MyNewName") %>'},{name:"File append a 2 to the file name",example:'<%* await tp.file.rename(tp.file.title + "2") %>'}]},selection:{name:"selection",description:"Retrieves the active file's text selection.",definition:"tp.file.selection()",examples:[{name:"File selection",example:"<% tp.file.selection() %>"}]},tags:{name:"tags",description:"Retrieves the file's tags (array of string).",definition:"tp.file.tags",examples:[{name:"File tags",example:"<% tp.file.tags %>"}]},title:{name:"title",definition:"tp.file.title",description:"Retrieves the file's title.",examples:[{name:"File title",example:"<% tp
Line truncated
|
||||
let value = await tp.system.prompt("Please enter a value");
|
||||
%>
|
||||
# <% value %>
|
||||
selected value: <% value %>`}]},suggester:{name:"suggester",description:"Spawns a suggester prompt and returns the user's chosen item.",definition:'tp.system.suggester(text_items: string[] \u23AE ((item: T) => string), items: T[], throw_on_cancel: boolean = false, placeholder: string = "", limit?: number = undefined)',args:[{name:"text_items",description:"Array of strings representing the text that will be displayed for each item in the suggester prompt. This can also be a function that maps an item to its text representation."},{name:"items",description:"Array containing the values of each item in the correct order."},{name:"throw_on_cancel",description:"Throws an error if the prompt is canceled, instead of returning a `null` value."},{name:"placeholder",description:"Placeholder string of the prompt."},{name:"limit",description:"Limit the number of items rendered at once (useful to improve performance when displaying large lists)."}],examples:[{name:"Suggester",example:'<% await tp.system.suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"]) %>'},{name:"Suggester with mapping function (same as above example)",example:'<% await tp.system.suggester((item) => item, ["Happy", "Sad", "Confused"]) %>'},{name:"Suggester for files",example:"[[<% (await tp.system.suggester((item) => item.basename, tp.app.vault.getMarkdownFiles())).basename %>]]"},{name:"Suggester for tags",example:'<% await tp.system.suggester(item => item, Object.keys(tp.app.metadataCache.getTags()).map(x => x.replace("#", ""))) %>'},{name:"Reuse value from suggester",example:`<%*
|
||||
let selectedValue = await tp.system.suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"]);
|
||||
%>
|
||||
# <% selectedValue %>
|
||||
selected value: <% selectedValue %>`}]},multi_suggester:{name:"multi_suggester",description:"Spawns a suggester prompt that supports selecting multiple items and returns the user's chosen items.",definition:'tp.system.multi_suggester(text_items: string[] \u23AE ((item: T) => string), items: T[], throw_on_cancel: boolean = false, title: string = "", limit?: number = undefined)',args:[{name:"text_items",description:"Array of strings representing the text that will be displayed for each item in the suggester prompt. This can also be a function that maps an item to its text representation."},{name:"items",description:"Array containing the values of each item in the correct order."},{name:"throw_on_cancel",description:"Throws an error if the prompt is canceled, instead of returning a `null` value."},{name:"title",description:"Text placed at the top of the modal."},{name:"limit",description:"Limit the number of items rendered at once (useful to improve performance when displaying large lists)."}],examples:[{name:"Multi-suggester",example:'<% await tp.system.multi_suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"]) %>'},{name:"Multi-suggester with mapping function (same as above example)",example:'<% await tp.system.multi_suggester((item) => item, ["Happy", "Sad", "Confused"]) %>'},{name:"Multi-suggester for files",example:"<% (await tp.system.multi_suggester((item) => item.basename, tp.app.vault.getMarkdownFiles())).map(f => `[[${f.basename}]]`) %>"},{name:"Multi-suggester for tags",example:'<% await tp.system.multi_suggester(item => item, Object.keys(tp.app.metadataCache.getTags()).map(x => x.replace("#", ""))) %>'},{name:"Reuse value from multi-suggester",example:`<%*
|
||||
let selectedValues = await tp.system.multi_suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"]);
|
||||
%>
|
||||
# <% selectedValues %>
|
||||
selected values: <% selectedValues %>`}]}}},web:{name:"web",description:"This modules contains every internal function related to the web (making web requests).",functions:{daily_quote:{name:"daily_quote",description:"Retrieves and parses the daily quote from `https://github.com/Zachatoo/quotes-database` as a callout.",definition:"tp.web.daily_quote()",examples:[{name:"Daily quote",example:"<% await tp.web.daily_quote() %>"}]},random_picture:{name:"random_picture",description:"Gets a random image from `https://unsplash.com/`.",definition:"tp.web.random_picture(size?: string, query?: string, include_size?: boolean)",args:[{name:"size",description:"Image size in the format `<width>x<height>`."},{name:"query",description:"Limits selection to photos matching a search term. Multiple search terms can be passed separated by a comma."},{name:"include_size",description:"Optional argument to include the specified size in the image link markdown. Defaults to false."}],examples:[{name:"Random picture",example:"<% await tp.web.random_picture() %>"},{name:"Random picture with size",example:'<% await tp.web.random_picture("200x200") %>'},{name:"Random picture with size and query",example:'<% await tp.web.random_picture("200x200", "landscape,water") %>'}]},request:{name:"request",description:"Makes a HTTP request to the specified URL. Optionally, you can specify a path to extract specific data from the response.",definition:"tp.web.request(url: string, path?: string)",args:[{name:"url",description:"The URL to which the HTTP request will be made."},{name:"path",description:"A path within the response JSON to extract specific data."}],examples:[{name:"Simple request",example:'<% await tp.web.request("https://jsonplaceholder.typicode.com/todos/1") %>'},{name:"Request with path",example:'<% await tp.web.request("https://jsonplaceholder.typicode.com/todos", "0.title") %>'}]}}}},Zo={tp:tc};var nc=["app","config","date","file","frontmatter","hooks","obsidian","system","user","web"],rc=new Set(nc);function ea(n){return typeof n=="string"&&rc.has(n)}function Di(n){return!!(n.definition||n.returns||n.args)}var Pi=class{constructor(e){this.plugin=e;this.documentation=Zo}get_all_modules_documentation(){let e=this.documentation.tp;return(!this.plugin.settings||!this.plugin.settings.user_scripts_folder)&&(e=Object.values(e).filter(t=>t.name!=="user")),Object.values(e).map(t=>(t.queryKey=t.name,t))}async get_all_functions_documentation(e,t){if(e==="app")return this.get_app_functions_documentation(this.plugin.app,t);if(e==="user"){if(!this.plugin.settings||!this.plugin.settings.user_scripts_folder)return;let r=await Se(async()=>{let i=Je(this.plugin.app,this.plugin.settings.user_scripts_folder).filter(a=>a.extension=="js");return await co(this.plugin.app,i)},"User Scripts folder doesn't exist");return!r||r.length===0?void 0:r.reduce((i,o)=>o.extension!=="js"?i:[...i,{name:o.basename,queryKey:o.basename,definition:"",description:o.description,returns:o.returns,args:o.arguments.reduce((l,c)=>(l[c.name]={name:c.name,description:c.description},l),{}),example:""}],[])}if(!!this.documentation.tp[e].functions)return Object.values(this.documentation.tp[e].functions).map(r=>(r.queryKey=r.name,r))}get_app_functions_documentation(e,t){if(!xn(e))return[];let r=t.split(".");if(r.length===0)return[];let i=e;for(let c=0;c<r.length-1;c++){let d=r[c];if(d in i){if(!xn(i[d]))return[];i=i[d]}}let o=["tp","app",...r.slice(0,r.length-1)].join("."),a=r.slice(0,r.length-1).join("."),l=[];for(let c in i){let d=`${o}.${c}`,m=a?`${a}.${c}`:c;l.push({name:c,queryKey:m,definition:typeof i[c]=="function"?`${d}(${po(i[c])})`:d,description:"",returns:"",example:""})}return l}get_module_documentation(e){return this.documentation.tp[e]}get_function_documentation(e,t){return this.documentation.tp[e].functions[t]}get_argument_documentation(e,t,r){let i=this.get_function_documentation(e,t);return!i||!i.args?null:i.args[r]}};var Ni=class extends ta.EditorSuggest{constructor(e){super(e.app);this.tp_keyword_regex=/tp\.(?<module>[a-z]*)?(?<fn_trigger>\.(?<fn>[a-zA-Z_.]*)?)?$/;this.documentation=new Pi(e),this.intellisense_render_setting=e.settings.intellisense_render}onTrigger(e,t,r){let i=t.getRange({line:e.line,ch:0},{line:e.line,ch:e.ch}),o=this.tp_keyword_regex.exec(i);if(!o)return null;let a,l=o.groups&&o.groups.module||"";if(this.module_name=l,o.groups&&o.groups.fn_trigger){if(l==""||!ea(l))return null;this.function_trigger=!0,this.function_name=o.groups.fn||"",a=this.function_name}else this.function_trigger=!1,a=this.module_name;let c={start:{line:e.line,ch:e.ch-a.length},end:{line:e.line,ch:e.ch},query:a};return this.latest_trigger_info=c,c}async getSuggestions(e){let t;return this.module_name&&this.function_trigger?t=await this.documentation.get_all_functions_documentation(this.module_name,this.function_name):t=this.documentation.get_all_modules_documentation(),t?t.filter(r=>r.queryKey.toLowerCase().startsWith(e.query.toLowerCase())):[]}renderSuggestion(e,t){if(t.crea
Line truncated
|
||||
|
||||
/* nosourcemap */
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "templater-obsidian",
|
||||
"name": "Templater",
|
||||
"version": "2.16.2",
|
||||
"description": "Create and use templates",
|
||||
"minAppVersion": "1.5.0",
|
||||
"author": "SilentVoid",
|
||||
"authorUrl": "https://github.com/SilentVoid13",
|
||||
"helpUrl": "https://silentvoid13.github.io/Templater/",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
+226
@@ -0,0 +1,226 @@
|
||||
.templater_search {
|
||||
width: calc(100% - 20px);
|
||||
}
|
||||
|
||||
.templater_div {
|
||||
border-top: 1px solid var(--background-modifier-border);
|
||||
}
|
||||
|
||||
.templater_div > .setting-item {
|
||||
border-top: none !important;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.templater_div > .setting-item > .setting-item-control {
|
||||
justify-content: space-around;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.templater_div
|
||||
> .setting-item
|
||||
> .setting-item-control
|
||||
> .setting-editor-extra-setting-button {
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.templater_donating {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.templater_title {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
margin-top: 5px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.templater_template {
|
||||
align-self: center;
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
.templater_cmd {
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
font-size: 14px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.templater_div2 > .setting-item {
|
||||
align-content: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.templater-prompt-div,
|
||||
.templater-multisuggester-div {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.templater-prompt-form {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.templater-prompt-input,
|
||||
.templater-multisuggester-input {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.templater-button-div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
textarea.templater-prompt-input {
|
||||
height: 10rem;
|
||||
}
|
||||
|
||||
textarea.templater-prompt-input:focus {
|
||||
border-color: var(--interactive-accent);
|
||||
}
|
||||
|
||||
.templater-multisuggester-list {
|
||||
margin: 1.5em 0;
|
||||
}
|
||||
|
||||
.cm-s-obsidian .templater-command-bg {
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
background-color: var(--background-primary-alt);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command {
|
||||
font-size: 0.85em;
|
||||
font-family: var(--font-monospace);
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.cm-s-obsidian .templater-inline .cm-templater-command {
|
||||
background-color: var(--background-primary-alt);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-templater-opening-tag {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-templater-closing-tag {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-templater-interpolation-tag {
|
||||
color: var(--code-property, #008bff);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-templater-execution-tag {
|
||||
color: var(--code-function, #c0d700);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-keyword {
|
||||
color: var(--code-keyword, #00a7aa);
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-atom {
|
||||
color: var(--code-normal, #f39b35);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-value,
|
||||
.cm-s-obsidian .cm-templater-command.cm-number,
|
||||
.cm-s-obsidian .cm-templater-command.cm-type {
|
||||
color: var(--code-value, #a06fca);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-def,
|
||||
.cm-s-obsidian .cm-templater-command.cm-type.cm-def {
|
||||
color: var(--code-normal, var(--text-normal));
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-property,
|
||||
.cm-s-obsidian .cm-templater-command.cm-property.cm-def,
|
||||
.cm-s-obsidian .cm-templater-command.cm-attribute {
|
||||
color: var(--code-function, #98e342);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-variable,
|
||||
.cm-s-obsidian .cm-templater-command.cm-variable-2,
|
||||
.cm-s-obsidian .cm-templater-command.cm-variable-3,
|
||||
.cm-s-obsidian .cm-templater-command.cm-meta {
|
||||
color: var(--code-property, #d4d4d4);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-callee,
|
||||
.cm-s-obsidian .cm-templater-command.cm-operator,
|
||||
.cm-s-obsidian .cm-templater-command.cm-qualifier,
|
||||
.cm-s-obsidian .cm-templater-command.cm-builtin {
|
||||
color: var(--code-operator, #fc4384);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-tag {
|
||||
color: var(--code-tag, #fc4384);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-comment,
|
||||
.cm-s-obsidian .cm-templater-command.cm-comment.cm-tag,
|
||||
.cm-s-obsidian .cm-templater-command.cm-comment.cm-attribute {
|
||||
color: var(--code-comment, #696d70);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-string,
|
||||
.cm-s-obsidian .cm-templater-command.cm-string-2 {
|
||||
color: var(--code-string, #e6db74);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-header,
|
||||
.cm-s-obsidian .cm-templater-command.cm-hr {
|
||||
color: var(--code-keyword, #da7dae);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-link {
|
||||
color: var(--code-normal, #696d70);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-error {
|
||||
border-bottom: 1px solid #c42412;
|
||||
}
|
||||
|
||||
.CodeMirror-hints {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
overflow: hidden;
|
||||
list-style: none;
|
||||
|
||||
margin: 0;
|
||||
padding: 2px;
|
||||
|
||||
-webkit-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||
border-radius: 3px;
|
||||
border: 1px solid silver;
|
||||
|
||||
background: white;
|
||||
font-size: 90%;
|
||||
font-family: monospace;
|
||||
|
||||
max-height: 20em;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.CodeMirror-hint {
|
||||
margin: 0;
|
||||
padding: 0 4px;
|
||||
border-radius: 2px;
|
||||
white-space: pre;
|
||||
color: black;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
li.CodeMirror-hint-active {
|
||||
background: #08f;
|
||||
color: white;
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"folder": "Templates"
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"types": {
|
||||
"aliases": "aliases",
|
||||
"cssclasses": "multitext",
|
||||
"tags": "tags",
|
||||
"categories": "multitext",
|
||||
"created": "date",
|
||||
"genre": "multitext",
|
||||
"director": "multitext",
|
||||
"last": "date",
|
||||
"date": "date",
|
||||
"topics": "multitext",
|
||||
"rating": "number",
|
||||
"year": "number",
|
||||
"coordinates": "multitext",
|
||||
"model": "text",
|
||||
"lotsqft": "number",
|
||||
"isbn13": "number",
|
||||
"isbn": "number",
|
||||
"ingredients": "multitext",
|
||||
"imdbId": "text",
|
||||
"system": "text",
|
||||
"sqft": "number",
|
||||
"speaker": "multitext",
|
||||
"season": "number",
|
||||
"series": "multitext",
|
||||
"source": "text",
|
||||
"status": "multitext",
|
||||
"twitter": "text",
|
||||
"trade": "text",
|
||||
"purchased": "date",
|
||||
"producer": "multitext",
|
||||
"process": "text",
|
||||
"phone": "text",
|
||||
"role": "text",
|
||||
"birthday": "date",
|
||||
"guests": "multitext",
|
||||
"cuisine": "multitext",
|
||||
"conference": "text",
|
||||
"end": "date",
|
||||
"address": "text",
|
||||
"start": "date",
|
||||
"shares": "number",
|
||||
"variety": "text",
|
||||
"price": "number",
|
||||
"author": "multitext",
|
||||
"published": "date",
|
||||
"where": "multitext",
|
||||
"loc": "multitext",
|
||||
"monthly-uses": "number",
|
||||
"runtime": "number",
|
||||
"pages": "number",
|
||||
"acquired": "date"
|
||||
}
|
||||
}
|
||||
+202
@@ -0,0 +1,202 @@
|
||||
{
|
||||
"main": {
|
||||
"id": "c535fcbd66ff15f1",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "4f62eb42528d84e2",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "b8a1d6a7b9f31a0a",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "Templates/Meditation Template.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Meditation Template"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
},
|
||||
"left": {
|
||||
"id": "f9356b3161224c4b",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "c5cc35386beaa9f9",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "9ef441043be4d5ca",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "file-explorer",
|
||||
"state": {
|
||||
"sortOrder": "alphabetical",
|
||||
"autoReveal": false
|
||||
},
|
||||
"icon": "lucide-folder-closed",
|
||||
"title": "Files"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "bce3ddf1ba148620",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "search",
|
||||
"state": {
|
||||
"query": "",
|
||||
"matchingCase": false,
|
||||
"explainSearch": false,
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical"
|
||||
},
|
||||
"icon": "lucide-search",
|
||||
"title": "Search"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "2aa417dffa146c84",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bookmarks",
|
||||
"state": {},
|
||||
"icon": "lucide-bookmark",
|
||||
"title": "Bookmarks"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300
|
||||
},
|
||||
"right": {
|
||||
"id": "ed8f3bfcfcab5820",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "c8b1776937708de4",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "f2ef3dc240ab922f",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "backlink",
|
||||
"state": {
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical",
|
||||
"showSearch": false,
|
||||
"searchQuery": "",
|
||||
"backlinkCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-coming-in",
|
||||
"title": "Backlinks"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "bb9ad16ae46f7b0a",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "tag",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"useHierarchy": true,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-tags",
|
||||
"title": "Tags"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "a8ef48791b671ad0",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "2025-12-04 1307.md",
|
||||
"followCursor": false,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-list",
|
||||
"title": "Outline of 2025-12-04 1307"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300,
|
||||
"collapsed": true
|
||||
},
|
||||
"left-ribbon": {
|
||||
"hiddenItems": {
|
||||
"switcher:Open quick switcher": false,
|
||||
"graph:Open graph view": false,
|
||||
"canvas:Create new canvas": false,
|
||||
"daily-notes:Open today's daily note": false,
|
||||
"templates:Insert template": false,
|
||||
"command-palette:Open command palette": false,
|
||||
"markdown-importer:Open format converter": false,
|
||||
"zk-prefixer:Create new unique note": false,
|
||||
"random-note:Open random note": false,
|
||||
"workspaces:Manage workspace layouts": false,
|
||||
"bases:Create new base": false,
|
||||
"templater-obsidian:Templater": false
|
||||
}
|
||||
},
|
||||
"active": "9ef441043be4d5ca",
|
||||
"lastOpenFiles": [
|
||||
"Templates/People Template.md",
|
||||
"Templates/Podcast Episode Template.md",
|
||||
"Templates/Show Template.md",
|
||||
"Templates/Product Template.md",
|
||||
"Templates/Post Template.md",
|
||||
"Templates/Bases/Games.base",
|
||||
"Templates/Bases/Everything.base",
|
||||
"Templates/Bases/Evergreen.base",
|
||||
"Templates/Bases/Companies.base",
|
||||
"Templates/Bases/Board games.base",
|
||||
"Templates/Bases/Attachments.base",
|
||||
"Templates/Bases/Albums.base",
|
||||
"Categories/Podcast episodes.md",
|
||||
"Categories/Companies.md",
|
||||
"Categories/Clippings.md",
|
||||
"Categories/Books.md",
|
||||
"Categories/Board games.md",
|
||||
"Categories/Albums.md",
|
||||
"Categories/Posts.md",
|
||||
"Categories/Podcasts.md",
|
||||
"Categories/People.md",
|
||||
"Categories/Movies.md",
|
||||
"Categories/Meetings.md",
|
||||
"Templates/Bases/Ratings.base",
|
||||
"Templates/Daily Note Template.md",
|
||||
"Templates/Bases/Map.base",
|
||||
"References/Fushimi Inari.md",
|
||||
"Templates/Bases/Places.base",
|
||||
"Notes/2023-09-12 Meeting with Steph.md",
|
||||
"References/Out of Control.md",
|
||||
"Notes/Minimal Theme.md",
|
||||
"Notes/Product usage analysis.md",
|
||||
"Notes/Evergreen notes turn ideas into objects that you can manipulate.md",
|
||||
"Clippings/Buy wisely.md",
|
||||
"Untitled 1.md",
|
||||
"Untitled 2.md",
|
||||
"Attachments/out-of-control.jpg"
|
||||
]
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"format": "YYYY-MM-DD HHmm",
|
||||
"folder": "/",
|
||||
"template": "Templates/Journal Template"
|
||||
}
|
||||
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 105 KiB |
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Albums.base]]
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Board games.base]]
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Books.base]]
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Clippings.base]]
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Companies.base]]
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Events.base]]
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
An evergreen note is an idea. It doesn't have to be something that I agree with, but something is [[Composability|composable]]. In a way, every idiom is a kind of evergreen idea.
|
||||
|
||||
![[Evergreen.base]]
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Games.base]]
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Journal.base]]
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
![[Meetings.base]]
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
## Favorites
|
||||
|
||||
![[Movies.base#Favorites]]
|
||||
|
||||
|
||||
## Last seen
|
||||
|
||||
![[Movies.base#Last seen]]
|
||||
|
||||
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[People.base]]
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Map.base]]
|
||||
![[Places.base]]
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Podcast episodes.base]]
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
related: "[[Podcast episodes]]"
|
||||
---
|
||||
|
||||
![[Podcasts.base]]
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Posts.base]]
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Products.base]]
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Projects.base]]
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Recipes.base]]
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Shows.base]]
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- categories
|
||||
---
|
||||
|
||||
![[Trips.base]]
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
## Notes
|
||||
|
||||
![[Daily.base]]
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Clippings]]"
|
||||
author:
|
||||
- "[[Kevin Kelly]]"
|
||||
url: https://kk.org/thetechnium/68-bits-of-unsolicited-advice/
|
||||
created: 2023-09-12
|
||||
published: 2020-04-28
|
||||
topics: []
|
||||
---
|
||||
|
||||
It’s my birthday. I’m 68. I feel like pulling up a rocking chair and dispensing advice to the young ‘uns. Here are 68 pithy bits of unsolicited advice which I offer as my birthday present to all of you.
|
||||
|
||||
- Learn how to learn from those you disagree with, or even offend you. See if you can find the truth in what they believe.
|
||||
- Being enthusiastic is worth 25 IQ points.
|
||||
- Always demand a deadline. A deadline weeds out the extraneous and the ordinary. It prevents you from trying to make it perfect, so you have to make it different. Different is better.
|
||||
- Don’t be afraid to ask a question that may sound stupid because 99% of the time everyone else is thinking of the same question and is too embarrassed to ask it.
|
||||
- Being able to listen well is a superpower. While listening to someone you love keep asking them “Is there more?”, until there is no more.
|
||||
- A worthy goal for a year is to learn enough about a subject so that you can’t believe how ignorant you were a year earlier.
|
||||
- Gratitude will unlock all other virtues and is something you can get better at.
|
||||
- Treating a person to a meal never fails, and is so easy to do. It’s powerful with old friends and a great way to make new friends.
|
||||
- Don’t trust all-purpose glue.
|
||||
- Reading to your children regularly will bond you together and kickstart their imaginations.
|
||||
- Never use a credit card for credit. The only kind of credit, or debt, that is acceptable is debt to acquire something whose exchange value is extremely likely to increase, like in a home. The exchange value of most things diminishes or vanishes the moment you purchase them. Don’t be in debt to losers.
|
||||
- Pros are just amateurs who know how to gracefully recover from their mistakes.
|
||||
- Extraordinary claims should require extraordinary evidence to be believed.
|
||||
- Don’t be the smartest person in the room. Hangout with, and learn from, people smarter than yourself. Even better, find smart people who will disagree with you.
|
||||
- Rule of 3 in conversation. To get to the real reason, ask a person to go deeper than what they just said. Then again, and once more. The third time’s answer is close to the truth.
|
||||
- Don’t be the best. Be the only.
|
||||
- Everyone is shy. Other people are waiting for you to introduce yourself to them, they are waiting for you to send them an email, they are waiting for you to ask them on a date. Go ahead.
|
||||
- Don’t take it personally when someone turns you down. Assume they are like you: busy, occupied, distracted. Try again later. It’s amazing how often a second try works.
|
||||
- The purpose of a habit is to remove that action from self-negotiation. You no longer expend energy deciding whether to do it. You just do it. Good habits can range from telling the truth, to flossing.
|
||||
- Promptness is a sign of respect.
|
||||
- When you are young spend at least 6 months to one year living as poor as you can, owning as little as you possibly can, eating beans and rice in a tiny room or tent, to experience what your “worst” lifestyle might be. That way any time you have to risk something in the future you won’t be afraid of the worst case scenario.
|
||||
- Trust me: There is no “them”.
|
||||
- The more you are interested in others, the more interesting they find you. To be interesting, be interested.
|
||||
- Optimize your generosity. No one on their deathbed has ever regretted giving too much away.
|
||||
- To make something good, just do it. To make something great, just re-do it, re-do it, re-do it. The secret to making fine things is in remaking them.
|
||||
- The Golden Rule will never fail you. It is the foundation of all other virtues.
|
||||
- If you are looking for something in your house, and you finally find it, when you’re done with it, don’t put it back where you found it. Put it back where you first looked for it.
|
||||
- Saving money and investing money are both good habits. Small amounts of money invested regularly for many decades without deliberation is one path to wealth.
|
||||
- To make mistakes is human. To own your mistakes is divine. Nothing elevates a person higher than quickly admitting and taking personal responsibility for the mistakes you make and then fixing them fairly. If you mess up, fess up. It’s astounding how powerful this ownership is.
|
||||
- Never get involved in a land war in Asia.
|
||||
- You can obsess about serving your customers/audience/clients, or you can obsess about beating the competition. Both work, but of the two, obsessing about your customers will take you further.
|
||||
- Show up. Keep showing up. Somebody successful said: 99% of success is just showing up.
|
||||
- Separate the processes of creation from improving. You can’t write and edit, or sculpt and polish, or make and analyze at the same time. If you do, the editor stops the creator. While you invent, don’t select. While you sketch, don’t inspect. While you write the first draft, don’t reflect. At the start, the creator mind must be unleashed from judgement.
|
||||
- If you are not falling down occasionally, you are just coasting.
|
||||
- Perhaps the most counter-intuitive truth of the universe is that the more you give to others, the more you’ll get. Understanding this is the beginning of wisdom.
|
||||
- Friends are better than money. Almost anything money can do, friends can do better. In so many ways a friend with a boat is better than owning a boat.
|
||||
- This is true: It’s hard to cheat an honest man.
|
||||
- When an object is lost, 95% of the time it is hiding within arm’s reach of where it was last seen. Search in all possible locations in that radius and you’ll find it.
|
||||
- You are what you do. Not what you say, not what you believe, not how you vote, but what you spend your time on.
|
||||
- If you lose or forget to bring a cable, adapter or charger, check with your hotel. Most hotels now have a drawer full of cables, adapters and chargers others have left behind, and probably have the one you are missing. You can often claim it after borrowing it.
|
||||
- Hatred is a curse that does not affect the hated. It only poisons the hater. Release a grudge as if it was a poison.
|
||||
- There is no limit on better. Talent is distributed unfairly, but there is no limit on how much we can improve what we start with.
|
||||
- Be prepared: When you are 90% done any large project (a house, a film, an event, an app) the rest of the myriad details will take a second 90% to complete.
|
||||
- When you die you take absolutely nothing with you except your reputation.
|
||||
- Before you are old, attend as many funerals as you can bear, and listen. Nobody talks about the departed’s achievements. The only thing people will remember is what kind of person you were while you were achieving.
|
||||
- For every dollar you spend purchasing something substantial, expect to pay a dollar in repairs, maintenance, or disposal by the end of its life.
|
||||
- Anything real begins with the fiction of what could be. Imagination is therefore the most potent force in the universe, and a skill you can get better at. It’s the one skill in life that benefits from ignoring what everyone else knows.
|
||||
- When crisis and disaster strike, don’t waste them. No problems, no progress.
|
||||
- On vacation go to the most remote place on your itinerary first, bypassing the cities. You’ll maximize the shock of otherness in the remote, and then later you’ll welcome the familiar comforts of a city on the way back.
|
||||
- When you get an invitation to do something in the future, ask yourself: would you accept this if it was scheduled for tomorrow? Not too many promises will pass that immediacy filter.
|
||||
- Don’t say anything about someone in email you would not be comfortable saying to them directly, because eventually they will read it.
|
||||
- If you desperately need a job, you are just another problem for a boss; if you can solve many of the problems the boss has right now, you are hired. To be hired, think like your boss.
|
||||
- Art is in what you leave out.
|
||||
- Acquiring things will rarely bring you deep satisfaction. But acquiring experiences will.
|
||||
- Rule of 7 in research. You can find out anything if you are willing to go seven levels. If the first source you ask doesn’t know, ask them who you should ask next, and so on down the line. If you are willing to go to the 7th source, you’ll almost always get your answer.
|
||||
- How to apologize: Quickly, specifically, sincerely.
|
||||
- Don’t ever respond to a solicitation or a proposal on the phone. The urgency is a disguise.
|
||||
- When someone is nasty, rude, hateful, or mean with you, pretend they have a disease. That makes it easier to have empathy toward them which can soften the conflict.
|
||||
- Eliminating clutter makes room for your true treasures.
|
||||
- You really don’t want to be famous. Read the biography of any famous person.
|
||||
- Experience is overrated. When hiring, hire for aptitude, train for skills. Most really amazing or great things are done by people doing them for the first time.
|
||||
- A vacation + a disaster = an adventure.
|
||||
- Buying tools: Start by buying the absolute cheapest tools you can find. Upgrade the ones you use a lot. If you wind up using some tool for a job, buy the very best you can afford.
|
||||
- Learn how to take a 20-minute power nap without embarrassment.
|
||||
- Following your bliss is a recipe for paralysis if you don’t know what you are passionate about. A better motto for most youth is “master something, anything”. Through mastery of one thing, you can drift towards extensions of that mastery that bring you more joy, and eventually discover where your bliss is.
|
||||
- I’m positive that in 100 years much of what I take to be true today will be proved to be wrong, maybe even embarrassingly wrong, and I try really hard to identify what it is that I am wrong about today.
|
||||
- Over the long term, the future is decided by optimists. To be an optimist you don’t have to ignore all the many problems we create; you just have to imagine improving our capacity to solve problems.
|
||||
Executable
+134
@@ -0,0 +1,134 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Clippings]]"
|
||||
- "[[Posts]]"
|
||||
author:
|
||||
- "[[Steph Ango]]"
|
||||
source: https://stephango.com/buy-wisely
|
||||
clipped: 2023-11-18
|
||||
published: 2023-09-29
|
||||
status:
|
||||
- "[[Published]]"
|
||||
topics:
|
||||
- "[[Products]]"
|
||||
- "[[Product usage analysis]]"
|
||||
---
|
||||
Whenever I buy things I try to prioritize *cost per use*. Sometimes I consider other priorities such as *cost per smile*, *cost per thrill*, *cost per externality*, and *cost per lesson*.
|
||||
|
||||
## Cost per use
|
||||
|
||||
*Cost per use* is a heuristic that helps me make decisions about most non-perishable purchases such as clothes, vehicles, tools, devices, and even services. How much will it cost me if I divide the price by its expected number of uses?
|
||||
|
||||
*Cost per use* accounts for longevity. Durable and repairable things may cost more upfront, but over time they cost less than things that break and need to be replaced.
|
||||
|
||||
For example, I buy wool socks from a brand called [Darn Tough](https://darntough.com/). They cost about four times as much as cheap socks, but they’re durable, comfortable, and have a lifetime guarantee.
|
||||
|
||||
How many times do you wear a pair of socks before they develop holes? It may sound silly, but if you amortize the price of each pair of socks over their expected number of uses, a good pair of socks is a worthwhile investment.
|
||||
|
||||
Quality
|
||||
|
||||
Price
|
||||
|
||||
Uses
|
||||
|
||||
Cost per use
|
||||
|
||||
Poor
|
||||
|
||||
$5
|
||||
|
||||
10
|
||||
|
||||
$0.50
|
||||
|
||||
Good
|
||||
|
||||
$10
|
||||
|
||||
50
|
||||
|
||||
$0.20
|
||||
|
||||
Best
|
||||
|
||||
$20
|
||||
|
||||
200
|
||||
|
||||
$0.10
|
||||
|
||||
Not only will durable socks save you money, they also save you the hassle of throwing out old socks and buying new ones. Your time has value.
|
||||
|
||||
The best things asymptote to *zero dollars per use* over their lifetime. Not all products that have a low *cost per use* are expensive. Some things are both affordable and durable.
|
||||
|
||||
*Cost per use* can also be used to measure the value you expect to get out of services like gym memberships, healthcare, or *all-you-can-eat* subscriptions like streaming services.
|
||||
|
||||
## How to assess durability
|
||||
|
||||
My aim is to have fewer but better things. These are some of the questions I ask of the things that I incorporate into my life:
|
||||
|
||||
- Will it be as useful to me in the future as it is now?
|
||||
- Is it made of durable and maintainable materials?
|
||||
- Does it have a timeless [style](https://stephango.com/style) and aesthetic?
|
||||
- Does it age well, wear well, build a [wabi-sabi](https://stephango.com/scars) patina?
|
||||
- Does it retain its resale value? Would someone else want to own it?
|
||||
- Can it be disassembled and repaired?
|
||||
- Does it have replaceable, non-proprietary parts that are easy to acquire?
|
||||
- Can it be powered with a standard plug or replaceable batteries?
|
||||
- Can it be modified and upgraded?
|
||||
- Has the maker existed for at least as long as I hope to keep the product?
|
||||
- Can it perform many jobs, or only one?
|
||||
- Does it have a guarantee?
|
||||
- Does it rely on other products or technologies that aren’t durable?
|
||||
|
||||
Not all questions are relevant to all things. Not all things need to satisfy every requirement. However, I feel better about buying things that check many of these boxes. A movement called “buy it for life” has sprung up around similar priorities.
|
||||
|
||||
## How to estimate uses
|
||||
|
||||
To make purchasing decisions based on *cost per use*, you should try to guess how many times you will use the product. This sounds obvious, but it can be hard to determine, especially if it’s something you’ve never bought before.
|
||||
|
||||
If you are new to a hobby, like cooking or skiing, you may not yet know how many times you will use a piece of gear. It’s easy to significantly overestimate or underestimate how many times you will use something.
|
||||
|
||||
You should, however, be able to guess the frequency of use. Is this something you might use once per hour, day, week, month, year? This will help you determine your budget. How many dollars per month do you want to spend on this?
|
||||
|
||||
If you don’t know the frequency yet consider borrowing, renting, or otherwise trialing. Remember the ideal *cost per use* trends to $0. The most cost-effective choice is to not buy something you don’t need.
|
||||
|
||||
There is an opportunity cost to every dollar. A dollar you spend on a something that won’t get much use is a dollar you can’t save for something that will.
|
||||
|
||||
If you’re only going to use something once, then *cost per use* may not be the right heuristic for this decision. If you have disposable income, then the *cost per use* lens should nonetheless guide you towards something with good resale value.
|
||||
|
||||
The best things to splurge on are the things you use the most. If you sit on a chair eight hours a day, then a nice chair is probably a good investment.
|
||||
|
||||
## Reducing the cost side
|
||||
|
||||
Durable things reduce *cost per use* by giving you more uses before they break. But you can also reduce *cost per use* by acquiring products at a discount. You may be able to buy second-hand, inherit, or barter.
|
||||
|
||||
Durable things can often be great second-hand purchases *because* they are durable, and may not be the current fashion.
|
||||
|
||||
## Alternative heuristics
|
||||
|
||||
*Cost per use* is not the only way to make buying decisions. For things like consumables and experiences, you may need to approach the decision differently.
|
||||
|
||||
### Cost per smile
|
||||
|
||||
How much joy can you get out of each dollar? Some things bring lots of joy for a small amount of money: ice cream, sunsets, nature walks. A cheap date can bring many smiles per dollar.
|
||||
|
||||
Some things have excellent *cost per use* but few *smiles per use*. I don’t smile every time I put my nice socks on. A few years ago I bought a fairly expensive electric road bike. It probably didn’t have the best *cost per use*, but it gives me the most *joy per use* of any product I purchased in recent memory. It’s worth it to me.
|
||||
|
||||
### Cost per thrill
|
||||
|
||||
Some experiences have high *intensity per dollar*. A potency, concentration, or strength of experience. For example, foods can have high *flavor per dollar* — like hot sauce, pickles, curry, garlic, or mustard. Roller coasters, bungee jumping, or skydiving may give you a *thrill per dollar* that you can’t beat.
|
||||
|
||||
### Cost per externality
|
||||
|
||||
Some purchases may have externalities that are incompatible with your values. For example, you may wish to buy organic produce, pasture-raised eggs, or fair trade coffee. You may wish to buy products that preserve privacy, reduce environmental impact, or support a cause you believe in.
|
||||
|
||||
You can choose to incorporate externalities into the cost that you are paying instead of letting that cost be borne by others, or by society at large. This may increase your personal *cost per use*, but it might help change how society values things, or simply make you feel good.
|
||||
|
||||
### Cost per lesson
|
||||
|
||||
Knowledge has a cost. Sometimes that cost is monetary, sometimes that cost is time, sometimes that cost is pain. Sometimes it’s all three.
|
||||
|
||||
You might learn more about investing by purchasing a handful of shares in public companies than going to graduate school. You might learn more about making movies by trying to film one on your phone than going to film school.
|
||||
|
||||
Acquiring new ideas and perspectives can have a worthwhile cost. Being an early adopter of a product often has a poor *cost per use*, but its value is in the learning and experience per dollar.
|
||||
Executable
+27
@@ -0,0 +1,27 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Clippings]]"
|
||||
- "[[Posts]]"
|
||||
author:
|
||||
- "[[Steph Ango]]"
|
||||
url: https://stephango.com/in-good-hands
|
||||
created: 2023-09-12
|
||||
published: 2023-08-06
|
||||
status:
|
||||
- "[[Published]]"
|
||||
topics:
|
||||
---
|
||||
|
||||
There is a feeling I search for: *being in good hands*. It is the feeling I look to give and the feeling I look to receive.
|
||||
|
||||
I know I am in good hands when I sense a cohesive point of view expressed with attention to detail.
|
||||
|
||||
I can feel it almost instantly. In any medium. Music, film, fashion, architecture, writing, software. At a Japanese restaurant it’s what *omakase* aims to be. I leave it up to you, chef.
|
||||
|
||||
When I am in good hands I open myself to a state of curiosity and appreciation. I allow myself to suspend preconceived notions. I give you freedom to take me where you want to go. I immerse myself in your worldview and pause judgement.
|
||||
|
||||
I want to be convinced of something new. I want my mind to be changed. Later I may disagree, but for now I am letting the experience soak in.
|
||||
|
||||
That trust doesn’t come easily. As an audience member it’s about feeling cared for from the moment I interact with your work. It’s about feeling a well-defined point of view permeate what you make.
|
||||
|
||||
If my mind was changed, I must have been in good hands.
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
## Notes
|
||||
|
||||
![[Daily.base]]
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Trips]]"
|
||||
start: 2023-09-12
|
||||
end: 2023-09-30
|
||||
loc:
|
||||
- "[[Kyoto]]"
|
||||
- "[[Japan]]"
|
||||
---
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Meetings]]"
|
||||
type: []
|
||||
date: 2023-09-14
|
||||
org:
|
||||
- "[[Obsidian]]"
|
||||
loc:
|
||||
- Remote
|
||||
people:
|
||||
- "[[Steph Ango]]"
|
||||
topics:
|
||||
- "[[Emergence]]"
|
||||
---
|
||||
- Discussed the book [[Out of Control]] on the topic of [[Emergence]]
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Posts]]"
|
||||
- "[[Clippings]]"
|
||||
created: 2023-09-14
|
||||
url: https://stephango.com/evergreen-notes
|
||||
author:
|
||||
- "[[Steph Ango]]"
|
||||
published: 2022-09-16
|
||||
topics:
|
||||
- "[[Evergreen]]"
|
||||
tags:
|
||||
- 0🌲
|
||||
status:
|
||||
- "[[Published]]"
|
||||
---
|
||||
Using [[evergreen]] notes in Obsidian has been the most impactful change to how I think.
|
||||
|
||||
Evergreen notes allow you to think about complex ideas by building them up from smaller composable ideas.
|
||||
|
||||
My evergreen notes have titles that distill each idea in a succinct and memorable way, that I can use in a sentence. For example:
|
||||
|
||||
- [[A company is a superorganism]]
|
||||
- [[All input is error]]
|
||||
- [[Calmness is a superpower]]
|
||||
- [[Cross the chasm]]
|
||||
- [[Everything is a remix]]
|
||||
- [[Writing is telepathy]]
|
||||
- [[You have no obligation to your former self]]
|
||||
- etc
|
||||
|
||||
You don’t need to agree with the idea for it to become an evergreen note. Evergreen notes can be very short.
|
||||
|
||||
I have an evergreen note called [[Creativity is combinatory uniqueness]] that is built on top of another evergreen note:
|
||||
|
||||
> If you believe [[Everything is a remix]], then creativity is defined by the uniqueness and appeal of the combination of elements.
|
||||
|
||||
Evergreen notes turn ideas into objects. By turning ideas into objects you can manipulate them, combine them, stack them. You don’t need to hold them all in your head at the same time.
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Projects]]"
|
||||
type:
|
||||
- "[[UI]]"
|
||||
org:
|
||||
- "[[Obsidian]]"
|
||||
year: 2020
|
||||
url: https://minimal.guide
|
||||
status:
|
||||
- "[[Active]]"
|
||||
---
|
||||
## To-do
|
||||
|
||||
- [x] Color schemes
|
||||
- [x] E-ink mode
|
||||
- [x] Mobile support
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
Analysis of cost per use, see [[Buy wisely]]
|
||||
|
||||
![[Products.base#Cost per use]]
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Albums]]"
|
||||
genre:
|
||||
- "[[Jazz]]"
|
||||
artist: "[[Paul Chambers]]"
|
||||
year: 1957
|
||||
rating: 7
|
||||
created: 2023-09-12
|
||||
---
|
||||
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Movies]]"
|
||||
cover: https://m.media-amazon.com/images/M/MV5BNzQzMzJhZTEtOWM4NS00MTdhLTg0YjgtMjM4MDRkZjUwZDBlXkEyXkFqcGdeQXVyNjU0OTQ0OTY@._V1_SX300.jpg
|
||||
genre:
|
||||
- "[[Sci-fi]]"
|
||||
director:
|
||||
- "[[Ridley Scott]]"
|
||||
cast:
|
||||
- "[[Harrison Ford]]"
|
||||
rating: 7
|
||||
year: 1982
|
||||
last: 2023-09-14
|
||||
imdbId: tt0083658
|
||||
---
|
||||
|
||||
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Recipes]]"
|
||||
- "[[Clippings]]"
|
||||
cuisine:
|
||||
- "[[American]]"
|
||||
type:
|
||||
- "[[Dessert]]"
|
||||
ingredients:
|
||||
- "[[Nectarine]]"
|
||||
author:
|
||||
- "[[Steph Ango]]"
|
||||
url: https://stephango.com/brown-butter-nectarine-tart
|
||||
servings: 8 slices (11 inch tart)
|
||||
rating: 7
|
||||
published: 2023-07-30
|
||||
created: 2023-09-12
|
||||
last: 2023-09-12
|
||||
---
|
||||
It seems like every summer I have the impromptu and magical experience of suddenly smelling the delicate aroma of ripe nectarines wafting through the air. At that moment, whether it's at a farmer's market or grocery store, I know it's time to make this recipe.
|
||||
|
||||
This is my favorite summer dessert. It is another of my mother's recipes, but this one has almost no changes aside from conversion to grams. I asked my mom to make this tart so many times when I was growing up that I am unable to tell how much of my appreciation for it is the pure nostalgia of every slice.
|
||||
|
||||
The filling is fluffy and light, not too sweet. It develops a wonderful almost meringue-like crispy shell that adds beautiful texture.
|
||||
|
||||
This recipe is scaled for an 11 inch tart pan. I highly recommend a tart pan with a removable bottom. I like to double the recipe for the crust and keep one ball of dough in the freezer in case of emergency.
|
||||
|
||||
## Ingredients
|
||||
|
||||
### Pastry
|
||||
|
||||
- 170g (1 ⅓ cups) all-purpose flour
|
||||
- 1 tbsp sugar
|
||||
- ½ tsp salt
|
||||
- 113g (1 stick or 8 tbsp) cold butter
|
||||
- 3-4 tbsp ice water
|
||||
|
||||
### Filling
|
||||
|
||||
- 1 large egg
|
||||
- 90g (7 tbsp) sugar
|
||||
- 15g (2 tbsp) flour
|
||||
- 75g (5 tbsp) butter
|
||||
- 1 tsp vanilla extract
|
||||
- 4 nectarines or peaches cut into eights
|
||||
|
||||
## Directions
|
||||
|
||||
Making and blind-baking the crust
|
||||
|
||||
1. Preheat oven to 425F/220C (use convection if you have it).
|
||||
2. Combine flour, sugar and salt in bowl.
|
||||
3. Using your finger tips combine the in butter until mixture resembles crumbs, work quickly so that it stays cool.
|
||||
4. Add ice water, tossing with a fork or lightly with fingers until pastry holds together.
|
||||
5. Shape into a ball and flatten.
|
||||
6. On lightly floured surface, roll out into an 13 inch circle.
|
||||
7. Fit into 11 inch tart pan.
|
||||
8. Fold in pastry overhang against sides.
|
||||
9. Use a fork to poke holes throughout the bottom of the dough. This will allow steam to escape and prevent the bottom from lifting up.
|
||||
10. Line with parchment paper or foil and fill with dried beans or rice.
|
||||
11. Blind bake 12 minutes. Remove parchment paper and beans carefully and bake.
|
||||
12. Bake 10 minutes more until light golden, don't overdo it.
|
||||
13. Cool on a wire rack.
|
||||
|
||||
Lower oven to 350F/180C (use convection if you have it)
|
||||
|
||||
1. Melt butter in a small saucepan over medium heat until lightly browned, the milk solids should become a vibrant rusty red color. Watch it closely because it can burn easily.
|
||||
2. Remove from heat and pour into a bowl to cool.
|
||||
3. In a separate bowl, beat egg and sugar until pale and fluffy.
|
||||
4. Stir in flour, then cooled browned butter and vanilla extract.
|
||||
5. Spread filling in tart shell; arrange nectarine slices on top.
|
||||
6. Bake on a cookie sheet 30 minutes until a deep gold. May need more or less time depending on your oven.
|
||||
|
||||
## Tips
|
||||
|
||||
- If your oven doesn't have a convection fan, the baking times will take a little longer.
|
||||
- This tart goes very well with homemade whipped cream.
|
||||
- Keep the pastry shell in the tart pan throughout the whole recipe. Once the tart has been baked, do not try to remove tart from pan right away. Let it cool 10-15 minutes before trying to remove it from the tart pan as the crust is very tender.
|
||||
- I prefer nectarines to peaches in this recipe because the texture of the skin is less noticeable, but either works perfectly. I have also made this recipe with pears, and I am sure it would work with many stone fruits as long as they are not overly juicy.
|
||||
- If it's a hot day, place the butter in the freezer for a few minutes before making the pastry to give yourself more working time.
|
||||
- To make extra pastry crust, I double the pastry recipe. I split the finished dough ball in half and wrap it cling wrap. Then place it in a zip top bag. When it's time to back it only need 15 minutes to thaw at which point you can start beating it down to shape with a rolling pin. The fact that it's cold makes it easier to work with.
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Board games]]"
|
||||
type: []
|
||||
maker:
|
||||
rating: 7
|
||||
last: 2023-09-01
|
||||
---
|
||||
Executable
+15
@@ -0,0 +1,15 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Places]]"
|
||||
type:
|
||||
- "[[Parks]]"
|
||||
- "[[Shrines]]"
|
||||
loc:
|
||||
- "[[Kyoto]]"
|
||||
- "[[Japan]]"
|
||||
rating: 7
|
||||
created: 2023-09-12
|
||||
coordinates:
|
||||
- "34.9689499"
|
||||
- "135.7692576"
|
||||
---
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Shows]]"
|
||||
genre:
|
||||
- "[[Sci-fi]]"
|
||||
rating: 7
|
||||
created: 2023-09-12
|
||||
last: 2023-09-12
|
||||
---
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
---
|
||||
tags:
|
||||
- music/genres
|
||||
---
|
||||
|
||||
![[Albums.base#Genre]]
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
---
|
||||
categories:
|
||||
- "[[People]]"
|
||||
type:
|
||||
- "[[Authors]]"
|
||||
created: 2023-09-12
|
||||
---
|
||||
## Books
|
||||
|
||||
![[Books.base#Author]]
|
||||
|
||||
# Clippings
|
||||
|
||||
![[Clippings.base#Author]]
|
||||
|
||||
# Podcast episodes
|
||||
|
||||
![[Podcast episodes.base#Guest]]
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Places]]"
|
||||
type:
|
||||
- "[[Cities]]"
|
||||
loc:
|
||||
- "[[Japan]]"
|
||||
coordinates:
|
||||
- "35.021041"
|
||||
- "135.7556075"
|
||||
rating: 7
|
||||
created: 2023-09-12
|
||||
---
|
||||
## Trips
|
||||
|
||||
![[Trips.base#Location]]
|
||||
|
||||
## Places
|
||||
|
||||
![[Map.base#Location]]
|
||||
![[Places.base#Location]]
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Companies]]"
|
||||
- "[[Apps]]"
|
||||
type:
|
||||
- "[[Apps]]"
|
||||
url: https://obsidian.md/
|
||||
---
|
||||
Executable
+19
@@ -0,0 +1,19 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Books]]"
|
||||
cover: "[[out-of-control.jpg]]"
|
||||
isbn: 201483408
|
||||
isbn13: 9780201483406
|
||||
pages: 528
|
||||
year: 1992
|
||||
author:
|
||||
- "[[Kevin Kelly]]"
|
||||
genre:
|
||||
- "[[Futurism]]"
|
||||
- "[[Nonfiction]]"
|
||||
topics:
|
||||
- "[[Emergence]]"
|
||||
created: 2023-09-12
|
||||
last: 2023-09-12
|
||||
rating: 7
|
||||
---
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
---
|
||||
tags:
|
||||
- places/types
|
||||
icon: trees
|
||||
color: green
|
||||
---
|
||||
|
||||
## Places
|
||||
|
||||
![[Map.base#Type]]
|
||||
![[Places.base#Type]]
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
---
|
||||
categories:
|
||||
- "[[People]]"
|
||||
type:
|
||||
- "[[Musicians]]"
|
||||
created: 2023-09-13
|
||||
---
|
||||
## Albums
|
||||
|
||||
![[Albums.base#Artist]]
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
---
|
||||
tags:
|
||||
- genres
|
||||
---
|
||||
![[Genre.base]]
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
---
|
||||
categories:
|
||||
- "[[People]]"
|
||||
type:
|
||||
- "[[Authors]]"
|
||||
org:
|
||||
- "[[Obsidian]]"
|
||||
created: 2023-09-12
|
||||
twitter: kepano
|
||||
url: https://stephango.com/
|
||||
---
|
||||
## Clippings
|
||||
|
||||
![[Clippings.base#Author]]
|
||||
|
||||
## Meetings
|
||||
|
||||
![[Meetings.base#Person]]
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Games]]"
|
||||
system: "[[Nintendo Switch]]"
|
||||
maker: "[[Nintendo]]"
|
||||
genre:
|
||||
- "[[Open world]]"
|
||||
aliases:
|
||||
- BOTW
|
||||
last: "[[2022-04]]"
|
||||
rating: 7
|
||||
year: 2017
|
||||
---
|
||||
Executable
+27
@@ -0,0 +1,27 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Books]]"
|
||||
author:
|
||||
- "[[E. M. Forster]]"
|
||||
cover:
|
||||
genre:
|
||||
- "[[Sci-fi]]"
|
||||
year: 1909
|
||||
rating: 7
|
||||
topics:
|
||||
- "[[Humanism]]"
|
||||
created: 2023-09-12
|
||||
last: 2023-09-12
|
||||
tags:
|
||||
- to-read
|
||||
---
|
||||
|
||||
## Quotes
|
||||
|
||||
Replace "accumulations" with "notifications"
|
||||
|
||||
> There were buttons and switches everywhere — buttons to call for food for music, for clothing. There was the hot-bath button, by pressure of which a basin of (imitation) marble rose out of the floor, filled to the brim with a warm deodorized liquid. There was the cold-bath button. There was the button that produced literature. And there were of course the buttons by which she communicated with her friends. The room, though it contained nothing, was in touch with all that she cared for in the world
|
||||
>
|
||||
> Vashti’s next move was to turn off the isolation switch, and all the accumulations of the last three minutes burst upon her. The room was filled with the noise of bells, and speaking-tubes. What was the new food like? Could she recommend it? Has she had any ideas lately? Might one tell her one’s own ideas? Would she make an engagement to visit the public nurseries at an early date? — say this day month.
|
||||
>
|
||||
> To most of these questions she replied with irritation — a growing quality in that accelerated age. She said that the new food was horrible. That she could not visit the public nurseries through press of engagements. That she had no ideas of her own but had just been told one-that four stars and three in the middle were like a man: she doubted there was much in it. Then she switched off her correspondents, for it was time to deliver her lecture on Australian music
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Podcast episodes]]"
|
||||
show: "[[Well Made]]"
|
||||
guests:
|
||||
- "[[Kevin Kelly]]"
|
||||
topics: []
|
||||
episode: "145"
|
||||
rating: 7
|
||||
published: 2021-04-15
|
||||
last: 2023-09-12
|
||||
---
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Podcasts]]"
|
||||
host:
|
||||
- "[[Steph Ango]]"
|
||||
rating:
|
||||
---
|
||||
## Episodes
|
||||
|
||||
![[Podcast episodes.base#Show]]
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
---
|
||||
categories: "[[People]]"
|
||||
type:
|
||||
- "[[Actors]]"
|
||||
---
|
||||
## Movies
|
||||
|
||||
![[Movies.base#Actor]]
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Albums]]"
|
||||
genre: []
|
||||
artist: ""
|
||||
year:
|
||||
created: <% tp.date.now() %>
|
||||
rating:
|
||||
---
|
||||
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
---
|
||||
categories: "[[Apps]]"
|
||||
maker: ""
|
||||
rating:
|
||||
---
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
---
|
||||
categories: "[[People]]"
|
||||
type:
|
||||
- "[[Authors]]"
|
||||
---
|
||||
## Books
|
||||
|
||||
![[Books.base#Author]]
|
||||
Executable
+48
@@ -0,0 +1,48 @@
|
||||
filters:
|
||||
and:
|
||||
- note.categories.contains(link("Albums"))
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Album
|
||||
note.year:
|
||||
displayName: Year
|
||||
note.artist:
|
||||
displayName: Artist
|
||||
note.created:
|
||||
displayName: Added
|
||||
note.rating:
|
||||
displayName: Rating
|
||||
note.genre:
|
||||
displayName: Genre
|
||||
views:
|
||||
- type: table
|
||||
name: Albums
|
||||
order:
|
||||
- file.name
|
||||
- artist
|
||||
- rating
|
||||
- year
|
||||
- genre
|
||||
- type: table
|
||||
name: Artist
|
||||
filters:
|
||||
and:
|
||||
- list(artist).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- artist
|
||||
- rating
|
||||
- year
|
||||
- genre
|
||||
- type: table
|
||||
name: Genre
|
||||
filters:
|
||||
and:
|
||||
- list(genre).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- artist
|
||||
- rating
|
||||
- year
|
||||
- genre
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
formulas:
|
||||
Embeds: if(file.embeds[0].containsAny("jpg","gif","webp","jpeg","avif"), file.embeds[0])
|
||||
Date: if(created,created,if(start,start))
|
||||
links: file.
|
||||
views:
|
||||
- type: cards
|
||||
name: Images
|
||||
filters:
|
||||
and:
|
||||
- this.file.hasLink(file)
|
||||
- '!file.ext.containsAny("base", "canvas", "pdf", "md")'
|
||||
- file == ""
|
||||
order: []
|
||||
sort:
|
||||
- property: file.name
|
||||
direction: ASC
|
||||
image: file.file
|
||||
cardSize: 70
|
||||
- type: table
|
||||
name: Images 2
|
||||
filters:
|
||||
and:
|
||||
- '!file.ext.containsAny("base", "canvas", "pdf", "md")'
|
||||
order:
|
||||
- file.name
|
||||
- file.links
|
||||
- formula.links
|
||||
sort:
|
||||
- property: file.name
|
||||
direction: ASC
|
||||
image: file.file
|
||||
cardSize: 90
|
||||
Executable
+31
@@ -0,0 +1,31 @@
|
||||
filters:
|
||||
and:
|
||||
- file.hasLink(this)
|
||||
formulas:
|
||||
Path: file.path
|
||||
properties:
|
||||
note.created:
|
||||
displayName: Date
|
||||
file.name:
|
||||
displayName: Title
|
||||
note.categories:
|
||||
displayName: Categories
|
||||
views:
|
||||
- type: table
|
||||
name: Backlinks
|
||||
order:
|
||||
- file.name
|
||||
- categories
|
||||
- created
|
||||
sort:
|
||||
- property: created
|
||||
direction: DESC
|
||||
- type: table
|
||||
name: Recent entries
|
||||
order:
|
||||
- file.name
|
||||
- created
|
||||
sort:
|
||||
- property: created
|
||||
direction: DESC
|
||||
limit: 20
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
filters:
|
||||
and:
|
||||
- categories.contains(link("Board games"))
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Game
|
||||
note.rating:
|
||||
displayName: Rating
|
||||
note.last:
|
||||
displayName: Last
|
||||
views:
|
||||
- type: table
|
||||
name: Table
|
||||
order:
|
||||
- file.name
|
||||
- rating
|
||||
- last
|
||||
Executable
+57
@@ -0,0 +1,57 @@
|
||||
filters:
|
||||
and:
|
||||
- categories.contains(link("Books"))
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
note.author:
|
||||
displayName: Author
|
||||
file.name:
|
||||
displayName: Name
|
||||
note.year:
|
||||
displayName: Year
|
||||
note.genre:
|
||||
displayName: Genre
|
||||
views:
|
||||
- type: table
|
||||
name: Books
|
||||
order:
|
||||
- file.name
|
||||
- author
|
||||
- length
|
||||
- year
|
||||
- rating
|
||||
- topics
|
||||
- last
|
||||
sort:
|
||||
- property: file.name
|
||||
direction: ASC
|
||||
- type: table
|
||||
name: Top rated
|
||||
order:
|
||||
- file.name
|
||||
- rating
|
||||
- last
|
||||
sort:
|
||||
- property: last
|
||||
direction: DESC
|
||||
- type: table
|
||||
name: Author
|
||||
filters:
|
||||
and:
|
||||
- list(author).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- year
|
||||
- genre
|
||||
sort:
|
||||
- property: genre
|
||||
direction: ASC
|
||||
- type: table
|
||||
name: Genre
|
||||
filters:
|
||||
and:
|
||||
- list(genre).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- year
|
||||
- genre
|
||||
Executable
+39
@@ -0,0 +1,39 @@
|
||||
filters:
|
||||
and:
|
||||
- note.categories.contains(link("Clippings"))
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Title
|
||||
note.author:
|
||||
displayName: Author
|
||||
note.created:
|
||||
displayName: Clipped
|
||||
note.published:
|
||||
displayName: Published
|
||||
views:
|
||||
- type: table
|
||||
name: Clippings
|
||||
order:
|
||||
- file.name
|
||||
- author
|
||||
- created
|
||||
- published
|
||||
sort:
|
||||
- property: created
|
||||
direction: DESC
|
||||
columnSize:
|
||||
note.author: 140
|
||||
- type: table
|
||||
name: Author
|
||||
filters:
|
||||
and:
|
||||
- list(author).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- author
|
||||
- created
|
||||
- published
|
||||
sort:
|
||||
- property: clipped
|
||||
direction: DESC
|
||||
Executable
+22
@@ -0,0 +1,22 @@
|
||||
filters:
|
||||
and:
|
||||
- categories.contains(link("Companies"))
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Company
|
||||
property.url:
|
||||
displayName: Link
|
||||
note.url:
|
||||
displayName: URL
|
||||
note.people:
|
||||
displayName: People
|
||||
views:
|
||||
- type: table
|
||||
name: Companies
|
||||
order:
|
||||
- file.name
|
||||
- url
|
||||
- people
|
||||
columnSize:
|
||||
note.url: 239
|
||||
Executable
+69
@@ -0,0 +1,69 @@
|
||||
filters:
|
||||
or:
|
||||
- file.name.contains(this.file.name)
|
||||
- created.toString().contains(this.file.name)
|
||||
- start.toString().contains(this.file.name)
|
||||
- end.toString().contains(this.file.name)
|
||||
- file.links.contains(this.file)
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Entry
|
||||
note.categories:
|
||||
displayName: Categories
|
||||
note.created:
|
||||
displayName: Created
|
||||
note.tags:
|
||||
displayName: Tags
|
||||
views:
|
||||
- type: table
|
||||
name: Daily notes
|
||||
filters:
|
||||
and:
|
||||
- '!tags.contains("daily")'
|
||||
- '!tags.contains("monthly")'
|
||||
order:
|
||||
- file.name
|
||||
- created
|
||||
- categories
|
||||
- tags
|
||||
sort:
|
||||
- property: tags
|
||||
direction: ASC
|
||||
- property: created
|
||||
direction: DESC
|
||||
- property: file.name
|
||||
direction: ASC
|
||||
- property: categories
|
||||
direction: ASC
|
||||
columnSize:
|
||||
file.name: 287
|
||||
note.created: 128
|
||||
note.categories: 119
|
||||
- type: table
|
||||
name: Monthly
|
||||
filters:
|
||||
and:
|
||||
- '!tags.contains("daily")'
|
||||
- '!tags.contains("monthly")'
|
||||
order:
|
||||
- file.name
|
||||
- categories
|
||||
- created
|
||||
sort:
|
||||
- property: file.name
|
||||
direction: ASC
|
||||
- property: created
|
||||
direction: DESC
|
||||
- type: table
|
||||
name: Yearly
|
||||
filters:
|
||||
and:
|
||||
- '!tags.contains("daily")'
|
||||
- '!tags.contains("monthly")'
|
||||
order:
|
||||
- file.name
|
||||
- categories
|
||||
- created
|
||||
sort:
|
||||
- property: created
|
||||
direction: ASC
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
filters:
|
||||
and:
|
||||
- categories.contains(link("Events"))
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
note.end:
|
||||
displayName: End
|
||||
note.loc:
|
||||
displayName: Location
|
||||
note.start:
|
||||
displayName: Start
|
||||
views:
|
||||
- type: table
|
||||
name: Events
|
||||
order:
|
||||
- file.name
|
||||
- start
|
||||
- end
|
||||
- loc
|
||||
sort:
|
||||
- property: start
|
||||
direction: DESC
|
||||
- type: table
|
||||
name: Type
|
||||
filters:
|
||||
and:
|
||||
- list(type).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- start
|
||||
- loc
|
||||
sort:
|
||||
- property: start
|
||||
direction: DESC
|
||||
- type: table
|
||||
name: Location
|
||||
filters:
|
||||
and:
|
||||
- list(loc).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- start
|
||||
- loc
|
||||
sort:
|
||||
- property: start
|
||||
direction: DESC
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
filters:
|
||||
and:
|
||||
- tags.contains("0🌲")
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Name
|
||||
note.created:
|
||||
displayName: Created
|
||||
views:
|
||||
- type: table
|
||||
name: Evergreen
|
||||
order:
|
||||
- file.name
|
||||
- created
|
||||
sort:
|
||||
- property: created
|
||||
direction: DESC
|
||||
Executable
+36
@@ -0,0 +1,36 @@
|
||||
formulas:
|
||||
Embeds: if(file.embeds[0].containsAny("jpg","gif","webp","jpeg","avif"), file.embeds[0])
|
||||
Date: if(created,created,if(start,start))
|
||||
views:
|
||||
- type: table
|
||||
name: All files
|
||||
order:
|
||||
- file.name
|
||||
- file.mtime
|
||||
- file.path
|
||||
- file.ext
|
||||
- type: cards
|
||||
name: Images
|
||||
filters:
|
||||
and:
|
||||
- '!file.ext.containsAny("base", "canvas", "pdf", "md")'
|
||||
order:
|
||||
- file.name
|
||||
sort:
|
||||
- property: file.name
|
||||
direction: ASC
|
||||
image: file.file
|
||||
- type: cards
|
||||
name: Images in posts
|
||||
filters:
|
||||
and:
|
||||
- "!formula.Embeds.isEmpty()"
|
||||
order:
|
||||
- file.name
|
||||
- formula.Date
|
||||
sort:
|
||||
- property: file.name
|
||||
direction: ASC
|
||||
- property: date
|
||||
direction: DESC
|
||||
image: formula.Embeds
|
||||
Executable
+51
@@ -0,0 +1,51 @@
|
||||
filters:
|
||||
and:
|
||||
- note.categories.contains(link("Games"))
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Games
|
||||
note.year:
|
||||
displayName: Year
|
||||
note.maker:
|
||||
displayName: Maker
|
||||
note.rating:
|
||||
displayName: Rating
|
||||
note.genre:
|
||||
displayName: Genre
|
||||
note.last:
|
||||
displayName: Last played
|
||||
views:
|
||||
- type: table
|
||||
name: Games
|
||||
order:
|
||||
- file.name
|
||||
- maker
|
||||
- genre
|
||||
- year
|
||||
- rating
|
||||
- last
|
||||
- type: table
|
||||
name: Studio
|
||||
filters:
|
||||
and:
|
||||
- list(maker).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- maker
|
||||
- genre
|
||||
- year
|
||||
- rating
|
||||
- last
|
||||
- type: table
|
||||
name: Genre
|
||||
filters:
|
||||
and:
|
||||
- list(genre).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- maker
|
||||
- genre
|
||||
- year
|
||||
- rating
|
||||
- last
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
filters:
|
||||
and:
|
||||
- list(genre).contains(this)
|
||||
display:
|
||||
note.rating: Rating
|
||||
note.categories: Category
|
||||
note.last: Last
|
||||
file.name: Name
|
||||
views:
|
||||
- type: table
|
||||
name: Genre
|
||||
order:
|
||||
- file.name
|
||||
- rating
|
||||
- categories
|
||||
- last
|
||||
sort:
|
||||
- column: note.rating
|
||||
direction: DESC
|
||||
- column: note.last
|
||||
direction: DESC
|
||||
columnSize:
|
||||
file.name: 248
|
||||
note.categories: 170
|
||||
Executable
+15
@@ -0,0 +1,15 @@
|
||||
filters:
|
||||
and:
|
||||
- '!file.name.contains("Template")'
|
||||
- tags.contains("journal")
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Entry
|
||||
note.created:
|
||||
displayName: Created
|
||||
views:
|
||||
- type: table
|
||||
name: Table
|
||||
order:
|
||||
- file.name
|
||||
- created
|
||||
Executable
+89
@@ -0,0 +1,89 @@
|
||||
filters:
|
||||
and:
|
||||
- categories.contains(link("Places"))
|
||||
- '!file.name.contains("Template")'
|
||||
formulas:
|
||||
Icon: list(type)[0].asFile().properties.icon
|
||||
Color: list(type)[0].asFile().properties.color
|
||||
properties:
|
||||
note.type:
|
||||
displayName: Type
|
||||
note.rating:
|
||||
displayName: Rating
|
||||
note.loc:
|
||||
displayName: Location
|
||||
file.name:
|
||||
displayName: Name
|
||||
note.last:
|
||||
displayName: Last
|
||||
views:
|
||||
- type: map
|
||||
name: Map
|
||||
order:
|
||||
- file.name
|
||||
- rating
|
||||
- loc
|
||||
- type
|
||||
- last
|
||||
- formula.Icon
|
||||
sort:
|
||||
- property: last
|
||||
direction: DESC
|
||||
- property: type
|
||||
direction: ASC
|
||||
- property: loc
|
||||
direction: ASC
|
||||
defaultZoom: 2
|
||||
coordinates: note.coordinates
|
||||
markerIcon: formula.Icon
|
||||
markerColor: formula.Color
|
||||
- type: map
|
||||
name: Location
|
||||
filters:
|
||||
or:
|
||||
- list(loc).contains(this)
|
||||
- list(loc).containsAny(this.related)
|
||||
order:
|
||||
- file.name
|
||||
sort:
|
||||
- property: last
|
||||
direction: DESC
|
||||
- property: type
|
||||
direction: ASC
|
||||
- property: loc
|
||||
direction: ASC
|
||||
columnSize:
|
||||
file.name: 162
|
||||
note.rating: 84
|
||||
note.loc: 145
|
||||
note.type: 199
|
||||
coordinates: note.coordinates
|
||||
defaultZoom: 10.6
|
||||
markerIcon: formula.Icon
|
||||
markerColor: formula.Color
|
||||
- type: map
|
||||
name: Type
|
||||
filters:
|
||||
and:
|
||||
- list(type).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- rating
|
||||
- type
|
||||
- formula.Color
|
||||
sort:
|
||||
- property: last
|
||||
direction: DESC
|
||||
- property: type
|
||||
direction: ASC
|
||||
- property: loc
|
||||
direction: ASC
|
||||
columnSize:
|
||||
file.name: 162
|
||||
note.rating: 84
|
||||
note.loc: 145
|
||||
note.type: 199
|
||||
coordinates: note.coordinates
|
||||
defaultZoom: 3.1
|
||||
markerIcon: formula.Icon
|
||||
markerColor: formula.Color
|
||||
Executable
+52
@@ -0,0 +1,52 @@
|
||||
filters:
|
||||
and:
|
||||
- categories.contains(link("Meetings"))
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
note.date:
|
||||
displayName: Date
|
||||
note.people:
|
||||
displayName: People
|
||||
note.type:
|
||||
displayName: Type
|
||||
file.name:
|
||||
displayName: Meeting
|
||||
note.org:
|
||||
displayName: Org
|
||||
views:
|
||||
- type: table
|
||||
name: Meetings
|
||||
order:
|
||||
- file.name
|
||||
- date
|
||||
- type
|
||||
- people
|
||||
sort:
|
||||
- property: date
|
||||
direction: ASC
|
||||
- type: table
|
||||
name: Person
|
||||
filters:
|
||||
and:
|
||||
- list(people).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- date
|
||||
- type
|
||||
- people
|
||||
sort:
|
||||
- property: date
|
||||
direction: ASC
|
||||
- type: table
|
||||
name: Type
|
||||
filters:
|
||||
and:
|
||||
- list(type).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- date
|
||||
- people
|
||||
- org
|
||||
sort:
|
||||
- property: date
|
||||
direction: DESC
|
||||
Executable
+239
@@ -0,0 +1,239 @@
|
||||
filters:
|
||||
and:
|
||||
- categories.contains(link("Movies"))
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Name
|
||||
note.last:
|
||||
displayName: Last
|
||||
note.rating:
|
||||
displayName: Rating
|
||||
note.year:
|
||||
displayName: Year
|
||||
note.director:
|
||||
displayName: Director
|
||||
note.genre:
|
||||
displayName: Genre
|
||||
note.cast:
|
||||
displayName: Cast
|
||||
note.scoreImdb:
|
||||
displayName: IMDB
|
||||
note.scoreRT:
|
||||
displayName: RT
|
||||
note.runtime:
|
||||
displayName: Runtime
|
||||
note.watchlist:
|
||||
displayName: Added
|
||||
views:
|
||||
- type: table
|
||||
name: All
|
||||
order:
|
||||
- file.name
|
||||
- year
|
||||
- director
|
||||
- rating
|
||||
- last
|
||||
- plot
|
||||
- genre
|
||||
sort:
|
||||
- property: director
|
||||
direction: ASC
|
||||
- property: plot
|
||||
direction: ASC
|
||||
columnSize:
|
||||
file.name: 193
|
||||
note.director: 205
|
||||
note.plot: 233
|
||||
note.genre: 261
|
||||
- type: table
|
||||
name: To-watch
|
||||
filters:
|
||||
and:
|
||||
- last.isEmpty()
|
||||
- rating.isEmpty()
|
||||
order:
|
||||
- file.name
|
||||
- year
|
||||
- scoreImdb
|
||||
- scoreRT
|
||||
- runtime
|
||||
- watchlist
|
||||
- director
|
||||
- genre
|
||||
sort:
|
||||
- property: scoreImdb
|
||||
direction: DESC
|
||||
- property: scoreRT
|
||||
direction: DESC
|
||||
- property: watchlist
|
||||
direction: DESC
|
||||
- property: file.name
|
||||
direction: ASC
|
||||
- property: director
|
||||
direction: ASC
|
||||
columnSize:
|
||||
file.name: 283
|
||||
note.year: 68
|
||||
note.scoreRT: 67
|
||||
note.director: 238
|
||||
- type: table
|
||||
name: Favorites
|
||||
filters:
|
||||
and:
|
||||
- note.rating > 6
|
||||
order:
|
||||
- file.name
|
||||
- director
|
||||
- year
|
||||
- genre
|
||||
- rating
|
||||
- ratingImdb
|
||||
- last
|
||||
sort:
|
||||
- property: file.name
|
||||
direction: ASC
|
||||
- property: ratingImdb
|
||||
direction: DESC
|
||||
columnSize:
|
||||
file.name: 283
|
||||
note.director: 221
|
||||
note.year: 68
|
||||
- type: table
|
||||
name: Last seen
|
||||
filters:
|
||||
and:
|
||||
- "!last.isEmpty()"
|
||||
order:
|
||||
- file.name
|
||||
- year
|
||||
- rating
|
||||
- last
|
||||
- director
|
||||
- genre
|
||||
sort:
|
||||
- property: last
|
||||
direction: DESC
|
||||
- property: file.name
|
||||
direction: ASC
|
||||
limit: 20
|
||||
- type: table
|
||||
name: Actor
|
||||
filters:
|
||||
and:
|
||||
- list(cast).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- year
|
||||
- director
|
||||
- genre
|
||||
- ratingImdb
|
||||
sort:
|
||||
- property: ratingImdb
|
||||
direction: DESC
|
||||
- type: table
|
||||
name: Genre
|
||||
filters:
|
||||
and:
|
||||
- list(genre).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- rating
|
||||
- year
|
||||
- director
|
||||
- last
|
||||
- genre
|
||||
sort:
|
||||
- property: last
|
||||
direction: DESC
|
||||
- property: genre
|
||||
direction: ASC
|
||||
- property: rating
|
||||
direction: DESC
|
||||
columnSize:
|
||||
note.director: 166
|
||||
note.last: 115
|
||||
- type: table
|
||||
name: Director
|
||||
filters:
|
||||
and:
|
||||
- list(director).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- year
|
||||
- rating
|
||||
- last
|
||||
- cast
|
||||
- genre
|
||||
sort:
|
||||
- property: last
|
||||
direction: DESC
|
||||
- property: rating
|
||||
direction: ASC
|
||||
- property: year
|
||||
direction: DESC
|
||||
columnSize:
|
||||
file.name: 186
|
||||
note.year: 79
|
||||
note.rating: 96
|
||||
note.genre: 243
|
||||
- type: table
|
||||
name: Soundtrack
|
||||
filters:
|
||||
and:
|
||||
- list(music).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- year
|
||||
- rating
|
||||
- last
|
||||
- cast
|
||||
- genre
|
||||
sort:
|
||||
- property: last
|
||||
direction: DESC
|
||||
- property: rating
|
||||
direction: ASC
|
||||
- property: year
|
||||
direction: DESC
|
||||
columnSize:
|
||||
file.name: 186
|
||||
note.year: 79
|
||||
note.rating: 96
|
||||
note.genre: 243
|
||||
- type: table
|
||||
name: Theater
|
||||
filters:
|
||||
and:
|
||||
- file.links.contains(this.file)
|
||||
order:
|
||||
- file.name
|
||||
- rating
|
||||
- last
|
||||
- year
|
||||
- scoreImdb
|
||||
- runtime
|
||||
- scoreRT
|
||||
- watchlist
|
||||
- director
|
||||
- genre
|
||||
sort:
|
||||
- property: last
|
||||
direction: DESC
|
||||
- property: scoreImdb
|
||||
direction: DESC
|
||||
- property: scoreRT
|
||||
direction: DESC
|
||||
- property: watchlist
|
||||
direction: DESC
|
||||
- property: file.name
|
||||
direction: ASC
|
||||
- property: director
|
||||
direction: ASC
|
||||
columnSize:
|
||||
file.name: 283
|
||||
note.rating: 94
|
||||
note.year: 68
|
||||
note.scoreRT: 67
|
||||
note.director: 238
|
||||
note.genre: 243
|
||||
Executable
+33
@@ -0,0 +1,33 @@
|
||||
filters:
|
||||
and:
|
||||
- '!file.name.contains("Template")'
|
||||
- note.tags.contains("people")
|
||||
formulas:
|
||||
Age: (now() - birthday).years.floor()
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Name
|
||||
note.tags:
|
||||
displayName: Tags
|
||||
note.birthday:
|
||||
displayName: Birthday
|
||||
views:
|
||||
- type: table
|
||||
name: All people
|
||||
order:
|
||||
- file.name
|
||||
- tags
|
||||
- birthday
|
||||
- formula.Age
|
||||
sort:
|
||||
- property: file.name
|
||||
direction: ASC
|
||||
- property: tags
|
||||
direction: ASC
|
||||
- property: formula.Age
|
||||
direction: DESC
|
||||
- property: birthday
|
||||
direction: DESC
|
||||
columnSize:
|
||||
note.tags: 209
|
||||
formula.Age: 99
|
||||
Executable
+115
@@ -0,0 +1,115 @@
|
||||
filters:
|
||||
and:
|
||||
- note.categories.contains(link("Places"))
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
note.type:
|
||||
displayName: Type
|
||||
note.rating:
|
||||
displayName: Rating
|
||||
note.loc:
|
||||
displayName: Location
|
||||
file.name:
|
||||
displayName: Name
|
||||
note.last:
|
||||
displayName: Last
|
||||
views:
|
||||
- type: table
|
||||
name: Places
|
||||
order:
|
||||
- file.name
|
||||
- rating
|
||||
- loc
|
||||
- type
|
||||
- last
|
||||
sort:
|
||||
- property: last
|
||||
direction: DESC
|
||||
- property: type
|
||||
direction: ASC
|
||||
- property: loc
|
||||
direction: ASC
|
||||
columnSize:
|
||||
file.name: 162
|
||||
note.loc: 145
|
||||
note.type: 199
|
||||
- type: table
|
||||
name: Location
|
||||
filters:
|
||||
and:
|
||||
- list(loc).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- type
|
||||
- rating
|
||||
- last
|
||||
sort:
|
||||
- property: rating
|
||||
direction: DESC
|
||||
- property: last
|
||||
direction: DESC
|
||||
- property: loc
|
||||
direction: ASC
|
||||
columnSize:
|
||||
note.type: 197
|
||||
- type: table
|
||||
name: Type
|
||||
filters:
|
||||
and:
|
||||
- list(type).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- type
|
||||
- rating
|
||||
- last
|
||||
sort:
|
||||
- property: last
|
||||
direction: DESC
|
||||
- property: loc
|
||||
direction: ASC
|
||||
columnSize:
|
||||
note.type: 153
|
||||
- type: table
|
||||
name: Related
|
||||
filters:
|
||||
and:
|
||||
- file.hasLink(this)
|
||||
- '!tags.containsAny("cities", "countries")'
|
||||
order:
|
||||
- file.name
|
||||
- rating
|
||||
- loc
|
||||
- type
|
||||
- last
|
||||
sort:
|
||||
- property: rating
|
||||
direction: DESC
|
||||
- property: last
|
||||
direction: DESC
|
||||
- property: type
|
||||
direction: ASC
|
||||
- property: loc
|
||||
direction: ASC
|
||||
columnSize:
|
||||
file.name: 162
|
||||
note.rating: 65
|
||||
note.loc: 145
|
||||
note.type: 199
|
||||
- type: table
|
||||
name: Metatype
|
||||
filters:
|
||||
or:
|
||||
- list(type).contains(this)
|
||||
- list(type).containsAny(this.topics)
|
||||
order:
|
||||
- file.name
|
||||
- type
|
||||
- rating
|
||||
- last
|
||||
sort:
|
||||
- property: last
|
||||
direction: DESC
|
||||
- property: loc
|
||||
direction: ASC
|
||||
columnSize:
|
||||
note.type: 153
|
||||
Executable
+56
@@ -0,0 +1,56 @@
|
||||
filters:
|
||||
and:
|
||||
- note.categories.contains(link("Podcast episodes"))
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Podcast
|
||||
note.show:
|
||||
displayName: Show
|
||||
note.guests:
|
||||
displayName: Guests
|
||||
note.episode:
|
||||
displayName: Episode
|
||||
note.rating:
|
||||
displayName: Rating
|
||||
note.published:
|
||||
displayName: Published
|
||||
note.guest:
|
||||
displayName: Guest
|
||||
views:
|
||||
- type: table
|
||||
name: All episodes
|
||||
order:
|
||||
- file.name
|
||||
- show
|
||||
- guests
|
||||
- episode
|
||||
- rating
|
||||
- published
|
||||
sort:
|
||||
- property: published
|
||||
direction: DESC
|
||||
- type: table
|
||||
name: Show
|
||||
filters:
|
||||
and:
|
||||
- list(show).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- show
|
||||
- episode
|
||||
- rating
|
||||
- published
|
||||
- guest
|
||||
- type: table
|
||||
name: Guest
|
||||
filters:
|
||||
and:
|
||||
- list(guest).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- show
|
||||
- guests
|
||||
- episode
|
||||
- rating
|
||||
- published
|
||||
Executable
+15
@@ -0,0 +1,15 @@
|
||||
filters:
|
||||
and:
|
||||
- note.categories.contains(link("Podcasts"))
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Podcast
|
||||
note.host:
|
||||
displayName: Host
|
||||
views:
|
||||
- type: table
|
||||
name: Table
|
||||
order:
|
||||
- file.name
|
||||
- host
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Title
|
||||
note.status:
|
||||
displayName: Status
|
||||
note.published:
|
||||
displayName: Published
|
||||
views:
|
||||
- type: table
|
||||
name: All
|
||||
filters:
|
||||
and:
|
||||
- list(categories).contains(link("Posts"))
|
||||
- '!file.name.contains("Template")'
|
||||
order:
|
||||
- file.name
|
||||
- status
|
||||
- published
|
||||
sort:
|
||||
- column: note.published
|
||||
direction: DESC
|
||||
Executable
+149
@@ -0,0 +1,149 @@
|
||||
filters:
|
||||
and:
|
||||
- note.categories.contains(link("Products"))
|
||||
- '!file.name.contains("Template")'
|
||||
formulas:
|
||||
Owned: ((now() - acquired).months).round()
|
||||
totalUses: monthlyUses * formula.Owned.round()
|
||||
perUse: (price / formula.totalUses).toFixed(2)
|
||||
properties:
|
||||
note.monthlyUses:
|
||||
displayName: Uses/month
|
||||
formula.Owned:
|
||||
displayName: Months
|
||||
formula.totalUses:
|
||||
displayName: Total uses
|
||||
formula.perUse:
|
||||
displayName: Per use
|
||||
note.price:
|
||||
displayName: Price
|
||||
note.rating:
|
||||
displayName: Rating
|
||||
note.acquired:
|
||||
displayName: Acquired
|
||||
note.type:
|
||||
displayName: Type
|
||||
file.name:
|
||||
displayName: Product
|
||||
views:
|
||||
- type: table
|
||||
name: Products
|
||||
order:
|
||||
- file.name
|
||||
- acquired
|
||||
- rating
|
||||
- price
|
||||
- monthlyUses
|
||||
- formula.perUse
|
||||
- formula.Owned
|
||||
- formula.totalUses
|
||||
- type
|
||||
sort:
|
||||
- property: formula.perUse
|
||||
direction: ASC
|
||||
- property: formula.totalUses
|
||||
direction: ASC
|
||||
- property: acquired
|
||||
direction: DESC
|
||||
- property: file.name
|
||||
direction: DESC
|
||||
- property: rating
|
||||
direction: DESC
|
||||
- property: formula.Owned
|
||||
direction: ASC
|
||||
columnSize:
|
||||
file.name: 209
|
||||
note.acquired: 112
|
||||
note.price: 78
|
||||
note.monthlyUses: 123
|
||||
formula.perUse: 102
|
||||
formula.Owned: 113
|
||||
formula.totalUses: 115
|
||||
- type: table
|
||||
name: Cost per use
|
||||
filters:
|
||||
and:
|
||||
- note.monthlyUses > 0
|
||||
order:
|
||||
- file.name
|
||||
- acquired
|
||||
- monthlyUses
|
||||
- price
|
||||
- formula.Owned
|
||||
- formula.totalUses
|
||||
- formula.perUse
|
||||
- type
|
||||
- rating
|
||||
sort:
|
||||
- property: acquired
|
||||
direction: ASC
|
||||
- property: monthlyUses
|
||||
direction: DESC
|
||||
- property: rating
|
||||
direction: DESC
|
||||
columnSize:
|
||||
file.name: 207
|
||||
note.acquired: 112
|
||||
note.monthlyUses: 131
|
||||
note.price: 78
|
||||
formula.Owned: 99
|
||||
formula.totalUses: 100
|
||||
formula.perUse: 93
|
||||
- type: table
|
||||
name: Maker
|
||||
filters:
|
||||
and:
|
||||
- list(maker).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- rating
|
||||
- formula.perUse
|
||||
- monthlyUses
|
||||
- price
|
||||
- formula.totalUses
|
||||
- formula.Owned
|
||||
- acquired
|
||||
- type
|
||||
sort:
|
||||
- property: file.name
|
||||
direction: ASC
|
||||
- property: formula.totalUses
|
||||
direction: DESC
|
||||
- property: acquired
|
||||
direction: DESC
|
||||
- property: monthlyUses
|
||||
direction: DESC
|
||||
columnSize:
|
||||
file.name: 209
|
||||
note.monthlyUses: 82
|
||||
formula.totalUses: 115
|
||||
- type: table
|
||||
name: Type
|
||||
filters:
|
||||
and:
|
||||
- list(type).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- rating
|
||||
- formula.perUse
|
||||
- monthlyUses
|
||||
- price
|
||||
- formula.totalUses
|
||||
- formula.Owned
|
||||
- acquired
|
||||
- type
|
||||
sort:
|
||||
- property: rating
|
||||
direction: DESC
|
||||
- property: file.name
|
||||
direction: ASC
|
||||
- property: formula.totalUses
|
||||
direction: DESC
|
||||
- property: acquired
|
||||
direction: DESC
|
||||
- property: monthlyUses
|
||||
direction: DESC
|
||||
columnSize:
|
||||
file.name: 209
|
||||
note.monthlyUses: 82
|
||||
formula.totalUses: 115
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
filters:
|
||||
and:
|
||||
- '!file.name.contains("Template")'
|
||||
- note.categories.contains(link("Projects"))
|
||||
properties:
|
||||
note.status:
|
||||
displayName: Status
|
||||
note.url:
|
||||
displayName: URL
|
||||
file.name:
|
||||
displayName: Name
|
||||
note.type:
|
||||
displayName: Type
|
||||
note.year:
|
||||
displayName: Year
|
||||
views:
|
||||
- type: table
|
||||
name: Table
|
||||
order:
|
||||
- file.name
|
||||
- type
|
||||
- year
|
||||
- status
|
||||
- url
|
||||
sort:
|
||||
- column: note.status
|
||||
direction: ASC
|
||||
- column: note.year
|
||||
direction: DESC
|
||||
columnSize:
|
||||
file.name: 209
|
||||
note.type: 199
|
||||
Executable
+39
@@ -0,0 +1,39 @@
|
||||
filters:
|
||||
and:
|
||||
- rating > 0
|
||||
properties:
|
||||
note.rating:
|
||||
displayName: Rating
|
||||
note.last:
|
||||
displayName: Last
|
||||
file.name:
|
||||
displayName: Name
|
||||
note.categories:
|
||||
displayName: Categories
|
||||
views:
|
||||
- type: table
|
||||
name: Ratings
|
||||
order:
|
||||
- file.name
|
||||
- rating
|
||||
- last
|
||||
- categories
|
||||
sort:
|
||||
- property: last
|
||||
direction: DESC
|
||||
columnSize:
|
||||
file.name: 238
|
||||
- type: table
|
||||
name: Recent
|
||||
filters:
|
||||
and:
|
||||
- last > now() - "60d"
|
||||
order:
|
||||
- file.name
|
||||
- rating
|
||||
- last
|
||||
- categories
|
||||
sort:
|
||||
- property: last
|
||||
direction: DESC
|
||||
limit: 100
|
||||
Executable
+30
@@ -0,0 +1,30 @@
|
||||
filters:
|
||||
and:
|
||||
- note.categories.contains(link("Recipes"))
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Name
|
||||
note.author:
|
||||
displayName: Author
|
||||
note.type:
|
||||
displayName: Type
|
||||
note.ingredients:
|
||||
displayName: Ingredients
|
||||
note.cuisine:
|
||||
displayName: Cuisine
|
||||
note.rating:
|
||||
displayName: Rating
|
||||
views:
|
||||
- type: table
|
||||
name: Recipes
|
||||
order:
|
||||
- file.name
|
||||
- type
|
||||
- cuisine
|
||||
- author
|
||||
- ingredients
|
||||
- rating
|
||||
columnSize:
|
||||
note.type: 201
|
||||
note.cuisine: 174
|
||||
Executable
+40
@@ -0,0 +1,40 @@
|
||||
filters:
|
||||
and:
|
||||
- file.path != this.file.path
|
||||
formulas:
|
||||
LinksOverlap: formula.Related.length
|
||||
Related: list(this.file.links).filter(list(file.links).containsAny(value)).unique()
|
||||
BacklinksCount: file.backlinks.length
|
||||
TagsOverlap: list(this.file.tags).filter(list(file.tags).containsAny(value)).unique().length
|
||||
properties:
|
||||
formula.LinksOverlap:
|
||||
displayName: Links overlap
|
||||
file.name:
|
||||
displayName: Name
|
||||
formula.BacklinksCount:
|
||||
displayName: Backlinks count
|
||||
formula.TagsOverlap:
|
||||
displayName: Tags overlap
|
||||
formula.Related:
|
||||
displayName: Links
|
||||
views:
|
||||
- type: table
|
||||
name: Related
|
||||
filters:
|
||||
or:
|
||||
- formula.LinksOverlap > 2
|
||||
- file.hasLink(this)
|
||||
- this.file.hasLink(file)
|
||||
order:
|
||||
- file.name
|
||||
- formula.Related
|
||||
sort:
|
||||
- property: formula.LinksOverlap
|
||||
direction: DESC
|
||||
- property: formula.TagsOverlap
|
||||
direction: DESC
|
||||
- property: formula.BacklinksCount
|
||||
direction: DESC
|
||||
limit: 20
|
||||
columnSize:
|
||||
file.name: 220
|
||||
Executable
+94
@@ -0,0 +1,94 @@
|
||||
filters:
|
||||
and:
|
||||
- '!file.name.contains("Template")'
|
||||
- note.categories.contains(link("Shows"))
|
||||
properties:
|
||||
file.name:
|
||||
displayName: Name
|
||||
note.last:
|
||||
displayName: Last
|
||||
note.rating:
|
||||
displayName: Rating
|
||||
note.year:
|
||||
displayName: Year
|
||||
note.director:
|
||||
displayName: Director
|
||||
note.genre:
|
||||
displayName: Genre
|
||||
note.cast:
|
||||
displayName: Cast
|
||||
views:
|
||||
- type: table
|
||||
name: All
|
||||
order:
|
||||
- file.name
|
||||
- year
|
||||
- rating
|
||||
- last
|
||||
- director
|
||||
- genre
|
||||
sort:
|
||||
- column: note.rating
|
||||
direction: DESC
|
||||
- column: file.name
|
||||
direction: ASC
|
||||
- column: note.director
|
||||
direction: ASC
|
||||
- type: table
|
||||
name: Favorites
|
||||
filters:
|
||||
and:
|
||||
- note.rating > 6
|
||||
order:
|
||||
- file.name
|
||||
- year
|
||||
- rating
|
||||
- last
|
||||
- director
|
||||
- genre
|
||||
- type: table
|
||||
name: Last seen
|
||||
filters:
|
||||
and:
|
||||
- not(empty(note.last))
|
||||
order:
|
||||
- file.name
|
||||
- year
|
||||
- rating
|
||||
- last
|
||||
- director
|
||||
- genre
|
||||
sort:
|
||||
- column: note.last
|
||||
direction: DESC
|
||||
limit: 20
|
||||
- type: table
|
||||
name: Actor
|
||||
filters:
|
||||
and:
|
||||
- list(cast).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- year
|
||||
- director
|
||||
- genre
|
||||
- type: table
|
||||
name: Genre
|
||||
filters:
|
||||
and:
|
||||
- list(genre).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- year
|
||||
- director
|
||||
- genre
|
||||
- type: table
|
||||
name: Director
|
||||
filters:
|
||||
and:
|
||||
- list(director).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- year
|
||||
- cast
|
||||
- genre
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
filters:
|
||||
and:
|
||||
- file.path.contains("/Templates")
|
||||
views:
|
||||
- type: table
|
||||
name: Table
|
||||
order:
|
||||
- file.name
|
||||
- categories
|
||||
sort: []
|
||||
columnSize:
|
||||
file.name: 234
|
||||
Executable
+38
@@ -0,0 +1,38 @@
|
||||
filters:
|
||||
and:
|
||||
- note.categories.contains(link("Trips"))
|
||||
- '!file.name.contains("Template")'
|
||||
properties:
|
||||
note.start:
|
||||
displayName: Start
|
||||
note.end:
|
||||
displayName: End
|
||||
file.name:
|
||||
displayName: Trip
|
||||
note.loc:
|
||||
displayName: Location
|
||||
views:
|
||||
- type: table
|
||||
name: All trips
|
||||
filters:
|
||||
and:
|
||||
- '!file.name.contains("Planning")'
|
||||
order:
|
||||
- file.name
|
||||
- start
|
||||
- end
|
||||
- loc
|
||||
sort:
|
||||
- property: end
|
||||
direction: DESC
|
||||
columnSize:
|
||||
file.name: 255
|
||||
- type: table
|
||||
name: Location
|
||||
filters:
|
||||
and:
|
||||
- list(loc).contains(this)
|
||||
order:
|
||||
- file.name
|
||||
- start
|
||||
- end
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
---
|
||||
categories:
|
||||
- "[[Board games]]"
|
||||
type: []
|
||||
maker:
|
||||
year:
|
||||
rating:
|
||||
last: <% tp.date.now() %>
|
||||
---
|
||||
Loaded 100 of 463 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user