diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index 338801c..3a07c91 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -15,5 +15,6 @@ "obsidian-custom-attachment-location", "i18n", "templater-obsidian", - "remotely-save" + "remotely-save", + "easy-tracker" ] \ No newline at end of file diff --git a/.obsidian/plugins/easy-tracker/main.js b/.obsidian/plugins/easy-tracker/main.js new file mode 100644 index 0000000..fb21665 --- /dev/null +++ b/.obsidian/plugins/easy-tracker/main.js @@ -0,0 +1,16 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var ve=Object.create;var A=Object.defineProperty;var ke=Object.getOwnPropertyDescriptor;var fe=Object.getOwnPropertyNames;var De=Object.getPrototypeOf,Ce=Object.prototype.hasOwnProperty;var Ee=(r,t)=>()=>(t||r((t={exports:{}}).exports,t),t.exports),be=(r,t)=>{for(var e in t)A(r,e,{get:t[e],enumerable:!0})},Q=(r,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of fe(t))!Ce.call(r,o)&&o!==e&&A(r,o,{get:()=>t[o],enumerable:!(s=ke(t,o))||s.enumerable});return r};var Se=(r,t,e)=>(e=r!=null?ve(De(r)):{},Q(t||!r||!r.__esModule?A(e,"default",{value:r,enumerable:!0}):e,r)),Te=r=>Q(A({},"__esModule",{value:!0}),r);var ae=Ee((_e,P)=>{(function(r){if(typeof P=="object"&&typeof P.exports=="object")P.exports=r();else if(typeof define=="function"&&define.amd)define(r);else{let t=typeof globalThis!="undefined"?globalThis:window;t.CalendarHeatmap=r()}})(function(){let t=["#ebedf0","#9be9a8","#40c463","#30a14e","#216e39"],e="calendar-heatmap-style",s={view:"year",year:new Date().getFullYear(),month:new Date().getMonth(),weekStart:0,recentDays:7,squareSize:14,squareGap:2,colorScale:t,maxValue:null,legend:!1,tooltip:!0,locale:void 0,language:"en"},o={en:{locale:"en-US",legend:{less:"Less",more:"More"},weekdays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],tooltip:(n,a)=>`${n} on ${a}`},"zh-cn":{locale:"zh-CN",legend:{less:"\u8F83\u5C11",more:"\u8F83\u591A"},weekdays:["\u5468\u65E5","\u5468\u4E00","\u5468\u4E8C","\u5468\u4E09","\u5468\u56DB","\u5468\u4E94","\u5468\u516D"],tooltip:(n,a)=>`${a}\uFF1A${n}`},"zh-tw":{locale:"zh-TW",legend:{less:"\u8F03\u5C11",more:"\u8F03\u591A"},weekdays:["\u9031\u65E5","\u9031\u4E00","\u9031\u4E8C","\u9031\u4E09","\u9031\u56DB","\u9031\u4E94","\u9031\u516D"],tooltip:(n,a)=>`${a}\uFF1A${n}`},ja:{locale:"ja-JP",legend:{less:"\u5C11\u306A\u3044",more:"\u591A\u3044"},weekdays:["\u65E5","\u6708","\u706B","\u6C34","\u6728","\u91D1","\u571F"],tooltip:(n,a)=>`${a}\uFF1A${n}`},fr:{locale:"fr-FR",legend:{less:"Moins",more:"Plus"},weekdays:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],tooltip:(n,a)=>`${n} le ${a}`},de:{locale:"de-DE",legend:{less:"Weniger",more:"Mehr"},weekdays:["So","Mo","Di","Mi","Do","Fr","Sa"],tooltip:(n,a)=>`${n} am ${a}`},ko:{locale:"ko-KR",legend:{less:"\uC801\uC74C",more:"\uB9CE\uC74C"},weekdays:["\uC77C","\uC6D4","\uD654","\uC218","\uBAA9","\uAE08","\uD1A0"],tooltip:(n,a)=>`${a} ${n}`},es:{locale:"es-ES",legend:{less:"Menos",more:"M\xE1s"},weekdays:["Dom","Lun","Mar","Mi\xE9","Jue","Vie","S\xE1b"],tooltip:(n,a)=>`${n} el ${a}`},it:{locale:"it-IT",legend:{less:"Meno",more:"Pi\xF9"},weekdays:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],tooltip:(n,a)=>`${n} il ${a}`}},p={en:"en","en-us":"en","en-gb":"en",english:"en",zh:"zh-cn","zh-cn":"zh-cn","zh-hans":"zh-cn","zh-sg":"zh-cn","zh-tw":"zh-tw","zh-hant":"zh-tw","zh-hk":"zh-tw",ja:"ja","ja-jp":"ja",japanese:"ja",fr:"fr","fr-fr":"fr",french:"fr",de:"de","de-de":"de",german:"de",ko:"ko","ko-kr":"ko",korean:"ko",es:"es","es-es":"es",spanish:"es",it:"it","it-it":"it",italian:"it"};function m(n){let a=String(n||"en").toLowerCase(),i=p[a]||a;return o[i]||o.en}function k(n){if(!n)throw new Error("CalendarHeatmap: container is required.");if(typeof n=="string"){let a=document.querySelector(n);if(!a)throw new Error(`CalendarHeatmap: container selector "${n}" not found.`);return a}return n}function u(n){let a=n.getFullYear(),i=String(n.getMonth()+1).padStart(2,"0"),l=String(n.getDate()).padStart(2,"0");return`${a}-${i}-${l}`}function y(n){let a=new Map;return Array.isArray(n)&&n.forEach(i=>{if(!i)return;let l=new Date(i.date||i.day||i.dateString);if(Number.isNaN(l.getTime()))return;let c=u(l),h=typeof i.value=="number"?i.value:Number(i.count);Number.isNaN(h)||a.set(c,h)}),a}function E(n,a){let i=new Date(n);return i.setDate(n.getDate()+a),i}function S(n,a){let i=new Date(n),l=(i.getDay()-a+7)%7;return i.setDate(i.getDate()-l),i.setHours(0,0,0,0),i}function U(n,a){let i=S(n,a);return E(i,6)}function oe(n,a){let i=a.weekStart%7,l,c;if(n==="year"){let d=Number(a.year);l=new Date(d,0,1),c=new Date(d,11,31)}else if(n==="month"){let d=Number(a.year),T=Number(a.month);l=new Date(d,T,1),c=new Date(d,T+1,0)}else if(n==="week"){let d=a.startDate?new Date(a.startDate):new Date;if(Number.isNaN(d.getTime()))throw new Error("CalendarHeatmap: invalid startDate for week view.");l=S(d,i),c=U(d,i)}else if(n==="recent"){let d=Math.max(Number(a.recentDays)||7,1);c=new Date,c.setHours(0,0,0,0),l=E(c,-d+1)}else throw new Error(`CalendarHeatmap: unsupported view "${n}".`);let h=S(l,i),g=U(c,i),w=[],v=new Date(h);for(;v<=g;)w.push(new Date(v)),v=E(v,1);return{start:l,end:c,alignedStart:h,alignedEnd:g,dates:w}}function le(n,a,i){let l=Array.isArray(i)&&i.length?i:t;if(typeof i=="function"){let w=i(n,a);if(typeof w=="string")return{color:w,level:n>0?1:0};if(w&&typeof w=="object"){let v=Number(w.level),d=Number.isFinite(v)?Math.max(0,Math.min(v,l.length-1)):n>0?1:0;return{color:w.color||l[d]||l[0],level:w.level!=null?d:n>0?1:0}}}if(!n||a<=0)return{color:l[0],level:0};let c=l.length-1;if(c<=0)return{color:l[0],level:n>0?1:0};let h=Math.min(n/a,1),g=Math.max(1,Math.round(h*c));return{color:l[g],level:g}}function ce(n,a,i){if(typeof document=="undefined")return null;let l=document.createElement("div");l.className="easy-tracker-heatmap-labels";let c=Array.isArray(a.weekdays)&&a.weekdays.length===7?a.weekdays:null,h=c?null:new Intl.DateTimeFormat(i,{weekday:"short"});for(let g=0;g<7;g+=1){let w=(g+n.weekStart)%7,v=c?c[w]:h.format(new Date(2021,7,w+1)),d=document.createElement("span");d.textContent=v,l.appendChild(d)}return l}function de(n,a){if(typeof document=="undefined")return null;let i=Array.isArray(n)&&n.length?n:t,l=document.createElement("div");l.className="easy-tracker-heatmap-legend";let c=document.createElement("span");c.textContent=a.less,l.appendChild(c),i.forEach((g,w)=>{let v=document.createElement("span");v.className="easy-tracker-heatmap-swatch",v.dataset.level=String(w),l.appendChild(v)});let h=document.createElement("span");return h.textContent=a.more,l.appendChild(h),l}function pe(n,a){if(typeof document=="undefined")return;let i=document.createElement("div");i.className="easy-tracker-heatmap-tooltip",i.style.display="none",document.body.appendChild(i);let l=h=>{let g=h.target.closest(".easy-tracker-heatmap-day");if(!g||!n.contains(g)){i.style.display="none";return}i.innerHTML=a(g.dataset),i.style.display="block",i.style.left=`${h.pageX+10}px`,i.style.top=`${h.pageY+10}px`},c=()=>{i.style.display="none"};return n.addEventListener("mousemove",l),n.addEventListener("mouseleave",c),()=>{n.removeEventListener("mousemove",l),n.removeEventListener("mouseleave",c),i&&i.parentNode&&i.parentNode.removeChild(i),i=null}}class B{constructor(a,i=[],l={}){if(typeof document=="undefined")throw new Error("CalendarHeatmap: browser environment required.");this.container=k(a),this.options=Object.assign({},s,l),this.data=y(i),this.tooltipDisposer=null,this.render()}setOptions(a={}){this.options=Object.assign({},this.options,a),this.render()}setData(a=[]){this.data=y(a),this.render()}replaceData(a=[]){this.setData(a)}render(){let{dates:a,start:i,end:l}=oe(this.options.view,this.options),c=m(this.options.language||this.options.locale),h=this.options.locale||c.locale||void 0,g;try{g=new Intl.DateTimeFormat(h,{dateStyle:"medium"})}catch(f){g=new Intl.DateTimeFormat(h,{month:"short",day:"numeric",year:"numeric"})}let w=Array.from(this.data.values()),v=this.options.maxValue!=null?this.options.maxValue:w.reduce((f,D)=>Math.max(f,D),0),d=document.createElement("div");d.className="easy-tracker-heatmap-root",Array.isArray(this.options.colorScale)&&this.options.colorScale.forEach((f,D)=>{d.style.setProperty(`--easy-tracker-heatmap-color-level-${D}`,f)}),d.style.setProperty("--easy-tracker-heatmap-size",`${this.options.squareSize}px`),d.style.setProperty("--easy-tracker-heatmap-gap",`${this.options.squareGap}px`);let T=document.createElement("div");T.style.display="flex";let J=ce(this.options,c,h);J&&T.appendChild(J);let N=document.createElement("div");N.className="easy-tracker-heatmap-grid";let L=[],X=null,he=this.options.view==="year",me=new Date,ye=this.options.weekStart%7;for(let f=0;fu(me))break;let I=Math.floor(f/7);X!==I&&(L.length&&(N.appendChild(Y(L)),L=[]),X=I);let H=this.data.get(M)||0,{color:Pe,level:ge}=le(H,v,this.options.colorScale),we=(D.getDay()-ye+7)%7,b=document.createElement("div");b.className="easy-tracker-heatmap-day",b.dataset.level=String(ge),b.dataset.value=String(H),b.dataset.date=M,b.dataset.rangeStart=u(i),b.dataset.rangeEnd=u(l),b.title="",b.style.gridRowStart=String(we+1),L.push(b)}if(L.length&&N.appendChild(Y(L)),T.appendChild(N),d.appendChild(T),this.options.view==="year"&&ue(this.container,N),this.options.legend){let f=Object.assign({},o.en.legend,c.legend),D=de(this.options.colorScale,f);D&&d.appendChild(D)}if(this.container.innerHTML="",this.container.appendChild(d),this.tooltipDisposer&&(this.tooltipDisposer(),this.tooltipDisposer=null),this.options.tooltip){let f=D=>{let M=Number(D.value)||0,I=new Date(D.date),H=Number.isNaN(I.getTime())?D.date:g.format(I);return c.tooltip?c.tooltip(M,H):o.en.tooltip(M,H)};this.tooltipDisposer=pe(d,f)}}destroy(){this.tooltipDisposer&&(this.tooltipDisposer(),this.tooltipDisposer=null),this.container.innerHTML=""}}function Y(n){let a=document.createElement("div");return a.className="easy-tracker-heatmap-week",n.forEach(i=>{a.appendChild(i)}),a}function ue(n,a){if(typeof window=="undefined")return;let i=()=>{let l=n.clientWidth||n.getBoundingClientRect().width||0;if(l)for(;a.scrollWidth>l-40&&a.children.length>1;){let c=a.firstElementChild;if(!c)break;a.removeChild(c)}};typeof window.requestAnimationFrame=="function"?window.requestAnimationFrame(i):i()}return B.defaults=Object.assign({},s),B.languages=o,B})});var Oe={};be(Oe,{default:()=>R});module.exports=Te(Oe);var C=require("obsidian");function Z(r){let t=r.getFullYear(),e=String(r.getMonth()+1).padStart(2,"0"),s=String(r.getDate()).padStart(2,"0");return`${t}-${e}-${s}`}function Le(r){let t=new Date(r);return isNaN(t.getTime())?null:t}function Me(r){let t=r.match(/^\*\s+(\d{4}-\d{2}-\d{2})\s+-\s+(\d+)/);if(!t)return null;let e=Le(t[1]),s=parseInt(t[2],10);return!e||isNaN(s)?null:{date:e,value:s}}function O(r){let t=r.split(` +`),e=[];for(let s of t){let o=Me(s);o&&e.push(o)}return e}function W(r){let t=Z(new Date);return new RegExp(`^\\*\\s+${t}\\s+-`,"m").test(r)}function ee(r,t){let e=r.lastLine(),s=r.getLine(e).length,o=xe(t);r.replaceRange(` +${o}`,{line:e,ch:s})}function xe(r){return`* ${Z(new Date)} - ${r}`}var Ne={"notice.noActiveMarkdownView":"No active Markdown view","notice.alreadyCheckedIn":"Already checked in today","notice.editorUnavailable":"Editor instance not available","notice.onlyCheckInInEditMode":"Please switch to edit mode to check in.","notice.checkInTooFast":"You are checking in too frequently. Please wait a moment before trying again.","card.goalTitle":"My goal","card.goalPlaceholder":"Define your goal here!","card.activityHistoryTitle":"Activity history","card.buttonsTitle":"How did you do today?","card.checkInCongrats":"Another day done, you're making progress! \u{1F389}","card.defaultButton":"Button","command.insertCalendarHeatmap":"Insert calendar heatmap","command.insertCheckInComponent":"Insert check-in component","command.insertSingleCheckInComponent":"Insert single check-in component","command.insertDailyOverview":"Insert daily overview","command.insertMyGoal":"Insert my goal","snippet.justABit":"Just a bit","snippet.gotItDone":"Got it done","snippet.didExtra":"Did extra","snippet.checkIn":"Check in","setting.weekStartName":"Week start","setting.weekStartDescription":"Choose the first day of the week used by the calendar","setting.weekStart.monday":"Monday","setting.weekStart.sunday":"Sunday","overview.title":"Today's overview","overview.statusLabel":"Today's status","overview.statusValue.checkedIn":"Checked in","overview.statusValue.missed":"Missed","overview.statusHint.checkedIn":"Keep the pace","overview.statusHint.missed":"Remember to check in","overview.streakLabel":"Streak","overview.streakHint.active":"Keep it going","overview.streakHint.inactive":"Waiting to start","overview.gapLabel":"Most recent gap","overview.gapValue.none":"No gaps","overview.noData":"No data yet","overview.gapHint.present":"Review this day","overview.gapHint.none":"Looking steady","overview.streakValue":"{{count}} days"},Ie={"notice.noActiveMarkdownView":"\u6CA1\u6709\u6253\u5F00\u7684 Markdown \u89C6\u56FE","notice.alreadyCheckedIn":"\u4ECA\u5929\u5DF2\u7ECF\u6253\u5361\u4E86","notice.editorUnavailable":"\u65E0\u6CD5\u83B7\u53D6\u7F16\u8F91\u5668\u5B9E\u4F8B","notice.onlyCheckInInEditMode":"\u8BF7\u5207\u6362\u5230\u7F16\u8F91\u6A21\u5F0F\u4EE5\u8FDB\u884C\u6253\u5361\u3002","notice.checkInTooFast":"\u4F60\u6253\u5361\u5F97\u592A\u9891\u7E41\u4E86\uFF0C\u8BF7\u7A0D\u7B49\u7247\u523B\u518D\u8BD5\u3002","card.goalTitle":"\u6211\u7684\u76EE\u6807","card.goalPlaceholder":"\u5728\u8FD9\u91CC\u63CF\u8FF0\u4F60\u7684\u76EE\u6807\uFF01","card.activityHistoryTitle":"\u6D3B\u52A8\u8BB0\u5F55","card.buttonsTitle":"\u4ECA\u5929\u8868\u73B0\u5982\u4F55\uFF1F","card.checkInCongrats":"\u53C8\u575A\u6301\u4E86\u4E00\u5929\uFF0C\u4F60\u6B63\u5728\u4E0D\u65AD\u8FDB\u6B65\uFF01\u{1F389}","card.defaultButton":"\u6309\u94AE","command.insertCalendarHeatmap":"\u63D2\u5165\u65E5\u5386\u70ED\u529B\u56FE","command.insertCheckInComponent":"\u63D2\u5165\u6253\u5361\u7EC4\u4EF6","command.insertSingleCheckInComponent":"\u63D2\u5165\u5355\u6309\u94AE\u6253\u5361\u7EC4\u4EF6","command.insertDailyOverview":"\u63D2\u5165\u6BCF\u65E5\u6982\u89C8","command.insertMyGoal":"\u63D2\u5165\u76EE\u6807\u5361\u7247","snippet.justABit":"\u7A0D\u5FAE\u505A\u4E86\u4E00\u70B9","snippet.gotItDone":"\u987A\u5229\u5B8C\u6210","snippet.didExtra":"\u989D\u5916\u5B8C\u6210","snippet.checkIn":"\u6253\u5361","setting.weekStartName":"\u6BCF\u5468\u8D77\u59CB\u65E5","setting.weekStartDescription":"\u9009\u62E9\u70ED\u529B\u56FE\u4E2D\u7684\u6BCF\u5468\u8D77\u59CB\u65E5","setting.weekStart.monday":"\u5468\u4E00","setting.weekStart.sunday":"\u5468\u65E5","overview.title":"\u4ECA\u65E5\u6982\u89C8","overview.statusLabel":"\u4ECA\u65E5\u72B6\u6001","overview.statusValue.checkedIn":"\u5DF2\u6253\u5361","overview.statusValue.missed":"\u672A\u6253\u5361","overview.statusHint.checkedIn":"\u4FDD\u6301\u8282\u594F","overview.statusHint.missed":"\u522B\u5FD8\u4E86\u6253\u5361","overview.streakLabel":"\u8FDE\u7EED\u5929\u6570","overview.streakHint.active":"\u7EE7\u7EED\u4FDD\u6301","overview.streakHint.inactive":"\u7B49\u5F85\u5F00\u542F","overview.gapLabel":"\u6700\u8FD1\u4E00\u6B21\u4E2D\u65AD","overview.gapValue.none":"\u6682\u65E0\u4E2D\u65AD","overview.noData":"\u6682\u65E0\u6570\u636E","overview.gapHint.present":"\u56DE\u987E\u90A3\u4E00\u5929","overview.gapHint.none":"\u8868\u73B0\u7A33\u5B9A","overview.streakValue":"{{count}} \u5929"},K={en:Ne,"zh-CN":Ie},G="en",He=/\{\{\s*(\w+)\s*\}\}/g,q=r=>(t,e)=>{var m,k,u;let s=(m=K[r])!=null?m:K[G],o=K[G],p=(u=(k=s[t])!=null?k:o[t])!=null?u:String(t);return e?p.replace(He,(y,E)=>{if(Object.prototype.hasOwnProperty.call(e,E)){let S=e[E];return S==null?"":String(S)}return y}):p},te=r=>r?r.toLowerCase().startsWith("zh")?"zh-CN":"en":G;var x=require("obsidian"),ie=Se(ae());var $=r=>{let t=r instanceof Date?r:new Date(r);return Number.isNaN(t.getTime())?"":new Date(t.getTime()-t.getTimezoneOffset()*6e4).toISOString().slice(0,10)},Ae=r=>{let[t,e,s]=r.split("-").map(Number);return new Date(t,(e||1)-1,s||1)},ne=r=>{let t=new Set,e=null;for(let u of r){let y=$(u.date);y&&(t.add(y),(!e||y0,p=t.has(s),m=0;if(o){let u=new Date;for(p||u.setDate(u.getDate()-1);t.has($(u));)m+=1,u.setDate(u.getDate()-1)}let k=null;if(o&&e){let u=Ae(e),y=new Date;for(;y>=u;){let E=$(y);if(!t.has(E)){k=E;break}y.setDate(y.getDate()-1)}}return{hasEntries:o,hasToday:p,streak:m,lastMissing:k}},re=(r,t,e)=>{var p;r.addClass("easy-tracker-card"),r.setAttr("id","easy-tracker-daily-overview"),r.createEl("div",{cls:"easy-tracker-card-title",text:e("overview.title")});let s=[{label:e("overview.statusLabel"),value:t.hasToday?e("overview.statusValue.checkedIn"):e("overview.statusValue.missed"),hint:t.hasToday?e("overview.statusHint.checkedIn"):e("overview.statusHint.missed"),modifier:t.hasToday?"easy-tracker-daily-overview__value--positive":"easy-tracker-daily-overview__value--warning"},{label:e("overview.streakLabel"),value:e("overview.streakValue",{count:String(t.hasEntries?t.streak:0)}),hint:t.hasEntries&&t.streak>0?e("overview.streakHint.active"):e("overview.streakHint.inactive")},{label:e("overview.gapLabel"),value:t.hasEntries?(p=t.lastMissing)!=null?p:e("overview.gapValue.none"):e("overview.noData"),hint:t.lastMissing?e("overview.gapHint.present"):e("overview.gapHint.none")}],o=r.createDiv({cls:"easy-tracker-daily-overview__grid"});for(let m of s){let k=o.createDiv({cls:"easy-tracker-daily-overview__item"});k.createEl("div",{cls:"easy-tracker-daily-overview__label",text:m.label});let u=k.createEl("div",{cls:"easy-tracker-daily-overview__value",text:m.value});m.modifier&&u.addClass(m.modifier),m.hint&&k.createEl("div",{cls:"easy-tracker-daily-overview__hint",text:m.hint})}};var V=class extends x.MarkdownRenderChild{constructor(e,s,o){super(s);this.heatmap=null;this.plugin=e,this.source=o,this.container=s}onload(){this.display(),this.registerEvent(this.plugin.app.workspace.on("easy-tracker:refresh",this.update.bind(this))),this.registerEvent(this.plugin.app.workspace.on("easy-tracker-setting:refresh",this.display.bind(this)))}onunload(){this.heatmap&&(this.heatmap.destroy(),this.heatmap=null)}display(){this.container.empty();let e=O(this.plugin.getActiveContent()),s=this.parseHeatmapOptions(this.source),o=this.container.createDiv({cls:"easy-tracker-card"});o.createEl("div",{cls:"easy-tracker-card-title",text:this.plugin.t("card.activityHistoryTitle")});let p=o.createDiv({cls:"easy-tracker-year-calendar-heatmap"});this.onunload(),this.heatmap=new ie.default(p,e,{weekStart:this.plugin.settings.weekStart,view:"year",year:new Date().getFullYear(),legend:!1,language:this.plugin.locale,...s})}update(){if(this.heatmap){let e=O(this.plugin.getActiveContent());this.heatmap.replaceData(e)}else this.display()}parseHeatmapOptions(e){try{return e.trim()?JSON.parse(e):{}}catch(s){return console.warn("calendar-heatmap: unable to parse options JSON, using defaults"),{}}}},z=class extends x.MarkdownRenderChild{constructor(t,e){super(e),this.plugin=t,this.container=e}onload(){this.display(),this.registerEvent(this.plugin.app.workspace.on("easy-tracker:refresh",this.display.bind(this)))}display(){this.container.empty();let t=O(this.plugin.getActiveContent()),e=ne(t);re(this.container,e,this.plugin.translator)}},_=class extends x.MarkdownRenderChild{constructor(t,e,s){super(e),this.plugin=t,this.source=s,this.container=e}onload(){this.display(),this.registerEvent(this.plugin.app.workspace.on("easy-tracker:refresh",this.display.bind(this)))}display(){this.container.empty();let t=this.container.createDiv({cls:"easy-tracker-card"});if(t.setAttr("id","easy-tracker-buttons"),t.createEl("div",{cls:"easy-tracker-card-title",text:this.plugin.t("card.buttonsTitle")}),this.plugin.isTodayCheckedIn()){t.createEl("div",{cls:"easy-tracker-card-message",text:this.plugin.t("card.checkInCongrats")});return}let e=t.createDiv({cls:"easy-tracker-button-group"}),s=this.source.split(` +`).map(o=>o.trim()).filter(Boolean);for(let[o,p]of s.entries()){let[m,k]=p.split("|").map(y=>y.trim()),u=new x.ButtonComponent(e);u.buttonEl.addClass("btn"),u.setButtonText(m||this.plugin.t("card.defaultButton")),u.onClick(()=>{let y=Number(k),E=Number.isFinite(y)?y:o+1;this.plugin.insertEntry(E)})}}};var j=require("obsidian"),se={weekStart:1},F=class extends j.PluginSettingTab{constructor(t,e){super(t,e),this.plugin=e}display(){let{containerEl:t}=this;t.empty(),new j.Setting(t).setName(this.plugin.t("setting.weekStartName")).setDesc(this.plugin.t("setting.weekStartDescription")).addDropdown(e=>{e.addOption("1",this.plugin.t("setting.weekStart.monday")),e.addOption("0",this.plugin.t("setting.weekStart.sunday")),e.setValue(String(this.plugin.settings.weekStart)),e.onChange(async s=>{this.plugin.settings.weekStart=s==="0"?0:1,await this.plugin.saveSettings()})})}};var R=class extends C.Plugin{constructor(){super(...arguments);this.locale="en";this.translator=q("en");this.lastCheckInTime=0}t(e,s){return this.translator(e,s)}getSystemLocale(){return(0,C.getLanguage)()}refreshLocale(){let e=te(this.getSystemLocale());this.locale=e,this.translator=q(e),this.triggerRefresh()}triggerRefresh(){this.app.workspace.trigger("easy-tracker:refresh")}triggerSettingsRefresh(){this.app.workspace.trigger("easy-tracker-setting:refresh")}getActiveMarkdownView(){let e=this.app.workspace.getActiveViewOfType(C.MarkdownView);return e||(new C.Notice(this.t("notice.noActiveMarkdownView")),null)}getActiveContent(){let e=this.getActiveMarkdownView();return e&&e.editor.getValue()||""}isTodayCheckedIn(){let e=this.getActiveMarkdownView();if(!e)return!1;let s=e.editor.getValue()||"";return W(s)}insertEntry(e){let s=Date.now();if(s-this.lastCheckInTime<1e3)return new C.Notice(this.t("notice.checkInTooFast")),!1;this.lastCheckInTime=s;let o=this.getActiveMarkdownView();if(!o)return!1;if(o.getMode()!=="source")return new C.Notice(this.t("notice.onlyCheckInInEditMode")),!1;let p=o.editor.getValue()||"";if(W(p))return new C.Notice(this.t("notice.alreadyCheckedIn")),!1;let m=o.editor;return m?(ee(m,e),this.triggerRefresh(),!0):(new C.Notice(this.t("notice.editorUnavailable")),!1)}async onload(){await this.loadSettings(),this.refreshLocale(),this.registerMarkdownCodeBlockProcessor("easy-tracker-my-goal",(e,s,o)=>{let p=s.createDiv({cls:"easy-tracker-card"});p.setAttr("id","easy-tracker-my-goal"),p.createEl("div",{cls:"easy-tracker-card-title",text:this.t("card.goalTitle")}),p.createEl("div",{cls:"easy-tracker-my-goal",text:e.trim()||this.t("card.goalPlaceholder")})}),this.registerMarkdownCodeBlockProcessor("easy-tracker-year-calendar-heatmap",(e,s,o)=>{o.addChild(new V(this,s,e))}),this.registerMarkdownCodeBlockProcessor("easy-tracker-buttons",(e,s,o)=>{o.addChild(new _(this,s,e))}),this.registerMarkdownCodeBlockProcessor("easy-tracker-daily-overview",(e,s,o)=>{o.addChild(new z(this,s))}),this.addCommand({id:"insert-calendar-heatmap",name:this.t("command.insertCalendarHeatmap"),editorCallback:(e,s)=>{e.replaceSelection(["```easy-tracker-year-calendar-heatmap","```",""].join(` +`))}}),this.addCommand({id:"insert-check-in-component",name:this.t("command.insertCheckInComponent"),editorCallback:(e,s)=>{e.replaceSelection(["","```easy-tracker-daily-overview","```","```easy-tracker-year-calendar-heatmap","```","```easy-tracker-buttons",` ${this.t("snippet.justABit")} | 1`,` ${this.t("snippet.gotItDone")} | 2`,` ${this.t("snippet.didExtra")} | 3`,"```","```easy-tracker-my-goal",this.t("card.goalPlaceholder"),"```",""].join(` +`))}}),this.addCommand({id:"insert-single-check-in-component",name:this.t("command.insertSingleCheckInComponent"),editorCallback:(e,s)=>{e.replaceSelection(["","```easy-tracker-daily-overview","```","```easy-tracker-year-calendar-heatmap","```","```easy-tracker-buttons",` ${this.t("snippet.checkIn")} | 1`,"```","```easy-tracker-my-goal",this.t("card.goalPlaceholder"),"```",""].join(` +`))}}),this.addCommand({id:"insert-daily-overview",name:this.t("command.insertDailyOverview"),editorCallback:(e,s)=>{e.replaceSelection(["```easy-tracker-daily-overview","```",""].join(` +`))}}),this.addCommand({id:"insert-my-goal",name:this.t("command.insertMyGoal"),editorCallback:(e,s)=>{e.replaceSelection(["```easy-tracker-easy-tracker-my-goal",this.t("card.goalPlaceholder"),"```",""].join(` +`))}}),this.addSettingTab(new F(this.app,this))}onunload(){}async loadSettings(){let e=await this.loadData(),s=e==null?void 0:e.weakStart,o=typeof s!="undefined"?parseInt(String(s))===0?0:1:void 0,p={};typeof(e==null?void 0:e.weekStart)=="number"&&(p.weekStart=e.weekStart===0?0:1),typeof o!="undefined"&&(p.weekStart=o),this.settings={...se,...p}}async saveSettings(){await this.saveData(this.settings),this.triggerSettingsRefresh()}}; + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/easy-tracker/manifest.json b/.obsidian/plugins/easy-tracker/manifest.json new file mode 100644 index 0000000..4234c4d --- /dev/null +++ b/.obsidian/plugins/easy-tracker/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "easy-tracker", + "name": "Easy Tracker", + "version": "1.0.6", + "minAppVersion": "1.8.0", + "description": "Instantly track goals and habits. Simple, beautiful, and configuration-free.", + "author": "Hunter Ji", + "authorUrl": "https://hunterji.com", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/easy-tracker/styles.css b/.obsidian/plugins/easy-tracker/styles.css new file mode 100644 index 0000000..ec70a5d --- /dev/null +++ b/.obsidian/plugins/easy-tracker/styles.css @@ -0,0 +1,245 @@ +.easy-tracker-button-group-container { + padding: 16px; + display: flex; + flex-direction: column; + gap: 14px; +} +.easy-tracker-button-group { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); + gap: 12px; + user-select: none; +} +.easy-tracker-button-group .btn { + min-width: 0; + width: 100%; + display: inline-flex; + justify-content: center; + align-items: center; + font-size: 15px; + line-height: 1.2; + padding: 12px 16px; + min-height: 44px; + border: none; + border-radius: 12px; + background: var(--interactive-hover); + color: var(--text-normal); + cursor: pointer; + user-select: none; +} +.easy-tracker-button-group .btn:hover, +.easy-tracker-button-group .btn:active { + background: var(--background-modifier-hover); +} + +@media (max-width: 480px) { + .easy-tracker-button-group { + padding: 4px; + border-radius: 10px; + grid-template-columns: 1fr; + gap: 10px; + } + .easy-tracker-button-group .btn { + padding: 14px 12px; + font-size: 16px; + width: 100%; + } +} + +.easy-tracker-daily-overview__title { + font-size: 16px; + font-weight: 600; + color: var(--text-normal); +} + +.easy-tracker-daily-overview__grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); + gap: 12px; + cursor: default; + user-select: none; +} + +.easy-tracker-daily-overview__item { + padding: 12px; + border-radius: 10px; + background: var(--background-primary); + border: 1px solid var(--background-modifier-border); + display: flex; + flex-direction: column; + gap: 6px; + min-height: 96px; +} + +.easy-tracker-daily-overview__label { + font-size: 12px; + color: var(--text-muted); + letter-spacing: 0.04em; + text-transform: uppercase; +} + +.easy-tracker-daily-overview__value { + font-size: 24px; + font-weight: 600; + color: var(--text-normal); +} + +.easy-tracker-daily-overview__value--positive { + color: var(--color-green); +} + +.easy-tracker-daily-overview__value--warning { + color: var(--color-orange); +} + +.easy-tracker-daily-overview__hint { + font-size: 12px; + color: var(--text-faint); +} + +@media (max-width: 480px) { + .easy-tracker-daily-overview { + padding: 12px; + border-radius: 10px; + } + .easy-tracker-daily-overview__grid { + gap: 10px; + } + .easy-tracker-daily-overview__item { + padding: 10px; + min-height: 88px; + } +} + +.easy-tracker-card { + padding: 16px; + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + border-radius: 12px; + margin-top: 12px; + margin-bottom: 12px; + display: flex; + flex-direction: column; + gap: 14px; + cursor: default; +} + +.easy-tracker-card-title { + font-size: 16px; + font-weight: 600; + color: var(--text-normal); + user-select: none; +} + +.easy-tracker-card-message, +.easy-tracker-my-goal { + padding: 12px; + border-radius: 10px; + background: var(--background-primary); + border: 1px solid var(--background-modifier-border); + font-size: 16px; + color: var(--text-muted); + font-weight: 500; + user-select: none; +} +/* Calendar Heatmap */ + +.easy-tracker-heatmap-root { + font-family: var(--font-interface); + --easy-tracker-heatmap-size: 14px; + --easy-tracker-heatmap-gap: 2px; + + /* Default Colors (Light) */ + --easy-tracker-heatmap-color-level-0: #ebedf0; + --easy-tracker-heatmap-color-level-1: #9be9a8; + --easy-tracker-heatmap-color-level-2: #40c463; + --easy-tracker-heatmap-color-level-3: #30a14e; + --easy-tracker-heatmap-color-level-4: #216e39; +} + +.theme-dark .easy-tracker-heatmap-root { + /* Default Colors (Dark) */ + --easy-tracker-heatmap-color-level-0: #161b22; + --easy-tracker-heatmap-color-level-1: #0e4429; + --easy-tracker-heatmap-color-level-2: #006d32; + --easy-tracker-heatmap-color-level-3: #26a641; + --easy-tracker-heatmap-color-level-4: #39d353; +} + +.easy-tracker-heatmap-grid { + display: grid; + grid-auto-flow: column; + grid-auto-columns: max-content; + column-gap: var(--easy-tracker-heatmap-gap); +} + +.easy-tracker-heatmap-week { + display: grid; + grid-template-rows: repeat(7, 1fr); + row-gap: var(--easy-tracker-heatmap-gap); +} + +.easy-tracker-heatmap-day { + width: var(--easy-tracker-heatmap-size); + height: var(--easy-tracker-heatmap-size); + box-sizing: border-box; + border-radius: 2px; + background-color: var(--easy-tracker-heatmap-color-level-0); + position: relative; + border: 1px solid rgba(27, 31, 35, 0.06); +} +.theme-dark .easy-tracker-heatmap-day { + border: 1px solid rgba(255, 255, 255, 0.05); +} + +.easy-tracker-heatmap-day[data-level="0"] { background-color: var(--easy-tracker-heatmap-color-level-0); } +.easy-tracker-heatmap-day[data-level="1"] { background-color: var(--easy-tracker-heatmap-color-level-1); } +.easy-tracker-heatmap-day[data-level="2"] { background-color: var(--easy-tracker-heatmap-color-level-2); } +.easy-tracker-heatmap-day[data-level="3"] { background-color: var(--easy-tracker-heatmap-color-level-3); } +.easy-tracker-heatmap-day[data-level="4"] { background-color: var(--easy-tracker-heatmap-color-level-4); } + +.easy-tracker-heatmap-tooltip { + position: absolute; + pointer-events: none; + z-index: 9999; + padding: 6px 8px; + border-radius: 4px; + font-size: 12px; + background: var(--background-modifier-message); + color: var(--text-normal); + box-shadow: 0 4px 12px rgba(0,0,0,0.15); + border: 1px solid var(--background-modifier-border); +} + +.easy-tracker-heatmap-legend { + display: flex; + align-items: center; + gap: 4px; + font-size: 12px; + margin-top: 8px; + color: var(--text-muted); +} + +.easy-tracker-heatmap-legend .easy-tracker-heatmap-swatch { + display: inline-block; + width: var(--easy-tracker-heatmap-size); + height: var(--easy-tracker-heatmap-size); + border-radius: 2px; + background-color: var(--easy-tracker-heatmap-color-level-0); +} + +.easy-tracker-heatmap-legend .easy-tracker-heatmap-swatch[data-level="0"] { background-color: var(--easy-tracker-heatmap-color-level-0); } +.easy-tracker-heatmap-legend .easy-tracker-heatmap-swatch[data-level="1"] { background-color: var(--easy-tracker-heatmap-color-level-1); } +.easy-tracker-heatmap-legend .easy-tracker-heatmap-swatch[data-level="2"] { background-color: var(--easy-tracker-heatmap-color-level-2); } +.easy-tracker-heatmap-legend .easy-tracker-heatmap-swatch[data-level="3"] { background-color: var(--easy-tracker-heatmap-color-level-3); } +.easy-tracker-heatmap-legend .easy-tracker-heatmap-swatch[data-level="4"] { background-color: var(--easy-tracker-heatmap-color-level-4); } + +.easy-tracker-heatmap-labels { + display: grid; + grid-template-rows: repeat(7, var(--easy-tracker-heatmap-size)); + row-gap: var(--easy-tracker-heatmap-gap); + margin-right: 6px; + font-size: 10px; + color: var(--text-muted); + line-height: var(--easy-tracker-heatmap-size); +} \ No newline at end of file diff --git a/.obsidian/plugins/quickadd/data.json b/.obsidian/plugins/quickadd/data.json index c37dac7..4516809 100644 --- a/.obsidian/plugins/quickadd/data.json +++ b/.obsidian/plugins/quickadd/data.json @@ -20,7 +20,7 @@ "chooseFromSubfolders": false }, "appendLink": false, - "openFile": false, + "openFile": true, "fileOpening": { "location": "tab", "direction": "vertical", diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 3a8823f..f569e58 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -22,36 +22,6 @@ "title": "Obsidian使用飞牛WebDAV实现多端同步" } }, - { - "id": "d83368a00da306d8", - "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "Collection/连~都忘记了的小知识.md", - "mode": "source", - "source": false, - "backlinks": false - }, - "icon": "lucide-file", - "title": "连~都忘记了的小知识" - } - }, - { - "id": "4f298dc4da670a86", - "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "Collection/配置备忘/navidrome.md", - "mode": "preview", - "source": false, - "backlinks": false - }, - "icon": "lucide-file", - "title": "navidrome" - } - }, { "id": "e8387cb6b409e6ef", "type": "leaf", @@ -59,8 +29,8 @@ "type": "markdown", "state": { "file": "YueQian/相关网站.md", - "mode": "source", - "source": false, + "mode": "preview", + "source": true, "backlinks": false }, "icon": "lucide-file", @@ -68,7 +38,21 @@ } }, { - "id": "42e7165f72a639db", + "id": "c1e9cbfd79a6fe96", + "type": "leaf", + "state": { + "type": "webviewer", + "state": { + "url": "https://share.note.youdao.com/ynoteshare/index.html?id=a66c778ce8c6e4ee03608e493e59ba7a&type=notebook&_time=1768473840238#/WEB4f51ebc698a96e5cc1a682b2fb7b683d", + "title": "02C语言", + "mode": "webview" + }, + "icon": "globe-2", + "title": "02C语言" + } + }, + { + "id": "ca7bf9cdf5e0eef1", "type": "leaf", "state": { "type": "webviewer", @@ -81,8 +65,7 @@ "title": "CQ2605" } } - ], - "currentTab": 3 + ] } ], "direction": "vertical" @@ -149,13 +132,13 @@ "state": { "type": "outline", "state": { - "file": "YueQian/相关网站.md", + "file": "Collection/Obsidian使用飞牛WebDAV实现多端同步.md", "followCursor": true, "showSearch": false, "searchQuery": "" }, "icon": "lucide-list", - "title": "相关网站 的大纲" + "title": "Obsidian使用飞牛WebDAV实现多端同步 的大纲" } }, { @@ -265,7 +248,7 @@ } } ], - "currentTab": 3 + "currentTab": 2 }, { "id": "bf1e7d1a52b4651c", @@ -307,15 +290,17 @@ "remotely-save:Remotely Save": false } }, - "active": "e8387cb6b409e6ef", + "active": "6bbdb6c9df9a2d8f", "lastOpenFiles": [ - "Diary/2026-1/2026-1-24 周六.md", + "YueQian/Homework/~$运算符测试.docx", "YueQian/相关网站.md", "Collection/Obsidian使用飞牛WebDAV实现多端同步.md", + "Collection/连~都忘记了的小知识.md", "Collection/配置备忘/navidrome.md", + "Diary/2026-1/2026-1-25 周日.md", + "Diary/2026-1/2026-1-24 周六.md", "Collection/配置备忘/Typecho插件Aplayer使用教程.md", "Collection/配置备忘", - "Collection/连~都忘记了的小知识.md", "School/安装AD2025学习版.md", "BlogWebsite/Article/MarkdownTest.md", "YueQian/Homework/~$运算符1.docx", @@ -349,7 +334,6 @@ "Article/Studyroad/vivado_ip_img/IPCore17.png", "Article/Studyroad/vivado_ip_img/IPCore04.png", "Article/Studyroad/vivado_ip_img/IPCore14.png", - "Article/Technology/navidrome.md", "Article/Studyroad/vivado_ip_img", "Article/Technology", "Article/Studyroad", diff --git a/YueQian/相关网站.md b/YueQian/相关网站.md index 8adbeb7..d693ec5 100644 --- a/YueQian/相关网站.md +++ b/YueQian/相关网站.md @@ -18,4 +18,5 @@ aliases: empty # 粤嵌 I-Teaching [I-Teaching](http://vm.yueqian.com.cn:8886) + ![[assets/相关网站/相关网站_Excalidraw20260121]] \ No newline at end of file