├── .obsidian ├── hotkeys.json ├── appearance.json ├── backlink.json ├── community-plugins.json ├── plugins │ ├── obsidian-link-converter │ │ ├── styles.css │ │ ├── data.json │ │ ├── manifest.json │ │ └── main.js │ ├── mrj-text-expand │ │ ├── data.json │ │ └── manifest.json │ ├── oz-clear-unused-images │ │ ├── styles.css │ │ ├── manifest.json │ │ └── main.js │ ├── obsidian-day-planner │ │ ├── manifest.json │ │ └── styles.css │ ├── obsidian-tracker │ │ ├── manifest.json │ │ └── styles.css │ ├── nldates-obsidian │ │ └── manifest.json │ ├── obsidian-excalidraw-plugin │ │ ├── manifest.json │ │ └── styles.css │ ├── obsidian-journey-plugin │ │ ├── manifest.json │ │ └── styles.css │ ├── obsidian-copy-block-link │ │ ├── manifest.json │ │ └── main.js │ ├── supercharged-links-obsidian │ │ ├── manifest.json │ │ └── styles.css │ └── obsidian-drag-n-drop-plugin │ │ ├── manifest.json │ │ └── styles.css ├── app.json ├── core-plugins.json ├── graph.json └── workspace ├── 自学的感想 ├── figure.png └── 数学中的迷思.md ├── 推荐资料 └── 数学分析.md ├── 数学中的名词 └── 定理.md └── README.md /.obsidian/hotkeys.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /.obsidian/appearance.json: -------------------------------------------------------------------------------- 1 | { 2 | "theme": "moonstone" 3 | } -------------------------------------------------------------------------------- /.obsidian/backlink.json: -------------------------------------------------------------------------------- 1 | { 2 | "backlinkInDocument": true 3 | } -------------------------------------------------------------------------------- /自学的感想/figure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fire-lit-band/math-wiki/HEAD/自学的感想/figure.png -------------------------------------------------------------------------------- /推荐资料/数学分析.md: -------------------------------------------------------------------------------- 1 | understanding analysis 2 | 数学分析新讲 3 | 卓里奇 4 | tao analysis 5 | principles of mathemaica analysis -------------------------------------------------------------------------------- /.obsidian/community-plugins.json: -------------------------------------------------------------------------------- 1 | [ 2 | "obsidian-copy-block-link", 3 | "mrj-text-expand", 4 | "obsidian-link-converter" 5 | ] -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-link-converter/styles.css: -------------------------------------------------------------------------------- 1 | .oz-coffee-div { 2 | text-align: center; 3 | margin-top: 20px; 4 | } 5 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-link-converter/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "mySetting": "default", 3 | "contextMenu": false, 4 | "finalLinkFormat": "shortest-path", 5 | "keepMtime": false 6 | } -------------------------------------------------------------------------------- /.obsidian/plugins/mrj-text-expand/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "autoExpand": true, 3 | "defaultTemplate": "- $link", 4 | "delay": 5000, 5 | "excludeCurrent": true, 6 | "lineEnding": "<--->" 7 | } -------------------------------------------------------------------------------- /.obsidian/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "legacyEditor": false, 3 | "livePreview": true, 4 | "strictLineBreaks": true, 5 | "alwaysUpdateLinks": true, 6 | "showUnsupportedFiles": false, 7 | "attachmentFolderPath": "./", 8 | "useMarkdownLinks": true 9 | } -------------------------------------------------------------------------------- /.obsidian/plugins/oz-clear-unused-images/styles.css: -------------------------------------------------------------------------------- 1 | .unused-images-logs { 2 | margin-bottom: 13px; 3 | margin-top: 5px; 4 | } 5 | 6 | .unused-images-center-wrapper { 7 | display: flex; 8 | align-items: center; 9 | justify-content: center; 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-day-planner/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-day-planner", 3 | "name": "Day Planner", 4 | "version": "0.5.8", 5 | "description": "A plugin to help you plan your day and setup pomodoro timers", 6 | "isDesktopOnly": false, 7 | "js": "main.js", 8 | "css": "style.css" 9 | } -------------------------------------------------------------------------------- /.obsidian/plugins/mrj-text-expand/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "mrj-text-expand", 3 | "name": "Text expand", 4 | "version": "0.9.2", 5 | "description": "Search and paste/transclude links to located files.", 6 | "isDesktopOnly": false, 7 | "author": "MrJackphil", 8 | "authorUrl": "https://mrjackphil.com" 9 | } 10 | -------------------------------------------------------------------------------- /.obsidian/core-plugins.json: -------------------------------------------------------------------------------- 1 | [ 2 | "file-explorer", 3 | "global-search", 4 | "switcher", 5 | "graph", 6 | "backlink", 7 | "page-preview", 8 | "note-composer", 9 | "command-palette", 10 | "editor-status", 11 | "markdown-importer", 12 | "word-count", 13 | "open-with-default-app", 14 | "file-recovery" 15 | ] -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-tracker/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-tracker", 3 | "name": "Tracker", 4 | "version": "1.10.9", 5 | "minAppVersion": "0.9.12", 6 | "description": "A plugin tracks occurrences and numbers in your notes", 7 | "author": "pyrochlore", 8 | "authorUrl": "", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/nldates-obsidian/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "nldates-obsidian", 3 | "name": "Natural Language Dates", 4 | "description": "Create date-links based on natural language", 5 | "version": "0.6.1", 6 | "author": "Argentina Ortega Sainz", 7 | "authorUrl": "https://argentinaos.com/", 8 | "isDesktopOnly": false, 9 | "minAppVersion": "0.13.0" 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-excalidraw-plugin/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-excalidraw-plugin", 3 | "name": "Excalidraw", 4 | "version": "1.6.25", 5 | "minAppVersion": "0.12.16", 6 | "description": "An Obsidian plugin to edit and view Excalidraw drawings", 7 | "author": "Zsolt Viczian", 8 | "authorUrl": "https://zsolt.blog", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-journey-plugin/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-journey-plugin", 3 | "name": "Journey", 4 | "version": "0.0.7", 5 | "minAppVersion": "0.10.10", 6 | "description": "Discover the stories between your notes.", 7 | "author": "Alexis Rondeau", 8 | "authorUrl": "https://publish.obsidian.md/alexisrondeau", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-copy-block-link/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-copy-block-link", 3 | "name": "Copy Block Link", 4 | "version": "1.0.4", 5 | "minAppVersion": "0.12.12", 6 | "description": "Get links to blocks and headings from Obsidian's right click menu", 7 | "author": "mgmeyers", 8 | "authorUrl": "https://github.com/mgmeyers/obsidian-copy-block-link", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-link-converter/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-link-converter", 3 | "name": "Obsidian Link Converter", 4 | "version": "0.1.4", 5 | "minAppVersion": "0.9.12", 6 | "description": "Scan all your links in the vault and convert them to your desired format.", 7 | "author": "Ozan Tellioglu", 8 | "authorUrl": "https://ozan.pl", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/oz-clear-unused-images/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "oz-clear-unused-images", 3 | "name": "Clear Unused Images", 4 | "version": "1.0.6", 5 | "minAppVersion": "0.11.13", 6 | "description": "Clear the images that you are not using anymore in your markdown notes to save space.", 7 | "author": "Ozan", 8 | "authorUrl": "https://www.ozan.pl", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/supercharged-links-obsidian/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "supercharged-links-obsidian", 3 | "name": "Supercharged Links", 4 | "version": "0.6.8", 5 | "minAppVersion": "0.12.7", 6 | "description": "Add properties and menu options to links and style them!", 7 | "author": "mdelobelle & Emile", 8 | "authorUrl": "https://github.com/mdelobelle/mdelobelle/tree/main", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-drag-n-drop-plugin/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-drag-n-drop-plugin", 3 | "name": "Drag-n-Drop for blocks", 4 | "version": "1.0.8", 5 | "minAppVersion": "0.12.0", 6 | "description": "Allow moving/copying/and creation embeds for blocks with drag-n-drop just like Logseq or Roam", 7 | "author": "Artem Barmin", 8 | "authorUrl": "https://github.com/artem-barmin/obsidian-block-drag-n-drop", 9 | "isDesktopOnly": true 10 | } -------------------------------------------------------------------------------- /.obsidian/graph.json: -------------------------------------------------------------------------------- 1 | { 2 | "collapse-filter": true, 3 | "search": "", 4 | "showTags": false, 5 | "showAttachments": false, 6 | "hideUnresolved": false, 7 | "showOrphans": true, 8 | "collapse-color-groups": true, 9 | "colorGroups": [], 10 | "collapse-display": false, 11 | "showArrow": true, 12 | "textFadeMultiplier": 0.4, 13 | "nodeSizeMultiplier": 0.811965811965812, 14 | "lineSizeMultiplier": 0.644444444444444, 15 | "collapse-forces": false, 16 | "centerStrength": 0.58974358974359, 17 | "repelStrength": 9.05982905982906, 18 | "linkStrength": 0.572649572649573, 19 | "linkDistance": 250, 20 | "scale": 0.7514342322277665, 21 | "close": true 22 | } -------------------------------------------------------------------------------- /数学中的名词/定理.md: -------------------------------------------------------------------------------- 1 | From a logical point of view, there is no difference between a lemma, proposition, 2 | theorem, or corollary - they are all claims waiting to be proved. However, we use 3 | these terms to suggest different levels of importance and difficulty. A lemma is an 4 | easily proved claim which is helpful for proving other propositions and theorems, but 5 | is usually not particularly interesting in its own right. A proposition is a statement 6 | which is interesting in its own right, while a theorem is a more important statement 7 | than a proposition which says something definitive on the subject, and often takes 8 | more effort to prove than a proposition or lemma. A corollary is a quick consequence 9 | of a proposition or theorem that was proven recently. -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-drag-n-drop-plugin/styles.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --dnd-gutter-handle: red; 3 | } 4 | 5 | /* @settings 6 | 7 | name: Drag'n-drop 8 | id: drag-n-drop 9 | settings: 10 | - 11 | id: my-title 12 | title: Handle settings 13 | type: heading 14 | level: 3 15 | - 16 | id: dnd-gutter-handle 17 | title: Gutter handle color 18 | type: variable-color 19 | format: hsl-split 20 | default: red 21 | */ 22 | 23 | .dnd-render-draggable-content .dnd-gutter-marker { 24 | color:rgba(0, 0, 0, 0) 25 | } 26 | 27 | .dnd-render-draggable-content .dnd-drag-container { 28 | color: rgba(0, 0, 0, 1) 29 | } 30 | 31 | .dnd-gutter-marker { 32 | color: var(--dnd-gutter-handle); 33 | cursor: pointer; 34 | } 35 | 36 | .drag-over { 37 | background-color: rgba(0, 255, 255, 0.099); 38 | } 39 | 40 | .drag-over-invalid { 41 | background-color: rgba(255, 0, 0, 0.099); 42 | } 43 | 44 | .drag-last { 45 | border-bottom: 2px solid black; 46 | } 47 | 48 | .cm-dropCursor { 49 | display: none !important; 50 | } 51 | 52 | .dnd-drag-container { 53 | position:absolute; 54 | } 55 | 56 | .dnd-drag-container-inactive { 57 | display: none !important; 58 | position: relative; 59 | } 60 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-excalidraw-plugin/styles.css: -------------------------------------------------------------------------------- 1 | .App{font-family:sans-serif;text-align:center}.excalidraw-wrapper{height:100%;margin:0px;background-color:#fff}.context-menu-option__shortcut{background-color:transparent!important}.block-language-excalidraw{text-align:center}.excalidraw .github-corner{display:none}img.excalidraw-svg-right-wrap{float:right;margin:0px 0px 20px 20px}img.excalidraw-svg-left-wrap{float:left;margin:0px 35px 20px 0px}img.excalidraw-svg-right{float:right}.excalidraw-svg-center{text-align:center}img.excalidraw-svg-left{float:left}div.excalidraw-svg-right,div.excalidraw-svg-left{display:table;width:100%}button.ToolIcon_type_button[title=Export]{display:none}.excalidraw-prompt-div{display:flex;max-width:800px}.excalidraw-prompt-form{display:flex;flex-grow:1}.excalidraw-prompt-input{flex-grow:1}li[data-testid]{border:0!important;margin:0!important;padding:0!important;width:100%!important}.excalidraw .context-menu-option-separator{margin:4px!important}.excalidraw .popover{padding:0!important;border-color:transparent!important;border:0!important;box-shadow:0!important;background-color:transparent!important}.disable-zen-mode--visible{color:var(--text-primary-color)}.disable-zen-mode{width:9em!important}.ex-coffee-div{text-align:center;margin-bottom:20px}.excalidraw-scriptengine-install td>img{width:100%;max-width:800px}.excalidraw-scriptengine-install img.coffee{width:130px}.excalidraw-scriptengine-install tr{vertical-align:top}.excalidraw-scriptengine-install table{max-width:130ch}.excalidraw-scriptengine-install td.label{min-width:11ch;font-weight:bold;padding-right:5px}.excalidraw-scriptengine-install td.data{width:100%}.modal-content.excalidraw-scriptengine-install{max-width:130ch;user-select:text}.excalidraw-scriptengine-install .modal{max-height:90%}.excalidraw-prompt-center{text-align:center}.excalidraw-prompt-center.filepath{text-align:center;font-weight:bold;margin-bottom:2em}.excalidraw-dirty{color:red}.workspace-leaf-content .excalidraw-view{padding:0px 1px}.excalidraw-videoWrapper{max-width:600px}.excalidraw-videoWrapper div{position:relative;padding-bottom:56.25%;height:0;margin:0 auto}.excalidraw-videoWrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%}.excalidraw-release{padding-right:5px;margin-right:-5px;max-width:130ch;user-select:text}.excalidraw-release .modal{max-height:90%}.excalidraw .Island .scrollbar{--scrollbar-thumb-bg: silver}.excalidraw .ToolIcon__icon img{height:1em}.excalidraw-scriptengine-install tbody>tr>td>div>img{height:20px;background-color:silver;padding:2px}.excalidraw-scriptengine-install tbody>tr>td>div{width:50px;display:inline-block}.excalidraw-release p>a>img{width:100%} 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #! https://zhuanlan.zhihu.com/p/517082591 2 | 如果之前有关注过这个库的人会发现,我一直在不停的更改,删库,增加,每次的内容总是不一样的。我也发给过不少的人看过库里面的内容和我的一些想法,最后在与他们的讨论中一次次的把数学笔记的各个方面大致的了解了一下,最后我开始动手这个内容。 3 | 4 | # 为什么要记笔记 5 | 6 | ## 迷思 7 | 8 | 记笔记的意义是什么,我之前想过很久这个问题。意义明确了,接下来应当怎么做才能确定。很多人认为,记笔记的意义在于在考前,我可以把老师的重点记下来,方便应付考试。我觉得抱着这样的心态是不适合学习任何东西的,因为在没有老师后,你的这种想法会让你丧失自主学习的能力。如果我们抱着长期学习的心态来思考记笔记的目的,那么记笔记的意义在哪里? 9 | 10 | 快速查找?我觉得这并不是一个很好的解释,因为现在的互联网资源这么发达,任何你想不起来的定理,都可以在网络上找到答案,任何你不懂的内容,也可以在网络上找到对应的解释。 11 | 12 | 如果你们有新的见解,也可以跟我说 13 | 14 | ## tao的解释 15 | 16 | 我目前看到的最恰当的说明,来自于陶哲轩 17 | 18 | [如何做数学笔记 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/24805724) 19 | 20 | 我也引用一下这边dhchen大佬的翻译 21 | 22 | >1. It makes the argument permanently available to you in the future, and may eventually be helpful in your later research papers, lecture notes, teaching, or research proposals. (它可以让你以后永远都可以随时提取,帮助你写论文,课程笔记,教书和写标书) 23 | 24 | >2. It gives you practice in mathematical writing, both at the technical level (e.g. in learning how to use TeX) and at an expository or pedagogical level. (它能帮你训练自己的数学写作能力,使用tex/latex的能力,达到一个专业的水准) 25 | 26 | >3. It tests whether you have really understood the argument on more than just a superficial level.(它能测试你是否真的懂了这个方法,而不是自以为懂了) 27 | 28 | >4. It frees up mental space; you no longer have to remember the exact details of the argument, and so can devote your memory to learning newer topics. (它释放了你的脑内存,你不需要记住那些冗长的细节,并且可以用你的脑子去学更多更新的东西) 29 | 我觉得最不重要的,是第二条,因为并不是所有人都会选择latex进行笔记。 30 | 31 | 我们把2,3,4串在一起,就可以得到这么一个流程: 32 | 33 | 在学习内容的过程中,记笔记可以释放你大脑的内容,让你的大脑去学更多的内容,同时记笔记有一个自测的功能。在学习结束后,还可以帮助你达到速查的作用。 34 | 35 | ## 我的观点 36 | 37 | 我基本同意tao的观点,但是有几点需要进行补充: 38 | 39 | 1. 由于人脑的短时间的接收的信息量是有限的(无论对于谁),就像你从u盘上复制文件到电脑上,特别是一些几个G的视频文件,至少需要5-10分钟。而对于人而言,粗略的看一眼,是很难全部吸收的,因此我们需要时间缓冲,缓冲的形式就是做笔记。不少的大佬,都采取抄书的方式进行数学的学习,包括数学家小平邦彦。无论你是抄书,还是打latex,都是减缓输入速度的一种方式,并无优劣之分。 40 | 41 | 2. 现在网络上的资源那么的多,要想查一个知识点,实际上外面的资源更全。所以你要记录的不是知识点本身,而是知识点背后的一些理解,比如导数的切线视角,极限定义中的对弈思想等等。这些资源网络上一定是不好查的,因为关键词太过于模糊,而且你的理解可能和别人的理解不太一样,这时候你自己写,以后自己查起来也容易一些。 42 | 43 | ## 选择markdown原因 44 | 45 | 我的笔记应该会大部分采取markdown,理由很简单,手写查找起来比较麻烦,卡片数量多了之后非常混乱,需要用到一些编码技巧,而latex过于复杂,需要关注排版等,而markdown比较简单,所有的格式都是确定的,比较复杂的用图片代替即可 46 | 47 | # 关于分享笔记 48 | 49 | 很多人不太喜欢分享自己的笔记,有些人可能是比较害羞,有些人的理由是这样的:他们认为每个人的情况不太一样,有些笔记对其他人不太适合,所以没有分享的必要。 50 | 51 | 对,也不对,每个人对知识的理解确实可能不太一样,但这并不是不分享笔记的理由。 52 | 53 | 对于读者而已,尽信书不如无书,你的这篇文章只是他读过的许多文章中的一篇而已,如果合适,很好,如果不合适,他也不会,也不应该在你这篇笔记上停留太久,像教材一样反复研读,而是应该继续寻找下一篇合适的文章。你的笔记只是他学习时候的参考,而不是学习的全部。更何况在阅读教材时,我也鼓励多找几本相同主题的教材,最好是中西方的互相参考,这样更能够找出适合你的那一种解释方式。没有一本书是最适合你的,只有一本书是更适合你的。 54 | 55 | 对于作者而言,收到读者的反馈可以帮忙作者更改错误,优化措辞,是极好的费曼学习法的体现。 56 | 57 | 同时分享的人越多,特别在互联网上,才能够更好的打破信息的垄断。 58 | 59 | 那闲言少叙,大家开始阅读使用吧 60 | 61 | -------------------------------------------------------------------------------- /自学的感想/数学中的迷思.md: -------------------------------------------------------------------------------- 1 | #! https://zhuanlan.zhihu.com/p/518317663 2 | # 数学中的迷思 3 | 我和不少的同学有进行过交流,不少的人都反馈说,他们觉得数学很难,很抽象,十分难以理解,主要体现在上课听不懂,下课不会做,然后张着纯真的大眼睛,看着台上的数学学霸们侃侃而谈,心生佩服。 4 | 我在大致交流后,发现了他们的一些问题,同时在这里我也说一说我的一个个人解决办法 5 | 6 | # 数学太抽象 7 | 很多人都跟我提起过数学数学太抽象,我现在看着极限delta-epsilon为例子(实际上这个也是很多人不理解的内容) 8 | $$若对于\forall \epsilon >0,\exists \delta>0,使得,对于\forall x满足 0<|x-a|<\delta,|f(x)-b|<\epsilon,则称\lim \limits_{x \rightarrow a}f(x)=b$$ 9 | 许多人看着这个定义,百思不得其解,这个delta和epsilon到底是从哪个石头里蹦出来的,以及为什么一会儿存在,一会儿任意。我这边提供几个解决的路径吧 10 | ## 了解数学概念 11 | 我觉得对于数学概念的一个定义,我们并不需要第一时间去理解他的精准的定义(就是上面balabla又臭又长的那个句子,首先我们要有一个大概直观的感觉,在于这个定义**有什么用**,或者说定义出来的目的是什么,对此我觉得两种办法比较有效 12 | ### 看数学史 13 | 了解数学史就可以知道一个数学的定义他的发展,如果你从微积分的时代看到现在的微积分定义,你会看到牛顿,莱布尼兹是如何定义微分,他们的定义都是特别简单,好理解的,然后随着时代的发展,公式的定义变得越发的复杂,也变得越发的严谨,也更加的让人摸不着头脑。实际上我认为,你学不懂微积分才是正常的事情,牛顿莱布尼兹发明微积分已经至少350年了,你觉得你比牛顿和莱布尼茨聪明吗,你凭什么能在 初学的时候一下子明白人类发展了350年的内容。知道了数学历史才能知道你学这些内容的意义在哪里,就像矩阵的定义是为了解决方程组,再例如历史的发展是从积分发展到微分再发展到实数理论的,也就是说我们的教材一开始讲实数理论的目的,实际上是为了讲后续的微分,而讲后续的微分,是为了讲紧接的积分的。你不了解这些,你当然觉得数学跟石头里蹦出来的一样。别扯淡,你见过哪个小孩一出生就会写综述的。(在我后续的每章节的笔记前,都会附带这么一章序言讲讲主要知识点的历史的) 14 | #### 画图 15 | 实际上在这方面我更推荐你去看视频,因为在不了解这个概念的时候,你自己也画不出来什么图,我比较推荐3blue1brown的入门视频的,讲的都很浅,一下子就能明白概念如何在现实中如何应用的(后续我应该会整理资源库的) 16 | ### 看例子 17 | 实际上这个方法应用的很少,只适用于一些非常入门的知识的学习。如果你看不懂这个概念,你可以直接跳过定义部分去看例题,大致感受一下这个定义是怎么用的 18 | ### 补充:换个教材(多个教材) 19 | 实际上有的时候学习不是你的问题,有可能是你选的教科书的问题(资源库到时候会精选一下比较推荐的教材),有些教材实在是太恶心人了,还不如不看,看了还增加负面影响。他们写书就是纯纯的上帝视角,写完了就一走了事,不管读者死活的。另外每本书他的优点和缺点都是有的,你也可以多拿几本教材互相翻看 20 | ## 剖析数学定义语言 21 | 在了解了数学数学定义大概后,我们就要深入的去了解为什么数学是这么定义的,为什么他能定义的如此抽象 22 | ### 抬杠法 23 | 所谓抬杠,就是你大约了解了这个数学概念后,尝试自己去定义一下,而不要去看教材。你可以把自己弄出来的定义和书上的定义进行比对,看看有什么区别,然后找几个例子看看能不能反驳书上的定义,从中找不同。当然更快的办法是把定义的某个条件遮掉,看看如果没有这个条件,你映像中的那个概念他是否能接着成立。在反复遮盖以后你就知道他的精妙之处 24 | 25 | ### 离散举例法 26 | 所谓离散举例法,就是你把题目中的条件进行任意的赋值,且多次赋值,观察最后的结果,从中感受内容的含义,通常来说我们也把他用在离散的情况,比如组合数学,比如和整数有关的题目上 27 | 比如为什么有n个节点,n-1条边的的图就是树。你可以让n=5,然后你画个线段,很显然对于线段而言,很显然就是n个节点,n-1条边的,然后你再画个树,你数一下,发现正好4条边,然后你再加一个点,然后发现诶,正好是5条边。你会发现加一个点,正好是加一个边,然后2个点才能有一个边,所以是n-1条边。 28 | ### 画图剖析 29 | 画图是一种更加高阶也更能帮助你理解的办法,这种办法经常用在和实数,集合相关的定理上 30 | 在这里我使用《undestanding analysis》上面的一张图 31 | ![](figure.png) 32 | 我们顺着定义读这个图 33 | >对于任意$\epsilon>0$,存在$\delta>0$ 34 | 35 | 这里没有内容 36 | >使得对于$\forall x$,|x-a|<$\delta$ 37 | 38 | (图上面的c就是原本定义中的a)那这时候我们就会发现x在图中标注的$V_{\delta}(c)$中, 39 | >则|f(x)-b|<$\epsilon$ 40 | 41 | (图中的L就是定义中的b)这时候我们就会发现,无论x在$V_{\delta}(c)$中怎么动,f(x)都始终困在$V_{\epsilon}(L)$中,你就能大概理解出极限是什么了——就是对于无论多小的$\epsilon$,都有一个区域让f(x)和L的距离是小于$\epsilon$的,由此我们了解为什么这么定义能够表示趋向于,因为趋向于就可以理解为距离越来越小。 42 | ## 学习中的错误 43 | ### 记忆硬背 44 | 我特别特别不推荐在数学中死记硬背,理由很简单——数学的知识结构性太强了。不理解的记忆一定不能长久,如果你这个模块是死记硬背的,那么其他和这个模块的的相关知识,会因为你这个模块的忘记而出现问题,就像多米诺骨牌一样 45 | ## 其他建议 46 | ### 多学 47 | 很多知识他之所以难,可能是因为他从其他地方改编了一下题目然后给你做,比如中值定理的题目通常就是微分方程的题目里面改编过来的。你没学微分方程你当然搞不懂为什么老师要这么解题 -------------------------------------------------------------------------------- /.obsidian/plugins/supercharged-links-obsidian/styles.css: -------------------------------------------------------------------------------- 1 | .frontmatter-prompt-div { 2 | display: flex; 3 | } 4 | 5 | .frontmatter-prompt-form { 6 | width: 100%; 7 | } 8 | .frontmatter-prompt-container { 9 | margin-top: 10px; 10 | } 11 | 12 | .frontmatter-prompt-container > input{ 13 | margin-right: 10px; 14 | margin-bottom: 8px 15 | } 16 | 17 | .frontmatter-prompt-input { 18 | flex-grow: 1; 19 | width: 100% 20 | } 21 | 22 | .frontmatter-prompt-input { 23 | flex-grow: 1; 24 | } 25 | 26 | .frontmatter-prompt-checkbox { 27 | display: none; 28 | } 29 | 30 | .frontmatter-toggler { 31 | text-align: center; 32 | } 33 | 34 | .frontmatter-separator { 35 | margin-top: 20px; 36 | margin-bottom: 20px; 37 | } 38 | 39 | .frontmatter-modal-value { 40 | text-align: center 41 | } 42 | 43 | .frontmatter-select { 44 | margin-right: 10px 45 | } 46 | 47 | .frontmatter-values-grid { 48 | display: grid; 49 | grid-template-columns: repeat(2, 1fr); 50 | } 51 | 52 | .frontmatter-value-selector-container{ 53 | margin-bottom: 5px; 54 | } 55 | 56 | .frontmatter-value-selector-label{ 57 | display: inline-block; 58 | vertical-align: top; 59 | margin-left: 10px; 60 | } 61 | 62 | .frontmatter-value-selector-inline-label{ 63 | display: inline-block; 64 | margin-left: 10px; 65 | margin-right: 10px 66 | } 67 | 68 | .yaml-frontmatter-red{ 69 | color: #C7254E 70 | } 71 | 72 | .frontmatter-value-selector-toggler { 73 | display: inline-block; 74 | margin-right: 10px; 75 | padding-top: 3px; 76 | } 77 | 78 | .frontmatter-value-grid-footer { 79 | flex: 1 1 auto; 80 | text-align: right; 81 | display: flex; 82 | justify-content: flex-end; 83 | align-items: center; 84 | } 85 | 86 | .frontmatter-textarea-buttons { 87 | flex: 1 1 auto; 88 | text-align: right; 89 | display: flex; 90 | justify-content: flex-end; 91 | align-items: center; 92 | } 93 | 94 | .position-selector-container { 95 | margin-right: 10px; 96 | } 97 | 98 | .heading-selector-button, .heading-selector-button:not(.mod-cta), .heading-selector-button:not(.mod-warning){ 99 | padding: 0; 100 | background-color: transparent; 101 | } 102 | 103 | .frontmatter-value-selector-inline-label-top{ 104 | display: inline-block; 105 | margin-left: 10px; 106 | margin-right: 10px; 107 | vertical-align: top 108 | } 109 | 110 | .css-boilerplate-result { 111 | width: 30em 112 | } 113 | 114 | div.supercharged-modal { 115 | height: 70vh; 116 | } 117 | 118 | div.supercharged-modal h4 { 119 | margin: 0; 120 | } -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-journey-plugin/styles.css: -------------------------------------------------------------------------------- 1 | .journey-search-form select, .journey-search-form input[type=text], .journey-input-button { 2 | width: 100%; 3 | height: 50px !important; 4 | font-size: 24px; 5 | padding: 5px; 6 | padding-left: 10px; 7 | margin-bottom: 20px; 8 | } 9 | 10 | .show-me { 11 | display: block; 12 | } 13 | 14 | .hide-me { 15 | display: none; 16 | } 17 | 18 | .journey-search-form .journey-search-autocomplete-results-container { 19 | position: relative; 20 | height: 0px; 21 | top: -20px; 22 | width: 730px; 23 | min-width: 730px; 24 | max-width: 730px; 25 | } 26 | 27 | .journey-search-autocomplete-results-container .journey-search-autocomplete-results-content { 28 | background-color: #222; 29 | } 30 | 31 | .journey-search-autocomplete-results-content-item { 32 | font-size: 24px; 33 | color: white; 34 | border-bottom: 1px solid #000000; 35 | padding: 10px; 36 | white-space: nowrap; 37 | overflow: hidden; 38 | text-overflow: ellipsis; 39 | } 40 | 41 | .journey-input-button { 42 | background-color: black; 43 | color: white; 44 | } 45 | 46 | /** Search Results */ 47 | 48 | .journey-result-list .journey-result-list-item-note, 49 | .journey-result-list .journey-result-list-item-start, 50 | .journey-result-list .journey-result-list-item-end, 51 | .journey-result-list .journey-result-list-item-tag { 52 | font-size: 24px; 53 | padding: 10px; 54 | margin-bottom: 10px; 55 | background-color: #555; 56 | border: 5px solid #777; 57 | border-radius: 10px 10px 10px 10px; 58 | } 59 | 60 | .journey-result-list .journey-result-list-item-start { 61 | background-color: darkgreen; 62 | border: 3px solid forestgreen; 63 | } 64 | 65 | .journey-result-list .journey-result-list-item-end { 66 | background-color: darkgreen; 67 | border: 3px solid forestgreen; 68 | } 69 | 70 | .journey-result-list .journey-result-list-item-tag { 71 | background-color: darkblue; 72 | border: 3px solid royalblue; 73 | } 74 | 75 | .journey-result-list-high-contrast .journey-result-list-item-note, 76 | .journey-result-list-high-contrast .journey-result-list-item-start, 77 | .journey-result-list-high-contrast .journey-result-list-item-end, 78 | .journey-result-list-high-contrast .journey-result-list-item-tag { 79 | font-size: 24px; 80 | padding: 10px; 81 | margin-bottom: 10px; 82 | background-color: #000; 83 | color: white; 84 | border: 5px solid #333; 85 | border-radius: 10px 10px 10px 10px; 86 | } 87 | 88 | 89 | .journey-result-list-reset-link { 90 | text-align: center; 91 | text-decoration: underline; 92 | } 93 | 94 | .discovery-settings { 95 | font-size: 9px; 96 | text-align: center; 97 | } 98 | 99 | .journey-search-lucky { 100 | text-align: center; 101 | text-decoration: underline; 102 | } 103 | 104 | .moc-max-links-counter { 105 | text-align: right; 106 | } -------------------------------------------------------------------------------- /.obsidian/workspace: -------------------------------------------------------------------------------- 1 | { 2 | "main": { 3 | "id": "86361b32b966a858", 4 | "type": "split", 5 | "children": [ 6 | { 7 | "id": "41537e90987d61c8", 8 | "type": "leaf", 9 | "state": { 10 | "type": "markdown", 11 | "state": { 12 | "file": "数学中的名词/定理.md", 13 | "mode": "source", 14 | "backlinks": true, 15 | "source": false 16 | } 17 | } 18 | } 19 | ], 20 | "direction": "vertical" 21 | }, 22 | "left": { 23 | "id": "536b1c18b2c664d9", 24 | "type": "split", 25 | "children": [ 26 | { 27 | "id": "9e3d5358bda7d893", 28 | "type": "tabs", 29 | "children": [ 30 | { 31 | "id": "ce9fbcd9cd77d337", 32 | "type": "leaf", 33 | "state": { 34 | "type": "file-explorer", 35 | "state": {} 36 | } 37 | }, 38 | { 39 | "id": "243800159dea0e3a", 40 | "type": "leaf", 41 | "state": { 42 | "type": "search", 43 | "state": { 44 | "query": "矩阵表示", 45 | "matchingCase": false, 46 | "explainSearch": false, 47 | "collapseAll": false, 48 | "extraContext": false, 49 | "sortOrder": "alphabetical" 50 | } 51 | } 52 | } 53 | ] 54 | } 55 | ], 56 | "direction": "horizontal", 57 | "width": 300 58 | }, 59 | "right": { 60 | "id": "b0ff68a81e8aef78", 61 | "type": "split", 62 | "children": [ 63 | { 64 | "id": "9e35d1f936f34d54", 65 | "type": "tabs", 66 | "children": [ 67 | { 68 | "id": "d4e28f07dca84b61", 69 | "type": "leaf", 70 | "state": { 71 | "type": "backlink", 72 | "state": { 73 | "file": "数学中的名词/定理.md", 74 | "collapseAll": false, 75 | "extraContext": false, 76 | "sortOrder": "alphabetical", 77 | "showSearch": false, 78 | "searchQuery": "", 79 | "backlinkCollapsed": false, 80 | "unlinkedCollapsed": true 81 | } 82 | } 83 | } 84 | ] 85 | } 86 | ], 87 | "direction": "horizontal", 88 | "width": 300, 89 | "collapsed": true 90 | }, 91 | "active": "41537e90987d61c8", 92 | "lastOpenFiles": [ 93 | "数学中的名词/定理.md", 94 | "推荐资料/数学分析.md", 95 | "README.md", 96 | "自学的感想/数学中的迷思.md", 97 | "2-线性代数/2-2向量空间/2-2-2定理/9-行列秩相等.md", 98 | "2-线性代数/2-2向量空间/2-2-2定理/8-初等行变换不改变矩阵的行秩.md", 99 | "2-线性代数/2-2向量空间/2-2-2定理/7-线性无关组的维度.md", 100 | "2-线性代数/2-2向量空间/2-2-2定理/6-生成空间长度.md", 101 | "2-线性代数/2-2向量空间/2-2-1定义/11-矩阵的子空间.md", 102 | "2-线性代数/2-2向量空间/2-2-1定义/9-向量子空间.md" 103 | ] 104 | } -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-tracker/styles.css: -------------------------------------------------------------------------------- 1 | .theme-light { 2 | --color-title: #000000; 3 | --color-axis: #000000; 4 | --color-axis-label: #000000; 5 | --color-tick-label: #000000; 6 | --color-line: #000000; 7 | 8 | --color-legend-border: #000000; 9 | 10 | --color-dot-fill: #69b3a2; 11 | --color-dot-stroke: none; 12 | 13 | --color-bar-fill: #69b3a2; 14 | --color-bar-border: none; 15 | 16 | --color-tooltip-bg: #ffffff; 17 | --color-tooltip-border: #000000; 18 | --color-tooltip-label: #000000; 19 | } 20 | 21 | .theme-dark { 22 | --color-title: #ffffff; 23 | --color-axis: #ffffff; 24 | --color-axis-label: #ffffff; 25 | --color-tick-label: #ffffff; 26 | --color-line: #ffffff; 27 | 28 | --color-legend-border: #ffffff; 29 | 30 | --color-dot-fill: #69b3a2; 31 | --color-dot-stroke: none; 32 | 33 | --color-bar-fill: #69b3a2; 34 | --color-bar-border: none; 35 | 36 | --color-tooltip-bg: #ffffff; 37 | --color-tooltip-border: #000000; 38 | --color-tooltip-label: #000000; 39 | } 40 | 41 | .tracker-title { 42 | fill: var(--color-title); 43 | text-anchor: middle; 44 | font-size: 18px; 45 | } 46 | 47 | .tracker-title-small { 48 | fill: var(--color-title); 49 | text-anchor: middle; 50 | font-size: 16px; 51 | } 52 | 53 | .tracker-axis { 54 | fill: none; 55 | stroke: var(--color-axis); 56 | stroke-width: 1px; 57 | } 58 | 59 | .tracker-axis-label { 60 | fill: var(--color-axis-label); 61 | text-anchor: middle; 62 | font-size: 14px; 63 | stroke: none; 64 | } 65 | 66 | .tracker-tick-label { 67 | fill: var(--color-tick-label); 68 | stroke: none; 69 | font-size: 12px; 70 | } 71 | 72 | .tracker-line { 73 | fill: none; 74 | stroke: var(--color-line); 75 | stroke-width: 1.5px; 76 | stroke-linecap: round; 77 | stroke-linejoin: round; 78 | } 79 | 80 | .tracker-dot { 81 | fill: var(--color-dot-fill); 82 | } 83 | 84 | .tracker-tooltip { 85 | fill: var(--color-tooltip-bg); 86 | stroke: var(--color-tooltip-border); 87 | stroke-width: 1px; 88 | } 89 | 90 | .tracker-tooltip-label { 91 | fill: var(--color-tooltip-label); 92 | stroke: none; 93 | font-size: 12px; 94 | } 95 | 96 | .tracker-legend { 97 | fill: none; 98 | stroke: var(--color-legend-border); 99 | stroke-width: 0.5px; 100 | } 101 | 102 | .tracker-legend-label { 103 | font-size: 14px; 104 | text-anchor: left; 105 | } 106 | 107 | .tracker-bar { 108 | fill: var(--color-bar-fill); 109 | } 110 | 111 | .tracker-month-header-year { 112 | fill: var(--color-title); 113 | text-anchor: start; 114 | font-size: 22px; 115 | 116 | } 117 | 118 | .tracker-month-header-month { 119 | fill: var(--color-title); 120 | text-anchor: start; 121 | font-size: 18px; 122 | } 123 | 124 | .tracker-month-dividing-line { 125 | fill: var(--color-bar-fill); 126 | } 127 | 128 | .tracker-month-title-arrow { 129 | fill: var(--color-title); 130 | text-anchor: middle; 131 | font-size: 22px; 132 | } 133 | 134 | .tracker-month-title-rotator { 135 | fill: var(--color-title); 136 | text-anchor: middle; 137 | font-size: 20px; 138 | } 139 | 140 | .tracker-month-title-monitor { 141 | fill: var(--color-title); 142 | text-anchor: middle; 143 | font-size: 18px; 144 | } 145 | 146 | .tracker-month-weekday { 147 | fill: var(--color-tick-label); 148 | stroke: none; 149 | font-size: 12px; 150 | } 151 | 152 | .tracker-month-today-circle { 153 | fill: none; 154 | stroke: "white"; 155 | stroke-width: 4px; 156 | } 157 | 158 | .tracker-month-selected-circle { 159 | fill: none; 160 | stroke: "red"; 161 | stroke-width: 2px; 162 | } 163 | 164 | .tracker-month-label { 165 | fill: var(--color-axis-label); 166 | text-anchor: middle; 167 | font-size: 14px; 168 | stroke: none; 169 | } 170 | 171 | .tracker-month-annotation { 172 | fill: var(--color-axis-label); 173 | text-anchor: middle; 174 | font-size: 10px; 175 | stroke: none; 176 | } 177 | 178 | .tracker-pie-label { 179 | fill: var(--color-tick-label); 180 | stroke: none; 181 | font-size: 12px; 182 | } -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-copy-block-link/main.js: -------------------------------------------------------------------------------- 1 | /* 2 | THIS IS A GENERATED/BUNDLED FILE BY ROLLUP 3 | if you want to view the source visit the plugins github repository 4 | */ 5 | 6 | 'use strict'; 7 | 8 | var obsidian = require('obsidian'); 9 | 10 | /*! ***************************************************************************** 11 | Copyright (c) Microsoft Corporation. 12 | 13 | Permission to use, copy, modify, and/or distribute this software for any 14 | purpose with or without fee is hereby granted. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 17 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 18 | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 19 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 20 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 21 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 22 | PERFORMANCE OF THIS SOFTWARE. 23 | ***************************************************************************** */ 24 | 25 | function __awaiter(thisArg, _arguments, P, generator) { 26 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 27 | return new (P || (P = Promise))(function (resolve, reject) { 28 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 29 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 30 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 31 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 32 | }); 33 | } 34 | 35 | function generateId() { 36 | return Math.random().toString(36).substr(2, 6); 37 | } 38 | const illegalHeadingCharsRegex = /[!"#$%&()*+,.:;<=>?@^`{|}~\/\[\]\\]/g; 39 | function sanitizeHeading(heading) { 40 | return heading 41 | .replace(illegalHeadingCharsRegex, " ") 42 | .replace(/\s+/g, " ") 43 | .trim(); 44 | } 45 | function shouldInsertAfter(block) { 46 | if (block.type) { 47 | return [ 48 | "blockquote", 49 | "code", 50 | "table", 51 | "comment", 52 | "footnoteDefinition", 53 | ].includes(block.type); 54 | } 55 | } 56 | class MyPlugin extends obsidian.Plugin { 57 | onload() { 58 | return __awaiter(this, void 0, void 0, function* () { 59 | this.registerEvent(this.app.workspace.on("editor-menu", (menu, editor, view) => { 60 | const block = this.getBlock(editor, view.file); 61 | if (!block) 62 | return; 63 | const isHeading = !!block.heading; 64 | const onClick = (isEmbed) => { 65 | if (isHeading) { 66 | this.handleHeading(view.file, block, isEmbed); 67 | } 68 | else { 69 | this.handleBlock(view.file, editor, block, isEmbed); 70 | } 71 | }; 72 | menu.addItem((item) => { 73 | item 74 | .setTitle(isHeading ? "Copy link to heading" : "Copy link to block") 75 | .setIcon("links-coming-in") 76 | .onClick(() => onClick(false)); 77 | }); 78 | menu.addItem((item) => { 79 | item 80 | .setTitle(isHeading ? "Copy heading embed" : "Copy block embed") 81 | .setIcon("links-coming-in") 82 | .onClick(() => onClick(true)); 83 | }); 84 | })); 85 | this.addCommand({ 86 | id: "copy-link-to-block", 87 | name: "Copy link to current block or heading", 88 | editorCheckCallback: (isChecking, editor, view) => { 89 | return this.handleCommand(isChecking, editor, view, false); 90 | }, 91 | }); 92 | this.addCommand({ 93 | id: "copy-embed-to-block", 94 | name: "Copy embed to current block or heading", 95 | editorCheckCallback: (isChecking, editor, view) => { 96 | return this.handleCommand(isChecking, editor, view, true); 97 | }, 98 | }); 99 | }); 100 | } 101 | handleCommand(isChecking, editor, view, isEmbed) { 102 | if (isChecking) { 103 | return !!this.getBlock(editor, view.file); 104 | } 105 | const block = this.getBlock(editor, view.file); 106 | if (!block) 107 | return; 108 | const isHeading = !!block.heading; 109 | if (isHeading) { 110 | this.handleHeading(view.file, block, isEmbed); 111 | } 112 | else { 113 | this.handleBlock(view.file, editor, block, isEmbed); 114 | } 115 | } 116 | getBlock(editor, file) { 117 | const cursor = editor.getCursor("to"); 118 | const fileCache = this.app.metadataCache.getFileCache(file); 119 | let block = ((fileCache === null || fileCache === void 0 ? void 0 : fileCache.sections) || []).find((section) => { 120 | return (section.position.start.line <= cursor.line && 121 | section.position.end.line >= cursor.line); 122 | }); 123 | if ((block === null || block === void 0 ? void 0 : block.type) === "list") { 124 | block = ((fileCache === null || fileCache === void 0 ? void 0 : fileCache.listItems) || []).find((item) => { 125 | return (item.position.start.line <= cursor.line && 126 | item.position.end.line >= cursor.line); 127 | }); 128 | } 129 | else if ((block === null || block === void 0 ? void 0 : block.type) === "heading") { 130 | block = fileCache.headings.find((heading) => { 131 | return heading.position.start.line === block.position.start.line; 132 | }); 133 | } 134 | return block; 135 | } 136 | handleHeading(file, block, isEmbed) { 137 | navigator.clipboard.writeText(`${isEmbed ? "!" : ""}${this.app.fileManager.generateMarkdownLink(file, "", "#" + sanitizeHeading(block.heading))}`); 138 | } 139 | handleBlock(file, editor, block, isEmbed) { 140 | const blockId = block.id; 141 | // Copy existing block id 142 | if (blockId) { 143 | return navigator.clipboard.writeText(`${isEmbed ? "!" : ""}${this.app.fileManager.generateMarkdownLink(file, "", "#^" + blockId)}`); 144 | } 145 | // Add a block id 146 | const sectionEnd = block.position.end; 147 | const end = { 148 | ch: sectionEnd.col, 149 | line: sectionEnd.line, 150 | }; 151 | const id = generateId(); 152 | const spacer = shouldInsertAfter(block) ? "\n\n" : " "; 153 | editor.replaceRange(`${spacer}^${id}`, end); 154 | navigator.clipboard.writeText(`${isEmbed ? "!" : ""}${this.app.fileManager.generateMarkdownLink(file, "", "#^" + id)}`); 155 | } 156 | } 157 | 158 | module.exports = MyPlugin; 159 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm1haW4udHMiXSwic291cmNlc0NvbnRlbnQiOm51bGwsIm5hbWVzIjpbIlBsdWdpbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXVEQTtBQUNPLFNBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRTtBQUM3RCxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sS0FBSyxZQUFZLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsVUFBVSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNoSCxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUMvRCxRQUFRLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDbkcsUUFBUSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDdEcsUUFBUSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxN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 160 | -------------------------------------------------------------------------------- /.obsidian/plugins/oz-clear-unused-images/main.js: -------------------------------------------------------------------------------- 1 | "use strict";var e=require("obsidian"); 2 | /*! ***************************************************************************** 3 | Copyright (c) Microsoft Corporation. 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 9 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 10 | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 11 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 12 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 13 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 14 | PERFORMANCE OF THIS SOFTWARE. 15 | ***************************************************************************** */function t(e,t,s,n){return new(s||(s=Promise))((function(i,a){function o(e){try{d(n.next(e))}catch(e){a(e)}}function l(e){try{d(n.throw(e))}catch(e){a(e)}}function d(e){var t;e.done?i(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,l)}d((n=n.apply(e,t||[])).next())}))}const s={deleteOption:".trash",logsModal:!0,excludedFolders:"",ribbonIcon:!1,excludeSubfolders:!1};class n extends e.PluginSettingTab{constructor(e,t){super(e,t),this.plugin=t}display(){let{containerEl:t}=this;t.empty(),t.createEl("h2",{text:"Clear Images Settings"}),new e.Setting(t).setName("Ribbon Icon").setDesc("Turn on if you want Ribbon Icon for clearing the images.").addToggle((e=>e.setValue(this.plugin.settings.ribbonIcon).onChange((e=>{this.plugin.settings.ribbonIcon=e,this.plugin.saveSettings(),this.plugin.refreshIconRibbon()})))),new e.Setting(t).setName("Delete Logs").setDesc("Turn off if you dont want to view the delete logs Modal to pop up after deletion is completed. It wont appear if no image is deleted").addToggle((e=>e.setValue(this.plugin.settings.logsModal).onChange((e=>{this.plugin.settings.logsModal=e,this.plugin.saveSettings()})))),new e.Setting(t).setName("Deleted Image Destination").setDesc("Select where you want images to be moved once they are deleted").addDropdown((e=>{e.addOption("permanent","Delete Permanently"),e.addOption(".trash","Move to Obsidian Trash"),e.addOption("system-trash","Move to System Trash"),e.setValue(this.plugin.settings.deleteOption),e.onChange((e=>{this.plugin.settings.deleteOption=e,this.plugin.saveSettings()}))})),new e.Setting(t).setName("Excluded Folder Full Paths").setDesc("Provide the FULL path of the folder names (Case Sensitive) divided by comma (,) to be excluded from clearing. \n\t\t\t\t\ti.e. For images under Personal/Files/Zodiac -> Personal/Files/Zodiac should be used for exclusion").addTextArea((e=>e.setValue(this.plugin.settings.excludedFolders).onChange((e=>{this.plugin.settings.excludedFolders=e,this.plugin.saveSettings()})))),new e.Setting(t).setName("Exclude Subfolders").setDesc("Turn on this option if you want to also exclude all subfolders of the folder paths provided above.").addToggle((e=>e.setValue(this.plugin.settings.excludeSubfolders).onChange((e=>{this.plugin.settings.excludeSubfolders=e,this.plugin.saveSettings()}))));const s=t.createDiv("coffee");s.addClass("oz-coffee-div");s.createEl("a",{href:"https://ko-fi.com/L3L356V6Q"}).createEl("img",{attr:{src:"https://cdn.ko-fi.com/cdn/kofi2.png?v=3"}}).height=45}}class i extends e.Modal{constructor(e,t){super(t),this.textToView=e}onOpen(){let{contentEl:e}=this,t=this;const s=e.createEl("div");s.addClass("unused-images-center-wrapper");s.createEl("h1",{text:"Clear Unused Images - Logs"}).addClass("modal-title");const n=e.createEl("div");n.addClass("unused-images-logs"),n.innerHTML=this.textToView;const i=e.createEl("div");i.addClass("unused-images-center-wrapper");const a=i.createEl("button",{text:"Close"});a.addClass("unused-images-button"),a.addEventListener("click",(()=>{t.close()}))}}const a=/.*(jpe?g|png|gif|svg|bmp)/i,o=/!\[\[(.*?)\]\]/i,l=new Set(["jpeg","jpg","png","gif","svg","bmp"]),d=(e,t)=>{let s=e.vault.getFiles(),n=[];for(let e=0;e{var s=new Set,n=e.metadataCache.resolvedLinks;if(n)for(const[e,o]of Object.entries(n))for(const[o,l]of Object.entries(n[e])){var i=o.match(a);i&&s.add(i[0]),"all"!==t||o.endsWith(".md")||s.add(o)}return e.vault.getMarkdownFiles().forEach((t=>{let n=e.metadataCache.getFileCache(t);if(n.frontmatter){let i=n.frontmatter;for(let n of Object.keys(i))if("string"==typeof i[n])if(i[n].match(o)){let a=i[n].match(o)[1],l=e.metadataCache.getFirstLinkpathDest(a,t.path);l&&s.add(l.path)}else c(i[n])&&s.add(i[n])}})),s},c=e=>e.match(a),h=(e,t)=>{var s=t.settings.excludedFolders,n=t.settings.excludeSubfolders;if(""===s)return!1;var i=new Set(s.split(",").map((e=>e.trim())));if(n)for(let t of i){var a=new RegExp(t+".*");if(e.parent.path.match(a))return!0}else if(i.has(e.parent.path))return!0;return!1},g=()=>(new Date).toLocaleDateString("en-GB",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"});class u extends e.Plugin{constructor(){super(...arguments),this.ribbonIconEl=void 0,this.refreshIconRibbon=()=>{var e;null===(e=this.ribbonIconEl)||void 0===e||e.remove(),this.settings.ribbonIcon&&(this.ribbonIconEl=this.addRibbonIcon("image-file","Clear Unused Images",(e=>{this.clearUnusedAttachments("image")})))},this.clearUnusedAttachments=s=>t(this,void 0,void 0,(function*(){var n,a,o,l=((e,t)=>{var s,n=d(e,t),i=[];return s=r(e,t),n.forEach((e=>{s.has(e.path)||i.push(e)})),i})(this.app,s);if(l.length>0){let e="";e+=`[+] ${g()}: Clearing started.
`,(n=l,a=this,o=this.app,t(void 0,void 0,void 0,(function*(){var e=a.settings.deleteOption,t=0;let s="";for(let i of n)h(i,a)?console.log("File not referenced but excluded: "+i.path):(".trash"===e?(yield o.vault.trash(i,!1),s+="[+] Moved to Obsidian Trash: "+i.path+"
"):"system-trash"===e?(yield o.vault.trash(i,!0),s+="[+] Moved to System Trash: "+i.path+"
"):"permanent"===e&&(yield o.vault.delete(i),s+="[+] Deleted Permanently: "+i.path+"
"),t++);return{deletedImages:t,textToView:s}}))).then((({deletedImages:t,textToView:s})=>{if(e+=s,e+="[+] "+t.toString()+" image(s) in total deleted.
",e+=`[+] ${g()}: Clearing completed.`,this.settings.logsModal){new i(e,this.app).open()}}))}else new e.Notice(`All ${"image"===s?"images":"attachments"} are used. Nothing was deleted.`)}))}onload(){return t(this,void 0,void 0,(function*(){console.log("Clear Unused Images plugin loaded..."),this.addSettingTab(new n(this.app,this)),yield this.loadSettings(),this.addCommand({id:"clear-images-obsidian",name:"Clear Unused Images",callback:()=>this.clearUnusedAttachments("image")}),this.addCommand({id:"clear-unused-attachments",name:"Clear Unused Attachments",callback:()=>this.clearUnusedAttachments("all")}),this.refreshIconRibbon()}))}onunload(){console.log("Clear Unused Images plugin unloaded...")}loadSettings(){return t(this,void 0,void 0,(function*(){this.settings=Object.assign({},s,yield this.loadData())}))}saveSettings(){return t(this,void 0,void 0,(function*(){yield this.saveData(this.settings)}))}}module.exports=u; 16 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNyYy9zZXR0aW5ncy50cyIsInNyYy9tb2RhbHMudHMiLCJzcmMvdXRpbC50cyIsInNyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpudWxsLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInZhbHVlIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwiREVGQVVMVF9TRVRUSU5HUyIsImRlbGV0ZU9wdGlvbiIsImxvZ3NNb2RhbCIsImV4Y2x1ZGVkRm9sZGVycyIsInJpYmJvbkljb24iLCJleGNsdWRlU3ViZm9sZGVycyIsIk96YW5DbGVhckltYWdlc1NldHRpbmdzVGFiIiwiUGx1Z2luU2V0dGluZ1RhYiIsImNvbnN0cnVjdG9yIiwiYXBwIiwicGx1Z2luIiwic3VwZXIiLCJ0aGlzIiwiZGlzcGxheSIsImNvbnRhaW5lckVsIiwiZW1wdHkiLCJjcmVhdGVFbCIsInRleHQiLCJTZXR0aW5nIiwic2V0TmFtZSIsInNldERlc2MiLCJhZGRUb2dnbGUiLCJ0b2dnbGUiLCJzZXRWYWx1ZSIsInNldHRpbmdzIiwib25DaGFuZ2UiLCJzYXZlU2V0dGluZ3MiLCJyZWZyZXNoSWNvblJpYmJvbiIsImFkZERyb3Bkb3duIiwiZHJvcGRvd24iLCJhZGRPcHRpb24iLCJvcHRpb24iLCJhZGRUZXh0QXJlYSIsImNvZmZlZURpdiIsImNyZWF0ZURpdiIsImFkZENsYXNzIiwiaHJlZiIsImF0dHIiLCJzcmMiLCJoZWlnaHQiLCJMb2dzTW9kYWwiLCJNb2RhbCIsInRleHRUb1ZpZXciLCJvbk9wZW4iLCJjb250ZW50RWwiLCJteU1vZGFsIiwiaGVhZGVyV3JhcHBlciIsImxvZ3MiLCJpbm5lckhUTUwiLCJidXR0b25XcmFwcGVyIiwiY2xvc2VCdXR0b24iLCJhZGRFdmVudExpc3RlbmVyIiwiY2xvc2UiLCJpbWFnZVJlZ2V4IiwiYmFubmVyUmVnZXgiLCJpbWFnZUV4dGVuc2lvbnMiLCJTZXQiLCJnZXRBdHRhY2htZW50c0luVmF1bHQiLCJ0eXBlIiwiYWxsRmlsZXMiLCJ2YXVsdCIsImdldEZpbGVzIiwiYXR0YWNobWVudHMiLCJpIiwibGVuZ3RoIiwiZXh0ZW5zaW9uIiwiaGFzIiwidG9Mb3dlckNhc2UiLCJwdXNoIiwiZ2V0QXR0YWNobWVudFBhdGhTZXRGb3JWYXVsdCIsImF0dGFjaG1lbnRzU2V0IiwicmVzb2x2ZWRMaW5rcyIsIm1ldGFkYXRhQ2FjaGUiLCJtZEZpbGUiLCJsaW5rcyIsIk9iamVjdCIsImVudHJpZXMiLCJmaWxlUGF0aCIsIm5yIiwiaW1hZ2VNYXRjaCIsIm1hdGNoIiwiYWRkIiwiZW5kc1dpdGgiLCJnZXRNYXJrZG93bkZpbGVzIiwiZm9yRWFjaCIsImZpbGVDYWNoZSIsImdldEZpbGVDYWNoZSIsImZyb250bWF0dGVyIiwiayIsImtleXMiLCJmaWxlTmFtZSIsImZpbGUiLCJnZXRGaXJzdExpbmtwYXRoRGVzdCIsInBhdGgiLCJwYXRoSXNBbkltYWdlIiwiZmlsZUlzSW5FeGNsdWRlZEZvbGRlciIsImV4Y2x1ZGVkRm9sZGVyc1NldHRpbmdzIiwiZXhjbHVkZWRGb2xkZXJQYXRocyIsInNwbGl0IiwibWFwIiwiZm9sZGVyUGF0aCIsInRyaW0iLCJleGx1ZGVkRm9sZGVyUGF0aCIsInBhdGhSZWdleCIsIlJlZ0V4cCIsInBhcmVudCIsImdldEZvcm1hdHRlZERhdGUiLCJEYXRlIiwidG9Mb2NhbGVEYXRlU3RyaW5nIiwieWVhciIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIk96YW5DbGVhckltYWdlcyIsIlBsdWdpbiIsInVuZGVmaW5lZCIsInJpYmJvbkljb25FbCIsInJlbW92ZSIsImFkZFJpYmJvbkljb24iLCJldmVudCIsImNsZWFyVW51c2VkQXR0YWNobWVudHMiLCJmaWxlTGlzdCIsInVudXNlZEF0dGFjaG1lbnRzIiwidXNlZEF0dGFjaG1lbnRzU2V0IiwiYWxsQXR0YWNobWVudHNJblZhdWx0IiwiYXR0YWNobWVudCIsIlV0aWwuZ2V0VW51c2VkQXR0YWNobWVudHMiLCJVdGlsLmdldEZvcm1hdHRlZERhdGUiLCJkZWxldGVkSW1hZ2VzIiwiY29uc29sZSIsImxvZyIsInRyYXNoIiwiZGVsZXRlIiwidG9TdHJpbmciLCJvcGVuIiwiTm90aWNlIiwib25sb2FkIiwiYWRkU2V0dGluZ1RhYiIsImxvYWRTZXR0aW5ncyIsImFkZENvbW1hbmQiLCJpZCIsIm5hbWUiLCJjYWxsYmFjayIsIm9udW5sb2FkIiwiYXNzaWduIiwibG9hZERhdGEiLCJzYXZlRGF0YSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Z0ZBcUVPLFNBQVNBLEVBQVVDLEVBQVNDLEVBQVlDLEVBQUdDLEdBRTlDLE9BQU8sSUFBS0QsSUFBTUEsRUFBSUUsV0FBVSxTQUFVQyxFQUFTQyxHQUMvQyxTQUFTQyxFQUFVQyxHQUFTLElBQU1DLEVBQUtOLEVBQVVPLEtBQUtGLElBQVcsTUFBT0csR0FBS0wsRUFBT0ssSUFDcEYsU0FBU0MsRUFBU0osR0FBUyxJQUFNQyxFQUFLTixFQUFpQixNQUFFSyxJQUFXLE1BQU9HLEdBQUtMLEVBQU9LLElBQ3ZGLFNBQVNGLEVBQUtJLEdBSmxCLElBQWVMLEVBSWFLLEVBQU9DLEtBQU9ULEVBQVFRLEVBQU9MLFFBSjFDQSxFQUl5REssRUFBT0wsTUFKaERBLGFBQWlCTixFQUFJTSxFQUFRLElBQUlOLEdBQUUsU0FBVUcsR0FBV0EsRUFBUUcsT0FJVE8sS0FBS1IsRUFBV0ssR0FDbEdILEdBQU1OLEVBQVlBLEVBQVVhLE1BQU1oQixFQUFTQyxHQUFjLEtBQUtTLFdDaEUvRCxNQUFNTyxFQUE0QyxDQUNyREMsYUFBYyxTQUNkQyxXQUFXLEVBQ1hDLGdCQUFpQixHQUNqQkMsWUFBWSxFQUNaQyxtQkFBbUIsU0FHVkMsVUFBbUNDLG1CQUc1Q0MsWUFBWUMsRUFBVUMsR0FDbEJDLE1BQU1GLEVBQUtDLEdBQ1hFLEtBQUtGLE9BQVNBLEVBR2xCRyxVQUNJLElBQUlDLFlBQUVBLEdBQWdCRixLQUN0QkUsRUFBWUMsUUFDWkQsRUFBWUUsU0FBUyxLQUFNLENBQUVDLEtBQU0sMEJBRW5DLElBQUlDLFVBQVFKLEdBQ1BLLFFBQVEsZUFDUkMsUUFBUSw0REFDUkMsV0FBV0MsR0FDUkEsRUFBT0MsU0FBU1gsS0FBS0YsT0FBT2MsU0FBU3BCLFlBQVlxQixVQUFVbEMsSUFDdkRxQixLQUFLRixPQUFPYyxTQUFTcEIsV0FBYWIsRUFDbENxQixLQUFLRixPQUFPZ0IsZUFDWmQsS0FBS0YsT0FBT2lCLHlCQUl4QixJQUFJVCxVQUFRSixHQUNQSyxRQUFRLGVBQ1JDLFFBQ0csd0lBRUhDLFdBQVdDLEdBQ1JBLEVBQU9DLFNBQVNYLEtBQUtGLE9BQU9jLFNBQVN0QixXQUFXdUIsVUFBVWxDLElBQ3REcUIsS0FBS0YsT0FBT2MsU0FBU3RCLFVBQVlYLEVBQ2pDcUIsS0FBS0YsT0FBT2dCLG9CQUl4QixJQUFJUixVQUFRSixHQUNQSyxRQUFRLDZCQUNSQyxRQUFRLGtFQUNSUSxhQUFhQyxJQUNWQSxFQUFTQyxVQUFVLFlBQWEsc0JBQ2hDRCxFQUFTQyxVQUFVLFNBQVUsMEJBQzdCRCxFQUFTQyxVQUFVLGVBQWdCLHdCQUNuQ0QsRUFBU04sU0FBU1gsS0FBS0YsT0FBT2MsU0FBU3ZCLGNBQ3ZDNEIsRUFBU0osVUFBVU0sSUFDZm5CLEtBQUtGLE9BQU9jLFNBQVN2QixhQUFlOEIsRUFDcENuQixLQUFLRixPQUFPZ0IscUJBSXhCLElBQUlSLFVBQVFKLEdBQ1BLLFFBQVEsOEJBQ1JDLFFBQ0csK05BR0hZLGFBQWFmLEdBQ1ZBLEVBQUtNLFNBQVNYLEtBQUtGLE9BQU9jLFNBQVNyQixpQkFBaUJzQixVQUFVbEMsSUFDMURxQixLQUFLRixPQUFPYyxTQUFTckIsZ0JBQWtCWixFQUN2Q3FCLEtBQUtGLE9BQU9nQixvQkFJeEIsSUFBSVIsVUFBUUosR0FDUEssUUFBUSxzQkFDUkMsUUFBUSxzR0FDUkMsV0FBV0MsR0FDUkEsRUFBT0MsU0FBU1gsS0FBS0YsT0FBT2MsU0FBU25CLG1CQUFtQm9CLFVBQVVsQyxJQUM5RHFCLEtBQUtGLE9BQU9jLFNBQVNuQixrQkFBb0JkLEVBQ3pDcUIsS0FBS0YsT0FBT2dCLG9CQUl4QixNQUFNTyxFQUFZbkIsRUFBWW9CLFVBQVUsVUFDeENELEVBQVVFLFNBQVMsaUJBQ0FGLEVBQVVqQixTQUFTLElBQUssQ0FBRW9CLEtBQU0sZ0NBQ3RCcEIsU0FBUyxNQUFPLENBQ3pDcUIsS0FBTSxDQUNGQyxJQUFLLDZDQUdIQyxPQUFTLFVDbEdkQyxVQUFrQkMsUUFHM0JqQyxZQUFZa0MsRUFBb0JqQyxHQUM1QkUsTUFBTUYsR0FDTkcsS0FBSzhCLFdBQWFBLEVBR3RCQyxTQUNJLElBQUlDLFVBQUVBLEdBQWNoQyxLQUNoQmlDLEVBQVVqQyxLQUdkLE1BQU1rQyxFQUFnQkYsRUFBVTVCLFNBQVMsT0FDekM4QixFQUFjWCxTQUFTLGdDQUNOVyxFQUFjOUIsU0FBUyxLQUFNLENBQUVDLEtBQU0sK0JBQzdDa0IsU0FBUyxlQUdsQixNQUFNWSxFQUFPSCxFQUFVNUIsU0FBUyxPQUNoQytCLEVBQUtaLFNBQVMsc0JBQ2RZLEVBQUtDLFVBQVlwQyxLQUFLOEIsV0FHdEIsTUFBTU8sRUFBZ0JMLEVBQVU1QixTQUFTLE9BQ3pDaUMsRUFBY2QsU0FBUyxnQ0FDdkIsTUFBTWUsRUFBY0QsRUFBY2pDLFNBQVMsU0FBVSxDQUFFQyxLQUFNLFVBQzdEaUMsRUFBWWYsU0FBUyx3QkFDckJlLEVBQVlDLGlCQUFpQixTQUFTLEtBQ2xDTixFQUFRTyxZQzFCcEIsTUFBTUMsRUFBYSw2QkFDYkMsRUFBYyxrQkFDZEMsRUFBK0IsSUFBSUMsSUFBSSxDQUFDLE9BQVEsTUFBTyxNQUFPLE1BQU8sTUFBTyxRQW9CNUVDLEVBQXdCLENBQUNoRCxFQUFVaUQsS0FDckMsSUFBSUMsRUFBb0JsRCxFQUFJbUQsTUFBTUMsV0FDOUJDLEVBQXVCLEdBQzNCLElBQUssSUFBSUMsRUFBSSxFQUFHQSxFQUFJSixFQUFTSyxPQUFRRCxJQUNILE9BQTFCSixFQUFTSSxHQUFHRSxZQUVSVixFQUFnQlcsSUFBSVAsRUFBU0ksR0FBR0UsVUFBVUUsZ0JBSTVCLFFBQVRULElBSExJLEVBQVlNLEtBQUtULEVBQVNJLElBUXRDLE9BQU9ELEdBSUxPLEVBQStCLENBQUM1RCxFQUFVaUQsS0FDNUMsSUFBSVksRUFBOEIsSUFBSWQsSUFDbENlLEVBQWdCOUQsRUFBSStELGNBQWNELGNBQ3RDLEdBQUlBLEVBQ0EsSUFBSyxNQUFPRSxFQUFRQyxLQUFVQyxPQUFPQyxRQUFRTCxHQUN6QyxJQUFLLE1BQU9NLEVBQVVDLEtBQU9ILE9BQU9DLFFBQVFMLEVBQWNFLElBQVUsQ0FDaEUsSUFBSU0sRUFBYUYsRUFBU0csTUFBTTNCLEdBQzVCMEIsR0FBWVQsRUFBZVcsSUFBSUYsRUFBVyxJQUVqQyxRQUFUckIsR0FBb0JtQixFQUFvQkssU0FBUyxRQUNqRFosRUFBZVcsSUFBSUosR0EwQm5DLE9BcEJjcEUsRUFBSW1ELE1BQU11QixtQkFDaEJDLFNBQVNYLElBQ2IsSUFBSVksRUFBWTVFLEVBQUkrRCxjQUFjYyxhQUFhYixHQUMvQyxHQUFJWSxFQUFVRSxZQUFhLENBQ3ZCLElBQUlBLEVBQWNGLEVBQVVFLFlBQzVCLElBQUssSUFBSUMsS0FBS2IsT0FBT2MsS0FBS0YsR0FDdEIsR0FBOEIsaUJBQW5CQSxFQUFZQyxHQUNuQixHQUFJRCxFQUFZQyxHQUFHUixNQUFNMUIsR0FBYyxDQUNuQyxJQUFJb0MsRUFBV0gsRUFBWUMsR0FBR1IsTUFBTTFCLEdBQWEsR0FDN0NxQyxFQUFPbEYsRUFBSStELGNBQWNvQixxQkFBcUJGLEVBQVVqQixFQUFPb0IsTUFDL0RGLEdBQ0FyQixFQUFlVyxJQUFJVSxFQUFLRSxXQUVyQkMsRUFBY1AsRUFBWUMsS0FDakNsQixFQUFlVyxJQUFJTSxFQUFZQyxRQU01Q2xCLEdBR0x3QixFQUFpQkQsR0FDWkEsRUFBS2IsTUFBTTNCLEdBbUNoQjBDLEVBQXlCLENBQUNKLEVBQWFqRixLQUN6QyxJQUFJc0YsRUFBMEJ0RixFQUFPYyxTQUFTckIsZ0JBQzFDRSxFQUFvQkssRUFBT2MsU0FBU25CLGtCQUN4QyxHQUFnQyxLQUE1QjJGLEVBQ0EsT0FBTyxFQUdQLElBQUlDLEVBQXNCLElBQUl6QyxJQUMxQndDLEVBQXdCRSxNQUFNLEtBQUtDLEtBQUtDLEdBQzdCQSxFQUFXQyxVQUkxQixHQUFJaEcsRUFFQSxJQUFLLElBQUlpRyxLQUFxQkwsRUFBcUIsQ0FDL0MsSUFBSU0sRUFBWSxJQUFJQyxPQUFPRixFQUFvQixNQUMvQyxHQUFJWCxFQUFLYyxPQUFPWixLQUFLYixNQUFNdUIsR0FDdkIsT0FBTyxPQUtmLEdBQUlOLEVBQW9CL0IsSUFBSXlCLEVBQUtjLE9BQU9aLE1BQ3BDLE9BQU8sRUFJZixPQUFPLEdBTUZhLEVBQW1CLEtBQ25CLElBQUlDLE1BQ0hDLG1CQUFtQixRQUFTLENBQ2xDQyxLQUFNLFVBQ05DLE1BQU8sVUFDUEMsSUFBSyxVQUNMQyxLQUFNLFVBQ05DLE9BQVEsVUFDUkMsT0FBUSxrQkM3SktDLFVBQXdCQyxTQUE3QzVHLGtDQUVJSSx1QkFBd0N5RyxFQStCeEN6Ryx1QkFBb0IscUJBQ2hCQSxLQUFLMEcsNkJBQWNDLFNBQ2YzRyxLQUFLWSxTQUFTcEIsYUFDZFEsS0FBSzBHLGFBQWUxRyxLQUFLNEcsY0FBYyxhQUFjLHVCQUF3QkMsSUFDekU3RyxLQUFLOEcsdUJBQXVCLGNBTXhDOUcsNEJBQWdDOEMscUNBQzVCLElEMkNKaUUsRUFDQWpILEVBQ0FELEVDN0NRbUgsRUR4Q3dCLEVBQUNuSCxFQUFVaUQsS0FDM0MsSUFFSW1FLEVBRkFDLEVBQWlDckUsRUFBc0JoRCxFQUFLaUQsR0FDNURrRSxFQUE2QixHQVdqQyxPQVBBQyxFQUFxQnhELEVBQTZCNUQsRUFBS2lELEdBR3ZEb0UsRUFBc0IxQyxTQUFTMkMsSUFDdEJGLEVBQW1CM0QsSUFBSTZELEVBQVdsQyxPQUFPK0IsRUFBa0J4RCxLQUFLMkQsTUFHbEVILEdDMkI4QkksQ0FBMEJwSCxLQUFLSCxJQUFLaUQsR0FFckUsR0FEVWtFLEVBQWtCNUQsT0FDbEIsRUFBRyxDQUNULElBQUlqQixFQUFPLEdBQ1hBLEdBQVEsT0FBT2tGLCtCRHVDdkJOLEVDdENrQ0MsRUR1Q2xDbEgsRUN2Q3FERSxLRHdDckRILEVDeEMyREcsS0FBS0gsd0NEMENoRSxJQUFJUixFQUFlUyxFQUFPYyxTQUFTdkIsYUFDL0JpSSxFQUFnQixFQUNwQixJQUFJeEYsRUFBYSxHQUNqQixJQUFLLElBQUlpRCxLQUFRZ0MsRUFDVDVCLEVBQXVCSixFQUFNakYsR0FDN0J5SCxRQUFRQyxJQUFJLHFDQUF1Q3pDLEVBQUtFLE9BRW5DLFdBQWpCNUYsU0FDTVEsRUFBSW1ELE1BQU15RSxNQUFNMUMsR0FBTSxHQUM1QmpELEdBQWMsZ0NBQWtDaUQsRUFBS0UsS0FBTyxTQUNwQyxpQkFBakI1RixTQUNEUSxFQUFJbUQsTUFBTXlFLE1BQU0xQyxHQUFNLEdBQzVCakQsR0FBYyw4QkFBZ0NpRCxFQUFLRSxLQUFPLFNBQ2xDLGNBQWpCNUYsVUFDRFEsRUFBSW1ELE1BQU0wRSxPQUFPM0MsR0FDdkJqRCxHQUFjLDRCQUE4QmlELEVBQUtFLEtBQU8sU0FFNURxQyxLQUdSLE1BQU8sQ0FBRUEsY0FBQUEsRUFBZXhGLFdBQUFBLE9DOUQ2QzVDLE1BQUssRUFBR29JLGNBQUFBLEVBQWV4RixXQUFBQSxNQUloRixHQUhBSyxHQUFRTCxFQUNSSyxHQUFRLE9BQVNtRixFQUFjSyxXQUFhLG1DQUM1Q3hGLEdBQVEsT0FBT2tGLDJCQUNYckgsS0FBS1ksU0FBU3RCLFVBQVcsQ0FDYixJQUFJc0MsRUFBVU8sRUFBTW5DLEtBQUtILEtBQy9CK0gsZ0JBSWQsSUFBSUMsU0FBTyxPQUFnQixVQUFUL0UsRUFBbUIsU0FBVyxtREF2RGxEZ0Ysa0RBQ0ZQLFFBQVFDLElBQUksd0NBQ1p4SCxLQUFLK0gsY0FBYyxJQUFJckksRUFBMkJNLEtBQUtILElBQUtHLGFBQ3REQSxLQUFLZ0ksZUFDWGhJLEtBQUtpSSxXQUFXLENBQ1pDLEdBQUksd0JBQ0pDLEtBQU0sc0JBQ05DLFNBQVUsSUFBTXBJLEtBQUs4Ryx1QkFBdUIsV0FFaEQ5RyxLQUFLaUksV0FBVyxDQUNaQyxHQUFJLDJCQUNKQyxLQUFNLDJCQUNOQyxTQUFVLElBQU1wSSxLQUFLOEcsdUJBQXVCLFNBRWhEOUcsS0FBS2UsdUJBR1RzSCxXQUNJZCxRQUFRQyxJQUFJLDBDQUdWUSx3REFDRmhJLEtBQUtZLFNBQVdtRCxPQUFPdUUsT0FBTyxHQUFJbEosUUFBd0JZLEtBQUt1SSxlQUc3RHpILDhEQUNJZCxLQUFLd0ksU0FBU3hJLEtBQUtZIn0= 17 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-day-planner/styles.css: -------------------------------------------------------------------------------- 1 | /** Status Bar **/ 2 | 3 | .day-planner { 4 | position: relative; 5 | } 6 | 7 | .day-planner .status-bar-item-segment:hover { 8 | cursor: pointer; 9 | } 10 | 11 | .day-planner-progress-bar { 12 | margin-top: 2px; 13 | background-color: var(--text-muted); 14 | border-radius: 4px; 15 | min-width: 80px; 16 | height: 16px; 17 | float: left; 18 | display: none; 19 | } 20 | 21 | .day-planner-progress-value { 22 | background-color: var(--interactive-accent); 23 | transition: 0.3s all linear; 24 | border-radius: 4px; 25 | height: 16px; 26 | display: inline-block; 27 | } 28 | 29 | .day-planner-progress-value.green, .day-planner .progress-pie.green::before { 30 | background-color: #4CAF50; 31 | } 32 | 33 | .day-planner .progress-pie.green { 34 | background-image: linear-gradient(to right,transparent 50%, #4CAF50 0) 35 | } 36 | 37 | .day-planner-status-bar-text { 38 | float: left; 39 | margin-right: 10px; 40 | } 41 | 42 | .day-planner-status-card { 43 | position: absolute; 44 | top: -140px; 45 | width: 300px; 46 | background-color: var(--background-secondary-alt); 47 | padding: 8px; 48 | border-radius: 4px; 49 | display: none; 50 | } 51 | 52 | .day-planner-status-card .arrow-down { 53 | border-left: 20px solid transparent; 54 | border-right: 20px solid transparent; 55 | border-top: 20px solid var(--background-secondary-alt); 56 | width: 20px; 57 | position: absolute; 58 | } 59 | 60 | .progress-pie.day-planner { 61 | background-color: var(--text-muted); 62 | float: left; 63 | height: 20px; 64 | margin: 0.3px 10px 0.3px 0; 65 | width: 20px; 66 | display: none; 67 | } 68 | 69 | .progress-pie.day-planner:after { 70 | width: 80%; 71 | height: 80%; 72 | } 73 | 74 | .progress-pie.day-planner:after { 75 | color: transparent; 76 | background-color: transparent; 77 | font-size: 8px; 78 | font-weight: 900; 79 | line-height: 13px; 80 | } 81 | 82 | [data-type="timeline"] .view-content { 83 | padding-bottom: 0; 84 | } 85 | 86 | 87 | /* CSS Progress Pie by Olivia Ng | MIT License | github.com/oliviale/css-progress-pie*/ 88 | .progress-pie{width:60px;height:60px;border-radius:50%;background:#eee;background-image:-webkit-linear-gradient(left,transparent 50%,var(--interactive-accent) 0);background-image:linear-gradient(to right,transparent 50%,var(--interactive-accent) 0);position:relative;display:inline-block;margin:10px}.progress-pie::before{content:'';display:block;margin-left:50%;height:100%;border-radius:0 100% 100% 0/50%;background-color:inherit;-webkit-transform-origin:left;-ms-transform-origin:left;transform-origin:left}.progress-pie::after{content:attr(data-value);position:absolute;width:70%;height:70%;margin:auto;border-radius:50%;background-color:#fff;left:0;right:0;top:0;bottom:0;text-align:center;font:900 20px/41px Tahoma}.progress-pie[data-value="0"]:before{-webkit-transform:rotate(0turn);-ms-transform:rotate(0turn);transform:rotate(0turn)}.progress-pie[data-value="1"]:before{-webkit-transform:rotate(.01turn);-ms-transform:rotate(.01turn);transform:rotate(.01turn)}.progress-pie[data-value="2"]:before{-webkit-transform:rotate(.02turn);-ms-transform:rotate(.02turn);transform:rotate(.02turn)}.progress-pie[data-value="3"]:before{-webkit-transform:rotate(.03turn);-ms-transform:rotate(.03turn);transform:rotate(.03turn)}.progress-pie[data-value="4"]:before{-webkit-transform:rotate(.04turn);-ms-transform:rotate(.04turn);transform:rotate(.04turn)}.progress-pie[data-value="5"]:before{-webkit-transform:rotate(.05turn);-ms-transform:rotate(.05turn);transform:rotate(.05turn)}.progress-pie[data-value="6"]:before{-webkit-transform:rotate(.06turn);-ms-transform:rotate(.06turn);transform:rotate(.06turn)}.progress-pie[data-value="7"]:before{-webkit-transform:rotate(.07turn);-ms-transform:rotate(.07turn);transform:rotate(.07turn)}.progress-pie[data-value="8"]:before{-webkit-transform:rotate(.08turn);-ms-transform:rotate(.08turn);transform:rotate(.08turn)}.progress-pie[data-value="9"]:before{-webkit-transform:rotate(.09turn);-ms-transform:rotate(.09turn);transform:rotate(.09turn)}.progress-pie[data-value="10"]:before{-webkit-transform:rotate(.1turn);-ms-transform:rotate(.1turn);transform:rotate(.1turn)}.progress-pie[data-value="11"]:before{-webkit-transform:rotate(.11turn);-ms-transform:rotate(.11turn);transform:rotate(.11turn)}.progress-pie[data-value="12"]:before{-webkit-transform:rotate(.12turn);-ms-transform:rotate(.12turn);transform:rotate(.12turn)}.progress-pie[data-value="13"]:before{-webkit-transform:rotate(.13turn);-ms-transform:rotate(.13turn);transform:rotate(.13turn)}.progress-pie[data-value="14"]:before{-webkit-transform:rotate(.14turn);-ms-transform:rotate(.14turn);transform:rotate(.14turn)}.progress-pie[data-value="15"]:before{-webkit-transform:rotate(.15turn);-ms-transform:rotate(.15turn);transform:rotate(.15turn)}.progress-pie[data-value="16"]:before{-webkit-transform:rotate(.16turn);-ms-transform:rotate(.16turn);transform:rotate(.16turn)}.progress-pie[data-value="17"]:before{-webkit-transform:rotate(.17turn);-ms-transform:rotate(.17turn);transform:rotate(.17turn)}.progress-pie[data-value="18"]:before{-webkit-transform:rotate(.18turn);-ms-transform:rotate(.18turn);transform:rotate(.18turn)}.progress-pie[data-value="19"]:before{-webkit-transform:rotate(.19turn);-ms-transform:rotate(.19turn);transform:rotate(.19turn)}.progress-pie[data-value="20"]:before{-webkit-transform:rotate(.2turn);-ms-transform:rotate(.2turn);transform:rotate(.2turn)}.progress-pie[data-value="21"]:before{-webkit-transform:rotate(.21turn);-ms-transform:rotate(.21turn);transform:rotate(.21turn)}.progress-pie[data-value="22"]:before{-webkit-transform:rotate(.22turn);-ms-transform:rotate(.22turn);transform:rotate(.22turn)}.progress-pie[data-value="23"]:before{-webkit-transform:rotate(.23turn);-ms-transform:rotate(.23turn);transform:rotate(.23turn)}.progress-pie[data-value="24"]:before{-webkit-transform:rotate(.24turn);-ms-transform:rotate(.24turn);transform:rotate(.24turn)}.progress-pie[data-value="25"]:before{-webkit-transform:rotate(.25turn);-ms-transform:rotate(.25turn);transform:rotate(.25turn)}.progress-pie[data-value="26"]:before{-webkit-transform:rotate(.26turn);-ms-transform:rotate(.26turn);transform:rotate(.26turn)}.progress-pie[data-value="27"]:before{-webkit-transform:rotate(.27turn);-ms-transform:rotate(.27turn);transform:rotate(.27turn)}.progress-pie[data-value="28"]:before{-webkit-transform:rotate(.28turn);-ms-transform:rotate(.28turn);transform:rotate(.28turn)}.progress-pie[data-value="29"]:before{-webkit-transform:rotate(.29turn);-ms-transform:rotate(.29turn);transform:rotate(.29turn)}.progress-pie[data-value="30"]:before{-webkit-transform:rotate(.3turn);-ms-transform:rotate(.3turn);transform:rotate(.3turn)}.progress-pie[data-value="31"]:before{-webkit-transform:rotate(.31turn);-ms-transform:rotate(.31turn);transform:rotate(.31turn)}.progress-pie[data-value="32"]:before{-webkit-transform:rotate(.32turn);-ms-transform:rotate(.32turn);transform:rotate(.32turn)}.progress-pie[data-value="33"]:before{-webkit-transform:rotate(.33turn);-ms-transform:rotate(.33turn);transform:rotate(.33turn)}.progress-pie[data-value="34"]:before{-webkit-transform:rotate(.34turn);-ms-transform:rotate(.34turn);transform:rotate(.34turn)}.progress-pie[data-value="35"]:before{-webkit-transform:rotate(.35turn);-ms-transform:rotate(.35turn);transform:rotate(.35turn)}.progress-pie[data-value="36"]:before{-webkit-transform:rotate(.36turn);-ms-transform:rotate(.36turn);transform:rotate(.36turn)}.progress-pie[data-value="37"]:before{-webkit-transform:rotate(.37turn);-ms-transform:rotate(.37turn);transform:rotate(.37turn)}.progress-pie[data-value="38"]:before{-webkit-transform:rotate(.38turn);-ms-transform:rotate(.38turn);transform:rotate(.38turn)}.progress-pie[data-value="39"]:before{-webkit-transform:rotate(.39turn);-ms-transform:rotate(.39turn);transform:rotate(.39turn)}.progress-pie[data-value="40"]:before{-webkit-transform:rotate(.4turn);-ms-transform:rotate(.4turn);transform:rotate(.4turn)}.progress-pie[data-value="41"]:before{-webkit-transform:rotate(.41turn);-ms-transform:rotate(.41turn);transform:rotate(.41turn)}.progress-pie[data-value="42"]:before{-webkit-transform:rotate(.42turn);-ms-transform:rotate(.42turn);transform:rotate(.42turn)}.progress-pie[data-value="43"]:before{-webkit-transform:rotate(.43turn);-ms-transform:rotate(.43turn);transform:rotate(.43turn)}.progress-pie[data-value="44"]:before{-webkit-transform:rotate(.44turn);-ms-transform:rotate(.44turn);transform:rotate(.44turn)}.progress-pie[data-value="45"]:before{-webkit-transform:rotate(.45turn);-ms-transform:rotate(.45turn);transform:rotate(.45turn)}.progress-pie[data-value="46"]:before{-webkit-transform:rotate(.46turn);-ms-transform:rotate(.46turn);transform:rotate(.46turn)}.progress-pie[data-value="47"]:before{-webkit-transform:rotate(.47turn);-ms-transform:rotate(.47turn);transform:rotate(.47turn)}.progress-pie[data-value="48"]:before{-webkit-transform:rotate(.48turn);-ms-transform:rotate(.48turn);transform:rotate(.48turn)}.progress-pie[data-value="49"]:before{-webkit-transform:rotate(.49turn);-ms-transform:rotate(.49turn);transform:rotate(.49turn)}.progress-pie[data-value="50"]:before{-webkit-transform:rotate(.5turn);-ms-transform:rotate(.5turn);transform:rotate(.5turn)}.progress-pie[data-value="51"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.01turn);-ms-transform:rotate(.01turn);transform:rotate(.01turn)}.progress-pie[data-value="52"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.02turn);-ms-transform:rotate(.02turn);transform:rotate(.02turn)}.progress-pie[data-value="53"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.03turn);-ms-transform:rotate(.03turn);transform:rotate(.03turn)}.progress-pie[data-value="54"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.04turn);-ms-transform:rotate(.04turn);transform:rotate(.04turn)}.progress-pie[data-value="55"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.05turn);-ms-transform:rotate(.05turn);transform:rotate(.05turn)}.progress-pie[data-value="56"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.06turn);-ms-transform:rotate(.06turn);transform:rotate(.06turn)}.progress-pie[data-value="57"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.07turn);-ms-transform:rotate(.07turn);transform:rotate(.07turn)}.progress-pie[data-value="58"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.08turn);-ms-transform:rotate(.08turn);transform:rotate(.08turn)}.progress-pie[data-value="59"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.09turn);-ms-transform:rotate(.09turn);transform:rotate(.09turn)}.progress-pie[data-value="60"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.1turn);-ms-transform:rotate(.1turn);transform:rotate(.1turn)}.progress-pie[data-value="61"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.11turn);-ms-transform:rotate(.11turn);transform:rotate(.11turn)}.progress-pie[data-value="62"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.12turn);-ms-transform:rotate(.12turn);transform:rotate(.12turn)}.progress-pie[data-value="63"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.13turn);-ms-transform:rotate(.13turn);transform:rotate(.13turn)}.progress-pie[data-value="64"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.14turn);-ms-transform:rotate(.14turn);transform:rotate(.14turn)}.progress-pie[data-value="65"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.15turn);-ms-transform:rotate(.15turn);transform:rotate(.15turn)}.progress-pie[data-value="66"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.16turn);-ms-transform:rotate(.16turn);transform:rotate(.16turn)}.progress-pie[data-value="67"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.17turn);-ms-transform:rotate(.17turn);transform:rotate(.17turn)}.progress-pie[data-value="68"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.18turn);-ms-transform:rotate(.18turn);transform:rotate(.18turn)}.progress-pie[data-value="69"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.19turn);-ms-transform:rotate(.19turn);transform:rotate(.19turn)}.progress-pie[data-value="70"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.2turn);-ms-transform:rotate(.2turn);transform:rotate(.2turn)}.progress-pie[data-value="71"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.21turn);-ms-transform:rotate(.21turn);transform:rotate(.21turn)}.progress-pie[data-value="72"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.22turn);-ms-transform:rotate(.22turn);transform:rotate(.22turn)}.progress-pie[data-value="73"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.23turn);-ms-transform:rotate(.23turn);transform:rotate(.23turn)}.progress-pie[data-value="74"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.24turn);-ms-transform:rotate(.24turn);transform:rotate(.24turn)}.progress-pie[data-value="75"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.25turn);-ms-transform:rotate(.25turn);transform:rotate(.25turn)}.progress-pie[data-value="76"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.26turn);-ms-transform:rotate(.26turn);transform:rotate(.26turn)}.progress-pie[data-value="77"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.27turn);-ms-transform:rotate(.27turn);transform:rotate(.27turn)}.progress-pie[data-value="78"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.28turn);-ms-transform:rotate(.28turn);transform:rotate(.28turn)}.progress-pie[data-value="79"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.29turn);-ms-transform:rotate(.29turn);transform:rotate(.29turn)}.progress-pie[data-value="80"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.3turn);-ms-transform:rotate(.3turn);transform:rotate(.3turn)}.progress-pie[data-value="81"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.31turn);-ms-transform:rotate(.31turn);transform:rotate(.31turn)}.progress-pie[data-value="82"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.32turn);-ms-transform:rotate(.32turn);transform:rotate(.32turn)}.progress-pie[data-value="83"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.33turn);-ms-transform:rotate(.33turn);transform:rotate(.33turn)}.progress-pie[data-value="84"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.34turn);-ms-transform:rotate(.34turn);transform:rotate(.34turn)}.progress-pie[data-value="85"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.35turn);-ms-transform:rotate(.35turn);transform:rotate(.35turn)}.progress-pie[data-value="86"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.36turn);-ms-transform:rotate(.36turn);transform:rotate(.36turn)}.progress-pie[data-value="87"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.37turn);-ms-transform:rotate(.37turn);transform:rotate(.37turn)}.progress-pie[data-value="88"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.38turn);-ms-transform:rotate(.38turn);transform:rotate(.38turn)}.progress-pie[data-value="89"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.39turn);-ms-transform:rotate(.39turn);transform:rotate(.39turn)}.progress-pie[data-value="90"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.4turn);-ms-transform:rotate(.4turn);transform:rotate(.4turn)}.progress-pie[data-value="91"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.41turn);-ms-transform:rotate(.41turn);transform:rotate(.41turn)}.progress-pie[data-value="92"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.42turn);-ms-transform:rotate(.42turn);transform:rotate(.42turn)}.progress-pie[data-value="93"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.43turn);-ms-transform:rotate(.43turn);transform:rotate(.43turn)}.progress-pie[data-value="94"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.44turn);-ms-transform:rotate(.44turn);transform:rotate(.44turn)}.progress-pie[data-value="95"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.45turn);-ms-transform:rotate(.45turn);transform:rotate(.45turn)}.progress-pie[data-value="96"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.46turn);-ms-transform:rotate(.46turn);transform:rotate(.46turn)}.progress-pie[data-value="97"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.47turn);-ms-transform:rotate(.47turn);transform:rotate(.47turn)}.progress-pie[data-value="98"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.48turn);-ms-transform:rotate(.48turn);transform:rotate(.48turn)}.progress-pie[data-value="99"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.49turn);-ms-transform:rotate(.49turn);transform:rotate(.49turn)}.progress-pie[data-value="100"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.5turn);-ms-transform:rotate(.5turn);transform:rotate(.5turn)} -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-link-converter/main.js: -------------------------------------------------------------------------------- 1 | "use strict";var t=require("obsidian"); 2 | /*! ***************************************************************************** 3 | Copyright (c) Microsoft Corporation. 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 9 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 10 | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 11 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 12 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 13 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 14 | PERFORMANCE OF THIS SOFTWARE. 15 | ***************************************************************************** */function e(t,e,i,n){return new(i||(i=Promise))((function(o,a){function l(t){try{r(n.next(t))}catch(t){a(t)}}function s(t){try{r(n.throw(t))}catch(t){a(t)}}function r(t){var e;t.done?o(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(l,s)}r((n=n.apply(t,e||[])).next())}))}const i={mySetting:"default",contextMenu:!0,finalLinkFormat:"not-change",keepMtime:!1};class n extends t.PluginSettingTab{constructor(t,e){super(t,e),this.plugin=e}display(){let{containerEl:e}=this;e.empty(),e.createEl("h2",{text:"Obsidian Link Converter"}),new t.Setting(e).setName("File Context Menu").setDesc("Turn this option off if you don't want single file commands to appear within the file context menu").addToggle((t=>{t.setValue(this.plugin.settings.contextMenu).onChange((t=>{this.plugin.settings.contextMenu=t,this.plugin.saveSettings(),t?this.plugin.app.workspace.on("file-menu",this.plugin.addFileMenuItems):this.plugin.app.workspace.off("file-menu",this.plugin.addFileMenuItems)}))})),new t.Setting(e).setName("Converted Link Format").setDesc("Select the preferred option for the final link format after the conversion. Plugin will use the preferrence where possible").addDropdown((t=>{t.addOption("not-change","Do not change").addOption("relative-path","Relative Path").addOption("absolute-path","Absolute Path").addOption("shortest-path","Shortest Path").setValue(this.plugin.settings.finalLinkFormat).onChange((t=>{this.plugin.settings.finalLinkFormat=t,this.plugin.saveSettings()}))})),new t.Setting(e).setName("Keep mTime (Last Modified Time)").setDesc("Turn on this option if you want plugin to keep the mtime of files same during the link conversion").addToggle((t=>t.setValue(this.plugin.settings.keepMtime).onChange((t=>{this.plugin.settings.keepMtime=t,this.plugin.saveSettings()}))));const i=e.createDiv("coffee");i.addClass("oz-coffee-div");i.createEl("a",{href:"https://ko-fi.com/L3L356V6Q"}).createEl("img",{attr:{src:"https://cdn.ko-fi.com/cdn/kofi2.png?v=3"}}).height=45}}const o=(t,i)=>e(void 0,void 0,void 0,(function*(){const e=[];let n=yield i.app.vault.read(t),o=n.match(/\[\[.*?\]\]/g);if(o){let i=/(?<=\[\[).*?(?=(\]|\|))/,n=/(?<=\|).*(?=]])/;for(let a of o){if(w(a)){let i=y(a),n=A(a);if(""!==i&&""!==n){let o={type:"wikiTransclusion",match:a,linkText:i,altOrBlockRef:n,sourceFilePath:t.path};e.push(o);continue}}let o=a.match(i);if(o){if(o[0].startsWith("http"))continue;let i=a.match(n),l={type:"wiki",match:a,linkText:o[0],altOrBlockRef:i?i[0]:"",sourceFilePath:t.path};e.push(l)}}}let a=n.match(/\[(^$|.*?)\]\((.*?)\)/g);if(a){let i=/(?<=\().*(?=\))/,n=/(?<=\[)(^$|.*?)(?=\])/;for(let o of a){if(M(o)){let i=y(o),n=A(o);if(""!==i&&""!==n){let a={type:"mdTransclusion",match:o,linkText:i,altOrBlockRef:n,sourceFilePath:t.path};e.push(a);continue}}let a=o.match(i);if(a){if(a[0].startsWith("http"))continue;let i=o.match(n),l={type:"markdown",match:o,linkText:a[0],altOrBlockRef:i?i[0]:"",sourceFilePath:t.path};e.push(l)}}}return e})),a=(i,n,o)=>e(void 0,void 0,void 0,(function*(){let e=yield n.app.vault.read(i),a="markdown"===o?yield c(e,i,n):yield h(e,i,n),l=n.settings.keepMtime?yield n.app.vault.adapter.stat(t.normalizePath(i.path)):{};yield n.app.vault.modify(i,a,l)})),l=(i,n)=>e(void 0,void 0,void 0,(function*(){let e=i.app.workspace.getActiveFile();"md"===e.extension?yield a(e,i,n):new t.Notice("Active File is not a Markdown File")})),s=(i,n,o)=>e(void 0,void 0,void 0,(function*(){let e=((e,i)=>{var n=[];return function e(i,o){var a=o.vault.getAbstractFileByPath(i);if(a instanceof t.TFolder&&a.children)for(let i of a.children)i instanceof t.TFile&&"md"===i.extension&&n.push(i),i instanceof t.TFolder&&e(i.path,o)}(e,i.app),n})(i.path,n),l=new t.Notice("Starting link conversion",0);try{let t=e.length,i=0;for(let s of e)i++,l.setMessage(`Converting the links in notes ${i}/${t}.`),d(n.app,s.path,"excalidraw-plugin")||d(n.app,s.path,"kanban-plugin")||(yield a(s,n,o))}catch(t){console.log(t)}finally{l.hide()}})),r=(i,n)=>e(void 0,void 0,void 0,(function*(){let e=n.app.workspace.getActiveViewOfType(t.MarkdownView);if(e){let o=e.editor,a=o.getSelection(),l=e.file;if(""!==a){let t;"markdown"===i?t=yield c(a,l,n):"wiki"===i&&(t=yield h(a,l,n)),o.replaceSelection(t)}else new t.Notice("You didn't select any text.")}else new t.Notice("There is no active leaf open.",3e3)})),C=(t,i)=>e(void 0,void 0,void 0,(function*(){s(t.app.vault.getRoot(),t,i)})),d=(t,e,i)=>{let n=t.metadataCache.getCache(e);return n.frontmatter&&n.frontmatter[i]},c=(t,i,n)=>e(void 0,void 0,void 0,(function*(){let e=t,a=yield o(i,n),l=a.filter((t=>"wiki"===t.type));for(let t of l){let o=p("markdown",t.linkText,t.altOrBlockRef,i,n);e=e.replace(t.match,o)}let s=a.filter((t=>"wikiTransclusion"===t.type));for(let t of s){let o=p("mdTransclusion",t.linkText,t.altOrBlockRef,i,n);e=e.replace(t.match,o)}return e})),h=(t,i,n)=>e(void 0,void 0,void 0,(function*(){let e=t,a=yield o(i,n),l=a.filter((t=>"markdown"===t.type));for(let t of l){let o=p("wiki",t.linkText,t.altOrBlockRef,i,n);e=e.replace(t.match,o)}let s=a.filter((t=>"mdTransclusion"===t.type));for(let t of s){let o=p("wikiTransclusion",t.linkText,t.altOrBlockRef,i,n);e=e.replace(t.match,o)}return e})),L=(t,e,i,n)=>{let o;if("absolute-path"===n)o=t.path;else if("relative-path"===n)o=function(t,e){function i(t){let e=0;for(;e=0&&""===t[i];i--);return e>i?[]:t.slice(e,i-e+1)}for(var n=i(t.split("/")),o=i(e.split("/")),a=Math.min(n.length,o.length),l=a,s=0;se.name===t.name)).length>1?t.path:t.name}return o.endsWith(".md")&&(o=o.replace(".md","")),o},p=(t,e,i,n,o)=>{let a,l=e,s=decodeURI(l),r=o.app.metadataCache.getFirstLinkpathDest(s,n.path);r&&"not-change"!==o.settings.finalLinkFormat&&(l=L(r,n,o,o.settings.finalLinkFormat));const C=r&&"md"===r.extension?`.${r.extension}`:"";if("wiki"===t)return a=""!==i&&i!==decodeURI(l)?r&&decodeURI(i)===r.basename?"":"|"+i:"",`[[${decodeURI(l)}${a}]]`;if("markdown"===t)return a=""!==i?i:r?r.basename:l,`[${a}](${encodeURI(l)}${C})`;if("wikiTransclusion"===t)return`[[${decodeURI(l)}#${decodeURI(i)}]]`;if("mdTransclusion"===t){let t=i;return i.startsWith("^")?(t=encodeURI(t.slice(1)),t=`^${t}`):t=encodeURI(t),`[](${encodeURI(l)}${C}#${t})`}return""};const u=/\[\[(.*?)#.*?\]\]/,k=/(?<=\[\[)(.*)(?=#)/,f=/(?<=#).*?(?=]])/,m=/\[.*?]\((.*?)#.*?\)/,g=/(?<=\]\()(.*)(?=#)/,v=/(?<=#).*?(?=\))/,w=t=>u.test(t),M=t=>m.test(t),y=t=>{let e=u.test(t),i=m.test(t);if(e||i){let i=t.match(e?k:g);if(i)return i[0]}return""},A=t=>{let e=u.test(t),i=m.test(t);if(e||i){let i=t.match(e?f:v);if(i)return i[0]}return""};class x extends t.Modal{constructor(t,e,i){super(t),this.message=e,this.callback=i}onOpen(){let{contentEl:t}=this,e=t.createEl("div");e.addClass("oz-modal-center"),e.innerHTML=`\n
\n

Link Converter Plugin

\n
\n

${this.message}

\n `,t.createEl("button",{text:"Continue"}).addEventListener("click",(()=>{this.callback(),this.close()}));const i=t.createEl("button",{text:"Cancel"});i.style.cssText="float: right;",i.addEventListener("click",(()=>this.close()))}}class F extends t.FuzzySuggestModal{constructor(t,e){super(t.app),this.plugin=t,this.finalFormat=e}getItemText(t){return t.path}getItems(){return function(e){let i=[],n=e.vault.getRoot();function o(e){for(let n of e.children)if(n instanceof t.TFolder){let t=n;i.push(t),t.children&&o(t)}}return i.push(n),o(n),i}(this.app)}onChooseItem(t,e){let i=`Are you sure you want to convert all \n ${"wiki"===this.finalFormat?"Markdown Links to Wikilinks":"Wikilinks to Markdown Links"} \n under ${t.name}?`;new x(this.app,i,(()=>s(t,this.plugin,this.finalFormat))).open()}}class T extends t.Plugin{constructor(){super(...arguments),this.addFileMenuItems=(i,n)=>{if(n instanceof t.TFile&&"md"===n.extension){if(i.addSeparator(),i.addItem((t=>{t.setTitle("Markdown Links to Wiki").setIcon("bracketIcon").onClick((()=>a(n,this,"wiki")))})),i.addItem((t=>{t.setTitle("WikiLinks to Markdown").setIcon("markdownIcon").onClick((()=>a(n,this,"markdown")))})),"not-change"!==this.settings.finalLinkFormat){let a=this.settings.finalLinkFormat;i.addItem((i=>{i.setTitle("All Links to "+("absolute-path"===a?"Absolute Path":"shortest-path"===a?"Shortest Path":"Relative Path")).setIcon("linkEditIcon").onClick((()=>((i,n,a)=>e(void 0,void 0,void 0,(function*(){let e=yield n.app.vault.read(i),l=yield o(i,n);for(let t of l){let o=decodeURI(t.linkText),l=n.app.metadataCache.getFirstLinkpathDest(o,t.sourceFilePath);l&&(o=L(l,i,n,a),e=e.replace(t.match,p(t.type,o,t.altOrBlockRef,i,n)))}let s=n.settings.keepMtime?yield n.app.vault.adapter.stat(t.normalizePath(i.path)):{};yield n.app.vault.modify(i,e,s)})))(n,this,a)))}))}i.addSeparator()}}}onload(){return e(this,void 0,void 0,(function*(){console.log("Link Converter Loading..."),t.addIcon("bracketIcon",''),t.addIcon("markdownIcon",''),t.addIcon("linkEditIcon",' '),yield this.loadSettings(),this.addSettingTab(new n(this.app,this)),this.addCommand({id:"convert-wikis-to-md-in-active-file",name:"Active File: Links to Markdown",callback:()=>{l(this,"markdown")}}),this.addCommand({id:"convert-md-to-wikis-in-active-file",name:"Active File: Links to Wiki",callback:()=>{l(this,"wiki")}}),this.addCommand({id:"convert-wikis-to-md-in-vault",name:"Vault: Links to Markdown",callback:()=>{new x(this.app,"Are you sure you want to convert all Wikilinks to Markdown Links?",(()=>C(this,"markdown"))).open()}}),this.addCommand({id:"convert-mdlinks-to-wiki-in-vault",name:"Vault: Links to Wiki",callback:()=>{new x(this.app,"Are you sure you want to convert all Markdown Links to Wikilinks?",(()=>C(this,"wiki"))).open()}}),this.addCommand({id:"convert-wikis-to-mdlink-under-folder",name:"Certain Folder: Links to Markdown",callback:()=>{new F(this,"markdown").open()}}),this.addCommand({id:"convert-mdlinks-to-wikis-under-folder",name:"Certain Folder: Links to Wiki",callback:()=>{new F(this,"wiki").open()}}),this.addCommand({id:"convert-wikis-to-mdlinks-within-selection",name:"Editor Selection: Links to Markdown",callback:()=>e(this,void 0,void 0,(function*(){return r("markdown",this)}))}),this.addCommand({id:"convert-mdlinks-to-wiki-within-selection",name:"Editor Selection: Links to Wiki",callback:()=>e(this,void 0,void 0,(function*(){return r("wiki",this)}))}),this.settings.contextMenu&&this.app.workspace.on("file-menu",this.addFileMenuItems)}))}onunload(){console.log("Link Converter Unloading..."),this.app.workspace.off("file-menu",this.addFileMenuItems)}loadSettings(){return e(this,void 0,void 0,(function*(){this.settings=Object.assign({},i,yield this.loadData())}))}saveSettings(){return e(this,void 0,void 0,(function*(){yield this.saveData(this.settings)}))}}module.exports=T; 16 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNyYy9zZXR0aW5ncy50cyIsInNyYy91dGlscy50cyIsInNyYy9jb252ZXJ0ZXIudHMiLCJzcmMvbW9kYWxzLnRzIiwic3JjL21haW4udHMiLCJzcmMvaWNvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOm51bGwsIm5hbWVzIjpbIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwidmFsdWUiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJERUZBVUxUX1NFVFRJTkdTIiwibXlTZXR0aW5nIiwiY29udGV4dE1lbnUiLCJmaW5hbExpbmtGb3JtYXQiLCJrZWVwTXRpbWUiLCJMaW5rQ29udmVydGVyU2V0dGluZ3NUYWIiLCJQbHVnaW5TZXR0aW5nVGFiIiwiY29uc3RydWN0b3IiLCJhcHAiLCJwbHVnaW4iLCJzdXBlciIsInRoaXMiLCJkaXNwbGF5IiwiY29udGFpbmVyRWwiLCJlbXB0eSIsImNyZWF0ZUVsIiwidGV4dCIsIlNldHRpbmciLCJzZXROYW1lIiwic2V0RGVzYyIsImFkZFRvZ2dsZSIsInRvZ2dsZSIsInNldFZhbHVlIiwic2V0dGluZ3MiLCJvbkNoYW5nZSIsIm5ld1ZhbCIsInNhdmVTZXR0aW5ncyIsIndvcmtzcGFjZSIsIm9uIiwiYWRkRmlsZU1lbnVJdGVtcyIsIm9mZiIsImFkZERyb3Bkb3duIiwiZHJvcGRvd24iLCJhZGRPcHRpb24iLCJvcHRpb24iLCJjb2ZmZWVEaXYiLCJjcmVhdGVEaXYiLCJhZGRDbGFzcyIsImhyZWYiLCJhdHRyIiwic3JjIiwiaGVpZ2h0IiwiZ2V0QWxsTGlua01hdGNoZXNJbkZpbGUiLCJtZEZpbGUiLCJsaW5rTWF0Y2hlcyIsImZpbGVUZXh0IiwidmF1bHQiLCJyZWFkIiwid2lraU1hdGNoZXMiLCJtYXRjaCIsImZpbGVSZWdleCIsImFsdFJlZ2V4Iiwid2lraU1hdGNoIiwibWF0Y2hJc1dpa2lUcmFuc2NsdXNpb24iLCJmaWxlTmFtZSIsImdldFRyYW5zY2x1c2lvbkZpbGVOYW1lIiwiYmxvY2tSZWZNYXRjaCIsImdldFRyYW5zY2x1c2lvbkJsb2NrUmVmIiwibGlua01hdGNoIiwidHlwZSIsImxpbmtUZXh0IiwiYWx0T3JCbG9ja1JlZiIsInNvdXJjZUZpbGVQYXRoIiwicGF0aCIsInB1c2giLCJmaWxlTWF0Y2giLCJzdGFydHNXaXRoIiwiYWx0TWF0Y2giLCJtYXJrZG93bk1hdGNoZXMiLCJtYXJrZG93bk1hdGNoIiwibWF0Y2hJc01kVHJhbnNjbHVzaW9uIiwiY29udmVydExpbmtzQW5kU2F2ZUluU2luZ2xlRmlsZSIsImZpbmFsRm9ybWF0IiwibmV3RmlsZVRleHQiLCJjb252ZXJ0V2lraUxpbmtzVG9NYXJrZG93biIsImNvbnZlcnRNYXJrZG93bkxpbmtzVG9XaWtpTGlua3MiLCJmaWxlU3RhdCIsImFkYXB0ZXIiLCJzdGF0Iiwibm9ybWFsaXplUGF0aCIsIm1vZGlmeSIsImNvbnZlcnRMaW5rc0luQWN0aXZlRmlsZSIsImdldEFjdGl2ZUZpbGUiLCJleHRlbnNpb24iLCJOb3RpY2UiLCJjb252ZXJ0TGlua3NVbmRlckZvbGRlciIsImZvbGRlciIsIm1kRmlsZXMiLCJmaWxlc1VuZGVyUGF0aCIsInJlY3Vyc2l2ZUZ4IiwiZm9sZGVyT2JqIiwiZ2V0QWJzdHJhY3RGaWxlQnlQYXRoIiwiVEZvbGRlciIsImNoaWxkcmVuIiwiY2hpbGQiLCJURmlsZSIsImdldEZpbGVzVW5kZXJQYXRoIiwibm90aWNlIiwidG90YWxDb3VudCIsImxlbmd0aCIsImNvdW50ZXIiLCJzZXRNZXNzYWdlIiwiaGFzRnJvbnRtYXR0ZXIiLCJlcnIiLCJjb25zb2xlIiwibG9nIiwiaGlkZSIsImNvbnZlcnRMaW5rc1dpdGhpblNlbGVjdGlvbiIsImFjdGl2ZUxlYWYiLCJnZXRBY3RpdmVWaWV3T2ZUeXBlIiwiTWFya2Rvd25WaWV3IiwiZWRpdG9yIiwic2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwic291cmNlRmlsZSIsImZpbGUiLCJuZXdUZXh0IiwicmVwbGFjZVNlbGVjdGlvbiIsImNvbnZlcnRMaW5rc0luVmF1bHQiLCJnZXRSb290IiwiZmlsZVBhdGgiLCJrZXlUb0NoZWNrIiwibWV0YUNhY2hlIiwibWV0YWRhdGFDYWNoZSIsImdldENhY2hlIiwiZnJvbnRtYXR0ZXIiLCJtZCIsIm5ld01kVGV4dCIsImZpbHRlciIsIm1kTGluayIsImNyZWF0ZUxpbmsiLCJyZXBsYWNlIiwid2lraVRyYW5zY2x1c2lvbnMiLCJ3aWtpVHJhbnNjbHVzaW9uIiwid2lraVRyYW5zY2x1c2lvbkxpbmsiLCJ3aWtpTGluayIsIm1kVHJhbnNjbHVzaW9ucyIsIm1kVHJhbnNjbHVzaW9uIiwiZ2V0RmlsZUxpbmtJbkZvcm1hdCIsImZpbGVMaW5rIiwibGlua2VkRmlsZVBhdGgiLCJ0cmltIiwiYXJyIiwic3RhcnQiLCJlbmQiLCJzbGljZSIsImZyb21QYXJ0cyIsInNwbGl0IiwidG9QYXJ0cyIsIk1hdGgiLCJtaW4iLCJzYW1lUGFydHNMZW5ndGgiLCJpIiwib3V0cHV0UGFydHMiLCJjb25jYXQiLCJqb2luIiwiZ2V0UmVsYXRpdmVMaW5rIiwiZ2V0RmlsZXMiLCJmIiwibmFtZSIsImVuZHNXaXRoIiwiZGVzdCIsIm9yaWdpbmFsTGluayIsImFsdFRleHQiLCJmaW5hbExpbmsiLCJkZWNvZGVVUkkiLCJnZXRGaXJzdExpbmtwYXRoRGVzdCIsImZpbGVFeHRlbnNpb24iLCJiYXNlbmFtZSIsImVuY29kZVVSSSIsImVuY29kZWRCbG9ja1JlZiIsIndpa2lUcmFuc2NsdXNpb25SZWdleCIsIndpa2lUcmFuc2NsdXNpb25GaWxlTmFtZVJlZ2V4Iiwid2lraVRyYW5zY2x1c2lvbkJsb2NrUmVmIiwibWRUcmFuc2NsdXNpb25SZWdleCIsIm1kVHJhbnNjbHVzaW9uRmlsZU5hbWVSZWdleCIsIm1kVHJhbnNjbHVzaW9uQmxvY2tSZWYiLCJ0ZXN0IiwiaXNXaWtpIiwiaXNNZCIsImZpbGVOYW1lTWF0Y2giLCJDb25maXJtYXRpb25Nb2RhbCIsIk1vZGFsIiwibWVzc2FnZSIsImNhbGxiYWNrIiwib25PcGVuIiwiY29udGVudEVsIiwibWFpbkRpdiIsImlubmVySFRNTCIsImFkZEV2ZW50TGlzdGVuZXIiLCJjbG9zZSIsImNhbmNlbEJ1dHRvbiIsInN0eWxlIiwiY3NzVGV4dCIsIkZvbGRlclN1Z2dlc3Rpb25Nb2RhbCIsIkZ1enp5U3VnZ2VzdE1vZGFsIiwiZ2V0SXRlbVRleHQiLCJpdGVtIiwiZ2V0SXRlbXMiLCJmb2xkZXJzIiwicm9vdEZvbGRlciIsImNoaWxkRm9sZGVyIiwiZ2V0QWxsRm9sZGVyc0luVmF1bHQiLCJvbkNob29zZUl0ZW0iLCJldnQiLCJpbmZvVGV4dCIsIkNvbnZlcnRlci5jb252ZXJ0TGlua3NVbmRlckZvbGRlciIsIm9wZW4iLCJMaW5rQ29udmVydGVyUGx1Z2luIiwiUGx1Z2luIiwibWVudSIsImFkZFNlcGFyYXRvciIsImFkZEl0ZW0iLCJzZXRUaXRsZSIsInNldEljb24iLCJvbkNsaWNrIiwiQ29udmVydGVyLmNvbnZlcnRMaW5rc0FuZFNhdmVJblNpbmdsZUZpbGUiLCJDb252ZXJ0ZXIuY29udmVydExpbmtzSW5GaWxlVG9QcmVmZXJyZWRGb3JtYXQiLCJvbmxvYWQiLCJhZGRJY29uIiwibG9hZFNldHRpbmdzIiwiYWRkU2V0dGluZ1RhYiIsImFkZENvbW1hbmQiLCJpZCIsIkNvbnZlcnRlci5jb252ZXJ0TGlua3NJbkFjdGl2ZUZpbGUiLCJDb252ZXJ0ZXIuY29udmVydExpbmtzSW5WYXVsdCIsIkNvbnZlcnRlci5jb252ZXJ0TGlua3NXaXRoaW5TZWxlY3Rpb24iLCJvbnVubG9hZCIsIk9iamVjdCIsImFzc2lnbiIsImxvYWREYXRhIiwic2F2ZURhdGEiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O2dGQXFFTyxTQUFTQSxFQUFVQyxFQUFTQyxFQUFZQyxF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 17 | --------------------------------------------------------------------------------