mirror of
https://github.com/stracker-phil/obsidian-mention-things.git
synced 2026-07-22 05:43:27 +00:00
6 lines
9 KiB
JavaScript
6 lines
9 KiB
JavaScript
/*
|
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
if you want to view the source, please visit the github repository of this plugin
|
|
*/
|
|
|
|
var T=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var N=(a,i)=>{for(var t in i)T(a,t,{get:i[t],enumerable:!0})},P=(a,i,t,e)=>{if(i&&typeof i=="object"||typeof i=="function")for(let n of C(i))!I.call(a,n)&&n!==t&&T(a,n,{get:()=>i[n],enumerable:!(e=k(i,n))||e.enumerable});return a};var D=a=>P(T({},"__esModule",{value:!0}),a);var G={};N(G,{default:()=>y});module.exports=D(G);var A=require("obsidian");var c={mentionTypes:[],matchStart:!0,maxMatchLength:15,stopCharacters:"?!;:\"'`/#*%<>[]()"},$="@!+$&~-_=,;'{}^\xA7\u2605\u2192\xB6\xB0\u20AC\xA3\xA5\xA2\xB1\xB5\xA9\u2122\xAE\xAB\xBB",v=$.split("");var E=require("obsidian");var x=require("obsidian");function u(a,i){var e,n;if(!a.endsWith(".md"))return null;let t=(n=(e=a.split("/"))==null?void 0:e.pop())==null?void 0:n.replace(/\.[^.]+$/,"");if(!t)return null;for(let s=0;s<i.mentionTypes.length;s++){let r=i.mentionTypes[s];if(r!=null&&r.sign&&t.startsWith(r.sign))return{sign:r.sign,name:t.slice(r.sign.length).trim(),path:a}}return null}function w(a,i){var t;for(let e=0;e<a.length;e++)if(i===((t=a[e])==null?void 0:t.sign))return a[e];return null}function b(a,i,t,e,n,s){let r=`${e}${n}`;if(s==="text")return r;let o=a.vault.getAbstractFileByPath(t);return o instanceof x.TFile?a.fileManager.generateMarkdownLink(o,i,"",r):r}function L(a,i,t,e){let n=a.vault.getConfig("useMarkdownLinks");if(i==="text")return e;let s=encodeURIComponent(e),r=t+e;return n?`[${r}](${t}${s})`:`[[${r}]]`}var m=class{constructor(i,t){this.fileMaps={};this.app=i,this.settings=t}initialize(){return this.fileMaps={},this.app.vault.getAllLoadedFiles().forEach(t=>{if(!(t instanceof E.TFile)||t.extension!=="md")return;let e=u(t.path,this.settings);e&&this.addFileToMap(e)}),this.fileMaps}getFileMaps(){return this.fileMaps}updateIndex(i,t){let e=!1,n=u(i,this.settings);if(n&&(this.addFileToMap(n),e=!0),t){let s=u(t,this.settings);s&&(this.removeFileFromMap(s),e=!0)}return e}addFileToMap(i){let t=i.sign;if(!t)return;let e=i.name.toLowerCase();this.fileMaps[t]=this.fileMaps[t]||{},this.fileMaps[t][e]=i}removeFileFromMap(i){let t=i.sign;if(!t||!this.fileMaps[t])return;let e=i.name.toLowerCase();delete this.fileMaps[t][e]}};var f=class{constructor(i,t){this.settings=t,this.fileIndexer=new m(i,t)}initialize(){return this.fileIndexer.initialize()}getFileMaps(){return this.fileIndexer.getFileMaps()}handleFileEvent(i,t){return this.fileIndexer.updateIndex(i.path,t)}getUsedSigns(){return this.settings.mentionTypes.map(i=>i.sign).filter(Boolean)}updateSettings(i){this.settings=i,this.initialize()}};var F=require("obsidian");var M=class extends F.EditorSuggest{constructor(t,e,n){super(t);this.currSign="";this.prevMention="";this.settings=e,this.mentionManager=n,this.fileMaps=n.getFileMaps()}get currType(){return w(this.settings.mentionTypes,this.currSign)}setSuggestionsMap(t){this.fileMaps=t}onTrigger(t,e,n){let s=e.getLine(t.line).substring(0,t.ch);if(!s)return null;let{signIndex:r,sign:o}=this.findMostRecentSign(s);if(r<0)return null;this.currSign=o;let l=s.substring(r+1);return this.shouldShowSuggestions(l,r,s)?{start:{line:t.line,ch:r},end:{line:t.line,ch:t.ch},query:l}:null}findMostRecentSign(t){let e=this.mentionManager.getUsedSigns(),n=-1,s="";for(let r of e){let o=t.lastIndexOf(r);o!==-1&&o>n&&(n=o,s=r)}return{signIndex:n,sign:s}}shouldShowSuggestions(t,e,n){var o,l;if(!t)return!1;if(this.prevMention){if(t.startsWith(this.prevMention))return!1;this.prevMention=""}if(/\[\[.*]]/.test(t)||/\[.*]\(.*\)/.test(t))return!1;let s=(o=this.settings.maxMatchLength)!=null?o:c.maxMatchLength;if(s&&t.length>s)return!1;let r=(l=this.settings.stopCharacters)!=null?l:c.stopCharacters;if(r){for(let h of r)if(t.includes(h))return!1}return e===0||n[e-1]===" "}getSuggestions(t){let e,n=this.fileMaps[this.currSign]||{},s=t.query.toLowerCase();return e=this.getMatchingSuggestions(n,s,t),e.push(this.createNewItemSuggestion(t)),e}getMatchingSuggestions(t,e,n){let s=[];for(let r in t)r&&this.isMatch(r,e)&&s.push({suggestionType:"set",displayText:t[r].name.trim(),linkName:t[r].name,path:t[r].path,context:n});return s}isMatch(t,e){return this.settings.matchStart?t.startsWith(e):t.includes(e)}createNewItemSuggestion(t){return{suggestionType:"create",displayText:t.query,linkName:t.query,path:"",context:t}}renderSuggestion(t,e){if(t.suggestionType==="create"){let n=this.currType,s=(n==null?void 0:n.label)||"Item";e.setText(`Create ${s}: ${t.displayText}`)}else e.setText(t.displayText)}selectSuggestion(t,e){var o;let n=this.currType;if(!(n!=null&&n.sign))return;let s=t.context;console.log("Insert:",n,t);let r=b(this.app,s.file.path,t.path,n.sign,t.linkName,(o=n.type)!=null?o:"link");this.prevMention=t.linkName,t.context.editor.replaceRange(r,t.context.start,t.context.end)}};var g=require("obsidian");var S=class extends g.PluginSettingTab{constructor(i,t){super(i,t),this.plugin=t}display(){let{containerEl:i}=this,t=this.plugin.settings.mentionTypes.map(e=>e.sign).filter(e=>e!==void 0);i.empty(),new g.Setting(i).setName("Mention Things").setHeading(),this.renderMentionTypesSection(i,t),this.renderGeneralSettings(i)}renderMentionTypesSection(i,t){this.plugin.settings.mentionTypes.forEach((e,n)=>{this.renderMentionTypeRow(i,e,n,t)}),new g.Setting(i).addButton(e=>{e.setButtonText("New type").setCta().onClick(async()=>{this.plugin.settings.mentionTypes.push({}),await this.plugin.saveSettings(),this.display()})})}renderMentionTypeRow(i,t,e,n){let s=new g.Setting(i),r=this.getAvailableSigns(n,t==null?void 0:t.sign),o=this.getAvailableTypes();s.setClass("mention-type-row"),s.addDropdown(p=>p.addOptions(r).setValue((t==null?void 0:t.sign)||"").onChange(async d=>{this.plugin.settings.mentionTypes[e].sign=d,await this.plugin.saveSettings(),this.display()})),s.addText(p=>p.setPlaceholder('Type label, for example "Person"').setValue((t==null?void 0:t.label)||"").onChange(async d=>{this.plugin.settings.mentionTypes[e].label=d,await this.plugin.saveSettings(),l()}).inputEl.addClass("type-label")),s.addDropdown(p=>p.addOptions(o).setValue((t==null?void 0:t.type)||"link").onChange(async d=>{this.plugin.settings.mentionTypes[e].type=d,await this.plugin.saveSettings(),this.display()}));let l=()=>{let p=t.label||"Name";h.classList.add("type-preview"),h.innerText=L(this.app,t.type,t.sign,p)},h=s.controlEl.createSpan();s.controlEl.append(h),l(),s.addExtraButton(p=>p.setIcon("cross").setTooltip("Delete").onClick(async()=>{this.plugin.settings.mentionTypes.splice(e,1),await this.plugin.saveSettings(),this.display()})),s.infoEl.remove()}renderGeneralSettings(i){new g.Setting(i).setName("General settings").setHeading(),new g.Setting(i).setName("Match from start").setDesc("Whether to suggest only items that start with the search term. When disabled, any part of the name can match the search term").addToggle(t=>{var e;return t.setValue((e=this.plugin.settings.matchStart)!=null?e:!1).onChange(async n=>{this.plugin.settings.matchStart=n,await this.plugin.saveSettings()})}),new g.Setting(i).setName("Max match length").setDesc("Maximum number of characters to match (3-50)").addSlider(t=>{var e;t.setLimits(3,50,1).setValue((e=this.plugin.settings.maxMatchLength)!=null?e:15).setDynamicTooltip().onChange(async n=>{this.plugin.settings.maxMatchLength=n,await this.plugin.saveSettings()})}),new g.Setting(i).setName("Stop characters").setDesc("Characters that will stop the matching process. Leave empty to disable.").addText(t=>{var e;t.setPlaceholder("?!\"'`:;/#+*=&%$\xA7<>").setValue((e=this.plugin.settings.stopCharacters)!=null?e:"?!\"'`:;/#+*=&%$\xA7<>").onChange(async n=>{this.plugin.settings.stopCharacters=[...new Set(n.split(""))].join(""),await this.plugin.saveSettings()})})}getAvailableSigns(i,t){let e={};return v.forEach(n=>{(t===n||!i.includes(n))&&(e[n]=`${n}Name`)}),e}getAvailableTypes(){let i={};return i.text="As Text",i.link="As Link",i}};var y=class extends A.Plugin{async onload(){await this.loadSettings(),this.mentionManager=new f(this.app,this.settings),this.suggestionProvider=new M(this.app,this.settings,this.mentionManager),this.registerEditorSuggest(this.suggestionProvider),this.addSettingTab(new S(this.app,this)),this.registerFileEvents(),this.app.workspace.onLayoutReady(()=>{let i=this.mentionManager.initialize();this.suggestionProvider.setSuggestionsMap(i)})}registerFileEvents(){this.registerEvent(this.app.vault.on("delete",async i=>{this.mentionManager.handleFileEvent(i)&&this.refreshSuggestions()})),this.registerEvent(this.app.vault.on("create",async i=>{this.mentionManager.handleFileEvent(i)&&this.refreshSuggestions()})),this.registerEvent(this.app.vault.on("rename",async(i,t)=>{this.mentionManager.handleFileEvent(i,t)&&this.refreshSuggestions()}))}refreshSuggestions(){let i=this.mentionManager.getFileMaps();this.suggestionProvider.setSuggestionsMap(i)}async loadSettings(){this.settings=Object.assign({},c,await this.loadData())}async saveSettings(){await this.saveData(this.settings),this.mentionManager&&(this.mentionManager.updateSettings(this.settings),this.refreshSuggestions())}};
|