Files
StudyDiary/.obsidian/plugins/meld-encrypt/main.js

10 lines
42 KiB
JavaScript
Raw Normal View History

2025-10-25 20:35:10 +08:00
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var le=Object.defineProperty;var xe=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var Se=Object.prototype.hasOwnProperty;var De=(g,t)=>{for(var e in t)le(g,e,{get:t[e],enumerable:!0})},Ae=(g,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Ce(t))!Se.call(g,s)&&s!==e&&le(g,s,{get:()=>t[s],enumerable:!(n=xe(t,s))||n.enumerable});return g};var Ie=g=>Ae(le({},"__esModule",{value:!0}),g);var Ne={};De(Ne,{default:()=>ae});module.exports=Ie(Ne);var oe=require("obsidian");var S=require("obsidian");var ve=require("obsidian");var j=class{constructor(){this.values=new Map}put(t,e){this.values.set(t,e)}get(t,e){var n;return(n=this.values.get(t))!=null?n:e}getOrNull(t){var e;return(e=this.values.get(t))!=null?e:null}getFirst(t,e){for(let n=0;n<t.length;n++){let s=t[n];if(this.containsKey(s))return this.get(s,e)}return e}containsKey(t){return this.values.has(t)}getKeys(){return Array.from(this.values.keys())}removeKey(t){return this.values.delete(t)}clear(){this.values.clear()}};var ce=require("obsidian"),R=class{static getFilePathWithNewExtension(t,e){var n;return(0,ce.normalizePath)(`${(n=t.parent)==null?void 0:n.path}/${t.basename}.${e}`)}static getFilePathExcludingExtension(t){var e;return(0,ce.normalizePath)(`${(e=t.parent)==null?void 0:e.path}/${t.basename}`)}};var o=class o{static init(t){o.vaultFileAdapter=t}static setExternalFilePaths(t){o.externalFilePaths=t}static setActive(t){o.isActive=t,o.isActive||this.clear()}static setAutoExpire(t){o.baseMinutesToExpire=t!=null?t:0,o.updateExpiryTime()}static getLevel(){return o.level}static setLevel(t){if(o.level!=t){if(o.allLevels.contains(t)){o.level=t;return}o.level=o.LevelFilename,this.clear()}}static updateExpiryTime(){o.baseMinutesToExpire==0||o.baseMinutesToExpire==null?o.expiryTime=null:o.expiryTime=Date.now()+o.baseMinutesToExpire*1e3*60}static putByFile(t,e){if(!o.isActive)return;let n=o.getFileCacheKey(e);this.putByKey(n,t),o.updateExpiryTime()}static async getByFile(t){if(!o.isActive)return o.blankPasswordAndHint;this.clearIfExpired(),o.updateExpiryTime();let e=o.getFileCacheKey(t);return await this.getByKeyAsync(e,o.blankPasswordAndHint)}static putByPath(t,e){if(!o.isActive)return;let n=o.getPathCacheKey(e);this.putByKey(n,t),o.updateExpiryTime()}static getByPath(t){if(!o.isActive)return o.blankPasswordAndHint;this.clearIfExpired(),o.updateExpiryTime();let e=o.getPathCacheKey(t);return this.getByKey(e,o.blankPasswordAndHint)}static async getByPathAsync(t){if(!o.isActive)return o.blankPasswordAndHint;this.clearIfExpired(),o.updateExpiryTime();let e=o.getPathCacheKey(t);return await this.getByKeyAsync(e,o.blankPasswordAndHint)}static getPathCacheKey(t){return o.level==o.LevelExternalFile||o.level==o.LevelVault?"$"+o.level:o.level==o.LevelParentPath?t.split("/").slice(0,-1).join("/"):t}static getFileCacheKey(t){return o.level==o.LevelExternalFile||o.level==o.LevelVault?"$"+o.level:o.level==o.LevelParentPath?t.parent.path:R.getFilePathExcludingExtension(t)}static clearIfExpired(){o.expiryTime!=null&&(Date.now()<o.expiryTime||this.clear())}static clearForFile(t){let e=o.getFileCacheKey(t);this.cache.removeKey(e)}static clear(){let t=this.cache.getKeys().length;return this.cache.clear(),t}static putByKey(t,e){o.level!=o.LevelExternalFile&&this.cache.put(t,e)}static getByKey(t,e){return console.debug("SessionPasswordService.getByKey",{level:o.level,key:t,defaultValue:e}),this.cache.get(t,e)}static async getByKeyAsync(t,e){if(o.level==o.LevelExternalFile){for(let n=0;n<this.externalFilePaths.length;n++){let s=this.externalFilePaths[n];try{return{password:await this.fetchFileContents(s),hint:""}}catch(a){console.error(a,{relFilePath:s})}}return new ve.Notice("External password file not found",1e4),e}return this.cache.get(t,e)}static async canFetchContents(t){if(o.vaultFileAdapter==null)return!1;try{let e=await this.fetchFileContents(t);return!0}catch(e){return!1}}static async fetchFileContents(t){if(o.vaultFileAdapter==null)throw new Error("SessionPasswordService.vaultFileAdapter == null");let e=o.vaultFileAdapter.getResourcePath(t),s=awai
`)).onChange(async i=>{this.settings.rememberPasswordExternalFilePaths=i.trim().split(`
`),await this.plugin.saveSettings(),d.setExternalFilePaths(this.settings.rememberPasswordExternalFilePaths)}),r.inputEl.placeholder="Enter one relative path per line",r.inputEl.style.whiteSpace="pre",r.inputEl.style.width="100%",r.inputEl.rows=4}).addButton(r=>{r.setIcon("check").setTooltip("Check Paths").onClick(async()=>{let i=this.settings.rememberPasswordExternalFilePaths;for(let l of i)await d.canFetchContents(l)?new S.Notice(`\u2714\uFE0F ${l}`):new S.Notice(`\u274C ${l}`)})});a.controlEl.style.width="80%",e(),this.features.forEach(r=>{r.buildSettingsUi(t,async()=>await this.plugin.saveSettings())})}buildRememberPasswordDescription(){let t=new DocumentFragment,e=t.createEl("table").createTBody(),n=e.createEl("tr");return n.createEl("th",{text:"Vault:",attr:{align:"right"}}),n.createEl("td",{text:"Typically, you'll use the same password every time."}),n=e.createEl("tr"),n.createEl("th",{text:"Folder:",attr:{align:"right"}}),n.createEl("td",{text:"Typically, you'll use the same password for each note within a folder."}),n=e.createEl("tr"),n.createEl("th",{text:"File:",attr:{align:"right"}}),n.createEl("td",{text:"Typically, each note will have a unique password."}),n=e.createEl("tr"),n.createEl("th",{text:"External File:",attr:{align:"right",style:"width:12em;"}}),n.createEl("td",{text:"When needed the password/key is read from one of these filepaths."}),t}};var m=require("obsidian");var B=require("obsidian"),V=class extends B.Modal{constructor(e,n,s=""){super(e);this.decryptInPlace=!1;this.save=!1;this.canDecryptInPlace=!0;this.titleEl.setText(n),this.text=s}onOpen(){var r;let{contentEl:e}=this;e.empty(),e.classList.add("meld-encrypt-decrypt-modal");let n;(r=new B.Setting(e).addTextArea(i=>{n=i,i.setValue(this.text),i.inputEl.setSelectionRange(0,0),i.inputEl.rows=10}).settingEl.querySelector(".setting-item-info"))==null||r.remove();let a=new B.Setting(e);a.addButton(i=>{i.setButtonText("Save").onClick(l=>{this.save=!0,this.text=n.getValue(),this.close()})}),a.addButton(i=>{i.setButtonText("Copy").onClick(l=>{navigator.clipboard.writeText(n.getValue()),new B.Notice("Copied!")})}),this.canDecryptInPlace&&a.addButton(i=>{i.setWarning().setButtonText("Decrypt in-place").onClick(l=>{this.decryptInPlace=!0,this.text=n.getValue(),this.close()})})}};var v=require("obsidian");var K=require("obsidian"),D=class{static isSettingsModalOpen(){return document.querySelector(".mod-settings")!==null}static buildPasswordSetting({container:t,name:e,desc:n="",autoFocus:s=!1,placeholder:a="",initialValue:r="",tabIndex:i,onChangeCallback:l,onEnterCallback:p}){let h=new K.Setting(t).setName(e).setDesc(n).addButton(f=>{f.buttonEl.tabIndex=-1,f.setIcon("reading-glasses").onClick(w=>{let y=h.components.find((c,u,E)=>c instanceof K.TextComponent);y instanceof K.TextComponent&&(y.inputEl.type=y.inputEl.type=="password"?"text":"password")})}).addText(f=>{f.inputEl.tabIndex=i!=null?i:f.inputEl.tabIndex,f.setPlaceholder(a),f.setValue(r),f.inputEl.type="password",l!=null&&f.onChange(l),p!=null&&(f.inputEl.onkeydown=w=>{w.key==="Enter"&&(w.preventDefault(),p(f.getValue()))}),s&&setTimeout(()=>f.inputEl.focus(),0)});return h}};var N=class extends v.Modal{constructor(e,n,s,a,r=null,i=null,l=!1){super(e);this.defaultPassword=null;this.resultConfirmed=!1;this.resultPassword=null;this.resultShowInReadingView=null;this.resultTextToEncrypt=null;this.defaultPassword=r,this.confirmPassword=s,this.showInReadingView=a,this.isEncrypting=n,this.defaultHint=i!=null?i:"",this.showTextToEncrypt=l}onOpen(){var y;let{contentEl:e}=this;e.empty(),e.classList.add("meld-encrypt-password-modal"),this.invalidate();let n=(y=this.defaultPassword)!=null?y:"",s="",a=this.defaultHint,r=this.showInReadingView,i="";new v.Setting(e).setHeading().setName(this.isEncrypting?"Encrypting":"Decrypting"),D.buildPasswordSetting({container:e,name:"Password:",placeholder:this.isEncrypting||a.length==0?"":`Hint: ${a}`,initialValue:n,autoFocus:!0,onChangeCallback:c=>{n=c,this.invalidate()},onEnterCallback:c=>{if(n=c,this.invalidate(),n.length>0)if(l.settingEl.isShown()){let u=l.components.fi
/* nosourcemap */