notes/notes/.obsidian/plugins/hotkey-helper/main.js
2022-09-08 11:40:45 +02:00

2 lines
17 KiB
JavaScript

var R=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var Z=Object.prototype.hasOwnProperty;var tt=(s,r)=>{for(var t in r)R(s,t,{get:r[t],enumerable:!0})},et=(s,r,t,e)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of Y(r))!Z.call(s,n)&&n!==t&&R(s,n,{get:()=>r[n],enumerable:!(e=X(r,n))||e.enumerable});return s};var nt=s=>et(R({},"__esModule",{value:!0}),s);var ut={};tt(ut,{default:()=>W});module.exports=nt(ut);var y=require("obsidian");function k(s,r){let t=Object.keys(r).map(e=>ot(s,e,r[e]));return t.length===1?t[0]:function(){t.forEach(e=>e())}}function ot(s,r,t){let e=s[r],n=s.hasOwnProperty(r),o=t(e);return e&&Object.setPrototypeOf(o,e),Object.setPrototypeOf(i,o),s[r]=i,u;function i(...l){return o===e&&s[r]===i&&u(),o.apply(this,l)}function u(){s[r]===i&&(n?s[r]=e:delete s[r]),o!==e&&(o=e,Object.setPrototypeOf(i,e||Function))}}function B(s,r){return s.then(r,r)}function j(s){let r=Promise.resolve();function t(...e){return r=new Promise((n,o)=>{B(r,()=>{s.apply(this,e).then(n,o)})})}return t.after=function(){return r=new Promise((e,n)=>{B(r,e)})},t}var b=require("obsidian");var O=Symbol.for("v1.to-use.peak-dev.org"),I=Symbol.for("v1.factory.to-use.peak-dev.org"),x,T,C=function(){return Object.defineProperties(s(),{this:{get(){if(x)return x;throw new TypeError("No current context")}},me:{value:O},factory:{value:I}});function s(n){let o=new Map;o.prev=n;let i=Object.assign(n?l=>{let a=o.get(l);if(!a){for(let d=o.prev;d;d=d.prev)if(a=d.get(l)){a=Object.assign(Object.assign({},a),{s:a.s||1});break}a=a||{s:2,v:t},o.set(l,a)}let p,f,h;for(;;)switch(a.s){case 0:return x===i&&T&&T.push(l),a.v;case 1:if(p=a.d,!p||u(()=>p.k.every(d=>i(d)===p.c(d)))){a.s=0;break}a.v=p.f;case 2:a.s=4;try{r(o,l,0,u(f=a.v,l,h=[])),h.length&&(a.d={c:i,f,k:h});break}catch(d){a.s=3,a.v=d,a.d=null}case 3:throw a.v;case 4:throw new Error(`Factory ${String(a.v)} didn't resolve ${String(l)}`)}}:l=>C.this(l),{def(l,a){return r(o,l,2,a),i},set(l,a){return r(o,l,1,a),i},fork(l){let a=s(o);return l!=null?a(l):a}});return n?i.use=i:i;function u(l,a,p){let f=x,h=T;try{return x=i,T=p,l(a)}finally{x=f,T=h}}}function r(n,o,i,u){if(n.has(o)){let l=n.get(o);if(!l.s)throw new Error(`Already read: ${String(o)}`);l.s=i,l.v=u,l.d=null}else n.set(o,{s:i,v:u})}function t(n){if(typeof n[O]=="function")return n[O](n);if(e(n))return typeof n.prototype[I]=="function"?n.prototype[I]():new n;throw new ReferenceError(`No config for ${String(n)}`)}function e(n){return typeof n=="function"&&n.prototype!==void 0&&(Object.getPrototypeOf(n.prototype)!==Object.prototype||Object.getOwnPropertyNames(n.prototype).length>1||n.toString().startsWith("class"))}}();var V,v=(V=window.queueMicrotask)!=null?V:(s=>r=>s.then(r))(Promise.resolve());C.def(b.Plugin,()=>{throw new Error("Plugin not created yet")});var L=class extends b.Component{constructor(){super(...arguments);this.use=C.service(this)}};C.service=function(s){return C(P).addChild(s),C.this};C.plugin=function(s){let r=C.fork().set(b.Plugin,s).set(s.constructor,s);return s.addChild(r.use(P)),r};var P=class extends b.Component{constructor(){super(...arguments);this.children=new Set([this])}onload(){this.loaded=!0}onunload(){this.loaded=!1,this.children.clear()}addChild(t){return this.children.has(t)||(this.children.add(t),this.loaded?v(()=>super.addChild(t)):super.addChild(t)),t}};function A(s,r){let t=new b.Component;t.onload=()=>{s.removeChild(t),r()},s.addChild(t)}var F=require("obsidian");var D=require("obsidian");var M=2,Wt=Symbol.for(`v${M}.layout-storage-events.ophidian.peak-dev.org`);var Rt=`ophidian-layout-storage:v${M}:item-load`,Ot=`ophidian-layout-storage:v${M}:item-save`;var $=require("obsidian");var N=class extends $.Component{constructor(t,e){super();this.use=t;this.container=e;this.win=this.container.win}[C.factory](){return new K(this.constructor)}static onload(t){}static onunload(t){}},K=class extends L{constructor(t){super();this.factory=t;this.instances=new Map;this.watching=!1;this.layoutReadyCallbacks=[]}onload(){var t,e;this.registerEvent(app.workspace.on("layout-change",()=>{app.workspace.layoutReady&&this.layoutReadyCallbacks.length&&(this.layoutReadyCallbacks.forEach(v),this.layoutReadyCallbacks=[])})),(e=(t=this.factory).onload)==null||e.call(t,this)}onLeafChange(t,e){return this.onLayoutReady(()=>t.call(e,app.workspace.activeLeaf)),app.workspace.on("active-leaf-change",n=>{app.workspace.layoutReady&&t.call(e,n)})}onLayoutReady(t){app.workspace.layoutReady?v(t):this.layoutReadyCallbacks.push(t)}onunload(){var t,e;(e=(t=this.factory).onunload)==null||e.call(t,this)}watch(){if(!this._loaded)A(this,()=>this.watch());else if(!this.watching){let{workspace:t}=app,e=this;this.watching=!0,this.registerEvent(t.on("window-open",n=>{this.onLayoutReady(()=>this.forContainer(n))})),this.register(k(t,{clearLayout(n){return async function(){try{return await n.call(this)}finally{e.onLayoutReady(()=>e.forAll())}}}})),this.onLayoutReady(()=>this.forAll())}return this}forWindow(t=(n=>(n=window.activeWindow)!=null?n:window)(),e=!0){let o=rt(t);if(o)return this.forContainer(o,e)}forContainer(t,e=!0){t=t.getContainer();let n=this.instances.get(t);return!n&&e&&(n=new this.factory(this.use,t),n&&(this.instances.set(t,n),this.addChild(n),t.component.addChild(n),n.register(()=>{z(this,n),z(t.component,n),this.instances.delete(t)}))),n}forDom(t,e=!0){return this.forWindow(it(t),e)}forLeaf(t=app.workspace.activeLeaf,e=!0){if(app.workspace.isLeafAttached(t))return this.forContainer(t.getContainer(),e)}forView(t,e=!0){return this.forLeaf(t.leaf,e)}forAll(t=!0){return st().map(e=>this.forContainer(e,t)).filter(e=>e)}};function z(s,r){s._loaded&&s.removeChild(r)}function st(){return[app.workspace.rootSplit].concat(app.workspace.floatingSplit.children)}function it(s){return s.win||(s.ownerDocument||s).defaultView||window}function rt(s){if(s===window)return app.workspace.rootSplit;let{floatingSplit:r}=app.workspace;if(r){for(let t of r.children)if(s===t.win)return t}}function q(s,r,t,e,n){return s.on(r,t,e,n),()=>s.off(r,t,e,n)}var G=require("obsidian");function _(){let s,r,t=new Promise((e,n)=>{s=e,r=n});return{resolve:s,reject:r,promise:t}}function H(s,r,t,e){let{resolve:n,promise:o}=_(),i=new class extends G.FuzzySuggestModal{getItemText(l){var a;return(a=r==null?void 0:r(l))!=null?a:""+l}getItems(){return s}onChooseItem(l,a){n({item:l,event:a})}onClose(){super.onClose(),v(()=>n({item:null,event:null}))}}(app);return t&&i.setPlaceholder(t),e==null||e(i),i.open(),o}function at(s){return y.Keymap.compileModifiers(s.modifiers)+","+s.key.toLowerCase()}function lt(s){return s==="plugins"||s==="community-plugins"}function J(){var s;return U()&&lt((s=app.setting.activeTab)==null?void 0:s.id)}function U(){return app.setting.containerEl.parentElement!==null}function ct(s){return s instanceof y.Modal&&s.hasOwnProperty("autoload")&&typeof s.showPlugin=="function"&&typeof s.updateSearch=="function"&&typeof s.searchEl=="object"}var W=class extends y.Plugin{constructor(){super(...arguments);this.lastSearch={};this.hotkeyButtons={};this.globalsAdded=!1;this.searchInput=null;this.commandsByPlugin={};this.assignedKeyCount={}}onload(){let t=this.app.workspace,e=this,n=t;this.registerEvent(n.on("plugin-settings:before-display",(u,l)=>{this.hotkeyButtons={},this.globalsAdded=!1,this.searchInput=null;let a=k(y.Setting.prototype,{addSearch(p){return function(f){return a(),p.call(this,h=>{e.searchInput=h,f==null||f(h)})}}});v(a)})),this.registerEvent(n.on("plugin-settings:after-display",()=>this.refreshButtons(!0))),this.registerEvent(n.on("plugin-settings:plugin-control",(u,l,a,p)=>{this.globalsAdded||this.addGlobals(p,u.settingEl)}));let o=(0,y.debounce)(this.refreshButtons.bind(this),50,!0);function i(u){return function(...l){return o(),u.apply(this,l)}}this.register(k(app.commands,{addCommand:i,removeCommand:i})),this.register(k(app.setting,{addSettingTab:i,removeSettingTab:i})),t.onLayoutReady(this.whenReady.bind(this)),this.registerObsidianProtocolHandler("goto-plugin",({id:u,show:l})=>{t.onLayoutReady(()=>{this.gotoPlugin(u,l)})})}whenReady(){var f,h;let t=this.app,e=this,n=(h=(f=t.internalPlugins.plugins["command-palette"])==null?void 0:f.instance)==null?void 0:h.modal;if(n){this.register(k(n,{onChooseItem(c){return function(g,E){return y.Keymap.isModEvent(E)?(v(()=>e.showHotkeysFor(g.name)),!1):c.call(this,g,E)}}}));let d=n.modalEl.find(".prompt-instructions .prompt-instruction");d&&createDiv("prompt-instruction",c=>{c.createSpan({cls:"prompt-instruction-command",text:y.Keymap.compileModifiers(["Mod"])+"+\u21B5"}),c.appendText(" "),c.createSpan({text:"to configure hotkey(s)"}),this.register(()=>c.detach())}).insertAfter(d)}let o=this.getSettingsTab("plugins"),i=this.getSettingsTab("community-plugins");o&&this.register(k(o,{display:this.addPluginSettingEvents.bind(this,o.id)})),i&&this.register(k(i,{display:this.addPluginSettingEvents.bind(this,i.id)}));let u=()=>this.enhanceViewer();i&&this.register(q(i.containerEl,"click",".mod-cta, .installed-plugins-container .setting-item-info",u,!0)),this.register(k(t.workspace.protocolHandlers,{get(d){return function(m){return m==="show-plugin"&&u(),d.call(this,m)}}}));function l(){J()&&t.setting.openTabById(t.setting.activeTab.id)}l(),this.register(()=>v(l));let a=this.getSettingsTab("hotkeys");a&&this.register(k(a,{display(d){return function(){d.call(this),this.searchInputEl.focus()}},updateHotkeyVisibility(d){return function(){let c=this.searchInputEl.value,m=t.commands.commands;try{if(c.endsWith(":")&&!c.contains(" ")){let g=m,E=Object.fromEntries(Object.entries(t.commands.commands).filter(([w,S])=>(w+":").startsWith(c)));this.searchInputEl.value="",t.commands.commands=new Proxy(m,{ownKeys(){try{return Object.keys(g)}finally{g=E}}})}return d.call(this)}finally{this.searchInputEl.value=c,t.commands.commands=m}}}})),this.addCommand({id:"open-plugins",name:"Open the Community Plugins settings",callback:()=>this.showSettings("community-plugins")||!0}),this.addCommand({id:"browse-plugins",name:"Browse or search the Community Plugins catalog",callback:()=>this.gotoPlugin()});let p=new Intl.Collator(void 0,{usage:"sort",sensitivity:"base",numeric:!0}).compare;this.addCommand({id:"open-settings",name:"Open settings for plugin...",callback:async()=>{let{item:d}=await H(t.setting.pluginTabs.concat(t.setting.settingTabs).sort((c,m)=>p(c.name,m.name)),c=>c.name,"Select a plugin to open its settings...");d&&(t.setting.open(),t.setting.openTabById(d.id))}}),this.addCommand({id:"open-hotkeys",name:"Open hotkeys for plugin...",callback:async()=>{var g,E;let d=this.refreshCommands(),c=Object.values(t.plugins.plugins).map(w=>w.manifest).concat(Object.entries(t.internalPlugins.plugins).map(([w,{instance:{name:S},_loaded:Q}])=>({id:w,name:S,enabled:Q})).filter(w=>w.enabled)).concat([{id:"app",name:"App"},{id:"editor",name:((g=this.getSettingsTab("editor"))==null?void 0:g.name)||"Editor"},{id:"workspace",name:((E=this.getSettingsTab("file"))==null?void 0:E.name)||"Files & Links"}]).filter(w=>{var S;return(S=d[w.id])==null?void 0:S.length}),{item:m}=await H(c.sort((w,S)=>p(w.name,S.name)),w=>w.name,"Select a plugin to open its hotkeys...");m&&this.showHotkeysFor(m.id+":")}})}createExtraButtons(t,e,n){e.id!=="app"&&t.addExtraButton(o=>{o.setIcon("gear"),o.onClick(()=>this.showConfigFor(e.id.replace(/^workspace$/,"file"))),o.setTooltip("Options"),o.extraSettingsEl.toggle(n)}),t.addExtraButton(o=>{o.setIcon("any-key"),o.onClick(()=>this.showHotkeysFor(e.id+":")),o.extraSettingsEl.toggle(n),this.hotkeyButtons[e.id]=o})}addGlobals(t,e){var l,a,p;this.globalsAdded=!0;let n=e.parentElement,o;if(t!=="plugins"||this.searchInput)(l=o=this.searchInput)==null||l.onChange(u);else{let f=new y.Setting(n).addSearch(h=>{o=h,h.setPlaceholder("Filter plugins...").onChange(u)});o.containerEl.style.margin="0",n.createDiv("hotkey-search-container").append(o.containerEl),f.settingEl.detach()}t==="community-plugins"&&o.inputEl.addEventListener("keyup",f=>{if(f.keyCode===13&&!y.Keymap.getModifiers(f))return this.gotoPlugin(),!1});let i=this;function u(f){let h=(i.lastSearch[t]=f).toLowerCase();function d(c){if(!c)return!1;let m=c.textContent=c.textContent,g=m.toLowerCase().indexOf(h);return~g?(c.textContent=m.substr(0,g),c.createSpan("suggestion-highlight").textContent=m.substr(g,h.length),c.insertAdjacentText("beforeend",m.substr(g+h.length)),!0):!1}n.findAll(".setting-item").forEach(c=>{var w;let m=d(c.find(".setting-item-name")),g=d((w=c.find(".setting-item-description > div:last-child"))!=null?w:c.find(".setting-item-description")),E=d(c.find(".setting-item-description > div:nth-child(2)"));c.toggle(m||g||E)})}if(v(()=>{!o||(o&&typeof i.lastSearch[t]=="string"&&(o.setValue(i.lastSearch[t]),o.onChanged()),y.Platform.isMobile||o.inputEl.select())}),n.append(e),t==="plugins"){let f=((a=this.getSettingsTab("editor"))==null?void 0:a.name)||"Editor",h=((p=this.getSettingsTab("file"))==null?void 0:p.name)||"Files & Links";this.createExtraButtons(new y.Setting(e.parentElement).setName("App").setDesc("Miscellaneous application commands (always enabled)"),{id:"app",name:"App"},!0),this.createExtraButtons(new y.Setting(e.parentElement).setName(f).setDesc("Core editing commands (always enabled)"),{id:"editor",name:f},!0),this.createExtraButtons(new y.Setting(e.parentElement).setName(h).setDesc("Core file and pane management commands (always enabled)"),{id:"workspace",name:h},!0),e.parentElement.append(e)}}enhanceViewer(){let t=this;setTimeout(k(y.Modal.prototype,{open(e){return function(...n){return ct(this)&&(v(()=>{if(t.lastSearch["community-plugins"]){let o=this.searchResultEl.cloneNode();this.searchContainerEl.replaceChild(o,this.searchResultEl),this.searchResultEl=o,this.searchEl.value=t.lastSearch["community-plugins"],this.searchEl.dispatchEvent(new Event("input"))}this.searchEl.select()}),t.currentViewer=this,k(this,{updateSearch:j,close(o){return function(...i){return t.currentViewer=null,o.apply(this,i)}},showPlugin(o){return async function(i){let u=await o.call(this,i);if(t.app.plugins.plugins[i.id]){let l=i18next.t("setting.hotkeys.name"),a=this.pluginContentEl.find("button").parentElement;for(let p of a.findAll("button"))p.textContent===l&&(t.hotkeyButtons[i.id]={setTooltip(f){return p.title=f,this},extraSettingsEl:p});t.refreshButtons(!0)}return u}}})),e.apply(this,n)}}}),0)}getSettingsTab(t){return app.setting.settingTabs.filter(e=>e.id===t).shift()}addPluginSettingEvents(t,e){let n=this.app,o=this,i=!1;function u(l,...a){i=!0;try{n.workspace.trigger(l,...a)}catch(p){console.error(p)}i=!1}return function(...a){if(i)return;u("plugin-settings:before-display",this,t);let p;t==="plugins"?p=Object.entries(n.internalPlugins.plugins).map(([c,{instance:{name:m,hiddenFromList:g},_loaded:E}])=>!g&&{id:c,name:m,enabled:E}).filter(c=>c):p=Object.values(n.plugins.manifests),p.sort((c,m)=>c.name.localeCompare(m.name));let f=0,h="",d=k(y.Setting.prototype,{addExtraButton(c){return function(m){if(!i&&(t==="plugins"||this.descEl.childElementCount)&&(p[f]||{}).name===this.nameEl.textContent){let g=p[f++];h=g.id,u("plugin-settings:plugin-control",this,g,g.enabled,t)}return c.call(this,function(g){m(g),!i&&g.extraSettingsEl.find("svg.any-key, svg.lucide-plus-circle")&&h&&(o.hotkeyButtons[h]=g,g.onClick(o.showHotkeysFor.bind(o,h+":")))})}}});try{return e.apply(this,a)}finally{d(),u("plugin-settings:after-display",this)}}}gotoPlugin(t,e="info"){if(t&&e==="hotkeys")return this.showHotkeysFor(t+":");if(t&&e==="config"){this.showConfigFor(t)||this.app.setting.close();return}this.showSettings("community-plugins");let n=k(y.Modal.prototype,{open(o){return function(...i){return n(),t&&(this.autoload=t),o.apply(this,i)}}});this.app.setting.activeTab.containerEl.find(".mod-cta").click()}showSettings(t){var e,n;if((e=this.currentViewer)==null||e.close(),U()||app.setting.open(),t)return app.setting.openTabById(t),((n=app.setting.activeTab)==null?void 0:n.id)===t?app.setting.activeTab:!1}showHotkeysFor(t){let e=this.showSettings("hotkeys");e&&e.searchInputEl&&e.updateHotkeyVisibility&&(e.searchInputEl.value=t,e.updateHotkeyVisibility())}showConfigFor(t){return this.showSettings(t)?!0:(new y.Notice(`No settings tab for "${t}": it may not be installed or might not have settings.`),!1)}pluginEnabled(t){var e;return((e=app.internalPlugins.plugins[t])==null?void 0:e._loaded)||app.plugins.plugins[t]}refreshCommands(){let t=app.hotkeyManager;return this.assignedKeyCount={},this.commandsByPlugin=Object.values(app.commands.commands).reduce((e,n)=>{let o=n.id.split(":",2).shift(),i=(t.getHotkeys(n.id)||t.getDefaultHotkeys(n.id)||[]).map(at);return i.forEach(u=>this.assignedKeyCount[u]=1+(this.assignedKeyCount[u]||0)),(e[o]||(e[o]=[])).push({hotkeys:i,cmd:n}),e},{})}refreshButtons(t=!1){var n;if(!J()&&!t)return;this.refreshCommands();let e=Object.values(app.setting.pluginTabs).reduce((o,i)=>(o[i.id]=i,o),{});e.workspace=e.editor=!0;for(let o of Object.keys(this.hotkeyButtons||{})){let i=this.hotkeyButtons[o];if(!this.commandsByPlugin[o]||((n=app.internalPlugins.plugins[o])==null?void 0:n.enabled)===!1){i.extraSettingsEl.hide();continue}let u=this.commandsByPlugin[o].filter(a=>a.hotkeys.length),l=u.filter(a=>a.hotkeys.filter(p=>this.assignedKeyCount[p]>1).length).length;i.setTooltip(`Configure hotkeys
(${u.length}/${this.commandsByPlugin[o].length} assigned${l?"; "+l+" conflicting":""})`),i.extraSettingsEl.toggleClass("mod-error",!!l),i.extraSettingsEl.show()}}};