├── .github ├── ISSUE_TEMPLATE.md ├── dependabot.yml ├── pull_request_template.md └── workflows │ └── releases.yml ├── .gitignore ├── LICENSE ├── README.md ├── docs ├── Commands.md ├── Concepts.md ├── Examples.md ├── Expressions.md ├── InputParameters.md ├── Installation.md ├── Questions.md ├── ReleaseNotes.md ├── RoadMap.md ├── Settings.md ├── TargetEvaluation.md ├── YAML.md └── images │ ├── Screenshot_v1.1.png │ ├── cover_v1.3.png │ ├── repository-open-graph-template.png │ ├── screenshot_v1.0.png │ ├── screenshot_v1.3.png │ ├── screenshot_v1.6.png │ ├── screenshot_v1.7.png │ ├── screenshot_v1.9.png │ ├── usage_v1.0.gif │ ├── usage_v1.1.gif │ └── usage_v1.3.gif ├── examples ├── .obsidian │ └── plugins │ │ └── obsidian-tracker │ │ ├── .hotreload │ │ └── .keep ├── BloodPressureTracker.md ├── ErrorMessages.md ├── FinanceTracker.md ├── HabitTracker.md ├── StarTracker.md ├── TestAxisIntervalAndFormat.md ├── TestBarChart.md ├── TestBullet.md ├── TestCalendar.md ├── TestCommands.md ├── TestDateFormats.md ├── TestDvField.md ├── TestEmoji.md ├── TestExpression.md ├── TestFileMeta.md ├── TestFrontmatter.md ├── TestInSentenceFields.md ├── TestLegends.md ├── TestMultipleTargetsMultipleValues.md ├── TestPieChart.md ├── TestRegex.md ├── TestRelativeStartEndDate.md ├── TestScalingAndPositioning.md ├── TestSpecifiedFiles.md ├── TestSummary.md ├── TestTabCharacters.md ├── TestTable.md ├── TestTask.md ├── TestTextValueMap.md ├── TestTimeValues.md ├── TestWordCounting.md ├── TestXDataset.md ├── WeightTracker.md ├── WikiTracker.md ├── data │ ├── In-Sentence-Fields.md │ ├── MTG-Card-1.md │ ├── MTG-Card-2.md │ ├── MTG-Card-3.md │ ├── MTG-Card-4.md │ ├── MTG-Deck-1.md │ ├── Set-FileDates.ps1 │ ├── Tables.md │ ├── data1.md │ ├── data2.md │ └── data3.md ├── diary │ ├── 01-01-2021.md │ ├── 01.01.2021.md │ ├── 02-01-2021.md │ ├── 02.01.2021.md │ ├── 03-01-2021.md │ ├── 03.01.2021.md │ ├── 04-01-2021.md │ ├── 04.01.2021.md │ ├── 05-01-2021.md │ ├── 05.01.2021.md │ ├── 1-20210101.md │ ├── 2-20210102.md │ ├── 2021-01-01-Friday.md │ ├── 2021-01-01.md │ ├── 2021-01-02-Saturday.md │ ├── 2021-01-02.md │ ├── 2021-01-03-Sunday.md │ ├── 2021-01-03.md │ ├── 2021-01-04-Monday.md │ ├── 2021-01-04.md │ ├── 2021-01-05-Tuesday.md │ ├── 2021-01-05.md │ ├── 2021-01-06.md │ ├── 2021-01-07.md │ ├── 2021-01-08.md │ ├── 2021-01-09.md │ ├── 2021-01-10.md │ ├── 2021-01-11.md │ ├── 2021-01-12.md │ ├── 2021-01-13.md │ ├── 2021-01-14.md │ ├── 2021-01-15.md │ ├── 2021-01-16.md │ ├── 2021-01-17.md │ ├── 2021-01-18.md │ ├── 2021-01-19.md │ ├── 2021-01-20.md │ ├── 2021-01-21.md │ ├── 2021-01-22.md │ ├── 2021-01-23.md │ ├── 2021-01-24.md │ ├── 2021-01-25.md │ ├── 2021-01-26.md │ ├── 2021-01-27.md │ ├── 2021-01-28.md │ ├── 2021-01-29.md │ ├── 2021-01-30.md │ ├── 2021-01-31.md │ ├── 20210101-D.md │ ├── 20210102-D.md │ ├── 20210103-D.md │ ├── 20210104-D.md │ ├── 20210105-D.md │ ├── 2023-06-05.md │ ├── 2023-06-06.md │ ├── 2023-06-07.md │ ├── 2023-06-08.md │ ├── 3-20210103.md │ ├── 4-20210104.md │ ├── 5-20210105.md │ ├── D-20210101.md │ ├── D-20210102.md │ ├── D-20210103.md │ ├── D-20210104.md │ ├── D-20210105.md │ ├── Jeffrey-20210101-Diary.md │ ├── Jeffrey-20210101-Journal.md │ ├── Jeffrey-20210102-Diary.md │ ├── Jeffrey-20210102-Journal.md │ ├── Jeffrey-20210103-Diary.md │ ├── Jeffrey-20210103-Journal.md │ ├── Jeffrey-20210104-Diary.md │ ├── Jeffrey-20210104-Journal.md │ ├── Jeffrey-20210105-Diary.md │ ├── Jeffrey-20210105-Journal.md │ ├── Lucas-20210101-Diary.md │ ├── Lucas-20210101-Journal.md │ ├── Lucas-20210102-Diary.md │ ├── Lucas-20210102-Journal.md │ ├── Lucas-20210103-Diary.md │ ├── Lucas-20210103-Journal.md │ ├── Lucas-20210104-Diary.md │ ├── Lucas-20210104-Journal.md │ ├── Lucas-20210105-Diary.md │ └── Lucas-20210105-Journal.md └── example_generator.ts ├── manifest.json ├── package-lock.json ├── package.json ├── rollup.config.build.mjs ├── rollup.config.dev.mjs ├── src ├── bullet.ts ├── collecting.ts ├── data.ts ├── expr.ts ├── heatmap.ts ├── helper.ts ├── main.ts ├── month.ts ├── parsing.ts ├── pie.ts ├── rendering.ts ├── settings.ts └── summary.ts ├── styles.css ├── tsconfig.json └── versions.json /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Expected Behavior 4 | 5 | 6 | 7 | ## Current Behavior 8 | 9 | 10 | 11 | ## Possible Solution 12 | 13 | 14 | 15 | ## Steps to Reproduce (for bugs) 16 | 17 | 1. 18 | 2. 19 | 3. 20 | 4. 21 | 22 | ## Context 23 | 24 | 25 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | # Maintain dependencies for GitHub Actions 9 | - package-ecosystem: "github-actions" 10 | # Workflow files stored in the default location of `.github/workflows`. (You don't need to specify `/.github/workflows` for `directory`. You can use `directory: "/"`.) 11 | directory: "/" 12 | schedule: 13 | interval: "weekly" 14 | # Maintain dependencies for npm 15 | - package-ecosystem: "npm" # See documentation for possible values 16 | directory: "/" # Location of package manifests 17 | schedule: 18 | interval: "weekly" 19 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | # Description 2 | 3 | Please include a summary of the change and which (if any) issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. 4 | 5 | Fixes # (issue) 6 | 7 | ## Type of change 8 | 9 | Please delete options that are not relevant. 10 | 11 | - [ ] Bug fix (non-breaking change which fixes an issue) 12 | - [ ] New feature (non-breaking change which adds functionality) 13 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) 14 | - [ ] This change requires a documentation update 15 | 16 | # How Has This Been Tested? 17 | 18 | - [ ] If this is a bug fix, did you add or update a test file to the examples directory that verifies the bug is fixed? 19 | - [ ] If this is a new feature, did you add files to the examples directory to demonstrate the feature? 20 | - [ ] If this is a new feature, did you add documentation to the docs directory for the feature? 21 | -------------------------------------------------------------------------------- /.github/workflows/releases.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | release: 5 | types: [published] 6 | 7 | jobs: 8 | build: 9 | permissions: 10 | contents: write 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | - name: Use Node.js 15 | uses: actions/setup-node@v4 16 | with: 17 | node-version: '18.x' 18 | - name: Build 19 | run: | 20 | yarn 21 | yarn build 22 | yarn zip 23 | - name: Release with Notes 24 | uses: softprops/action-gh-release@v2 25 | with: 26 | files: | 27 | main.js 28 | manifest.json 29 | styles.css 30 | obsidian-tracker-*.zip 31 | env: 32 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Intellij 2 | *.iml 3 | .idea 4 | 5 | # npm 6 | node_modules 7 | 8 | # build 9 | main.js 10 | *.js.map 11 | examples/*.js 12 | *.zip 13 | 14 | # .obsidian 15 | .obsidian 16 | 17 | # examples for users 18 | examples/case 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021-2024 Hsuan Hao Chang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Obsidian Tracker Plugin 2 | 3 | ![GitHub release](https://img.shields.io/github/v/release/pyrochlore/obsidian-tracker) 4 | 5 | 6 | 7 | This is an [Obsidian](https://obsidian.md/) plugin that helps you collect data from notes and represent it comprehensively. 8 | 9 | [Here](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/Examples.md) is a table containing simplified examples showing what you can track. 10 | 11 | ## What's New 12 | 13 | Version 1.16.0 14 | 15 | - Adding thresholdType parameter to Calendars 16 | - Enable bar chart full-bar display at beginning and end 17 | - Update dependencies 18 | 19 | Version 1.15.1 20 | 21 | - Fix: Added DatasetName as title for calendar in annotation mode 22 | - Fix: Resolve scaling issue when navigating between monthly views 23 | - Update dependencies 24 | 25 | Version 1.15.0 26 | 27 | - Fix: Minor spelling error in Examples.md 28 | - Added new expression functions - First and Last 29 | - Updated dates in examples to fix plots 30 | - Respect thresholds in scaled months 31 | - Update dependencies 32 | 33 | Version 1.14.0 34 | 35 | - Update dependencies 36 | - Prevent overlapping external labels in pie chart 37 | - Enable Stacked Bar Chart 38 | 39 | Version 1.13.3 40 | 41 | - Update dependencies 42 | - Fix typo in FinanceTracker.md 43 | - Fix typo in TestExpression.md 44 | - Update main.ts - use new format for {{average}} 45 | 46 | Version 1.13.2 47 | 48 | - Update dependencies 49 | - Fix typo in README.md 50 | - Change streak counts to terminate on falsey values rather than null 51 | 52 | Version 1.13.1 53 | 54 | - Fix packaging script 55 | 56 | Version 1.13.0 57 | 58 | - Add support for inline dataview fields (including emoji support for values) 59 | - Update dependencies 60 | 61 | Version 1.12.0 62 | 63 | - Add aspect ratio parameter for graphs 64 | - Reorganize release notes in readme to be in descending order (latest release first) 65 | 66 | Version 1.11.0 67 | 68 | - Add support for checkboxes in new properties added in Obsidian 1.4 69 | - Fix typos in documentation and examples 70 | 71 | Version 1.10.9 72 | 73 | - Replace tab characters by spaces 74 | - Accept more unicode characters in dvField 75 | - Allow emojis in the folder path 76 | - Fixed bugs 77 | 78 | Version 1.10.8 79 | 80 | - Fixed startDate/endDate misread as a relative date 81 | 82 | Version 1.10.7 83 | 84 | - Allow using html image tags as emoji inputs 85 | 86 | Version 1.10.6 87 | 88 | - Fixed the coloring for missing data in the month view 89 | 90 | Version 1.10.5 91 | 92 | - Allow using a relative date value in `initMonth` in the month view 93 | 94 | Version 1.10.4 95 | 96 | - Allow using a regular expression as a key of the parameter `textValueMap` 97 | - Add a parameter `shiftOnlyValueLargerThan` to determine when to do `valueShift` 98 | - Fixed bugs reported by users 99 | - Fixed typo in plugin settings 100 | 101 | Version 1.10.3 102 | 103 | - Allow using the parameter `fitPanelWidth` with the output type `month` and `pie` 104 | - Fixed the resizing and positioning of the chart tooltip 105 | 106 | Version 1.10.2 107 | 108 | - Fixed plugin not rendering on some macOS machines 109 | 110 | Version 1.10.1 111 | 112 | - Fixed 'failed to load plugin' on iOS 113 | 114 | Version 1.10.0 115 | 116 | - Add annotation mode for month view ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestCalendar.md)) 117 | - Add parameters `xAxisTickInterval`, `yAxisTickInterval`, `xAxisTickLabelFormat` and `yAxisTickLabelFormat` for the line and bar chart ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestAxisIntervalAndFormat.md)) 118 | - Allow using regular expression in parameter `dateFormatPrefix` and `dateFormatSuffix` ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestDateFormats.md)) 119 | - Add parameters `file`, `specifiedFilesOnly`, `fileContainsLinkedFiles`, and `fileMultiplierAfterLink` to retrieve data from specified files ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestSpecifiedFiles.md)) 120 | - Add a parameter `textValueMap` to convert texts or emojis to specified values ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestTextValueMap.md)) 121 | - Fixed bugs 122 | - Enhanced error messages 123 | 124 | ## !!! Breaking Changes !!! 125 | 126 | From version 1.9.0, template variables, e.g. '{{sum}}', are deprecated. Instead, Tracker provide operators (+, -, *, /, %) and functions (dataset(), sum(), maxStreak(), ......etc) to help us do data processing. For users having code blocks from previous version, please replace '{{sum}}' by '{{sum()}}' or '{{sum(1)}}' by '{{sum(dataset(1))}}'. More information about the new expressions could be found [here](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/Expressions.md). 127 | 128 | ## Usage 129 | 130 | 1. Have some targets you want to track in daily notes. 131 | 2. Add a new note for displaying the tracker. 132 | 3. Add tracker code blocks manually ([examples](https://github.com/pyrochlore/obsidian-tracker/tree/master/examples)) or using [commands](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/Commands.md). 133 | 4. Switch the document view mode to 'Preview', then the code block will get rendered. 134 | 135 | For more use cases, please download and open the [examples](https://github.com/pyrochlore/obsidian-tracker/tree/master/examples) folder in obsidian with this plugin installed and enabled. 136 | 137 | ## More Details You May Want to Know 138 | 139 | - [Installation](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/Installation.md): Install the plugin from Obsidian or install it manually 140 | - [Concepts](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/Concepts.md): Explain how this plugin works and what to setup 141 | - [Target Evaluation](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/TargetEvaluation.md) 142 | - [Input Parameters](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/InputParameters.md) 143 | - [Expressions](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/Expressions.md) 144 | - [Examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/Examples.md) 145 | - [Plugin Settings](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/Settings.md) 146 | - [Release Notes](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/ReleaseNotes.md) 147 | - [Road Map](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/RoadMap.md) 148 | - [Frequently Asked Questions](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/Questions.md) 149 | 150 | ## Support 151 | 152 | - If you like this plugin or want to support further development, you can [Buy Me a Coffee](https://www.buymeacoffee.com/pyrochlore). 153 | - Please report bugs and request features in [GitHub Issues](https://github.com/pyrochlore/obsidian-tracker/issues) 154 | -------------------------------------------------------------------------------- /docs/Commands.md: -------------------------------------------------------------------------------- 1 | # Commands 2 | 3 | To smooth the process of making trackers, obsidian-tracker provides three commands (There will be more in the future release), "Add Line Chart Tracker", "Add Bar Chart Tracker", and "Add Summary Tracker". Just type Ctrl/Cmd+P to activate the command palette, then type "Tracker" to search these commands. 4 | 5 | After a command is executed, a code block will be added to the next line below your cursor position for you. The added code block will contain the most frequently used keys. To see the complete list of input parameters and description, please check [this document](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/InputParameters.md). -------------------------------------------------------------------------------- /docs/Concepts.md: -------------------------------------------------------------------------------- 1 | # Concepts 2 | 3 | This plugin was designed to read code blocks in [YAML format](https://en.wikipedia.org/wiki/YAML). The key-value pairs in the code blocks tell the plugin what data to collect and how to represent the result. 4 | 5 | [Here](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/InputParameters.md) are all the parameters (key-value pairs) defined in this plugin. They are used for collecting data, evaluating targets, data preprocessing, and rendering output. 6 | 7 | ### Collecting Data 8 | 9 | Providing parameters `searchType` and `searchTarget` is the minimum requirement for a successful data collection. `searchType` can be `tag`, `frontmatter`, `wiki`, `dvField`, `table`, `fileMeta`, `task`, or `text`. Then the cooresponding `searchTarget` should be provided according to the specified type. 10 | 11 | ### Target Evaluation 12 | 13 | Depends on the `searchType` and the `searchTarget` you provided, the evaluation of a target would be different. Simply speaking, you can track the occurrences of a target or the value attached/embedded in it. 14 | 15 | To see the detail about the target evaluation, please check the document [Target Evaluation](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/TargetEvaluation.md). 16 | 17 | ### Rendering Output 18 | 19 | Currently, obsidian-tracker provides five kinds of rendering output: `line`, `bar`, `summary`, `bullet`, `month` and `pie`. You have to provide at least one output parameter in a code block. 20 | 21 | With output type set to `line` or `bar`, Tracker plugin will generate a customizable chart. These charts are very good at seeing the variation of collected number in the notes. 22 | 23 | With the output type `summary`, a text block based on your '**template**' parameter will be created. You can use [expressions](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/Expressions.md) like '{{sum()}}' or '{{maxStreak()}}' in the template parameter, to get a statistical summary of collected data. 24 | 25 | Output type `bullet` creates a [bullet chart](https://en.wikipedia.org/wiki/Bullet_graph) and could serve as a gauge showing the status (level, performance, progress) of a dataset. 26 | 27 | Output type `month` creates a month view with circled dates exceeding the given threshold and streaks showing how long it persisted. 28 | 29 | Output type `pie` creates a pie chart. The `data` parameter should be applied for circular sectors you want to add. Parameter `label` and `extLabel` are used for displaying labels and `dataName` is used for the diplay names on legend. 30 | 31 | Detailed description for all parameters of the output types can be found [here](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/InputParameters.md). -------------------------------------------------------------------------------- /docs/Examples.md: -------------------------------------------------------------------------------- 1 | # Examples 2 | 3 | We provide a simplified table of use cases and full examples including data. 4 | 5 | ## Table of Use Cases 6 | 7 | Check where (Location) and what (Target to Track) is your target and find the settings (Tracker) you need. 8 | 9 | | Location | Target to Track | Tracker | Get (O)ccurrences/(V)alues | 10 | |:--------|:-------|:---------|:--:| 11 | | content | #meditation | searchType: tag
searchTarget: meditation | O | 12 | | frontmatter | ---
tags: meditation
--- | searchType: tag
searchTarget: meditation | O | 13 | | content | #weight:60.5kg | searchType: tag
searchTarget: weight | V | 14 | | content | #finance/bank1/transfer:100USD | searchType: tag
searchTarget: finance/bank1/transfer | V | 15 | | content | #finance/bank1/transfer:100USD
#finance/bank1/income:80USD
#finance/bank1/outcome:-120USD | searchType: tag
searchTarget: finance/bank1 | V | 16 | | content | #blood-pressure:180/120 | searchType: tag
searchTarget: blood-pressure[0], blood-pressure[1] | V | 17 | | content | dvTarget:: 20.5 | searchType: dvField
searchTarget: dvTarget | V | 18 | | content | dvTarget:: 20.5/30.5 | searchType: dvField
searchTarget: dvTarget[0], dvTarget[1] | V | 19 | | content | dvTarget:: 20.5, 30.5 | searchType: dvField
searchTarget: dvTarget[0], dvTarget[1]
separator: 'comma' | V | 20 | | frontmatter | ---
mood: 10
--- | searchType: frontmatter
searchTarget: mood | V | 21 | | frontmatter | ---
bp: 184.4/118.8
--- | searchType: frontmatter
searchTarget: bp[0], bp[1] | V | 22 | | frontmatter | ---
bp: 184.4, 118.8
--- | searchType: frontmatter
searchTarget: bp[0], bp[1]
separator: 'comma' | V | 23 | | frontmatter | ---
bp: [184.4, 118.8]
--- | searchType: frontmatter
searchTarget: bp[0], bp[1] | V | 24 | | frontmatter | ---
clock-in: 10:45
clock-out: 20:51
--- | searchType: frontmatter
searchTarget: clock-in, clock-out | V | 25 | | content | [[journal]] | searchType: wiki
searchTarget: journal | O | 26 | | content | ⭐ | searchType: text
searchTarget: ⭐ | O | 27 | | content | love | searchType: text
searchTarget: love | O | 28 | | content | test@gmail.com
test@hotmail.com | searchType: text
searchTarget: '.+\\@.+\\..+' | O | 29 | | content | #weightlifting: 50 | searchType: text
searchTarget: 'weightlifting: (?\[\\-]?[0-9]+[\\.][0-9]+\|[\\-]?[0-9]+)' | V | 30 | | content | I walked 10000 steps today. | searchType: text
searchTarget: 'walked\\s+(?\[0-9]+)\\s+steps' | V | 31 | | content | myvalues 1/2/3 | searchType: text
searchTarget: 'myvalues\\s+(?\[0-9]+)/([0-9]+)/([0-9]+), myvalues\\s+([0-9]+)/(?\[0-9]+)/([0-9]+), myvalues\\s+([0-9]+)/([0-9]+)/(?\[0-9]+)' | V | 32 | | table content | { a table filled with dates and values }
[example table](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/data/Tables.md) | searchType: table
searchTarget: filePath[0][0], filePath[0][1] | V | 33 | | table content | { a table filled with dates and values }
[example table](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/data/Tables.md) | searchType: table
searchTarget: filePath[1][0], filePath[1][1][0], filePath[1][1][1] | V | 34 | | file meta | meta data from files
(size, cDate, mDate, numWords, numChars, numSentences) | searchType: fileMeta
searchTarget: size | V | 35 | | content | - [x] Say love
- [ ] Say love | searchType:task
searchTarget: Say love | O | 36 | | content | - [x] Say love | searchType:task.done
searchTarget: Say love | O | 37 | | content | - [ ] Say love | searchType: task.notdone
searchTarget: Say love | O | 38 | 39 | ## Full examples 40 | 41 | Full tracker code blocks can be found in folder [examples](https://github.com/pyrochlore/obsidian-tracker/tree/master/examples) and the corresponding notes (data) can be found under folder '[diary](https://github.com/pyrochlore/obsidian-tracker/tree/master/examples/diary)' and '[data](https://github.com/pyrochlore/obsidian-tracker/tree/master/examples/data)'. 42 | 43 | List of all examples 44 | - [Bloodpressure Tracker](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/BloodPressureTracker.md) 45 | - [Error Messages](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/ErrorMessages.md) 46 | - [Finance Tracker](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/FinanceTracker.md) 47 | - [Habit Tracker](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/HabitTracker.md) 48 | - [Star Tracker](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/StarTracker.md) 49 | - [Bar Chart](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestBarChart.md) 50 | - [Axis Interval and Format](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestAxisIntervalAndFormat.md) 51 | - [Bullet Chart](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestBullet.md) 52 | - [Calendar](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestCalendar.md) 53 | - [Date Formats](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestDateFormats.md) 54 | - [Dataview Inline Field](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestDvField.md) 55 | - [Expression](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestExpression.md) 56 | - [File Meta](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestFileMeta.md) 57 | - [Legends](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestLegends.md) 58 | - [Multiple Targets / Multiple Values](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestMultipleTargetsMultipleValues.md) 59 | - [Pie Chart](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestPieChart.md) 60 | - [Scaling and Positioning](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestScalingAndPositioning.md) 61 | - [Specified Files](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestSpecifiedFiles.md) 62 | - [Summary](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestSummary.md) 63 | - [Table](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestTable.md) 64 | - [Task](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestTask.md) 65 | - [Text-value Map/Mood Tracker](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestTextValueMap.md) 66 | - [Time Values](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestTimeValues.md) 67 | - [Word Counting](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestWordCounting.md) 68 | - [X Dataset](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestXDataset.md) 69 | - [Regular Expression](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestRegex.md) 70 | - [Weight Tracker](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/WeightTracker.md) 71 | - [Wiki](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/WikiTracker.md) 72 | 73 | -------------------------------------------------------------------------------- /docs/Expressions.md: -------------------------------------------------------------------------------- 1 | # Expressions 2 | 3 | Expressions could help us create new and meaningful data from the original collected data by using operators and functions. 4 | 5 | ## !!! Breaking Changes !!! 6 | 7 | From version 1.9.0, template variables, e.g. '{{sum}}', are deprecated. Instead, Tracker provide operators (+, -, *, /, %) and functions (dataset(), sum(), maxStreak(), ......etc) to help us do data processing. For users having code blocks from previous version, please replace '{{sum}}' by '{{sum()}}' or '{{sum(1)}}' by '{{sum(dataset(1))}}'. 8 | 9 | ## Where to Use 10 | 11 | Currently, we can only use expressions in some parameters. These includes `template` in `summary` output, `value` in `bullet` output, and `data` `label` `extLabel` in `pie` output. In future release, there will be more parameters using expressiones as input. 12 | 13 | ## How to Use 14 | 15 | Expressions should be be wrapped in curly brackets. By using the combination of operators and funtions, Tracker can resolve the whole expression in brackets and then generate a number or a string according to what was requested. 16 | 17 | If the resolved output of an expression is a string, we can assign a format string to it. The format string should be placed after the expression in curly brackets following by two colons. For example, The expression '{{sum()::i}}' will force the output number represented as an integer (i for integer). 18 | 19 | For the number output, use '[Printf Format String](https://en.wikipedia.org/wiki/Printf_format_string)' for the format string. For the date output, use the date format string defined in [Moment.js](https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/01-format/). 20 | 21 | The following tables show all the operators and functions available for now. Please make sure the input type and output type when you are combining them together. Examples could be found [here](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestExpression.md). Requests for operators or functions are welcome. 22 | 23 | ## List of Operators 24 | 25 | ### Uniry Operators 26 | 27 | | Function | Description | Operant | Output | 28 | |:---------|:------------|:--------|:------| 29 | | + | positive | number or dataset | number or dataset | 30 | | - | negative | number or dataset | number or dataset | 31 | 32 | ### Binary Operators 33 | 34 | | Function | Description | Left Operant | Right Operant | Output | 35 | |:---------|:------------|:-----|:------|:-------| 36 | | + | plus | number or dataset | number or dataset | number or dataset | 37 | | - | minus | number or dataset | number or dataset | number or dataset | 38 | | * | multiply | number or dataset | number or dataset | number or dataset | 39 | | / | divide | number or dataset | number or dataset | number or dataset | 40 | | % | modulo | number or dataset | number or dataset | number or dataset | 41 | 42 | e.g. 43 | - number + number --> number 44 | - dataset + number --> dataset 45 | - number + dataset -> dataset 46 | - dataset + dataset --> dataset 47 | 48 | ## List of Functions 49 | 50 | ### Get Dataset by Index 51 | 52 | | Function(InputType): OutputType | Description | 53 | |:------------------|:-----------| 54 | | dataset(number): Dataset | Get dataset from dataset id (the order in `searchTarget`) | 55 | 56 | ### Functions Accept Dataset and return a value 57 | 58 | **If the input dataset is missing, it will use the first available Y dataset found.** 59 | 60 | | Function(InputType): OutputType | Description | 61 | |:------------------|:-----------| 62 | | first(Dataset): number | First value of the dataset | 63 | | last(Dataset): number | Last value of the dataset | 64 | | min(Dataset): number | Minimum value of the dataset | 65 | | minDate(Dataset): Date | Latest date of minimum value | 66 | | max(Dataset): number | Maximum value of the dataset | 67 | | maxDate(Dataset): Date | Latest date of maximum value | 68 | | startDate(Dataset): Date | Start date of the dataset | 69 | | endDate(Dataset): Date | End date of the dataset | 70 | | sum(Dataset): number | Summation of values of the dataset | 71 | | numTargets(Dataset): number | Total counts of targets | 72 | | numDays(Dataset): number | Days from startDate to endDate | 73 | | numDaysHavingData(Dataset): number | Number of days having data | 74 | | maxStreak(Dataset): number | Maximum continuous days without breaks | 75 | | maxStreakStart(Dataset): Date | Start date of the max streak | 76 | | maxStreakEnd(Dataset): Date | End date of the max streak | 77 | | maxBreaks(Dataset): number | Maximum break days | 78 | | maxBreaksStart(Dataset): Date | Start date of the maximum break days | 79 | | maxBreaksEnd(Dataset): Date | End date of the maximum break days | 80 | | currentStreak(Dataset): number | Current continuous days | 81 | | currentStreakStart(Dataset): Date | Start date of current streak | 82 | | currentStreakEnd(Dataset): Date | End date of current streak | 83 | | currentBreaks(Dataset): number | Current break days | 84 | | currentBreaksStart(Dataset): Date | Start date of current breaks | 85 | | currentBreaksEnd(Dataset): Date | End date of current breaks | 86 | | average(Dataset): number | Average value of the dataset | 87 | | median(Dataset): number | Median value of the dataset | 88 | | variance(Dataset): number | Variance value of the dataset | 89 | 90 | ### Functions Accept Dataset and Return Dataset 91 | 92 | | Function(InputType): OutputType | Description | 93 | |:---------|:-----------| 94 | | normalize(Dataset): Dataset | rescale the Y values to [0, 1] | 95 | | setMissingValues(Dataset, number): Dataset | set the missing values | 96 | 97 | ## Missing Values 98 | 99 | Notice that the missing values (null values) are ignored in function like sum or average. Moreover, a value plus a missing value will leads to null value (missing value). To avoid these, you can set those missing values to a value by using parameter `penalty` or use expression function `setMissingValues`. 100 | -------------------------------------------------------------------------------- /docs/Installation.md: -------------------------------------------------------------------------------- 1 | # Installation 2 | 3 | ## Install from the Obsidian Settings Panel 4 | 1. From Settings Panel (the icon at the bottom left corner) -> Options -> Community plugins, set 'safe mode' to off. 5 | 2. In the 'Community plugins' section, click 'Browse' and find the obsidian-tracker plugin by the name 'Tracker'. 6 | 3. Press the button 'Install' and wait for the completion of the install. 7 | 4. In the section 'Installed plugins', find and enable the plugin just installed. 8 | 5. Enjoy tracking. 9 | 10 | ## Manual Installation 11 | Download the latest [release](https://github.com/pyrochlore/obsidian-tracker/releases). Extract and put the three files (main.js, manifest.json, styles.css) to folder '{{obsidian_vault}}/.obsidian/plugins/obsidian-tracker'. -------------------------------------------------------------------------------- /docs/Questions.md: -------------------------------------------------------------------------------- 1 | # Frequently Asked Questions 2 | 3 | - Does Tracker only track data in daily notes (file names contain dates)? 4 | 5 | No. The file name of your notes could be any string. But we do need a date from each file. If it is not from the file name, we should add one more `searchTarget` and use that target as the source of X values by setting parameter `xDataset` to its index. The searchType `fileMeta` with `searchTarget` cDate (creation date) and mDate (modification date) are always accessible as date sources if you don't have any. Examples of these use cases could be found [here](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestXDataset.md). 6 | 7 | - Why my line chart looks broken (not connected) at some points? 8 | 9 | Tracker only connects adjacent points (neighbor points by date) by default. To force it connecting points over missing data, set the parameter `fillGap` under `line` or `bar` to true. 10 | 11 | - Why does the plugin show: error 'No valid date as X value found in notes'? 12 | 13 | First we have to confirm where is the source of your X values. Tracker always needs X values in dates. The default source of X values are the file names of your notes. As long as a proper `dateFormat` was assigned, and combine with `dateFormatPrefix` and `dateFormatSuffix`, the dates in file names could be extracted from your file names successfully. 14 | 15 | If the date values are from front matter, dataview inline field, or other places, choose the right `searchType` and `searchTarget` and mark them as `xDataset`, Tracker will collect X values for you. 16 | 17 | If you don't have any date values, and you just want to count the number of occurrences of a target. As a trick, you can use the creation date (cDate) or modification date (mDate) of the file as X data source. 18 | 19 | Examples of these use cases could be found [here](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestXDataset.md). 20 | 21 | - Why does the plugin show: error 'No valid Y value found in notes'? 22 | 23 | That means no matched data found in your notes. Please check the document for the detail of [target evaluation](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/TargetEvaluation.md). 24 | 25 | - Why does the plugin show: 'Error parsing YAML'? 26 | 27 | There are syntax errors in your code block. Please check [this document](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/YAML.md) for common issues. 28 | 29 | --- 30 | 31 | Still have problems?? You might encounter a bug. 32 | Welcome to leave an issue [here](https://github.com/pyrochlore/obsidian-tracker/issues). 33 | -------------------------------------------------------------------------------- /docs/ReleaseNotes.md: -------------------------------------------------------------------------------- 1 | # Release Notes 2 | 3 | ## 1.16.0 4 | 5 | - Adding thresholdType parameter to Calendars 6 | - Enable bar chart full-bar display at beginning and end 7 | - Update dependencies 8 | 9 | ## 1.15.1 10 | 11 | - Fix: Added DatasetName as title for calendar in annotation mode 12 | - Fix: Resolve scaling issue when navigating between monthly views 13 | - Update dependencies 14 | 15 | ## 1.15.0 16 | 17 | - Fix: Minor spelling error in Examples.md 18 | - Added new expression functions - First and Last 19 | - Updated dates in examples to fix plots 20 | - Respect thresholds in scaled months 21 | - Update dependencies 22 | 23 | ## 1.14.0 24 | 25 | - Update dependencies 26 | - Prevent overlapping external labels in pie chart 27 | - Enable Stacked Bar Chart 28 | 29 | ## 1.13.3 30 | 31 | - Update dependencies 32 | - Fix typo in FinanceTracker.md 33 | - Fix typo in TestExpression.md 34 | - Update main.ts - use new format for {{average}} 35 | 36 | ## 1.13.2 37 | 38 | - Update dependencies 39 | - Fix typo in README.md 40 | - Change streak counts to terminate on falsey values rather than null 41 | 42 | ## 1.13.1 43 | 44 | - Fix packaging script 45 | 46 | ## 1.13.0 47 | 48 | - Add support for inline dataview fields (including emoji support for values) 49 | - Update dependencies 50 | 51 | ## 1.12.0 52 | 53 | - Add aspect ratio parameter for graphs 54 | - Reorganize release notes in readme to be in descending order (latest release first) 55 | 56 | ## 1.11.0 57 | 58 | - Add support for checkboxes in new properties added in Obsidian 1.4 59 | - Fix typos in documentation and examples 60 | 61 | ## v1.10.9 62 | 63 | - Replace tab characters by spaces 64 | - Accept more unicode characters in dvField 65 | - Allow emojis in the folder path 66 | - Fixed bugs 67 | 68 | ## v1.10.8 69 | 70 | - Fixed startDat/endDate misread as a relative date 71 | 72 | ## v1.10.7 73 | 74 | - Allow using html image tags as emoji inputs 75 | 76 | ## v1.10.6 77 | 78 | - Fixed the coloring for missing data in the month view 79 | 80 | ## v1.10.5 81 | 82 | - Allow using a relative date value in `initMonth` in the month view 83 | 84 | ## v1.10.4 85 | 86 | - Allow using a regular expression as a key of the parameter `textValueMap` 87 | - Add a parameter `shiftOnlyValueLargerThan` to determine when to do `valueShift` 88 | - Fixed bugs reported by users 89 | - Fixed typo in plugin settings 90 | 91 | ## v1.10.3 92 | 93 | - Allow using the parameter `fitPanelWidth` with the output type `month` and `pie` 94 | - Fixed the resizing and positioning of the chart tooltip 95 | 96 | ## v1.10.2 97 | 98 | - Fixed plugin not rendering on some macOS machines 99 | 100 | ## v1.10.1 101 | 102 | - Fixed 'failed to load plugin' on iOS 103 | 104 | ## v1.10.0 105 | 106 | - Add annotation mode for month view ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestCalendar.md)) 107 | - Add parameters `xAxisTickInterval`, `yAxisTickInterval`, `xAxisTickLabelFormat` and `yAxisTickLabelFormat` for the line and bar chart ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestAxisIntervalAndFormat.md)) 108 | - Allow using regular expression in parameter `dateFormatPrefix` and `dateFormatSuffix` ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestDateFormats.md)) 109 | - Add parameters `file`, `specifiedFilesOnly`, `fileContainsLinkedFiles`, and `fileMultiplierAfterLink` to retrieve data from specified files ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestSpecifiedFiles.md)) 110 | - Add a parameter `textValueMap` to convert texts or emojis to specified values ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestTextValueMap.md)) 111 | - Fixed bugs 112 | - Enhanced error messages 113 | 114 | ## v1.9.2 115 | 116 | - Allow using seconds in time values 117 | - Fixed error parsing `dvField` 118 | 119 | ## v1.9.1 120 | 121 | - Fixed errors on collecting time values from `dvField` 122 | - Fixed errors on collecting wiki while fileCache.links is undefined 123 | 124 | ## v1.9.0 125 | 126 | - Add a new output type `pie`, rendering a pie chart ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestPieChart.md)) 127 | - Allow expressions (operators and functions) as data inputs for output type `summary`, `bullet`, and `pie` (examples: [expression](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestExpression.md), [summary](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestSummary.md), [bullet](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestBullet.md), [pie](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestPieChart.md)) 128 | - Allow formatting evaluated expressions by a follwing format string ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestExpression.md)) 129 | 130 | ## v1.8.2 131 | 132 | - Fixed tasks searching not working for multiple targets 133 | 134 | ## v1.8.1 135 | 136 | - Fixed bugs while using month view with parameter `xDataset` 137 | 138 | ## v1.8.0 139 | 140 | - Add a new `searchType` `task`, retrieving data from tasks ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestTask.md)) 141 | - Enhancement 142 | - Month view ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestCalendar.md)) 143 | - Add parameter `circleColorByValue` to show color based on the value 144 | - Support multiple targets (dataset), change the dataset by clicking the header 145 | - Add a button (◦) to show current month 146 | - Accept ISO-8601 date as `dateFormat` ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestDateFormats.md#iso-8601-date-format)) 147 | - Relative date input for `startDate` and `endDate` ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestDateFormats.md#relative-date-input-for-startdate-and-enddate)) 148 | - Fixed missing dvField values at the last line of files 149 | 150 | ## v1.7.0 151 | 152 | - Add a new output type 'month', rendering a month view for a given dataset ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestCalendar.md)) 153 | 154 | ## v1.6.1 155 | 156 | - Add new targets 'numWords', 'numChars', and 'numSentences' for input type 'fileMeta' ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestWordCounting.md)) 157 | 158 | ## v1.6.0 159 | 160 | - Add a new input type 'fileMeta', getting meta data from a file ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestFileMeta.md)) 161 | - Add a new output type 'bullet', rendering a bullet chart ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestBullet.md)) 162 | - Enhancement 163 | - Accept tracking time values ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestTimeValues.md)) 164 | - Allow tracking nested values from front matter 165 | - Allow using dataset with date values as xDataset ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestXDataset.md)) 166 | - Add more template variables ([examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestTemplateVariables.md)) 167 | - Allow parsing date in wiki brackets 168 | - Fixed bugs 169 | 170 | ## v1.5.1 171 | 172 | - Fixed labels not shown in light theme 173 | - Enhanced error handling for searchType 'table' 174 | 175 | ## v1.5.0 176 | 177 | - New searchType 'table', searching records from a given table 178 | - New searchType 'dvField', searching the inline fields used with Dataview plugin 179 | - Enhance multiple values extraction 180 | - Allow using multiple values in searchType 'text' 181 | - Allow using array values in searchType 'frontmatter' 182 | - Allow using multiple values in searchType 'dvField' 183 | - Allow using multiple values in searchType 'table' 184 | - Allow using custom separator for multiple values extraction 185 | - Improved performance 186 | - Reduced package size 187 | 188 | ## v1.4.1 189 | 190 | - Enhanced error handling 191 | 192 | ## v1.4.0 193 | 194 | - Add a new parameter (fixedScale) for the scaling of the output chart 195 | - Add a new parameter (fitPanelWidth) to enable/disable the auto-scaling of the output chart 196 | - Add a new parameter (margin) to help to position the chart 197 | - Tested in Obsidian mobile app on iPhone and iPad 198 | - Fixed bugs 199 | 200 | ## v1.3.0 201 | 202 | - Support reading and rendering multiple targets 203 | - Support reading and rendering multiple values (a tuple of values) under a target 204 | - New output type 'bar', rendering a bar chart 205 | - Add a legend for the chart output 206 | - Fixed bugs 207 | 208 | ## v1.2.1 209 | 210 | - Fixed files with the specified dateFormat are not recognized 211 | - Restored the plugin's settings panel for dateFormat and folder 212 | 213 | ## v1.2.0 214 | 215 | - Enable using regular expression in text searching 216 | - New search type 'frontmatter', searching for key-value pairs in the front matter 217 | - New search type 'wiki', searching for wiki links 218 | - Reduced package size 219 | 220 | ## v1.1.0 221 | 222 | - New output type 'summary' 223 | - Add commands help create Tracker code blocks 224 | - Relaxed the regex for searching tags, allowing tags embedded in sentences 225 | - Fixed issues 226 | 227 | ## v1.0.2 228 | 229 | - Fixed the searching of nested tag in frontmatter 230 | - Reduced the package size by using the module from Obsidian 231 | 232 | ## v1.0.1 233 | 234 | - Remove dependencies to Node.js modules 235 | - Add example markdown files 236 | 237 | ## v1.0.0 238 | 239 | First version released at 2021-03-23 240 | 241 | - Track simple tags, value-attached tags, and texts using code blocks 242 | - Represent the tracked data in a customizable line chart 243 | - Allow tracking in-line tags and tags in frontmatter 244 | - Allow tracking nested tags 245 | -------------------------------------------------------------------------------- /docs/RoadMap.md: -------------------------------------------------------------------------------- 1 | # Road Map 2 | 3 | - Data Collecting 4 | - [x] Support tracking key-value pairs in frontmatter 5 | - [x] Support searching text using regular expression 6 | - [x] Support multiple targets and multiple values 7 | - [x] Add a parameter xDataset to identify targets to be used as x values 8 | - [x] Allow tracking time values 9 | - [ ] Allow tracking date values 10 | - [x] Get data from a table 11 | - [x] Collect data from dataview plugin's inline fields 12 | - [x] Collect meta information from file 13 | - [x] Support tracking tasks 14 | - [ ] Allow manual data input (x and y values) in custom datasets 15 | - [ ] Allow forced value types 16 | - [ ] Allow using non-date x values 17 | - [ ] Allow multiple points (different time stamp) from a single file 18 | - Output Type and Graph 19 | - [x] Implement output type 'summary', analyzes the input data and represents it using a user-defined text template 20 | - [x] Implement output type 'bar', rendering a bar chart 21 | - [x] Implement output type 'bullet', rendering 22 | - [x] Implement output type 'month', rendering a month view 23 | - [ ] Implement output type 'heatmap', rendering a heatmap like Github activity chart 24 | - [x] Implement output type 'pie', rendering a pie chart 25 | - [x] Add parameters for adjusting the size of the graph 26 | - [ ] Multiple outputs from one code block 27 | - [ ] Support graphs showing the correlation between sets of data 28 | - [ ] Allow a graph drawing selected dataset. 29 | - [x] Allow expressions evaluating operators and functions 30 | - [x] Allow format string for evaluated expressions 31 | - Helper 32 | - [x] Add Commands help create Tracker blocks. 33 | - [ ] Add an 'Explode' button to the rendered blocks, it will replace the code block with the rendered result 34 | - [ ] Add a helper panel for adding frequently used tracking targets to article. 35 | - Data Processing 36 | - [ ] Allow arithmetics operation on dataset and generate custom datasets 37 | - [ ] Add data post-process function, e.g. 'moving average' 38 | - Performance 39 | - [ ] Use PixiJS to do rendering 40 | 41 | And more ... Feature requests are welcome. 42 | 43 | P.S. Features may not be implemented in the order above. -------------------------------------------------------------------------------- /docs/Settings.md: -------------------------------------------------------------------------------- 1 | # Plugin Settings 2 | 3 | The default folder to search and the date format can be defined in the plugin's settings panel. If `folder` and `dateFormat` are not assigned in your code blocks, these default values will be applied automatically. 4 | 5 | | Setting Item | Description | Default | 6 | |:--------|:-------|:---------| 7 | | Default folder location | The folder to search | Root of the vault | 8 | | Default date format | The date format you are using | 'YYYY-MM-DD' | 9 | 10 | For more information about the dateFormat setting, please also check the [TestDateFormats example](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestDateFormats.md) and [moment.js string format](https://momentjs.com/docs/#/parsing/string-format/). -------------------------------------------------------------------------------- /docs/TargetEvaluation.md: -------------------------------------------------------------------------------- 1 | # Target Evaluation 2 | 3 | From the [input parameters](https://github.com/pyrochlore/obsidian-tracker/blob/master/docs/InputParameters.md) you provided, the search targets dispersed in the notes will be counted or evaluated as a value. Tracker plugin supports eight kinds of `searchType`: `tag`, `frontmatter`, `wiki`, `text`, `table`, `dvField`, `task`, and `fileMeta`, dealing with different types of searching condition. 4 | 5 | ## Multiple Targets 6 | You can provide multiple search targets in code block by entering an array of targets separated by a comma under parameter `searchType` and `searchTarget`. Each of the targets will be identified in order and then the values in notes will be evaluated and form a dataset indexed by that order in the array (zero-based indexing). 7 | 8 | ``` 9 | searchTarget: target0, target1, target2, ...... 10 | searchType: type0, type1, type2, ..... 11 | datasetName: dataset0, dataset1, dataset2, ...... 12 | line: 13 | lineColor: red, blue, yellow 14 | ``` 15 | 16 | Above is an example of multiple targets searching. In the code block, multiple targets are provided and separated by a comma. If they have a different searchType, provide the same number of types in the same order. In this case, the second search target 'target1' with index 1 has type 'type1' and name 'dataset1'. 17 | 18 | Many other parameters that accept multiple values (e.g. lineColor) can also be provided and the value given will be applied to the corresponding dataset. 19 | 20 | ## Multiple Values 21 | 22 | Multiple values under a target (value tuple) separated by a slash, e.g. #bloodpressure:180/120mmHg, are supported after version 1.3.0. To identify a specific value as a target, use an accessor with bracket notation where the value in the bracket is the index by the order of values. In this case, they are bloodpressure[0] and bloodpressure[1]. You can find the example of this [here](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/BloodPressureTracker.md). You can also use a custom separator by using the parameter `separator`. 23 | 24 | ## Search Target in Detail 25 | 26 | ### searchType: tag 27 | 28 | Simple tags in the format of '*#tagName*' in the file content are evaluated as a constant value (default value 1.0). You can override the value by assigning the key `constValue` in the code block. Use the tag name (the name after #) as the value of key `searchTarget` or use quoted tag (`#tagName`) to make it work. 29 | 30 | For tags in frontmatter (e.g. tags: meditation), it works like simple tags and will be evaluated as a constant value. For example, 31 | 32 | \-\-\-
33 | tags: tagName1, tagName2
34 | ......
35 | \-\-\-
36 | 37 | Set `searchTarget` to tagName1 or tagName2 will make the plugin do its work. 38 | 39 | In your content, a value can be attached to the tag in the format of '*#tagName:value*'. Note the value should be appended right after your tag and an extra colon **without spaces**. If a value is attached this way, the obsidian-tracker will automatically use the provided value instead of the constant one. 40 | 41 | Nested tags with values attached could be useful for tracking children's data separately and also still see the overall merged data using parent tags. 42 | 43 | If you don't want value-attached tags in your content, you can also put data in front matter and use `frontmatter` as your searchType. 44 | 45 | ### searchType: frontmatter 46 | 47 | This search type is used to query the key-value pairs in the front matter. If you don't want these values been seen in your article, the front matter would be the best place to record. For example, 48 | 49 | \-\-\-
50 | mood: 10
51 | ......
52 | \-\-\-
53 | 54 | ### searchType: wiki 55 | This search type helps you count wiki links in articles. For example, 56 | [[A]] 57 | [[B|Link to B]] 58 | 59 | ### searchType: text 60 | searchType `text` is the most powerful one among all. If you simply provide text like 'love', the number of occurrences of tags will be counted. You can provide a regular expression to search for a very complicated target by wrapping it in single quotes. If you want to retrieve a value from it, use the group name in the expression. To see more detail, see [this case](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestRegex.md). 61 | 62 | Multiple values in text search can be achieved by separate regex by comma and wrap them all in single quotes as follows: 63 | 64 | ``` 65 | searchTarget: 'regex1, regex2' 66 | ...... 67 | ``` 68 | 69 | ### searchType: dvField 70 | 71 | Tracker supports retrieving inline fields used with the dataview plugin. To get "targetName:: value" in your article, try the following tracker settings. 72 | 73 | ``` 74 | searchType: dvField 75 | searchTarget: targetName 76 | ...... 77 | ``` 78 | 79 | If you have multiple values in field, like "targetName:: 123 @ 456", use the following tracker settings. 80 |
81 | ``` 82 | searchType: dvField 83 | searchTarget: targetName[0], targetName[1] 84 | separator: '@' 85 | ...... 86 | ``` 87 | 88 | More dvField example can be found [here](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestMultipleTargesMultipleValues.md#multiple-values-in-dvfield-dataview-inline-field). 89 | 90 | ### searchType: table 91 | 92 | This search type is very much different from others because it does not search over files in the specified folder. Instead, it looks into a given file, finds the specified table, and retrieves data from specified columns. Here is an example, 93 | 94 | ``` 95 | searchType: table 96 | searchTarget: data/Tables[0][0], data/Tables[0][1], data/Tables[0][2] 97 | xDataset: 98 | line: 99 | yAxisLocation: none, left, right 100 | lineColor: none, yellow, red 101 | showLegend: true 102 | ``` 103 | 104 | In this case, "data/Tables" is the path of the file of interest. The number in the first brackets after the path ([0]) is the index of the table of interest in the file, starts from 0. And the number in the second brackets is the index of the column containing target data. If there are multiple values in table cells, you can provide a third index to identify them. 105 | 106 | More table examples can be found [here](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestTable.md). 107 | 108 | ### searchType: fileMeta 109 | 110 | With this search type, you can retrieve infomation of files. Currently, three kinds of data you can get. 111 | 112 | - cDate: creation date of a file 113 | - mDate: last modification date of a file 114 | - size: file size in bytes 115 | - numWords: number of words in a file 116 | - numChars: number of characters in a file (including spaces) 117 | - numSentences: number of setences in a file 118 | 119 | `cData` and `mDate` can be used as X dataset and `size` can be used as Y dataset. 120 | 121 | ### searchType: task 122 | 123 | You can retrieve infomation from tasks by using `searchType` `task`. 124 | The provided `searchTarget` will limit the result with task's contents match the input. 125 | 126 | Using type `task` or `task.all` will get you all tasks no matter it is done or not. 127 | To get task done, use `task.done`. By contrast, use `task.notdone`. 128 | -------------------------------------------------------------------------------- /docs/YAML.md: -------------------------------------------------------------------------------- 1 | # YAML Related Issues 2 | 3 | ## Special characters 4 | 5 | YAML special characters (e.g. #, [, ], ...) are not allowed for input values in code blocks. You need to wrap the whole input up by single quotes. 6 | 7 | ### Example 1 - Tag Search 8 | If we have a bunch of tags (say #tagName) to track. 9 | This will leads to 'Error parsing YAML' because of the # charactter. 10 | ``` 11 | searchType: tag 12 | searchTarget: #tagName 13 | ``` 14 | 15 | Instead, wrapping the input by single quotes will do the work. 16 | ``` 17 | searchType: tag 18 | searchTarget: '#tagName' 19 | ``` 20 | 21 | or simply 22 | ``` 23 | searchType: tag 24 | searchTarget: tagName 25 | ``` 26 | 27 | ### Example 2 - Hex Color Codes 28 | 29 | Hex color codes must be wrapped in single quotes. 30 | ``` 31 | searchType: tag 32 | searchTarget: weight 33 | line: 34 | lineColor: '#F08080' 35 | ``` 36 | 37 | Wrap the whole input by single quotes. 38 | ``` 39 | searchType: tag 40 | searchTarget: weight, push-up 41 | line: 42 | lineColor: '#F08080, #008080' 43 | ``` 44 | 45 | ### Example 3 - Text Search with Regex 46 | 47 | If we want to track value-attached tags not matched the standard format of Tracker, for example, weightlifting: 20.5kg. We can use search type `text` with regular expression in `searchTarget`. 48 | ``` 49 | searchType: text 50 | searchTarget: 'weightlifting:\s(?[\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)' 51 | ``` 52 | The whole input should be wrapped in single quotes because of the special characters. 53 | 54 | ## Array input 55 | Tracker accepts two types of array input. 56 | 57 | - YAML Array 58 | 59 | A YAML array input can be represented as: ['value1', 'value2', 'value3']. 60 | 61 | - Value Separated by Comma 62 | 63 | Use values separated by comma: value1, value2, value3 64 | Or single quoted string: 'value1, value2, value3' 65 | 66 | -------------------------------------------------------------------------------- /docs/images/Screenshot_v1.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrochlore/obsidian-tracker/4910c12bd8b868b829a037d8510f09a8d07caf4d/docs/images/Screenshot_v1.1.png -------------------------------------------------------------------------------- /docs/images/cover_v1.3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrochlore/obsidian-tracker/4910c12bd8b868b829a037d8510f09a8d07caf4d/docs/images/cover_v1.3.png -------------------------------------------------------------------------------- /docs/images/repository-open-graph-template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrochlore/obsidian-tracker/4910c12bd8b868b829a037d8510f09a8d07caf4d/docs/images/repository-open-graph-template.png -------------------------------------------------------------------------------- /docs/images/screenshot_v1.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrochlore/obsidian-tracker/4910c12bd8b868b829a037d8510f09a8d07caf4d/docs/images/screenshot_v1.0.png -------------------------------------------------------------------------------- /docs/images/screenshot_v1.3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrochlore/obsidian-tracker/4910c12bd8b868b829a037d8510f09a8d07caf4d/docs/images/screenshot_v1.3.png -------------------------------------------------------------------------------- /docs/images/screenshot_v1.6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrochlore/obsidian-tracker/4910c12bd8b868b829a037d8510f09a8d07caf4d/docs/images/screenshot_v1.6.png -------------------------------------------------------------------------------- /docs/images/screenshot_v1.7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrochlore/obsidian-tracker/4910c12bd8b868b829a037d8510f09a8d07caf4d/docs/images/screenshot_v1.7.png -------------------------------------------------------------------------------- /docs/images/screenshot_v1.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrochlore/obsidian-tracker/4910c12bd8b868b829a037d8510f09a8d07caf4d/docs/images/screenshot_v1.9.png -------------------------------------------------------------------------------- /docs/images/usage_v1.0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrochlore/obsidian-tracker/4910c12bd8b868b829a037d8510f09a8d07caf4d/docs/images/usage_v1.0.gif -------------------------------------------------------------------------------- /docs/images/usage_v1.1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrochlore/obsidian-tracker/4910c12bd8b868b829a037d8510f09a8d07caf4d/docs/images/usage_v1.1.gif -------------------------------------------------------------------------------- /docs/images/usage_v1.3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrochlore/obsidian-tracker/4910c12bd8b868b829a037d8510f09a8d07caf4d/docs/images/usage_v1.3.gif -------------------------------------------------------------------------------- /examples/.obsidian/plugins/obsidian-tracker/.hotreload: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrochlore/obsidian-tracker/4910c12bd8b868b829a037d8510f09a8d07caf4d/examples/.obsidian/plugins/obsidian-tracker/.hotreload -------------------------------------------------------------------------------- /examples/.obsidian/plugins/obsidian-tracker/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrochlore/obsidian-tracker/4910c12bd8b868b829a037d8510f09a8d07caf4d/examples/.obsidian/plugins/obsidian-tracker/.keep -------------------------------------------------------------------------------- /examples/BloodPressureTracker.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Blood Pressure Tracker 4 | 5 | ``` tracker 6 | searchType: frontmatter 7 | searchTarget: bloodpressure[0], bloodpressure[1] 8 | datasetName: systolic, diastolic 9 | folder: diary 10 | startDate: 2021-01-01 11 | endDate: 2021-01-31 12 | line: 13 | title: Blood Pressures 14 | yAxisLabel: BP 15 | yAxisUnit: mmHg 16 | lineColor: yellow, red 17 | showLegend: true 18 | legendPosition: bottom 19 | ``` 20 | 21 | ``` tracker 22 | searchType: frontmatter 23 | searchTarget: bloodpressure[0], bloodpressure[1] 24 | datasetName: systolic, diastolic 25 | folder: diary 26 | startDate: 2021-01-01 27 | endDate: 2021-01-31 28 | summary: 29 | template: "Average: {{average(dataset(0))}}/{{average(dataset(1))}}" 30 | ``` 31 | 32 | ``` tracker 33 | searchType: frontmatter 34 | searchTarget: bloodpressure[0], bloodpressure[1] 35 | datasetName: systolic, diastolic 36 | folder: diary 37 | startDate: 2021-01-01 38 | endDate: 2021-01-31 39 | line: 40 | title: Blood Pressures 41 | yAxisLabel: Systolic, Diastolic 42 | yAxisUnit: mmHg 43 | yMin: 150, 110 44 | yMax: 190, 125 45 | yAxisLocation: left, right 46 | yAxisColor: yellow, red 47 | yAxisLabelColor: yellow, red 48 | lineColor: yellow, red 49 | showLegend: true 50 | legendPosition: right 51 | ``` 52 | 53 | Please also check those search targets in markdown files under folder 'diary'. 54 | -------------------------------------------------------------------------------- /examples/ErrorMessages.md: -------------------------------------------------------------------------------- 1 | # Error Messages 2 | 3 | ## YAML 4 | Error parsing caused by the escaping character YAMLParsError: Missing closing "quote" 5 | ``` tracker 6 | searchType: tag 7 | searchTarget: "\" 8 | line: 9 | ``` 10 | 11 | 'searchTypes' --> typo 12 | 'searchType' --> correct 13 | ``` tracker 14 | searchTypes: tag 15 | searchTarget: weight 16 | line: 17 | ``` 18 | 19 | 'searchTargets' --> typo 20 | 'searchTarget' --> correct 21 | ``` tracker 22 | searchType: tag 23 | searchTargets: weight 24 | line: 25 | ``` 26 | 27 | 'lines' --> typo 28 | 'line' --> correct 29 | ``` tracker 30 | searchType: tag 31 | searchTarget: weight 32 | lines: 33 | ``` 34 | 35 | Missing tracker block identifier, no error message though. 36 | ``` 37 | searchType: tag 38 | searchTarget: weight 39 | line: 40 | ``` 41 | 42 | ## searchTarget 43 | Missing searchTarget 44 | ``` tracker 45 | searchType: tag 46 | searchTarget: 47 | line: 48 | ``` 49 | 50 | Invalid searchTarget, '#' is a special character to YAML, use single quotes to wrap it 51 | ``` tracker 52 | searchType: tag 53 | searchTarget: #weight 54 | line: 55 | ``` 56 | 57 | ## Folder 58 | Folder not exists 59 | ``` tracker 60 | searchType: tag 61 | searchTarget: weight 62 | folder: abc 63 | line: 64 | ``` 65 | 66 | ## Files 67 | No file in folder 68 | ``` tracker 69 | searchType: tag 70 | searchTarget: weight 71 | folder: empty 72 | line: 73 | ``` 74 | 75 | ## Number of parameters 76 | Two search targets provided, the number of search types shouldn't be more than two. 77 | ``` tracker 78 | searchType: frontmatter, frontmatter, frontmatter 79 | searchTarget: bloodpressure[0], bloodpressure[1] 80 | line: 81 | ``` 82 | 83 | yAxisLabel allows only two inputs 84 | ``` tracker 85 | searchType: frontmatter, frontmatter 86 | searchTarget: bloodpressure[0], bloodpressure[1] 87 | line: 88 | yAxisLabel: BP1, BP2, BP3 89 | ``` 90 | 91 | ## startDate & endDate 92 | The format of startDate or endDate does not match dateFormat in the plugin settings. Change the settings or Add a dateFormat parameter into YAML. 93 | ``` tracker 94 | searchType: tag 95 | searchTarget: weight 96 | startDate: 2020-01-01_Fri 97 | endDate: 2020-01-31_Mon 98 | line: 99 | ``` 100 | 101 | We don't have thirty days in February 102 | ``` tracker 103 | searchType: tag 104 | searchTarget: weight 105 | startDate: 2021-02-01 106 | endDate: 2021-02-30 107 | line: 108 | ``` 109 | 110 | ## X Values (Dates) 111 | No note found in the given date range 112 | ``` tracker 113 | searchType: tag 114 | searchTarget: weight 115 | startDate: 2020-01-01 116 | endDate: 2020-01-31 117 | line: 118 | ``` 119 | 120 | No valid X values, add "xDataset: 0" to fix it 121 | ``` tracker 122 | searchType: fileMeta, dvField 123 | searchTarget: cDate, dataviewTarget 124 | folder: data 125 | line: 126 | fillGap: true 127 | ``` 128 | 129 | ## Y Values 130 | No valid Y values!!!!! 131 | Use parameter `textValueMap` to map a text to a value. 132 | ``` tracker 133 | searchType: frontmatter 134 | searchTarget: randchar 135 | folder: diary 136 | line: 137 | fillGap: true 138 | ``` 139 | 140 | ## Output 141 | No output type provided, choose 'line', 'bar', or 'summary'. 142 | ``` tracker 143 | searchType: tag 144 | searchTarget: weight 145 | ``` 146 | 147 | ## Line Chart 148 | The Parameter 'lineColor' allows only one input for the single target 149 | ``` tracker 150 | searchType: tag 151 | searchTarget: weight 152 | line: 153 | title: Line 154 | lineColor: red, yellow 155 | ``` 156 | 157 | The parameter name should be 'title', not 'titles' 158 | ``` tracker 159 | searchType: frontmatter, frontmatter 160 | searchTarget: bloodpressure[0], bloodpressure[1] 161 | line: 162 | titles: "Blood Pressure" 163 | ``` 164 | 165 | ## Table 166 | All dates are invalid, leads to an error message 167 | ``` tracker 168 | searchType: table 169 | searchTarget: data/Tables[4][0], data/Tables[4][1] 170 | xDataset: 0 171 | line: 172 | lineColor: none, yellow 173 | ``` 174 | 175 | 176 | Please also check those search targets in markdown files under folder 'diary' and 'data'. 177 | 178 | ## Expression 179 | Unknown function 180 | ``` tracker 181 | searchType: task 182 | searchTarget: Say I love you 183 | summary: 184 | template: '{{unknown()}}' 185 | ``` 186 | 187 | Incomplete expression 188 | ``` tracker 189 | searchType: task 190 | searchTarget: Say I love you 191 | summary: 192 | template: '{{1+}}' 193 | ``` 194 | 195 | No dataset found for id 196 | ``` tracker 197 | searchType: task 198 | searchTarget: Say I love you 199 | summary: 200 | template: '{{sum(dataset(1))}}' 201 | ``` 202 | 203 | Divide by zero 204 | ``` tracker 205 | searchType: task 206 | searchTarget: Say I love you 207 | summary: 208 | template: '{{sum()/0}}' 209 | ``` 210 | 211 | Invalid data range (data only contains 1 and null) 212 | ``` tracker 213 | searchType: tag 214 | searchTarget: meditation 215 | folder: diary 216 | summary: 217 | template: '{{sum(normalize(dataset(0)))}}' 218 | ``` 219 | 220 | ## Deprecated 221 | ### Deprecated template variables 222 | 223 | Deprecated template variable 224 | ``` tracker 225 | searchType: task 226 | searchTarget: Say I love you 227 | summary: 228 | template: '{{sum}}' 229 | ``` 230 | 231 | -------------------------------------------------------------------------------- /examples/FinanceTracker.md: -------------------------------------------------------------------------------- 1 | # Finance Tracker 2 | 3 | ``` tracker 4 | searchType: tag 5 | searchTarget: finance 6 | folder: diary 7 | accum: true 8 | endDate: 2021-01-31 9 | line: 10 | title: Finance 11 | yAxisLabel: USD 12 | lineWidth: 4 13 | ``` 14 | 15 | 16 | ``` tracker 17 | searchType: tag 18 | searchTarget: finance/bank1 19 | folder: diary 20 | accum: true 21 | endDate: 2021-01-31 22 | line: 23 | title: Bank1 24 | yAxisLabel: USD 25 | ``` 26 | 27 | 28 | ``` tracker 29 | searchType: tag 30 | searchTarget: finance/bank2 31 | folder: diary 32 | accum: true 33 | endDate: 2021-03-15 34 | line: 35 | title: Bank2 36 | yAxisLabel: USD 37 | fillGap: true 38 | ``` 39 | 40 | Please also check those search targets in markdown files under folder 'diary'. 41 | -------------------------------------------------------------------------------- /examples/HabitTracker.md: -------------------------------------------------------------------------------- 1 | # Habit Tracker 2 | 3 | ``` tracker 4 | searchType: tag 5 | searchTarget: exercise-pushup 6 | folder: diary 7 | endDate: 2021-01-31 8 | line: 9 | title: PushUp 10 | yAxisLabel: Count 11 | lineColor: "#d65d0e" 12 | ``` 13 | 14 | ``` tracker 15 | searchType: tag 16 | searchTarget: exercise-plank 17 | folder: diary 18 | endDate: 2021-01-31 19 | line: 20 | title: Plank 21 | yAxisLabel: Hold 22 | yAxisUnit: sec 23 | lineColor: "#458588" 24 | pointColor: red 25 | ``` 26 | 27 | ``` tracker 28 | searchType: tag 29 | searchTarget: meditation 30 | folder: diary 31 | accum: true 32 | penalty: -1 33 | endDate: 2021-01-31 34 | line: 35 | title: Meditation 36 | yAxisLabel: Count 37 | ``` 38 | 39 | ## Summary 40 | ### Meditation 41 | ``` tracker 42 | searchType: tag 43 | searchTarget: meditation 44 | folder: diary 45 | summary: 46 | template: "Longest Streak: {{maxStreak()}} day(s)\nLongest Breaks: {{maxBreaks()}} day(s)\nLast streak: {{currentStreak()}} day(s)" 47 | ``` 48 | 49 | ### CleanUp 50 | ``` tracker 51 | searchType: tag 52 | searchTarget: clean-up 53 | folder: diary 54 | endDate: 2021-01-31 55 | summary: 56 | template: "Last Break: {{currentBreaks()}} day(s)" 57 | ``` 58 | 59 | ### Work log 60 | ``` tracker 61 | searchType: tag 62 | searchTarget: work_log 63 | folder: diary 64 | accum: true 65 | startDate: 2021-01-01 66 | endDate: 2021-01-31 67 | line: 68 | title: Work Log 69 | yAxisLabel: Count 70 | pointSize: 5 71 | pointColor: white 72 | pointBorderWidth: 2 73 | pointBorderColor: "#d65d0e" 74 | ``` 75 | 76 | Please also check those search targets in markdown files under folder 'diary'. -------------------------------------------------------------------------------- /examples/StarTracker.md: -------------------------------------------------------------------------------- 1 | # Star Tracker 2 | ## Summary 3 | 4 | ``` tracker 5 | searchType: text 6 | searchTarget: ⭐ 7 | folder: diary 8 | endDate: 2021-01-31 9 | summary: 10 | template: "I have {{sum()}} stars in total." 11 | style: "font-size:20px;color:yellow;margin-left: 50px;margin-top:00px;" 12 | ``` 13 | 14 | ``` tracker 15 | searchType: text 16 | searchTarget: ⭐ 17 | folder: diary 18 | endDate: 2021-01-31 19 | accum: true 20 | line: 21 | title: Count the Given Stars 22 | yAxisLabel: Count 23 | showLine: false 24 | ``` 25 | 26 | Please also check those search targets in markdown files under folder 'diary'. -------------------------------------------------------------------------------- /examples/TestAxisIntervalAndFormat.md: -------------------------------------------------------------------------------- 1 | # Test Axis Interval and Tick Label Format 2 | 3 | ## Y Axis Interval 4 | 5 | Numeric Y values 6 | ``` tracker 7 | searchType: tag 8 | searchTarget: weight 9 | folder: diary 10 | startDate: 2021-01-01 11 | endDate: 2021-01-31 12 | line: 13 | title: Weight Log 14 | yAxisLabel: Weight 15 | yAxisUnit: kg 16 | lineColor: yellow 17 | yAxisTickInterval: 5 18 | yMin: 55 19 | ``` 20 | 21 | Y values in time 22 | ``` tracker 23 | searchType: frontmatter 24 | searchTarget: clock-in, clock-out 25 | endDate: 2021-01-15 26 | folder: diary 27 | datasetName: Clock-In, Clock-Out 28 | line: 29 | title: "Working Hours" 30 | yAxisLabel: "Time (24h)" 31 | reverseYAxis: true 32 | lineColor: yellow, red 33 | showPoint: true 34 | yAxisTickInterval: 1h 35 | yMin: 06:00 36 | yMax: 23:00 37 | ``` 38 | 39 | ## Y Axis Tick Label Format 40 | Float numbers with precision of 1 decimal digits 41 | ``` tracker 42 | searchType: tag 43 | searchTarget: weight 44 | folder: diary 45 | startDate: 2021-01-01 46 | endDate: 2021-01-31 47 | line: 48 | title: Weight Log 49 | yAxisLabel: Weight 50 | yAxisUnit: kg 51 | lineColor: yellow 52 | yAxisTickInterval: 5 53 | yAxisTickLabelFormat: .2f 54 | yMin: 55 55 | ``` 56 | 57 | Y values in time 58 | ``` tracker 59 | searchType: frontmatter 60 | searchTarget: clock-in, clock-out 61 | endDate: 2021-01-15 62 | folder: diary 63 | datasetName: Clock-In, Clock-Out 64 | line: 65 | title: "Working Hours" 66 | yAxisLabel: "Time (24h)" 67 | reverseYAxis: true 68 | lineColor: yellow, red 69 | showPoint: true 70 | yMin: 05:00 71 | yMax: 22:00 72 | yAxisTickInterval: 50m 73 | yAxisTickLabelFormat: H---m 74 | ``` 75 | 76 | ## X Axis Interval 77 | ``` tracker 78 | searchType: tag 79 | searchTarget: weight 80 | folder: diary 81 | startDate: 2021-01-01 82 | endDate: 2021-01-31 83 | line: 84 | title: Weight Log 85 | yAxisLabel: Weight 86 | yAxisUnit: kg 87 | lineColor: yellow 88 | xAxisTickInterval: 1w 89 | ``` 90 | 91 | ## X Axis Tick Label Format 92 | ``` tracker 93 | searchType: tag 94 | searchTarget: weight 95 | folder: diary 96 | startDate: 2021-01-01 97 | endDate: 2021-01-31 98 | line: 99 | title: Weight Log 100 | yAxisLabel: Weight 101 | yAxisUnit: kg 102 | lineColor: yellow 103 | xAxisTickInterval: 7d 104 | xAxisTickLabelFormat: M-DD 105 | ``` -------------------------------------------------------------------------------- /examples/TestBarChart.md: -------------------------------------------------------------------------------- 1 | # Test Bar Chart 2 | 3 | ``` tracker 4 | searchType: tag 5 | searchTarget: weight 6 | folder: diary 7 | startDate: 2021-01-01 8 | endDate: 2021-01-05 9 | bar: 10 | title: Weight Log 11 | yAxisLabel: Weight 12 | xAxisPadding: 12h 13 | yAxisUnit: kg 14 | yMin: 0 15 | barColor: darkolivegreen 16 | ``` 17 | 18 | ``` tracker 19 | searchType: tag 20 | searchTarget: weight 21 | folder: diary 22 | startDate: 2021-01-01 23 | endDate: 2021-01-31 24 | bar: 25 | title: Weight Log 26 | yAxisLabel: Weight 27 | xAxisPadding: 12h 28 | yAxisUnit: kg 29 | yMin: 0 30 | barColor: brown 31 | ``` 32 | 33 | ``` tracker 34 | searchType: tag 35 | searchTarget: sin[0], sin[1], sin[2] 36 | folder: diary 37 | startDate: 2021-01-10 38 | endDate: 2021-01-21 39 | bar: 40 | title: Sin Wave 41 | yAxisLabel: Value 42 | xAxisPadding: 12h 43 | barColor: yellow, red, green 44 | ``` 45 | 46 | ``` tracker 47 | searchType: tag 48 | searchTarget: sinsquare[0], sinsquare[1], sinsquare[2], sinsquare[3], sinsquare[4], sinsquare[5] 49 | folder: diary 50 | startDate: 2021-01-01 51 | endDate: 2021-01-05 52 | bar: 53 | title: Sin Square Wave 54 | yAxisLabel: Value 55 | xAxisPadding: 12h 56 | yMin: 0 57 | barColor: yellow, red, green, blue, orange, white 58 | ``` 59 | 60 | 61 | ``` tracker 62 | searchType: tag 63 | searchTarget: sinsquare[0], sinsquare[1], sinsquare[2], sinsquare[3], sinsquare[4], sinsquare[5] 64 | folder: diary 65 | startDate: 2021-01-01 66 | endDate: 2021-01-05 67 | stack: true 68 | bar: 69 | title: Sin Square Wave (Stacked) 70 | yAxisLabel: Value 71 | xAxisPadding: 12h 72 | yMin: 0 73 | barColor: yellow, red, green, blue, orange, black 74 | ``` 75 | Please also check those search targets in markdown files under folder 'diary'. -------------------------------------------------------------------------------- /examples/TestBullet.md: -------------------------------------------------------------------------------- 1 | # Test Bullet 2 | 3 | ## Manual Input Data 4 | 5 | Manual input `value` as 12\.5 6 | ``` tracker 7 | searchType: tag 8 | searchTarget: clean-up 9 | folder: diary 10 | endDate: 2021-01-31 11 | fixedScale: 1.1 12 | bullet: 13 | title: "Clean Up" 14 | dataset: 0 15 | orientation: horizontal 16 | range: 10, 20, 40 17 | rangeColor: darkgray, silver, lightgray 18 | value: 12.5 19 | valueUnit: times 20 | valueColor: '#69b3a2' 21 | showMarker: true 22 | markerValue: 30 23 | markerColor: black 24 | ``` 25 | 26 | ## Data from Notes 27 | 28 | Horizontal bullet chart 29 | value from expression function currentBreaks() 30 | ``` tracker 31 | searchType: tag 32 | searchTarget: clean-up 33 | folder: diary 34 | endDate: 2021-01-31 35 | fixedScale: 1.1 36 | bullet: 37 | title: "Clean Up" 38 | dataset: 0 39 | orientation: horizontal 40 | range: 10, 20, 40 41 | rangeColor: darkgray, silver, lightgray 42 | value: "{{currentBreaks()}}" 43 | valueUnit: times 44 | valueColor: '#69b3a2' 45 | showMarker: true 46 | markerValue: 24 47 | markerColor: black 48 | ``` 49 | 50 | Vertical bullet chart 51 | value from expression function sum() 52 | ``` tracker 53 | searchType: tag 54 | searchTarget: meditation 55 | folder: diary 56 | endDate: 2021-01-31 57 | bullet: 58 | title: "Meditation" 59 | dataset: 0 60 | orientation: vertical 61 | range: 30, 60, 100 62 | rangeColor: darkgray, silver, lightgray 63 | value: "{{sum()}}" 64 | valueUnit: times 65 | valueColor: steelblue 66 | showMarker: true 67 | markerValue: 80 68 | markerColor: red 69 | ``` 70 | 71 | Please also check those search targets in markdown files under folder 'diary'. -------------------------------------------------------------------------------- /examples/TestCalendar.md: -------------------------------------------------------------------------------- 1 | # Test Calendar 2 | 3 | ## Single target 4 | ### Minimum setup 5 | 1. Use default colors only 6 | 2. Use parameter `datasetName` to set the title name 7 | ``` tracker 8 | searchType: tag 9 | searchTarget: meditation 10 | datasetName: Meditation 11 | folder: diary 12 | endDate: 2021-01-31 13 | month: 14 | ``` 15 | 16 | ### Colorized 17 | 1. Click "<" to see data in previous month 18 | 2. Click ">" to see data in next month 19 | 3. Click "◦" to see data in current month 20 | ``` tracker 21 | searchType: tag 22 | searchTarget: exercise-pushup 23 | datasetName: PushUp 24 | folder: diary 25 | endDate: 2021-01-31 26 | month: 27 | startWeekOn: 'Sun' 28 | threshold: 40 29 | color: tomato 30 | headerMonthColor: orange 31 | dimNotInMonth: false 32 | todayRingColor: orange 33 | selectedRingColor: steelblue 34 | showSelectedValue: true 35 | ``` 36 | 37 | ### Colorized 38 | ``` tracker 39 | searchType: tag 40 | searchTarget: meditation 41 | datasetName: Meditation 42 | folder: diary 43 | endDate: 2021-01-31 44 | month: 45 | startWeekOn: 'Sun' 46 | color: steelblue 47 | headerMonthColor: green 48 | selectedRingColor: orange 49 | ``` 50 | 51 | ### Colored by Values 52 | Use parameters `circleColorByValue`, `yMin`, and `yMax`, to color the circles based on the values 53 | ``` tracker 54 | searchType: tag 55 | searchTarget: exercise-pushup 56 | datasetName: PushUp 57 | folder: diary 58 | endDate: 2021-01-31 59 | month: 60 | startWeekOn: 61 | threshold: 10 62 | color: green 63 | headerMonthColor: orange 64 | dimNotInMonth: false 65 | todayRingColor: orange 66 | selectedRingColor: steelblue 67 | circleColorByValue: true 68 | yMin: 0 69 | yMax: 50 70 | showSelectedValue: true 71 | ``` 72 | 73 | ### Colored by Threshold and thresholdType 74 | Use parameters threshold and thresholdType - "LessThan" to color the circles 75 | ``` tracker 76 | searchType: tag 77 | searchTarget: exercise-pushup 78 | datasetName: PushUp 79 | folder: diary 80 | endDate: 2021-01-31 81 | month: 82 | startWeekOn: 83 | threshold: 40 84 | thresholdType: LessThan 85 | color: green 86 | headerMonthColor: orange 87 | dimNotInMonth: false 88 | todayRingColor: orange 89 | selectedRingColor: steelblue 90 | showSelectedValue: true 91 | ``` 92 | 93 | ### Check minDate, minValue, maxDate, maxValue 94 | ``` tracker 95 | searchType: tag 96 | searchTarget: exercise-pushup 97 | summary: 98 | template: "minDate: {{minDate()}}\nminValue: {{min()}}\nmaxDate: {{maxDate()}}\nmaxValue: {{max()}}" 99 | ``` 100 | 101 | ### initMonth 102 | 103 | Specify the initial month in YYYY-MM format 104 | ``` tracker 105 | searchType: tag 106 | searchTarget: exercise-pushup 107 | datasetName: PushUp 108 | folder: diary 109 | month: 110 | startWeekOn: 111 | threshold: 40 112 | color: green 113 | headerMonthColor: orange 114 | dimNotInMonth: false 115 | todayRingColor: orange 116 | selectedRingColor: steelblue 117 | circleColorByValue: true 118 | showSelectedValue: true 119 | initMonth: 2021-01 120 | ``` 121 | 122 | Specify the initial month by relative date 123 | ``` tracker 124 | searchType: tag 125 | searchTarget: exercise-pushup 126 | datasetName: PushUp 127 | folder: diary 128 | month: 129 | startWeekOn: 130 | threshold: 40 131 | color: green 132 | headerMonthColor: orange 133 | dimNotInMonth: false 134 | todayRingColor: orange 135 | selectedRingColor: steelblue 136 | circleColorByValue: true 137 | showSelectedValue: true 138 | initMonth: -47M 139 | ``` 140 | 141 | ## Multiple targets 142 | 1. Use parameter `datasetName` to specify the name of each dataset 143 | 2. Use parameter `dataset` to include dataset we are going to view 144 | 3. Use parameter `threshold` to specify the level of achievement (affect the streaks) 145 | 4. Click the datasetName label in month view to change the target dataset 146 | ``` tracker 147 | searchType: tag 148 | searchTarget: exercise-pushup, meditation 149 | datasetName: PushUp, Meditation 150 | folder: diary 151 | endDate: 2021-01-31 152 | month: 153 | dataset: 0, 1 154 | startWeekOn: 'Sun' 155 | threshold: 40, 0 156 | color: green 157 | headerMonthColor: orange 158 | dimNotInMonth: false 159 | todayRingColor: orange 160 | selectedRingColor: steelblue 161 | circleColorByValue: true 162 | showSelectedValue: true 163 | ``` 164 | 165 | ## Annotations 166 | One target at a time 167 | ``` tracker 168 | searchType: tag 169 | searchTarget: exercise-pushup, meditation 170 | datasetName: PushUp, Meditation 171 | folder: diary 172 | endDate: 2021-01-31 173 | month: 174 | mode: annotation 175 | startWeekOn: 'Sun' 176 | threshold: 40, 0 177 | color: green 178 | headerMonthColor: orange 179 | dimNotInMonth: false 180 | annotation: 💪,🧘‍♂️ 181 | showAnnotationOfAllTargets: false 182 | ``` 183 | 184 | All targets 185 | ``` tracker 186 | searchType: tag 187 | searchTarget: exercise-pushup, meditation 188 | datasetName: PushUp, Meditation 189 | folder: diary 190 | endDate: 2021-01-31 191 | month: 192 | mode: annotation 193 | startWeekOn: 'Sun' 194 | threshold: 40, 0 195 | color: green 196 | headerMonthColor: orange 197 | dimNotInMonth: false 198 | annotation: 💪,🧘‍♂️ 199 | showAnnotationOfAllTargets: true 200 | ``` 201 | 202 | Please also check those search targets in markdown files under folder 'diary'. 203 | 204 | ## Scaling 205 | fitPanelWidth: true 206 | Click forward backward months and verify it stays scaled 207 | ``` tracker 208 | searchType: tag 209 | searchTarget: meditation 210 | datasetName: Meditation 211 | fitPanelWidth: true 212 | folder: diary 213 | endDate: 2021-01-31 214 | month: 215 | ``` 216 | -------------------------------------------------------------------------------- /examples/TestCommands.md: -------------------------------------------------------------------------------- 1 | # Test Commands 2 | 3 | ``` tracker 4 | searchType: tag 5 | searchTarget: weight 6 | folder: / 7 | startDate: 8 | endDate: 2021-01-31 9 | line: 10 | title: "Line Chart" 11 | xAxisLabel: Date 12 | yAxisLabel: Value 13 | ``` 14 | 15 | 16 | ``` tracker 17 | searchType: tag 18 | searchTarget: weight 19 | folder: / 20 | startDate: 21 | endDate: 2021-01-31 22 | bar: 23 | title: "Bar Chart" 24 | xAxisLabel: Date 25 | yAxisLabel: Value 26 | ``` 27 | 28 | 29 | ``` tracker 30 | searchType: tag 31 | searchTarget: weight 32 | folder: / 33 | startDate: 34 | endDate: 2021-01-31 35 | summary: 36 | template: "Average value of tagName is {{average()}}" 37 | style: "color:white;" 38 | ``` -------------------------------------------------------------------------------- /examples/TestDateFormats.md: -------------------------------------------------------------------------------- 1 | # Test Date Formats 2 | 3 | ## Test Default Date Formats 4 | 5 | Change the default dateFomat on Tracker settings panel and then check the following trackers in the preview mode. Only the one fit dateFomat settings will get rendered. 6 | 7 | ### dateFomat: YYYY-MM-DD 8 | 9 | ``` tracker 10 | searchType: tag 11 | searchTarget: weight 12 | folder: diary 13 | startDate: 2021-01-01 14 | endDate: 2021-01-05 15 | line: 16 | title: Weight Log 17 | yAxisLabel: Weight 18 | yAxisUnit: kg 19 | lineColor: yellow 20 | ``` 21 | 22 | ### dateFormat: D-YYYYMMDD 23 | 24 | ``` tracker 25 | searchType: tag 26 | searchTarget: weight 27 | folder: diary 28 | startDate: 1-20210101 29 | endDate: 5-20210105 30 | line: 31 | title: Weight Log 32 | yAxisLabel: Weight 33 | yAxisUnit: kg 34 | lineColor: yellow 35 | ``` 36 | 37 | ### dateFormat: YYYY-MM-DD-dddd 38 | 39 | ``` tracker 40 | searchType: tag 41 | searchTarget: weight 42 | folder: diary 43 | startDate: 2021-01-01-Friday 44 | endDate: 2021-01-05-Tuesday 45 | line: 46 | title: Weight Log 47 | yAxisLabel: Weight 48 | yAxisUnit: kg 49 | lineColor: yellow 50 | ``` 51 | 52 | ### dateFormat: YYYY-MM-DD_ddd 53 | ``` tracker 54 | searchType: tag 55 | searchTarget: weight 56 | folder: diary 57 | startDate: 2021-01-01_Fri 58 | endDate: 2021-01-05_Tue 59 | line: 60 | title: Weight Log 61 | yAxisLabel: Weight 62 | yAxisUnit: kg 63 | lineColor: yellow 64 | ``` 65 | 66 | ### dateFormat: DD-MM-YYYY 67 | 68 | ``` tracker 69 | searchType: tag 70 | searchTarget: weight 71 | folder: diary 72 | startDate: 01-01-2021 73 | endDate: 05-01-2021 74 | line: 75 | title: Weight Log 76 | yAxisLabel: Weight 77 | yAxisUnit: kg 78 | lineColor: yellow 79 | ``` 80 | 81 | ### dateFormat: DD.MM.YYYY 82 | 83 | ``` tracker 84 | searchType: tag 85 | searchTarget: weight 86 | folder: diary 87 | startDate: 01.01.2021 88 | endDate: 05.01.2021 89 | line: 90 | title: Weight Log 91 | yAxisLabel: Weight 92 | yAxisUnit: kg 93 | lineColor: yellow 94 | ``` 95 | 96 | ## ISO-8601 Date Format 97 | 98 | ``` tracker 99 | searchType: tag 100 | searchTarget: weight 101 | folder: diary 102 | dateFormat: iso-8601 103 | startDate: 2021-01-01T14:53:25+00:00 104 | endDate: 2021-01-05T14:53:25+00:00 105 | line: 106 | title: Weight Log 107 | yAxisLabel: Weight 108 | yAxisUnit: kg 109 | lineColor: yellow 110 | ``` 111 | 112 | ## Test Date Format Prefix and Suffix 113 | 114 | The string provided in dateFormatPrefix and dateFormatSuffix will be removed before parsing dates. 115 | 116 | ### dateFormat: YYYYMMDD with prefix D- 117 | 118 | ``` tracker 119 | searchType: tag 120 | searchTarget: weight 121 | folder: diary 122 | dateFormat: YYYYMMDD 123 | dateFormatPrefix: D- 124 | startDate: D-20210101 125 | endDate: D-20210105 126 | line: 127 | title: Weight Log 128 | yAxisLabel: Weight 129 | yAxisUnit: kg 130 | lineColor: yellow 131 | ``` 132 | 133 | ### dateFormat: YYYYMMDD with suffix -D 134 | 135 | ``` tracker 136 | searchType: tag 137 | searchTarget: weight 138 | folder: diary 139 | dateFormat: YYYYMMDD 140 | dateFormatSuffix: -D 141 | startDate: 20210101-D 142 | endDate: 20210105-D 143 | line: 144 | title: Weight Log 145 | yAxisLabel: Weight 146 | yAxisUnit: kg 147 | lineColor: yellow 148 | ``` 149 | 150 | ### Using prefix and suffix with regular expression 151 | 152 | Examples of file name 153 | - Jeffrey-20210101-Journal 154 | - Jeffrey-20210102-Diary 155 | - Lucas-2021-0103-Journal 156 | - Lucas-2021-0104-Diary 157 | 158 | Data from the same days will be summed up. 159 | ``` tracker 160 | searchType: tag 161 | searchTarget: exercise-pushup 162 | folder: diary 163 | dateFormat: YYYYMMDD 164 | dateFormatPrefix: '(Jeffrey-|Lucas-)' 165 | dateFormatSuffix: '(-Journal|-Diary)' 166 | startDate: 20210101 167 | endDate: 20210105 168 | line: 169 | title: PushUp 170 | yAxisLabel: Count 171 | yAxisUnit: times 172 | lineColor: yellow 173 | ``` 174 | 175 | ## Relative Date Input for startDate and endDate 176 | 177 | The reference date of the relative date input is 'today' (The current date of your computer), So 178 | - 0d ==> today 179 | - -1d ==> yesterday 180 | - -1w ==> last week 181 | - -1M ==> last month 182 | - -1y ==> last year 183 | 184 | Notice!! 185 | - small 'm' represent 'minute' 186 | - If the date range is less than 1 day, you will get the error message 'No valid date as X value found in notes'. 187 | 188 | ``` tracker 189 | searchType: tag 190 | searchTarget: weight 191 | folder: diary 192 | startDate: -1M 193 | endDate: 0d 194 | line: 195 | title: Weight Log 196 | yAxisLabel: Weight 197 | yAxisUnit: kg 198 | lineColor: yellow 199 | ``` 200 | 201 | Please also check those search targets in markdown files under folder 'diary'. 202 | -------------------------------------------------------------------------------- /examples/TestDvField.md: -------------------------------------------------------------------------------- 1 | # Test dvField 2 | 3 | Simple inline field 4 | ``` tracker 5 | searchType: dvField 6 | searchTarget: dataviewTarget 7 | folder: diary 8 | startDate: 2021-01-01 9 | endDate: 2021-01-31 10 | line: 11 | title: dvField 12 | lineColor: green 13 | ``` 14 | 15 | Field with a space 16 | ``` tracker 17 | searchType: dvField 18 | searchTarget: Make Progress 19 | folder: diary 20 | startDate: 2021-01-01 21 | endDate: 2021-01-31 22 | line: 23 | title: dvField 24 | lineColor: yellow 25 | ``` 26 | 27 | Field with a dash line 28 | ``` tracker 29 | searchType: dvField 30 | searchTarget: Make-Progress 31 | folder: diary 32 | startDate: 2021-01-01 33 | endDate: 2021-01-31 34 | line: 35 | title: dvField 36 | lineColor: red 37 | ``` 38 | 39 | Extract the first value from multiple values 40 | ``` tracker 41 | searchType: dvField 42 | searchTarget: dataviewTarget1[0] 43 | folder: diary 44 | startDate: 2021-01-01 45 | endDate: 2021-01-31 46 | line: 47 | title: dvField 48 | lineColor: blue 49 | ``` 50 | 51 | Multiple values separated by '/' (default) 52 | ``` tracker 53 | searchType: dvField 54 | searchTarget: dataviewTarget1[0], dataviewTarget1[1] 55 | folder: diary 56 | startDate: 2021-01-01 57 | endDate: 2021-01-31 58 | line: 59 | title: dvField 60 | lineColor: green, red 61 | ``` 62 | 63 | Multiple values seprated by 'comma' 64 | ``` tracker 65 | searchType: dvField 66 | searchTarget: dataviewTarget3[0], dataviewTarget3[1] 67 | folder: diary 68 | startDate: 2021-01-01 69 | endDate: 2021-01-31 70 | separator: 'comma' 71 | line: 72 | title: dvField 73 | lineColor: green, red 74 | ``` 75 | 76 | Multiple values seprated by '\,' 77 | ``` tracker 78 | searchType: dvField 79 | searchTarget: dataviewTarget3[0], dataviewTarget3[1] 80 | folder: diary 81 | startDate: 2021-01-01 82 | endDate: 2021-01-31 83 | separator: '\,' 84 | line: 85 | title: dvField 86 | lineColor: green, red 87 | ``` 88 | 89 | Use custom multiple value separator 90 | ``` tracker 91 | searchType: dvField 92 | searchTarget: dataviewTarget2[0], dataviewTarget2[1] 93 | separator: '@' 94 | folder: diary 95 | startDate: 2021-01-01 96 | endDate: 2021-01-31 97 | line: 98 | title: dvField 99 | lineColor: green, red 100 | ``` 101 | 102 | Please also check those search targets in markdown files under folder 'diary'. -------------------------------------------------------------------------------- /examples/TestEmoji.md: -------------------------------------------------------------------------------- 1 | 2 | ```tracker 3 | searchType: dvfield 4 | searchTarget: Physical 5 | folder: diary 6 | startDate: 2023-06-04 7 | endDate: 2023-06-11 8 | textValueMap: 9 | 😀: 5 10 | 🙂: 4 11 | 😐: 3 12 | 🙁: 2 13 | 😞: 1 14 | datasetName: 🚹 Physical 15 | line: 16 | lineColor: orange 17 | lineWidth: 3 18 | showLegend: true 19 | legendPosition: right 20 | ``` -------------------------------------------------------------------------------- /examples/TestFileMeta.md: -------------------------------------------------------------------------------- 1 | # Test FileMeta 2 | Track the size variation of diaries 3 | ``` tracker 4 | searchType: fileMeta 5 | searchTarget: size 6 | folder: diary 7 | endDate: 2021-01-31 8 | line: 9 | title: File Size Variation 10 | yAxisLabel: Size 11 | yAxisUnit: bytes 12 | ``` 13 | 14 | Use file created dates (cDate) as x values 15 | ``` tracker 16 | searchType: fileMeta, dvField 17 | searchTarget: cDate, dataviewTarget 18 | xDataset: 0 19 | folder: data 20 | line: 21 | fillGap: true 22 | ``` 23 | 24 | Use file modified dates (mDate) as x values 25 | ``` tracker 26 | searchType: fileMeta, dvField 27 | searchTarget: mDate, dataviewTarget 28 | xDataset: 0 29 | folder: data 30 | line: 31 | fillGap: true 32 | ``` 33 | 34 | Please also check those search targets in markdown files under folder 'diary' and 'data'. 35 | 36 | -------------------------------------------------------------------------------- /examples/TestFrontmatter.md: -------------------------------------------------------------------------------- 1 | # Test Frontmatter 2 | 3 | ## Deep Values 4 | deepValue: 5 | very: 6 | very: 7 | very: 8 | very: 9 | very: 10 | deep: 27.4 11 | ``` tracker 12 | searchType: frontmatter 13 | searchTarget: deepValue.very.very.very.very.very.deep 14 | folder: diary 15 | endDate: 2021-01-31 16 | line: 17 | title: Deep Values 18 | ``` 19 | 20 | ## Multiple Values 21 | bloodpressure: 184.4/118.8 22 | ``` tracker 23 | searchType: frontmatter 24 | searchTarget: bloodpressure[0], bloodpressure[1] 25 | datasetName: systolic, diastolic 26 | folder: diary 27 | startDate: 2021-01-01 28 | endDate: 2021-01-31 29 | line: 30 | title: Blood Pressures 31 | yAxisLabel: BP 32 | yAxisUnit: mmHg 33 | lineColor: yellow, red 34 | showLegend: true 35 | legendPosition: bottom 36 | ``` 37 | 38 | ## Multiple Tags in Front Matter 39 | Extract data of one tag from multiple tags 40 | The default separator in front matter tags is comma (,) 41 | ``` tracker 42 | searchType: tag 43 | searchTarget: work_log 44 | folder: diary 45 | accum: true 46 | startDate: 2021-01-01 47 | endDate: 2021-01-31 48 | line: 49 | title: Work Log 50 | yAxisLabel: Count 51 | pointSize: 5 52 | pointColor: white 53 | pointBorderWidth: 2 54 | pointBorderColor: "#d65d0e" 55 | ``` 56 | 57 | Use the data of two tags 58 | The default separator in front matter tags is comma (,) 59 | ``` tracker 60 | searchType: tag 61 | searchTarget: work_log, work_log2 62 | folder: diary 63 | datasetName: Work1, Work2 64 | month: 65 | initMonth: 2021-01 66 | ``` 67 | 68 | Please also check those search targets in markdown files under folder 'diary'. -------------------------------------------------------------------------------- /examples/TestInSentenceFields.md: -------------------------------------------------------------------------------- 1 | 2 | ```tracker 3 | searchType: frontmatter, dvField 4 | searchTarget: date, count 5 | xDataset: 0 6 | folder: "data" 7 | bullet: 8 | title: Total Counts 9 | value: "{{sum()}}" 10 | range: 1,5,10,20 11 | rangeColor: darkRed, lightBlue, lightGreen, blue 12 | showMarker: true 13 | markerValue: 2 14 | markerColor: red 15 | ``` 16 | -------------------------------------------------------------------------------- /examples/TestLegends.md: -------------------------------------------------------------------------------- 1 | # Test Legends 2 | 3 | ## Position and Orientation 4 | 5 | - Default legendPosition ==> bottom 6 | - Default legendOrientation ==> horizontal 7 | 8 | ### Right 9 | 10 | - legendPosition: right 11 | - Default legendOrientation ==> vertical 12 | 13 | ``` tracker 14 | searchType: tag 15 | searchTarget: sin[0], sin[1], sin[2], sin[3], sin[4], sin[5], sin[6], sin[7], sin[8] 16 | folder: diary 17 | startDate: 2021-01-01 18 | endDate: 2021-01-31 19 | line: 20 | title: Sin Wave 21 | lineColor: yellow, blue, white, red, black, orange, purple, green, cyan 22 | showPoint: false 23 | showLegend: true 24 | legendPosition: right 25 | ``` 26 | 27 | - legendPosition: right 28 | - legendOrientation: horizontal 29 | 30 | ``` tracker 31 | searchType: tag 32 | searchTarget: sin[0], sin[1], sin[2], sin[3], sin[4], sin[5], sin[6], sin[7], sin[8] 33 | folder: diary 34 | startDate: 2021-01-01 35 | endDate: 2021-01-31 36 | line: 37 | title: Sin Wave 38 | lineColor: yellow, blue, white, red, black, orange, purple, green, cyan 39 | showPoint: false 40 | showLegend: true 41 | legendPosition: right 42 | legendOrientation: horizontal 43 | ``` 44 | 45 | ### Left 46 | 47 | - legendPosition: left 48 | - Default legendOrientation ==> vertical 49 | 50 | ``` tracker 51 | searchType: tag 52 | searchTarget: sin[0], sin[1], sin[2], sin[3], sin[4], sin[5], sin[6], sin[7], sin[8] 53 | folder: diary 54 | startDate: 2021-01-01 55 | endDate: 2021-01-31 56 | line: 57 | title: Sin Wave 58 | lineColor: yellow, blue, white, red, black, orange, purple, green, cyan 59 | showPoint: false 60 | showLegend: true 61 | legendPosition: left 62 | ``` 63 | 64 | - legendPosition: left 65 | - legendOrientation: horizontal 66 | 67 | ``` tracker 68 | searchType: tag 69 | searchTarget: sin[0], sin[1], sin[2], sin[3], sin[4], sin[5], sin[6], sin[7], sin[8] 70 | folder: diary 71 | startDate: 2021-01-01 72 | endDate: 2021-01-31 73 | line: 74 | title: Sin Wave 75 | lineColor: yellow, blue, white, red, black, orange, purple, green, cyan 76 | showPoint: false 77 | showLegend: true 78 | legendPosition: left 79 | legendOrientation: horizontal 80 | ``` 81 | 82 | ### Top 83 | 84 | - legendPosition: top 85 | - Default legendOrientation ==> horizontal 86 | 87 | ``` tracker 88 | searchType: tag 89 | searchTarget: sin[0], sin[1], sin[2], sin[3], sin[4], sin[5], sin[6], sin[7], sin[8] 90 | folder: diary 91 | startDate: 2021-01-01 92 | endDate: 2021-01-31 93 | line: 94 | title: Sin Wave 95 | lineColor: yellow, blue, white, red, black, orange, purple, green, cyan 96 | showPoint: false 97 | showLegend: true 98 | legendPosition: top 99 | ``` 100 | 101 | - legendPosition: top 102 | - legendOrientation: vertical 103 | ``` tracker 104 | searchType: tag 105 | searchTarget: sin[0], sin[1], sin[2], sin[3], sin[4], sin[5], sin[6], sin[7], sin[8] 106 | folder: diary 107 | startDate: 2021-01-01 108 | endDate: 2021-01-31 109 | line: 110 | title: Sin Wave 111 | lineColor: yellow, blue, white, red, black, orange, purple, green, cyan 112 | showPoint: false 113 | showLegend: true 114 | legendPosition: top 115 | legendOrientation: vertical 116 | ``` 117 | 118 | ### Bottom 119 | 120 | - Default legendPosition ==> bottom 121 | - Default legendOrientation ==> horizontal 122 | 123 | ``` tracker 124 | searchType: tag 125 | searchTarget: sin[0], sin[1], sin[2], sin[3], sin[4], sin[5], sin[6], sin[7], sin[8] 126 | folder: diary 127 | startDate: 2021-01-01 128 | endDate: 2021-01-31 129 | line: 130 | title: Sin Wave 131 | lineColor: yellow, blue, white, red, black, orange, purple, green, cyan 132 | showPoint: false 133 | showLegend: true 134 | ``` 135 | 136 | - Default legendPosition ==> bottom 137 | - legendOrientation: vertical 138 | 139 | ``` tracker 140 | searchType: tag 141 | searchTarget: sin[0], sin[1], sin[2], sin[3], sin[4], sin[5], sin[6], sin[7], sin[8] 142 | folder: diary 143 | startDate: 2021-01-01 144 | endDate: 2021-01-31 145 | line: 146 | title: Sin Wave 147 | lineColor: yellow, blue, white, red, black, orange, purple, green, cyan 148 | showPoint: false 149 | showLegend: true 150 | legendOrientation: vertical 151 | legendBorderColor: gold 152 | ``` 153 | 154 | ## Lines, Points, and Bars 155 | 156 | ``` tracker 157 | searchType: tag 158 | searchTarget: exercise-pushup 159 | datasetName: weight 160 | folder: diary 161 | endDate: 2021-01-31 162 | line: 163 | title: PushUp 164 | yAxisLabel: Count 165 | lineColor: "#d65d0e" 166 | showLegend: true 167 | ``` 168 | 169 | ``` tracker 170 | searchType: tag 171 | searchTarget: exercise-pushup 172 | datasetName: weight 173 | folder: diary 174 | endDate: 2021-01-31 175 | bar: 176 | title: PushUp 177 | yAxisLabel: Count 178 | barColor: "#458588" 179 | showLegend: true 180 | ``` 181 | 182 | ``` tracker 183 | searchType: tag 184 | searchTarget: exercise-pushup 185 | datasetName: weight 186 | folder: diary 187 | endDate: 2021-01-31 188 | bar: 189 | title: PushUp 190 | yAxisLabel: Count 191 | barColor: "#458588" 192 | showLegend: true 193 | legendPosition: right 194 | ``` 195 | 196 | Please also check those search targets in markdown files under folder 'diary'. -------------------------------------------------------------------------------- /examples/TestMultipleTargetsMultipleValues.md: -------------------------------------------------------------------------------- 1 | # Test Multiple Targets and Multiple Values 2 | 3 | ## Data from Different Value-attached Tags 4 | Put value-attached tag data of weight and exercise-push together 5 | ``` tracker 6 | searchType: tag 7 | searchTarget: weight, exercise-pushup 8 | folder: diary 9 | startDate: 2021-01-01 10 | endDate: 2021-01-31 11 | datasetName: Weight, Pushup 12 | line: 13 | title: Multiple Targets 14 | lineColor: yellow, red 15 | yAxisLocation: left, right 16 | yAxisLabel: Weight, Count 17 | showLegend: true 18 | ``` 19 | 20 | ## Multiple Values from a Single Multiple-values-attached Tag 21 | Retrieve a single value from a multiple-values-attached tag 22 | ``` tracker 23 | searchType: tag 24 | searchTarget: sin[0] 25 | folder: diary 26 | startDate: 2021-01-01 27 | endDate: 2021-01-31 28 | line: 29 | title: Sin Wave 30 | lineColor: yellow 31 | showLegend: false 32 | ``` 33 | 34 | Retrieve values from a multiple-values-attached tag 35 | ``` tracker 36 | searchType: tag 37 | searchTarget: sin[0], sin[1], sin[2], sin[3], sin[4], sin[5], sin[6], sin[7], sin[8] 38 | folder: diary 39 | datasetName: Sin1, Sin2, Sin3, Sin4, Sin5, Sin6, Sin7, Sin8, Sin9 40 | startDate: 2021-01-01 41 | endDate: 2021-01-31 42 | line: 43 | title: Sin Wave 44 | lineColor: yellow, blue, white, red, black, orange, purple, green, cyan 45 | showPoint: false 46 | showLegend: true 47 | legendPosition: right 48 | legendOrientation: vertical 49 | ``` 50 | 51 | ## Multiple Values from Frontmatter 52 | Multiple values separated by slash (/) 53 | ``` tracker 54 | searchType: frontmatter 55 | searchTarget: bloodpressure[0], bloodpressure[1] 56 | folder: diary 57 | datasetName: systolic, diastolic 58 | startDate: 2021-01-01 59 | endDate: 2021-01-31 60 | line: 61 | title: Blood Pressure 62 | lineColor: yellow, red 63 | showLegend: true 64 | ``` 65 | 66 | Multiple values separated by comma (,) 67 | ``` tracker 68 | searchType: frontmatter 69 | searchTarget: bloodpressure1[0], bloodpressure1[1] 70 | folder: diary 71 | datasetName: systolic, diastolic 72 | startDate: 2021-01-01 73 | endDate: 2021-01-31 74 | separator: comma 75 | line: 76 | title: Blood Pressure 77 | lineColor: yellow, red 78 | showLegend: true 79 | ``` 80 | 81 | Values from array 82 | ``` tracker 83 | searchType: frontmatter 84 | searchTarget: bloodpressure2[0], bloodpressure2[1] 85 | folder: diary 86 | datasetName: systolic, diastolic 87 | startDate: 2021-01-01 88 | endDate: 2021-01-31 89 | line: 90 | title: Blood Pressure 91 | lineColor: yellow, red 92 | showLegend: true 93 | ``` 94 | 95 | Values from nested keys 96 | ``` tracker 97 | searchType: frontmatter 98 | searchTarget: bp.systolic, bp.diastolic 99 | folder: diary 100 | datasetName: systolic, diastolic 101 | startDate: 2021-01-01 102 | endDate: 2021-01-31 103 | line: 104 | title: Blood Pressure 105 | lineColor: yellow, red 106 | showLegend: true 107 | ``` 108 | 109 | ## Multiple Values in Text 110 | Use searchType 'dvField' with separators in the target instead 111 | ``` tracker 112 | searchType: text 113 | searchTarget: 'dataviewTarget2::\s+(?[\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)\s+@\s+([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+), dataviewTarget2::\s+([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)\s+@\s+(?[\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)' 114 | folder: diary 115 | startDate: 2021-01-01 116 | endDate: 2021-01-31 117 | line: 118 | title: Dataview Data 119 | yAxisLabel: Count 120 | lineColor: red, yellow 121 | yMin: 0 122 | ``` 123 | 124 | 125 | ## Multiple Values in dvField (Dataview inline field) 126 | Extract the first value in dataview inline field 127 | ``` tracker 128 | searchType: dvField 129 | searchTarget: dataviewTarget1[0] 130 | folder: diary 131 | startDate: 2021-01-01 132 | endDate: 2021-01-31 133 | line: 134 | title: dvField 135 | ``` 136 | 137 | Multiple Values in dataview inline field 138 | ``` tracker 139 | searchType: dvField 140 | searchTarget: dataviewTarget1[0], dataviewTarget1[1] 141 | folder: diary 142 | startDate: 2021-01-01 143 | endDate: 2021-01-31 144 | line: 145 | title: dvField 146 | lineColor: green, red 147 | ``` 148 | 149 | Multiple values seprated by 'comma' 150 | ``` tracker 151 | searchType: dvField 152 | searchTarget: dataviewTarget3[0], dataviewTarget3[1] 153 | folder: diary 154 | startDate: 2021-01-01 155 | endDate: 2021-01-31 156 | separator: comma 157 | line: 158 | title: dvField 159 | lineColor: green, red 160 | ``` 161 | 162 | Use custom multiple value separator 163 | ``` tracker 164 | searchType: dvField 165 | searchTarget: dataviewTarget2[0], dataviewTarget2[1] 166 | separator: '@' 167 | folder: diary 168 | startDate: 2021-01-01 169 | endDate: 2021-01-31 170 | line: 171 | title: dvField 172 | lineColor: green, red 173 | ``` 174 | 175 | ## Multiple Values in Table 176 | 177 | Use first column as X dataset. Second column posses multiple values in each cell. 178 | ``` tracker 179 | searchType: table 180 | searchTarget: data/Tables[1][0], data/Tables[1][1][0], data/Tables[1][1][1] 181 | xDataset: 0 182 | separator: "@" 183 | line: 184 | yAxisLocation: none, left, right 185 | lineColor: none, yellow, red 186 | ``` 187 | 188 | Please also check those search targets in markdown files under folder 'diary' and 'data'. 189 | -------------------------------------------------------------------------------- /examples/TestPieChart.md: -------------------------------------------------------------------------------- 1 | # Test Pie Chart 2 | 3 | Expressions could be used in parameter `data`, `label`, and `extLabel`. 4 | 5 | ## Manual Input Data 6 | 7 | ### Numbers as Data 8 | Pie chart with labels showing percentages 9 | ``` tracker 10 | searchType: task.done, task.notdone 11 | searchTarget: Say I love you, Say I love you 12 | pie: 13 | title: Pie Chart 14 | label: '{{2/30*100}}%, {{4/30*100}}%, {{6/30*100}}%, {{8/30*100}}%, {{10/30*100}}%' 15 | data: 2, 4, 6, 8, 10 16 | dataColor: '#4daf4a,#377eb8,#ff7f00,#984ea3,#e41a1c' 17 | ratioInnerRadius: 0.0 18 | ``` 19 | 20 | ### Arithmetic 21 | 22 | Pie chart with labels showing percentages 23 | ``` tracker 24 | searchType: task.done, task.notdone 25 | searchTarget: Say I love you, Say I love you 26 | datasetName: Done, NotDone 27 | pie: 28 | title: Arithmetic 29 | data: '{{1 + 1}}, {{2 * 2}}, {{12/ 2}}, {{1+(2+3*2)-1}}, {{27%17}}' 30 | label: '{{2/30*100}}%, {{4/30*100}}%, {{6/30*100}}%, {{8/30*100}}%, {{10/30*100}}%' 31 | dataColor: '#4daf4a,#377eb8,#ff7f00,#984ea3,#e41a1c' 32 | ratioInnerRadius: 0.5 33 | ``` 34 | 35 | ### Legend 36 | 37 | Use parameter `dataName` for the name on the legend 38 | ``` tracker 39 | searchType: task.done, task.notdone 40 | searchTarget: Say I love you, Say I love you 41 | datasetName: Done, NotDone 42 | pie: 43 | title: Manual Input Data 44 | label: '{{2/30*100}}%, {{4/30*100}}%, {{6/30*100}}%, {{8/30*100}}%, {{10/30*100}}%' 45 | data: '2, 4, 6, 8, 10' 46 | dataColor: '#4daf4a,#377eb8,#ff7f00,#984ea3,#e41a1c' 47 | dataName: Data1, Data2, Data3, Data4, Data5 48 | ratioInnerRadius: 0.5 49 | showLegend: true 50 | legendPosition: right 51 | legendOrientation: vertical 52 | ``` 53 | 54 | ### Default data colors 55 | ``` tracker 56 | searchType: task.done, task.notdone 57 | searchTarget: Say I love you, Say I love you 58 | pie: 59 | title: Pie Chart 60 | label: '{{2/30*100}}%, {{4/30*100}}%, {{6/30*100}}%, {{8/30*100}}%, {{10/30*100}}%' 61 | data: 2, 4, 6, 8, 10 62 | ratioInnerRadius: 0.0 63 | ``` 64 | 65 | ## Data from Notes 66 | 67 | Using function dataset() to get Dataset then use function sum() to get the summation 68 | ``` tracker 69 | searchType: task.done, task.notdone 70 | searchTarget: Say I love you, Say I love you 71 | folder: diary 72 | datasetName: Done, NotDone 73 | pie: 74 | title: Love is Action 75 | data: '{{sum(dataset(0))}},{{sum(dataset(1))}}' 76 | dataColor: '#4daf4a,#377eb8' 77 | label: Say👍,Not Say💔 78 | ratioInnerRadius: 0.3 79 | ``` 80 | 81 | Summary 82 | ``` tracker 83 | searchType: task.done, task.notdone 84 | searchTarget: Say I love you, Say I love you 85 | folder: diary 86 | summary: 87 | template: "How many days I said love: {{sum(dataset(0))::i}}\nHow many days I didn't say love: {{sum(dataset(1))::i}}" 88 | ``` 89 | 90 | ## External Labels 91 | ``` tracker 92 | searchType: task.done, task.notdone 93 | searchTarget: Say I love you, Say I love you 94 | datasetName: Done, NotDone 95 | pie: 96 | label: '{{0.5/28.5*100}}%, {{4/28.5*100}}%, {{6/28.5*100}}%, {{8/28.5*100}}%, {{10/28.5*100}}%' 97 | extLabel: 'DataA {{0.5/28.5*100}}%, DataB, DataC, DataD, DataE' 98 | data: '0.5, 4, 6, 8, 10' 99 | dataColor: '#4daf4a,#377eb8,#ff7f00,#984ea3,#e41a1c' 100 | ratioInnerRadius: 0.6 101 | ``` 102 | 103 | 1. Label for the first data was hidden because the fraction of it is too small (less than 0.03, 3%). 104 | 2. showExtLabelOnlyIfNoLabel was set to true, thus the external label of the first data was shown due to the hidden label. 105 | ``` tracker 106 | searchType: task.done, task.notdone 107 | searchTarget: Say I love you, Say I love you 108 | datasetName: Done, NotDone 109 | pie: 110 | label: '{{0.5/28.5*100}}%, B {{4/28.5*100}}%, C {{6/28.5*100}}%, D {{8/28.5*100}}%, E {{10/28.5*100}}%' 111 | extLabel: 'A {{0.5/28.5*100}}%, {{4/28.5*100}}%, {{6/28.5*100}}%, {{8/28.5*100}}%, {{10/28.5*100}}%' 112 | data: '0.5, 4, 6, 8, 10' 113 | dataColor: '#4daf4a,#377eb8,#ff7f00,#984ea3,#e41a1c' 114 | ratioInnerRadius: 0.4 115 | hideLabelLessThan: 0.03 116 | showExtLabelOnlyIfNoLabel: true 117 | ``` 118 | 119 | When there are multiple external labels, make sure they won't overlap with each other 120 | ``` tracker 121 | searchType: task.done, task.notdone 122 | searchTarget: Say I love you, Say I love you 123 | datasetName: Done, NotDone 124 | pie: 125 | label: '{{0.5/11*100}}%, B {{0.4/11*100}}%, C {{0.1/11*100}}%, D {{8/11*100}}%, E {{9.7/11*100}}%, F {{0.3/28.5*100}}' 126 | extLabel: 'A {{0.5/11*100}}%, B {{0.4/11*100}}%, C {{0.1/11*100}}%, D {{8/11*100}}%, E {{9.7/11*100}}, F {{0.3/11*100}}%' 127 | data: '0.5, 0.4, 0.1, 8, 9.7, 0.3' 128 | dataColor: '#4daf4a,#377eb8,#ff7f00,#984ea3,#e41a1c,#aaaaaa' 129 | ratioInnerRadius: 0.4 130 | hideLabelLessThan: 0.03 131 | showExtLabelOnlyIfNoLabel: true 132 | ``` 133 | -------------------------------------------------------------------------------- /examples/TestRegex.md: -------------------------------------------------------------------------------- 1 | # Search Text using Regular Expression 2 | 3 | **Important**!! 4 | 1. Use single quotes to wrap the regular expression, or use double quotes with all back slashes (escape characters) duplicated. 5 | 2. You can make your own expression, or find a suitable one from website like [regex101](https://regex101.com). 6 | 3. Use a named group "(?\XXXXXX)" in your expression if you need values be retrieved from text. 7 | 8 | ## Count Occurencies (No Value) 9 | ### Occurencies of Email 10 | [Regex for searching simple emails](https://regex101.com/library/mF3pK7) 11 | ``` tracker 12 | searchType: text 13 | searchTarget: '.+\@.+\..+' 14 | folder: diary 15 | startDate: 2021-01-01 16 | endDate: 2021-01-31 17 | line: 18 | title: Email Occurencies 19 | yAxisLabel: Count 20 | lineColor: yellow 21 | yAxisTickInterval: 1.0 22 | yAxisTickLabelFormat: i 23 | yMin: 0 24 | yMax: 5 25 | ``` 26 | 27 | ``` tracker 28 | searchType: text 29 | searchTarget: '.+\@.+\..+' 30 | folder: diary 31 | startDate: 2021-01-01 32 | endDate: 2021-01-31 33 | summary: 34 | template: "Total number of emails found: {{sum()::i}}" 35 | style: "font-size:20px;color:red;margin-left: 50px;margin-top:00px;" 36 | ``` 37 | 38 | ## Count Values 39 | ### Weightlifting Tracker 40 | Track text in format "weightlifting: 10". 41 | [Regex for searching value-attached texts](https://regex101.com/r/eCWpgS/2) 42 | ``` tracker 43 | searchType: text 44 | searchTarget: 'weightlifting:\s+(?[\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)' 45 | folder: diary 46 | startDate: 2021-01-01 47 | endDate: 2021-01-31 48 | line: 49 | title: Weight Lifting 50 | yAxisLabel: Count 51 | lineColor: yellow 52 | ``` 53 | 54 | ### Dataview Compatible Tracker 55 | Use searchType 'dvField' instead 56 | ``` tracker 57 | searchType: text 58 | searchTarget: 'dataviewTarget::\s+(?[\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)' 59 | folder: diary 60 | startDate: 2021-01-01 61 | endDate: 2021-01-31 62 | line: 63 | title: Dataview Data 64 | yAxisLabel: Count 65 | lineColor: red 66 | yMin: 0 67 | ``` 68 | 69 | Use searchType 'dvField' with separators in the target instead 70 | ``` tracker 71 | searchType: text 72 | searchTarget: 'dataviewTarget2::\s+(?[\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)\s+@\s+([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+), dataviewTarget2::\s+([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)\s+@\s+(?[\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)' 73 | folder: diary 74 | startDate: 2021-01-01 75 | endDate: 2021-01-31 76 | line: 77 | title: Dataview Data 78 | yAxisLabel: Count 79 | lineColor: red, yellow 80 | yMin: 0 81 | ``` 82 | 83 | 84 | Please also check those search targets in markdown files under folder 'diary'. 85 | -------------------------------------------------------------------------------- /examples/TestRelativeStartEndDate.md: -------------------------------------------------------------------------------- 1 | # Test Relative startDate and endDate 2 | 3 | ``` tracker 4 | searchType: tag 5 | searchTarget: exercise-pushup 6 | folder: diary 7 | startDate: -48M 8 | endDate: -46M 9 | line: 10 | title: PushUp 11 | yAxisLabel: Count 12 | lineColor: "#d65d0e" 13 | yAxisTickInterval: 2 14 | ``` -------------------------------------------------------------------------------- /examples/TestScalingAndPositioning.md: -------------------------------------------------------------------------------- 1 | # Test Scaling and Positioning 2 | ## Scaling the chart 3 | Scaling factor 0.5 4 | ``` tracker 5 | searchType: tag 6 | searchTarget: exercise-pushup 7 | folder: diary 8 | endDate: 2021-01-31 9 | fixedScale: 0.5 10 | fitPanelWidth: false 11 | line: 12 | title: PushUp 13 | yAxisLabel: Count 14 | lineColor: "#d65d0e" 15 | ``` 16 | 17 | Scaling factor 1.5 18 | ``` tracker 19 | searchType: tag 20 | searchTarget: exercise-pushup 21 | folder: diary 22 | endDate: 2021-01-31 23 | fixedScale: 1.5 24 | fitPanelWidth: false 25 | line: 26 | title: PushUp 27 | yAxisLabel: Count 28 | lineColor: "#d65d0e" 29 | ``` 30 | 31 | ## Fitting the chart to the panel width 32 | ``` tracker 33 | searchType: tag 34 | searchTarget: exercise-pushup 35 | folder: diary 36 | endDate: 2021-01-31 37 | fixedScale: 1.0 38 | fitPanelWidth: true 39 | line: 40 | title: PushUp 41 | yAxisLabel: Count 42 | lineColor: "#d65d0e" 43 | ``` 44 | 45 | ## Chart Positioning 46 | margin: top right bottom left 47 | ``` tracker 48 | searchType: tag 49 | searchTarget: exercise-pushup 50 | folder: diary 51 | endDate: 2021-01-31 52 | fixedScale: 1.0 53 | fitPanelWidth: false 54 | margin: 10, 10, 10, 0 55 | line: 56 | title: PushUp 57 | yAxisLabel: Count 58 | lineColor: "#d65d0e" 59 | ``` 60 | 61 | ``` tracker 62 | searchType: tag 63 | searchTarget: exercise-pushup 64 | folder: diary 65 | endDate: 2021-01-31 66 | fixedScale: 1.0 67 | fitPanelWidth: false 68 | margin: 10, 10, 10, 50 69 | line: 70 | title: PushUp 71 | yAxisLabel: Count 72 | lineColor: "#d65d0e" 73 | ``` 74 | 75 | ``` tracker 76 | searchType: tag 77 | searchTarget: exercise-pushup 78 | folder: diary 79 | endDate: 2021-01-31 80 | fixedScale: 1.0 81 | fitPanelWidth: false 82 | margin: 10, 10, 10, 100 83 | line: 84 | title: PushUp 85 | yAxisLabel: Count 86 | lineColor: "#d65d0e" 87 | ``` 88 | 89 | ``` tracker 90 | searchType: tag 91 | searchTarget: exercise-pushup 92 | folder: diary 93 | endDate: 2021-01-31 94 | fixedScale: 1.0 95 | fitPanelWidth: false 96 | margin: 10, 10, 10, 150 97 | line: 98 | title: PushUp 99 | yAxisLabel: Count 100 | lineColor: "#d65d0e" 101 | ``` 102 | 103 | Please also check those search targets in markdown files under folder 'diary'. -------------------------------------------------------------------------------- /examples/TestSpecifiedFiles.md: -------------------------------------------------------------------------------- 1 | # Test Specified Files 2 | 3 | ## Collect Data from the Specified Files Only 4 | ``` tracker 5 | searchType: frontmatter, dvField 6 | searchTarget: date, dataviewTarget 7 | xDataset: 0 8 | file: data/data1, data/data2, data/data3 9 | specifiedFilesOnly: true 10 | line: 11 | ``` 12 | 13 | ## Collect Data from the Linked Files Only 14 | Count the MTG mana cost in linked files 15 | ``` tracker 16 | searchType: fileMeta, text 17 | searchTarget: 'cDate, {W}, {R}, {G}, {B}, {(?[0-9]+)}' 18 | fileContainsLinkedFiles: data/MTG-Deck-1 19 | specifiedFilesOnly: true 20 | fileMultiplierAfterLink: 'x(?[0-9]+)' 21 | xDataset: 0 22 | pie: 23 | label: '{{sum(dataset(1))::i}},{{sum(dataset(2))::i}},{{sum(dataset(3))::i}},{{sum(dataset(4))::i}},{{sum(dataset(5))::i}}' 24 | data: '{{sum(dataset(1))}},{{sum(dataset(2))}}, {{sum(dataset(3))}}, {{sum(dataset(4))}},{{sum(dataset(5))}}' 25 | dataColor: lightgray, firebrick, yellowgreen, lightblue, gray 26 | ``` -------------------------------------------------------------------------------- /examples/TestSummary.md: -------------------------------------------------------------------------------- 1 | # Test Summary 2 | 3 | ## Multiple Lines 4 | 5 | ``` tracker 6 | searchType: tag 7 | searchTarget: weight 8 | folder: diary 9 | summary: 10 | template: "Minimum: {{min()}}kg\nMaximum: {{max()}}kg\nMedian: {{median()}}kg\nAverage: {{average()}}kg" 11 | ``` 12 | 13 | ## Styling 14 | 15 | ``` tracker 16 | searchType: text 17 | searchTarget: ⭐ 18 | folder: diary 19 | summary: 20 | template: "I have {{sum()}} stars in total." 21 | style: "font-size:20px;color:yellow;margin-left: 50px;margin-top:00px;" 22 | ``` 23 | 24 | ``` tracker 25 | searchType: frontmatter 26 | searchTarget: sleptwell 27 | folder: diary 28 | summary: 29 | template: "I once slept well for {{maxStreak()::i}} days in a row!" 30 | ``` 31 | ## Using Expressions 32 | 33 | Please check [expression examples](https://github.com/pyrochlore/obsidian-tracker/blob/master/examples/TestExpression.md) for more examples. -------------------------------------------------------------------------------- /examples/TestTabCharacters.md: -------------------------------------------------------------------------------- 1 | # Test Tab Characters 2 | 3 | Tab characters will be replaced by numbers of spaces according to the tabSize defined in your editor settings 4 | 5 | ## Single Tab 6 | ``` tracker 7 | searchType: tag 8 | searchTarget: exercise-pushup 9 | folder: diary 10 | endDate: 2021-01-31 11 | line: 12 | title: PushUp 13 | yAxisLabel: Count 14 | lineColor: "#d65d0e" 15 | ``` 16 | 17 | ## Multiple Tabs 18 | 19 | ``` tracker 20 | searchType: tag 21 | searchTarget: exercise-pushup 22 | folder: diary 23 | endDate: 2021-01-31 24 | line: 25 | title: PushUp 26 | yAxisLabel: Count 27 | lineColor: "#d65d0e" 28 | ``` 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /examples/TestTable.md: -------------------------------------------------------------------------------- 1 | # Test Table 2 | 3 | ## Line Chart 4 | Use first column as X dataset , and second and third columns as Y values 5 | ``` tracker 6 | searchType: table 7 | searchTarget: data/Tables[0][0], data/Tables[0][1], data/Tables[0][2] 8 | xDataset: 0 9 | line: 10 | yAxisLocation: none, left, right 11 | lineColor: none, yellow, red 12 | showLegend: true 13 | ``` 14 | 15 | Use first column as X dataset , and third and forth columns as Y values 16 | ``` tracker 17 | searchType: table 18 | searchTarget: data/Tables[0][0], data/Tables[0][2], data/Tables[0][3] 19 | xDataset: 0 20 | line: 21 | yAxisLocation: none, left, right 22 | lineColor: none, yellow, red 23 | showLegend: true 24 | legendPosition: right 25 | ``` 26 | 27 | Use first column as X dataset. Second column posses multiple values in each cell. 28 | ``` tracker 29 | searchType: table 30 | searchTarget: data/Tables[1][0], data/Tables[1][1][0], data/Tables[1][1][1] 31 | xDataset: 0 32 | separator: "@" 33 | line: 34 | yAxisLocation: none, left, right 35 | lineColor: none, yellow, red 36 | showLegend: true 37 | legendPosition: right 38 | ``` 39 | 40 | ### Tables with Defects 41 | ``` tracker 42 | searchType: table 43 | searchTarget: data/Tables[2][0], data/Tables[2][1] 44 | xDataset: 0 45 | line: 46 | lineColor: none, yellow 47 | ``` 48 | 49 | Wrong date format in Table 50 | ``` tracker 51 | searchType: table 52 | searchTarget: data/Tables[3][0], data/Tables[3][1] 53 | xDataset: 0 54 | line: 55 | lineColor: none, yellow 56 | ``` 57 | 58 | ## Month View 59 | 60 | ``` tracker 61 | searchType: table 62 | searchTarget: data/Tables[0][0], data/Tables[0][1], data/Tables[0][2], data/Tables[0][3] 63 | xDataset: 0 64 | datasetName: null, Jeffrey, Lucas, Anne 65 | month: 66 | startWeekOn: 'Sun' 67 | threshold: 0, 62.2, 20.8, 18.2 68 | color: green 69 | headerMonthColor: orange 70 | dimNotInMonth: false 71 | todayRingColor: orange 72 | selectedRingColor: steelblue 73 | circleColorByValue: true 74 | showSelectedValue: true 75 | ``` 76 | 77 | Please also check those search targets in markdown file /data/Tables. 78 | -------------------------------------------------------------------------------- /examples/TestTask.md: -------------------------------------------------------------------------------- 1 | # Test Task 2 | 3 | ## Summary 4 | ### All Tasks 5 | Collect all tasks matched `searchTarget` 6 | ``` tracker 7 | searchType: task 8 | searchTarget: Say I love you 9 | folder: diary 10 | summary: 11 | template: "Total count: {{sum()}}" 12 | ``` 13 | 14 | ### All Tasks 15 | Collect all tasks matched `searchTarget` 16 | ``` tracker 17 | searchType: task.all 18 | searchTarget: Say I love you 19 | folder: diary 20 | summary: 21 | template: "Total count: {{sum()}}" 22 | ``` 23 | 24 | ### Task Done 25 | Collect all tasks done matched `searchTarget` 26 | ``` tracker 27 | searchType: task.done 28 | searchTarget: Say I love you 29 | folder: diary 30 | summary: 31 | template: "How many days I said: {{sum()}}" 32 | ``` 33 | 34 | ### Task Not Done 35 | Collect all tasks not-done matched `searchTarget` 36 | ``` tracker 37 | searchType: task.notdone 38 | searchTarget: Say I love you 39 | folder: diary 40 | summary: 41 | template: "How many days I didn't say: {{sum()}}" 42 | ``` 43 | 44 | ## Month View 45 | See tasks done in month view 46 | ``` tracker 47 | searchType: task.done 48 | searchTarget: Say I love you 49 | folder: diary 50 | datasetName: Love 51 | endDate: 2021-01-31 52 | month: 53 | color: tomato 54 | headerMonthColor: orange 55 | todayRingColor: orange 56 | selectedRingColor: steelblue 57 | showSelectedValue: false 58 | ``` 59 | 60 | task.done and task.notdone 61 | ``` tracker 62 | searchType: task.done, task.notdone 63 | searchTarget: Say I love you, Say I love you 64 | folder: diary 65 | datasetName: Good Lover, Bad Lover 66 | endDate: 2021-01-31 67 | month: 68 | color: tomato 69 | headerMonthColor: orange 70 | todayRingColor: orange 71 | selectedRingColor: steelblue 72 | showSelectedValue: false 73 | ``` -------------------------------------------------------------------------------- /examples/TestTextValueMap.md: -------------------------------------------------------------------------------- 1 | # Test textValueMap 2 | 3 | ## Mood 4 | ``` tracker 5 | searchType: frontmatter 6 | searchTarget: "mood" 7 | folder: diary 8 | endDate: 2021-01-31 9 | textValueMap: 10 | 😀: 5 11 | 🙂: 4 12 | 😐: 3 13 | 🙁: 2 14 | 😞: 1 15 | line: 16 | title: "Mood" 17 | yAxisLabel: Mood 18 | lineColor: "#d65d0e" 19 | yAxisTickInterval: 1 20 | yAxisTickLabelFormat: i 21 | yMin: 0 22 | ``` 23 | -------------------------------------------------------------------------------- /examples/TestTimeValues.md: -------------------------------------------------------------------------------- 1 | # Test Time Values 2 | 3 | ## From frontmatter 4 | Clock-In & Clock-Out from front matter 5 | ``` tracker 6 | searchType: frontmatter 7 | searchTarget: clock-in, clock-out 8 | endDate: 2021-01-15 9 | folder: diary 10 | datasetName: Clock-In, Clock-Out 11 | line: 12 | title: "Working Hours" 13 | yAxisLabel: "Time (24h)" 14 | reverseYAxis: true 15 | lineColor: yellow, red 16 | showPoint: true 17 | showLegend: true 18 | ``` 19 | 20 | Sleep time separated by / from front matter 21 | ``` tracker 22 | searchType: frontmatter 23 | searchTarget: sleep[0], sleep[1] 24 | endDate: 2021-01-15 25 | folder: diary 26 | valueShift: -24:00, 00:00 27 | datasetName: Sleep, WakeUp 28 | line: 29 | title: "Sleep" 30 | yAxisLabel: "Time (24h)" 31 | lineColor: yellow, red 32 | showPoint: true 33 | showLegend: true 34 | ``` 35 | 36 | ## From dvField 37 | Clock-In & Clock-Out from dvField 38 | time granularity to one second 39 | ``` tracker 40 | searchType: dvField 41 | searchTarget: clock-in, clock-out 42 | endDate: 2021-01-15 43 | folder: diary 44 | datasetName: Clock-In, Clock-Out 45 | line: 46 | title: "Working Hours" 47 | yAxisLabel: "Time (24h)" 48 | reverseYAxis: true 49 | lineColor: yellow, red 50 | showPoint: true 51 | showLegend: true 52 | ``` 53 | 54 | Sleep time separated by / from dvField 55 | ``` tracker 56 | searchType: dvField 57 | searchTarget: sleep[0], sleep[1] 58 | endDate: 2021-01-15 59 | folder: diary 60 | valueShift: -24:00, 00:00 61 | datasetName: Sleep, WakeUp 62 | line: 63 | title: "Sleep" 64 | yAxisLabel: "Time (24h)" 65 | lineColor: yellow, red 66 | showPoint: true 67 | showLegend: true 68 | ``` 69 | 70 | Please also check those search targets in markdown files under folder 'diary'. -------------------------------------------------------------------------------- /examples/TestWordCounting.md: -------------------------------------------------------------------------------- 1 | # Test Word Counting 2 | 3 | 4 | ## Word counts of daily notes 5 | ``` tracker 6 | searchType: fileMeta 7 | searchTarget: numWords, numChars 8 | folder: diary 9 | startDate: 2021-01-01 10 | endDate: 2021-01-05 11 | datasetName: words, chars 12 | line: 13 | title: Word Counting 14 | yAxisLocation: left, right 15 | yAxisLabel: Words, Characters 16 | lineColor: red, yellow 17 | showLegend: true 18 | ``` 19 | 20 | ``` tracker 21 | searchType: fileMeta 22 | searchTarget: numWords 23 | folder: diary 24 | startDate: 2021-01-01 25 | endDate: 2021-01-05 26 | summary: 27 | template: 'Total number of words: {{sum()}}' 28 | ``` 29 | 30 | ``` tracker 31 | searchType: fileMeta 32 | searchTarget: numChars 33 | folder: diary 34 | startDate: 2021-01-01 35 | endDate: 2021-01-05 36 | summary: 37 | template: 'Total number of characters: {{sum()}}' 38 | ``` 39 | 40 | ## Word counts of all notes 41 | Use file creation dates as x values then sum the counts up 42 | ``` tracker 43 | searchType: fileMeta 44 | searchTarget: cDate, numWords 45 | xDataset: 0 46 | folder: / 47 | summary: 48 | template: "Total word count: {{sum(dataset(1))}}" 49 | ``` 50 | 51 | -------------------------------------------------------------------------------- /examples/TestXDataset.md: -------------------------------------------------------------------------------- 1 | # Test X Dataset 2 | 3 | Use file created dates (cDate) as x values 4 | ``` tracker 5 | searchType: fileMeta, dvField 6 | searchTarget: cDate, dataviewTarget 7 | xDataset: 0 8 | folder: data 9 | line: 10 | fillGap: true 11 | ``` 12 | 13 | Use dates from front matter as x values 14 | ``` tracker 15 | searchType: frontmatter, dvField 16 | searchTarget: date, dataviewTarget 17 | xDataset: 0 18 | folder: data 19 | line: 20 | title: Dataview Inline Field 21 | fillGap: true 22 | ``` 23 | 24 | Use dates from date-attached tags as x values 25 | ``` tracker 26 | searchType: tag, dvField 27 | searchTarget: date, dataviewTarget 28 | xDataset: 0 29 | folder: data 30 | line: 31 | title: Dataview Inline Field 32 | fillGap: true 33 | ``` 34 | 35 | Use dates from Dataview inline fields as x values 36 | ``` tracker 37 | searchType: dvField, dvField 38 | searchTarget: date, dataviewTarget 39 | xDataset: 0 40 | folder: data 41 | line: 42 | title: Dataview Inline Field 43 | fillGap: true 44 | ``` 45 | 46 | Use dates from formatted text as x values 47 | ``` tracker 48 | searchType: text, dvField 49 | searchTarget: 'Today\sis\s(?([0-9]{4})-([0-9]{2})-([0-9]{2})), dataviewTarget' 50 | xDataset: 0 51 | folder: data 52 | line: 53 | title: Dataview Inline Field 54 | fillGap: true 55 | ``` 56 | 57 | Please also check those search targets in markdown files under folder 'data'. 58 | -------------------------------------------------------------------------------- /examples/WeightTracker.md: -------------------------------------------------------------------------------- 1 | # Weight Tracker 2 | 3 | ``` tracker 4 | searchType: tag 5 | searchTarget: weight 6 | folder: diary 7 | startDate: 2021-01-01 8 | endDate: 2021-01-31 9 | aspectRatio: 20:9 10 | fitPanelWidth: 1 11 | line: 12 | title: Weight Log 13 | yAxisLabel: Weight 14 | yAxisUnit: kg 15 | lineColor: yellow 16 | ``` 17 | 18 | ## Summary 19 | ``` tracker 20 | searchType: tag 21 | searchTarget: weight 22 | folder: diary 23 | summary: 24 | template: "First: {{first()}}kg\nLast: {{last()}}kg\nMinimum: {{min()}}kg\nMaximum: {{max()}}kg\nMedian: {{median()}}kg\nAverage: {{average()}}kg" 25 | ``` 26 | 27 | ``` tracker 28 | searchType: tag 29 | searchTarget: weight 30 | folder: diary 31 | endDate: 2021-01-31 32 | line: 33 | title: Weight Log 34 | yAxisLabel: Weight 35 | yAxisUnit: kg 36 | showPoint: false 37 | lineColor: "#b16286" 38 | ``` 39 | 40 | Please also check those search targets in markdown files under folder 'diary'. 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /examples/WikiTracker.md: -------------------------------------------------------------------------------- 1 | # Wiki Tracker 2 | 3 | wiki --> Try parse the display text first, if it does not exist, parse the link text 4 | wiki.link --> Parse the link text 5 | wiki.display --> Parse the display text 6 | 7 | In the example notes, we have 8 | [[todo_family|To-Do @Family]] 9 | [[todo_work|To-Do @Work]] 10 | 11 | ## wiki.link 12 | ``` tracker 13 | searchType: wiki.link 14 | searchTarget: todo_work 15 | folder: diary 16 | startDate: 2021-01-01 17 | endDate: 2021-01-31 18 | summary: 19 | template: '{{sum()::i}}' 20 | ``` 21 | 22 | ## wiki.display 23 | ``` tracker 24 | searchType: wiki.display 25 | searchTarget: To 26 | folder: diary 27 | startDate: 2021-01-01 28 | endDate: 2021-01-31 29 | summary: 30 | template: '{{sum()::i}}' 31 | ``` 32 | 33 | 34 | Please also check those search targets in markdown files under folder 'diary'. 35 | -------------------------------------------------------------------------------- /examples/data/In-Sentence-Fields.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2021-01-05 3 | --- 4 | 5 | I am [count:: 1] inline 6 | So am (count::2) I 7 | count:: 3 8 | | count:: 4 | 9 | |count:: 5| -------------------------------------------------------------------------------- /examples/data/MTG-Card-1.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | {R}{R} -------------------------------------------------------------------------------- /examples/data/MTG-Card-2.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | {B}{B}{R}{2} -------------------------------------------------------------------------------- /examples/data/MTG-Card-3.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | {G}{G}{G}{G}{G}{0} -------------------------------------------------------------------------------- /examples/data/MTG-Card-4.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | {W} -------------------------------------------------------------------------------- /examples/data/MTG-Deck-1.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [[MTG-Card-1]] x1 4 | [[MTG-Card-2]] x2 5 | [[MTG-Card-3]] x2 6 | [[MTG-Card-4]] x5 -------------------------------------------------------------------------------- /examples/data/Set-FileDates.ps1: -------------------------------------------------------------------------------- 1 | (Get-Item "./data1.md").CreationTime=("25 May 2021 17:00:00") 2 | (Get-Item "./data2.md").CreationTime=("27 May 2021 17:00:00") 3 | (Get-Item "./data3.md").CreationTime=("29 May 2021 17:00:00") 4 | (Get-Item "./data1.md").LastWriteTime=("25 May 2021 17:00:00") 5 | (Get-Item "./data2.md").LastWriteTime=("27 May 2021 17:00:00") 6 | (Get-Item "./data3.md").LastWriteTime=("29 May 2021 17:00:00") -------------------------------------------------------------------------------- /examples/data/Tables.md: -------------------------------------------------------------------------------- 1 | # Tables 2 | 3 | ## Weight Table 4 | Date | Jeffrey (kg) | Lucas (kg) | Anne (kg) | 5 | | - | - | - | - | 6 | | 2021-05-01 | 60.0 | 20.1 | 18.2 7 | 2021-05-02 | 62.1 | 20.5 | 18.1 | 8 | | 2021-05-03 | 62.2 | 20.3 | 18.3 9 | | 2021-05-04 | 62.3 | 20.4 | 18.2 | 10 | 2021-05-05 | 62.2 | 20.2 | 18.4 11 | | [[2021-05-06]] | 62.4 | 21.0 | 18.4 12 | | 2021-05-07 | 62.6 | 20.9 | 18.3 | 13 | | 2021-05-08 | 62.3 | 20.9 | 18.2 14 | | [[2021-05-09]] | 62.2 | 20.3 | 18.5 15 | | [[2021-05-10]] | 62.1 | 20.8 | 18.9 16 | 17 | 18 | ## Running Records 19 | 20 | Date | km @ min/km | 21 | | - | - | 22 | | 2021-05-01 | 5.32 @ 6.32 | 23 | 2021-05-02 | 5.0 @ 6.30 24 | | 2021-05-03 | 5.22 @ 6.12 25 | | 2021-05-04 | 5.10 @ 6.10 | 26 | 2021-05-05 | 5.35 @ 6.05 27 | | 2021-05-06 | 5.45 @ 6.05 | 28 | | 2021-05-07 | 5.73 @ 5.05 | 29 | | 2021-05-08 | 6.25 @ 5.55 | 30 | | 2021-05-09 | 6.25 @ 5.45 | 31 | | 2021-05-10 | 6.35 @ 5.75 | 32 | 33 | ## Tables with Defects 34 | More columns than need, graph still rendered 35 | 36 | Date | Weight (kg) | 37 | | - | - | - 38 | | 2021-05-01 | 60.0 | 20.1 | 39 | 2021-05-02 | 62.1 | 20.5 40 | | 2021-05-03 | 62.2 | 20.3 | 41 | 42 | The row with wrong date format will be skipped 43 | 44 | Date | Weight (kg) | 45 | | - | - | - 46 | | not a date | 60.0 | 20.1 | 47 | 2021-05-02 | 62.1 | 20.5 48 | | 2021-05-03 | 62.2 | 20.3 | 49 | 50 | All dates are invalid, leads to an error message 51 | 52 | Date | Weight (kg) | 53 | | - | - | - 54 | | not a date | 60.0 | 20.1 | 55 | not a date | 62.1 | 20.5 56 | | not a date | 62.2 | 20.3 | -------------------------------------------------------------------------------- /examples/data/data1.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2021-01-01 3 | --- 4 | 5 | #date:2021-01-01 6 | date:: 2021-01-01 7 | 8 | dataviewTarget:: 50 9 | 10 | Today is 2021-01-01 -------------------------------------------------------------------------------- /examples/data/data2.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2021-01-02 3 | --- 4 | 5 | #date:2021-01-03 6 | date:: 2021-01-05 7 | 8 | dataviewTarget:: 30 9 | 10 | Today is 2021-01-10 -------------------------------------------------------------------------------- /examples/data/data3.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2021-01-03 3 | --- 4 | 5 | #date:2021-01-05 6 | date:: 2021-01-09 7 | 8 | dataviewTarget:: 80 9 | 10 | Today is 2021-01-20 -------------------------------------------------------------------------------- /examples/diary/01-01-2021.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 6 4 | --- 5 | 6 | #weight:66.9kg 7 | 8 | #exercise-pushup:33 9 | #exercise-plank:85sec 10 | 11 | 12 | ⭐⭐⭐⭐ 13 | 14 | #finance/bank1:-2.7USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker+1@gmail.com 20 | obsidian-tracker@yahoo.com 21 | 22 | 23 | -------------------------------------------------------------------------------- /examples/diary/01.01.2021.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 6 4 | --- 5 | 6 | #weight:66.9kg 7 | 8 | #exercise-pushup:33 9 | #exercise-plank:85sec 10 | 11 | 12 | ⭐⭐⭐⭐ 13 | 14 | #finance/bank1:-2.7USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker+1@gmail.com 20 | obsidian-tracker@yahoo.com 21 | 22 | 23 | -------------------------------------------------------------------------------- /examples/diary/02-01-2021.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 5 4 | --- 5 | 6 | #weight:69.4kg 7 | 8 | #exercise-pushup:30 9 | #exercise-plank:93sec 10 | 11 | 12 | ⭐⭐ 13 | 14 | #finance/bank1:-3.1USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker@gmail.com 20 | obsidian-tracker@yahoo.com 21 | 22 | weightlifting: 14 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/02.01.2021.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 5 4 | --- 5 | 6 | #weight:69.4kg 7 | 8 | #exercise-pushup:30 9 | #exercise-plank:93sec 10 | 11 | 12 | ⭐⭐ 13 | 14 | #finance/bank1:-3.1USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker@gmail.com 20 | obsidian-tracker@yahoo.com 21 | 22 | weightlifting: 14 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/03-01-2021.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 5 4 | --- 5 | 6 | #weight:69.3kg 7 | 8 | #exercise-pushup:39 9 | #exercise-plank:98sec 10 | 11 | 12 | ⭐ 13 | 14 | #finance/bank1:-2.2USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker@gmail.com 20 | obsidian-tracker+1@gmail.com 21 | 22 | weightlifting: 14 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/03.01.2021.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 5 4 | --- 5 | 6 | #weight:69.3kg 7 | 8 | #exercise-pushup:39 9 | #exercise-plank:98sec 10 | 11 | 12 | ⭐ 13 | 14 | #finance/bank1:-2.2USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker@gmail.com 20 | obsidian-tracker+1@gmail.com 21 | 22 | weightlifting: 14 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/04-01-2021.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 7 4 | --- 5 | 6 | #weight:70.6kg 7 | 8 | #exercise-pushup:41 9 | #exercise-plank:87sec 10 | 11 | 12 | ⭐ 13 | 14 | #finance/bank1:-3.3USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker+1@gmail.com 20 | obsidian-tracker@yahoo.com 21 | 22 | weightlifting: 11 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/04.01.2021.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 7 4 | --- 5 | 6 | #weight:70.6kg 7 | 8 | #exercise-pushup:41 9 | #exercise-plank:87sec 10 | 11 | 12 | ⭐ 13 | 14 | #finance/bank1:-3.3USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker+1@gmail.com 20 | obsidian-tracker@yahoo.com 21 | 22 | weightlifting: 11 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/05-01-2021.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 8 4 | --- 5 | 6 | #weight:60.2kg 7 | 8 | #exercise-pushup:50 9 | #exercise-plank:55sec 10 | 11 | #meditation 12 | 13 | ⭐⭐⭐ 14 | 15 | #finance/bank1:-2.2USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker@yahoo.com 21 | 22 | weightlifting: 20 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/05.01.2021.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 8 4 | --- 5 | 6 | #weight:60.2kg 7 | 8 | #exercise-pushup:50 9 | #exercise-plank:55sec 10 | 11 | #meditation 12 | 13 | ⭐⭐⭐ 14 | 15 | #finance/bank1:-2.2USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker@yahoo.com 21 | 22 | weightlifting: 20 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/1-20210101.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 6 4 | --- 5 | 6 | #weight:66.9kg 7 | 8 | #exercise-pushup:33 9 | #exercise-plank:85sec 10 | 11 | 12 | ⭐⭐⭐⭐ 13 | 14 | #finance/bank1:-2.7USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker+1@gmail.com 20 | obsidian-tracker@yahoo.com 21 | 22 | 23 | -------------------------------------------------------------------------------- /examples/diary/2-20210102.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 5 4 | --- 5 | 6 | #weight:69.4kg 7 | 8 | #exercise-pushup:30 9 | #exercise-plank:93sec 10 | 11 | 12 | ⭐⭐ 13 | 14 | #finance/bank1:-3.1USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker@gmail.com 20 | obsidian-tracker@yahoo.com 21 | 22 | weightlifting: 14 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/2021-01-01-Friday.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 6 4 | --- 5 | 6 | #weight:66.9kg 7 | 8 | #exercise-pushup:33 9 | #exercise-plank:85sec 10 | 11 | 12 | ⭐⭐⭐⭐ 13 | 14 | #finance/bank1:-2.7USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker+1@gmail.com 20 | obsidian-tracker@yahoo.com 21 | 22 | 23 | -------------------------------------------------------------------------------- /examples/diary/2021-01-01.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 🙁 4 | bloodpressure: 184.4/118.8 5 | bloodpressure1: 184.4, 118.8 6 | bloodpressure2: [184.4, 118.8] 7 | bp: 8 | systolic: 184.4 9 | diastolic: 118.8 10 | clock-in: 10:45 11 | clock-out: 20:51 12 | sleep: 10:11 pm/7:5 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 27.4 20 | randchar: D 21 | --- 22 | 23 | #weight:74.1kg 24 | 25 | #exercise-pushup:31 26 | #exercise-plank:109sec 27 | 28 | 29 | 30 | 31 | 32 | #finance/bank1:-3.5USD 33 | 34 | [[todo_family|To-Do @Family]] 35 | [[todo_work|To-Do @Work]] 36 | 37 | obsidian-tracker+1@gmail.com 38 | 39 | weightlifting: 18 40 | 41 | dataviewTarget:: 48 42 | - Make Progress:: 29 43 | - Make-Progress:: 88 44 | dataviewTarget1:: 48/29 45 | dataviewTarget2:: 29 @ 88 46 | dataviewTarget3:: 29, 88 47 | 48 | clock-in:: 10:45:29 49 | clock-out:: 20:51:29 50 | 51 | sleep:: 10:11 pm/7:5 am 52 | 53 | #sin:0.00000/0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452 54 | 55 | #sinsquare:0.00000/0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907 56 | 57 | - [x] Say I love you 58 | 59 | -------------------------------------------------------------------------------- /examples/diary/2021-01-02-Saturday.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 5 4 | --- 5 | 6 | #weight:69.4kg 7 | 8 | #exercise-pushup:30 9 | #exercise-plank:93sec 10 | 11 | 12 | ⭐⭐ 13 | 14 | #finance/bank1:-3.1USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker@gmail.com 20 | obsidian-tracker@yahoo.com 21 | 22 | weightlifting: 14 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/2021-01-02.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 🙁 4 | bloodpressure: 180.8/120.6 5 | bloodpressure1: 180.8, 120.6 6 | bloodpressure2: [180.8, 120.6] 7 | bp: 8 | systolic: 180.8 9 | diastolic: 120.6 10 | clock-in: 8:7 11 | clock-out: 20:10 12 | sleep: 9:37 pm/7:57 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 13.3 20 | randchar: D 21 | --- 22 | 23 | #weight:76.2kg 24 | 25 | #exercise-pushup:46 26 | #exercise-plank:52sec 27 | 28 | #meditation 29 | 30 | 31 | 32 | 33 | #finance/bank1:-3.5USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | 39 | weightlifting: 13 40 | 41 | dataviewTarget:: 25 42 | - Make Progress:: 5 43 | - Make-Progress:: 72 44 | dataviewTarget1:: 25/5 45 | dataviewTarget2:: 5 @ 72 46 | dataviewTarget3:: 5, 72 47 | 48 | clock-in:: 8:7:5 49 | clock-out:: 20:10:5 50 | 51 | sleep:: 9:37 pm/7:57 am 52 | 53 | #sin:0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106 54 | 55 | #sinsquare:0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451 56 | 57 | - [x] Say I love you 58 | 59 | -------------------------------------------------------------------------------- /examples/diary/2021-01-03-Sunday.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 5 4 | --- 5 | 6 | #weight:69.3kg 7 | 8 | #exercise-pushup:39 9 | #exercise-plank:98sec 10 | 11 | 12 | ⭐ 13 | 14 | #finance/bank1:-2.2USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker@gmail.com 20 | obsidian-tracker+1@gmail.com 21 | 22 | weightlifting: 14 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/2021-01-03.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 🙁 4 | bloodpressure: 180.2/118.4 5 | bloodpressure1: 180.2, 118.4 6 | bloodpressure2: [180.2, 118.4] 7 | bp: 8 | systolic: 180.2 9 | diastolic: 118.4 10 | clock-in: 10:49 11 | clock-out: 16:33 12 | sleep: 9:17 pm/6:48 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 73.0 20 | randchar: D 21 | --- 22 | 23 | #weight:63.2kg 24 | 25 | #exercise-pushup:49 26 | #exercise-plank:79sec 27 | 28 | #meditation 29 | 30 | ⭐ 31 | 32 | 33 | #finance/bank1:-2.4USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | obsidian-tracker@yahoo.com 39 | 40 | 41 | dataviewTarget:: 12 42 | - Make Progress:: 14 43 | - Make-Progress:: 82 44 | dataviewTarget1:: 12/14 45 | dataviewTarget2:: 14 @ 82 46 | dataviewTarget3:: 14, 82 47 | 48 | clock-in:: 10:49:14 49 | clock-out:: 16:33:14 50 | 51 | sleep:: 9:17 pm/6:48 am 52 | 53 | #sin:0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603 54 | 55 | #sinsquare:0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000 56 | 57 | - [ ] Say I love you 58 | 59 | -------------------------------------------------------------------------------- /examples/diary/2021-01-04-Monday.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 7 4 | --- 5 | 6 | #weight:70.6kg 7 | 8 | #exercise-pushup:41 9 | #exercise-plank:87sec 10 | 11 | 12 | ⭐ 13 | 14 | #finance/bank1:-3.3USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker+1@gmail.com 20 | obsidian-tracker@yahoo.com 21 | 22 | weightlifting: 11 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/2021-01-04.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 🙂 4 | bloodpressure: 176.6/121.2 5 | bloodpressure1: 176.6, 121.2 6 | bloodpressure2: [176.6, 121.2] 7 | bp: 8 | systolic: 176.6 9 | diastolic: 121.2 10 | clock-in: 10:41 11 | clock-out: 20:52 12 | sleep: 10:10 pm/6:37 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 88.6 20 | randchar: B 21 | --- 22 | 23 | #weight:61.6kg 24 | 25 | #exercise-pushup:33 26 | #exercise-plank:114sec 27 | 28 | #meditation 29 | 30 | ⭐ 31 | 32 | #clean-up 33 | 34 | #finance/bank1:-3.8USD 35 | 36 | [[todo_family|To-Do @Family]] 37 | [[todo_work|To-Do @Work]] 38 | 39 | obsidian-tracker@gmail.com 40 | obsidian-tracker+1@gmail.com 41 | obsidian-tracker@yahoo.com 42 | 43 | weightlifting: 18 44 | 45 | dataviewTarget:: 43 46 | - Make Progress:: 29 47 | - Make-Progress:: 74 48 | dataviewTarget1:: 43/29 49 | dataviewTarget2:: 29 @ 74 50 | dataviewTarget3:: 29, 74 51 | 52 | clock-in:: 10:41:29 53 | clock-out:: 20:52:29 54 | 55 | sleep:: 10:10 pm/6:37 am 56 | 57 | #sin:0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314 58 | 59 | #sinsquare:0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226 60 | 61 | - [x] Say I love you 62 | 63 | -------------------------------------------------------------------------------- /examples/diary/2021-01-05-Tuesday.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 8 4 | --- 5 | 6 | #weight:60.2kg 7 | 8 | #exercise-pushup:50 9 | #exercise-plank:55sec 10 | 11 | #meditation 12 | 13 | ⭐⭐⭐ 14 | 15 | #finance/bank1:-2.2USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker@yahoo.com 21 | 22 | weightlifting: 20 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/2021-01-05.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 😀 4 | bloodpressure: 180/118 5 | bloodpressure1: 180, 118 6 | bloodpressure2: [180, 118] 7 | bp: 8 | systolic: 180 9 | diastolic: 118 10 | clock-in: 9:1 11 | clock-out: 18:57 12 | sleep: 9:9 pm/5:57 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 13.1 20 | randchar: A 21 | --- 22 | 23 | #weight:72.5kg 24 | 25 | #exercise-pushup:5 26 | #exercise-plank:57sec 27 | 28 | #meditation 29 | 30 | ⭐ 31 | 32 | 33 | #finance/bank1:-3.9USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | obsidian-tracker@gmail.com 39 | obsidian-tracker+1@gmail.com 40 | 41 | weightlifting: 17 42 | 43 | dataviewTarget:: 86 44 | - Make Progress:: 24 45 | - Make-Progress:: 90 46 | dataviewTarget1:: 86/24 47 | dataviewTarget2:: 24 @ 90 48 | dataviewTarget3:: 24, 90 49 | 50 | clock-in:: 9:1:24 51 | clock-out:: 18:57:24 52 | 53 | sleep:: 9:9 pm/5:57 am 54 | 55 | #sin:0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314/0.58779 56 | 57 | #sinsquare:0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226/0.34549 58 | 59 | - [x] Say I love you 60 | 61 | -------------------------------------------------------------------------------- /examples/diary/2021-01-06.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 🙁 4 | bloodpressure: 171.4/118.8 5 | bloodpressure1: 171.4, 118.8 6 | bloodpressure2: [171.4, 118.8] 7 | bp: 8 | systolic: 171.4 9 | diastolic: 118.8 10 | clock-in: 10:27 11 | clock-out: 19:26 12 | sleep: 10:30 pm/5:29 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 20.7 20 | randchar: D 21 | --- 22 | 23 | #weight:60.1kg 24 | 25 | #exercise-pushup:46 26 | #exercise-plank:110sec 27 | 28 | #meditation 29 | 30 | ⭐⭐⭐ 31 | 32 | #clean-up 33 | 34 | #finance/bank1:-2.4USD 35 | 36 | [[todo_family|To-Do @Family]] 37 | [[todo_work|To-Do @Work]] 38 | 39 | obsidian-tracker+1@gmail.com 40 | 41 | weightlifting: 19 42 | 43 | dataviewTarget:: 98 44 | - Make Progress:: 46 45 | - Make-Progress:: 75 46 | dataviewTarget1:: 98/46 47 | dataviewTarget2:: 46 @ 75 48 | dataviewTarget3:: 46, 75 49 | 50 | clock-in:: 10:27:46 51 | clock-out:: 19:26:46 52 | 53 | sleep:: 10:30 pm/5:29 am 54 | 55 | #sin:0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314/0.58779/0.40674 56 | 57 | #sinsquare:0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226/0.34549/0.16543 58 | 59 | - [x] Say I love you 60 | 61 | -------------------------------------------------------------------------------- /examples/diary/2021-01-07.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 😀 4 | bloodpressure: 175.8/120.6 5 | bloodpressure1: 175.8, 120.6 6 | bloodpressure2: [175.8, 120.6] 7 | bp: 8 | systolic: 175.8 9 | diastolic: 120.6 10 | clock-in: 9:53 11 | clock-out: 17:39 12 | sleep: 10:53 pm/7:13 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 47.8 20 | randchar: A 21 | --- 22 | 23 | #weight:70.2kg 24 | 25 | #exercise-pushup:33 26 | #exercise-plank:103sec 27 | 28 | 29 | ⭐ 30 | 31 | 32 | #finance/bank1:-2.6USD 33 | 34 | [[todo_family|To-Do @Family]] 35 | [[todo_work|To-Do @Work]] 36 | 37 | obsidian-tracker@gmail.com 38 | obsidian-tracker@yahoo.com 39 | 40 | weightlifting: 10 41 | 42 | dataviewTarget:: 43 43 | - Make Progress:: 6 44 | - Make-Progress:: 77 45 | dataviewTarget1:: 43/6 46 | dataviewTarget2:: 6 @ 77 47 | dataviewTarget3:: 6, 77 48 | 49 | clock-in:: 9:53:6 50 | clock-out:: 17:39:6 51 | 52 | sleep:: 10:53 pm/7:13 am 53 | 54 | #sin:0.95106/0.99452/0.99452/0.95106/0.86603/0.74314/0.58779/0.40674/0.20791 55 | 56 | #sinsquare:0.90451/0.98907/0.98907/0.90451/0.75000/0.55226/0.34549/0.16543/0.04323 57 | 58 | - [x] Say I love you 59 | 60 | -------------------------------------------------------------------------------- /examples/diary/2021-01-08.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 😀 4 | bloodpressure: 172.2/116.4 5 | bloodpressure1: 172.2, 116.4 6 | bloodpressure2: [172.2, 116.4] 7 | bp: 8 | systolic: 172.2 9 | diastolic: 116.4 10 | clock-in: 8:5 11 | clock-out: 16:5 12 | sleep: 9:1 pm/6:56 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 68.6 20 | randchar: A 21 | --- 22 | 23 | #weight:74.0kg 24 | 25 | #exercise-pushup:33 26 | #exercise-plank:77sec 27 | 28 | 29 | ⭐ 30 | 31 | 32 | #finance/bank1:-2.9USD 33 | 34 | [[todo_family|To-Do @Family]] 35 | [[todo_work|To-Do @Work]] 36 | 37 | obsidian-tracker@gmail.com 38 | obsidian-tracker@yahoo.com 39 | 40 | weightlifting: 19 41 | 42 | dataviewTarget:: 39 43 | - Make Progress:: 25 44 | - Make-Progress:: 77 45 | dataviewTarget1:: 39/25 46 | dataviewTarget2:: 25 @ 77 47 | dataviewTarget3:: 25, 77 48 | 49 | clock-in:: 8:5:25 50 | clock-out:: 16:5:25 51 | 52 | sleep:: 9:1 pm/6:56 am 53 | 54 | #sin:0.99452/0.99452/0.95106/0.86603/0.74314/0.58779/0.40674/0.20791/0.00000 55 | 56 | #sinsquare:0.98907/0.98907/0.90451/0.75000/0.55226/0.34549/0.16543/0.04323/0.00000 57 | 58 | - [ ] Say I love you 59 | 60 | -------------------------------------------------------------------------------- /examples/diary/2021-01-09.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 😀 4 | bloodpressure: 175.6/118.2 5 | bloodpressure1: 175.6, 118.2 6 | bloodpressure2: [175.6, 118.2] 7 | bp: 8 | systolic: 175.6 9 | diastolic: 118.2 10 | clock-in: 8:37 11 | clock-out: 17:9 12 | sleep: 9:23 pm/5:51 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 68.6 20 | randchar: A 21 | --- 22 | 23 | #weight:68.8kg 24 | 25 | #exercise-pushup:35 26 | #exercise-plank:112sec 27 | 28 | #meditation 29 | 30 | ⭐⭐⭐ 31 | 32 | 33 | #finance/bank1:-3.8USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | obsidian-tracker@gmail.com 39 | obsidian-tracker+1@gmail.com 40 | obsidian-tracker@yahoo.com 41 | 42 | weightlifting: 10 43 | 44 | dataviewTarget:: 37 45 | - Make Progress:: 36 46 | - Make-Progress:: 53 47 | dataviewTarget1:: 37/36 48 | dataviewTarget2:: 36 @ 53 49 | dataviewTarget3:: 36, 53 50 | 51 | clock-in:: 8:37:36 52 | clock-out:: 17:9:36 53 | 54 | sleep:: 9:23 pm/5:51 am 55 | 56 | #sin:0.99452/0.95106/0.86603/0.74314/0.58779/0.40674/0.20791/0.00000/-0.20791 57 | 58 | #sinsquare:0.98907/0.90451/0.75000/0.55226/0.34549/0.16543/0.04323/0.00000/0.04323 59 | 60 | - [x] Say I love you 61 | 62 | -------------------------------------------------------------------------------- /examples/diary/2021-01-10.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 🙂 4 | bloodpressure: 179/116 5 | bloodpressure1: 179, 116 6 | bloodpressure2: [179, 116] 7 | bp: 8 | systolic: 179 9 | diastolic: 116 10 | clock-in: 10:25 11 | clock-out: 17:55 12 | sleep: 10:11 pm/5:31 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 17.7 20 | randchar: B 21 | --- 22 | 23 | #weight:62.1kg 24 | 25 | #exercise-pushup:41 26 | #exercise-plank:92sec 27 | 28 | 29 | ⭐⭐⭐ 30 | 31 | 32 | #finance/bank1:-2.2USD 33 | 34 | [[todo_family|To-Do @Family]] 35 | [[todo_work|To-Do @Work]] 36 | 37 | obsidian-tracker@gmail.com 38 | obsidian-tracker@yahoo.com 39 | 40 | 41 | dataviewTarget:: 4 42 | - Make Progress:: 10 43 | - Make-Progress:: 92 44 | dataviewTarget1:: 4/10 45 | dataviewTarget2:: 10 @ 92 46 | dataviewTarget3:: 10, 92 47 | 48 | clock-in:: 10:25:10 49 | clock-out:: 17:55:10 50 | 51 | sleep:: 10:11 pm/5:31 am 52 | 53 | #sin:0.95106/0.86603/0.74314/0.58779/0.40674/0.20791/0.00000/-0.20791/-0.40674 54 | 55 | #sinsquare:0.90451/0.75000/0.55226/0.34549/0.16543/0.04323/0.00000/0.04323/0.16543 56 | 57 | - [ ] Say I love you 58 | 59 | -------------------------------------------------------------------------------- /examples/diary/2021-01-11.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 😐 4 | bloodpressure: 173.4/117.8 5 | bloodpressure1: 173.4, 117.8 6 | bloodpressure2: [173.4, 117.8] 7 | bp: 8 | systolic: 173.4 9 | diastolic: 117.8 10 | clock-in: 9:42 11 | clock-out: 20:35 12 | sleep: 11:47 pm/6:8 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 26.2 20 | randchar: C 21 | --- 22 | 23 | #weight:80.8kg 24 | 25 | #exercise-pushup:48 26 | #exercise-plank:46sec 27 | 28 | 29 | ⭐⭐⭐⭐ 30 | 31 | 32 | #finance/bank1:-2.5USD 33 | 34 | [[todo_family|To-Do @Family]] 35 | [[todo_work|To-Do @Work]] 36 | 37 | obsidian-tracker@yahoo.com 38 | 39 | 40 | dataviewTarget:: 97 41 | - Make Progress:: 19 42 | - Make-Progress:: 82 43 | dataviewTarget1:: 97/19 44 | dataviewTarget2:: 19 @ 82 45 | dataviewTarget3:: 19, 82 46 | 47 | clock-in:: 9:42:19 48 | clock-out:: 20:35:19 49 | 50 | sleep:: 11:47 pm/6:8 am 51 | 52 | #sin:0.86603/0.74314/0.58779/0.40674/0.20791/0.00000/-0.20791/-0.40674/-0.58779 53 | 54 | #sinsquare:0.75000/0.55226/0.34549/0.16543/0.04323/0.00000/0.04323/0.16543/0.34549 55 | 56 | - [x] Say I love you 57 | 58 | -------------------------------------------------------------------------------- /examples/diary/2021-01-12.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 😀 4 | bloodpressure: 176.8/118.6 5 | bloodpressure1: 176.8, 118.6 6 | bloodpressure2: [176.8, 118.6] 7 | bp: 8 | systolic: 176.8 9 | diastolic: 118.6 10 | clock-in: 8:54 11 | clock-out: 16:19 12 | sleep: 11:23 pm/6:15 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 45.0 20 | randchar: A 21 | --- 22 | 23 | #weight:61.7kg 24 | 25 | #exercise-pushup:32 26 | #exercise-plank:31sec 27 | 28 | #meditation 29 | 30 | ⭐⭐⭐ 31 | 32 | 33 | #finance/bank1:-2.7USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | obsidian-tracker@gmail.com 39 | 40 | weightlifting: 10 41 | 42 | dataviewTarget:: 79 43 | - Make Progress:: 36 44 | - Make-Progress:: 66 45 | dataviewTarget1:: 79/36 46 | dataviewTarget2:: 36 @ 66 47 | dataviewTarget3:: 36, 66 48 | 49 | clock-in:: 8:54:36 50 | clock-out:: 16:19:36 51 | 52 | sleep:: 11:23 pm/6:15 am 53 | 54 | #sin:0.74314/0.58779/0.40674/0.20791/0.00000/-0.20791/-0.40674/-0.58779/-0.74314 55 | 56 | #sinsquare:0.55226/0.34549/0.16543/0.04323/0.00000/0.04323/0.16543/0.34549/0.55226 57 | 58 | - [x] Say I love you 59 | 60 | -------------------------------------------------------------------------------- /examples/diary/2021-01-13.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 😞 4 | bloodpressure: 168.2/116.4 5 | bloodpressure1: 168.2, 116.4 6 | bloodpressure2: [168.2, 116.4] 7 | bp: 8 | systolic: 168.2 9 | diastolic: 116.4 10 | clock-in: 8:1 11 | clock-out: 17:0 12 | sleep: 9:2 pm/6:37 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 64.5 20 | randchar: E 21 | --- 22 | 23 | #weight:71.7kg 24 | 25 | #exercise-pushup:44 26 | #exercise-plank:45sec 27 | 28 | #meditation 29 | 30 | 31 | 32 | 33 | #finance/bank1:-3.4USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | 39 | 40 | dataviewTarget:: 87 41 | - Make Progress:: 46 42 | - Make-Progress:: 73 43 | dataviewTarget1:: 87/46 44 | dataviewTarget2:: 46 @ 73 45 | dataviewTarget3:: 46, 73 46 | 47 | clock-in:: 8:1:46 48 | clock-out:: 17:0:46 49 | 50 | sleep:: 9:2 pm/6:37 am 51 | 52 | #sin:0.58779/0.40674/0.20791/0.00000/-0.20791/-0.40674/-0.58779/-0.74314/-0.86603 53 | 54 | #sinsquare:0.34549/0.16543/0.04323/0.00000/0.04323/0.16543/0.34549/0.55226/0.75000 55 | 56 | - [x] Say I love you 57 | 58 | -------------------------------------------------------------------------------- /examples/diary/2021-01-14.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 😐 4 | bloodpressure: 175.6/117.2 5 | bloodpressure1: 175.6, 117.2 6 | bloodpressure2: [175.6, 117.2] 7 | bp: 8 | systolic: 175.6 9 | diastolic: 117.2 10 | clock-in: 8:53 11 | clock-out: 17:19 12 | sleep: 9:40 pm/7:25 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 61.5 20 | randchar: C 21 | --- 22 | 23 | #weight:77.1kg 24 | 25 | #exercise-pushup:37 26 | #exercise-plank:89sec 27 | 28 | #meditation 29 | 30 | ⭐ 31 | 32 | #clean-up 33 | 34 | #finance/bank1:-2.5USD 35 | 36 | [[todo_family|To-Do @Family]] 37 | [[todo_work|To-Do @Work]] 38 | 39 | obsidian-tracker@gmail.com 40 | 41 | weightlifting: 15 42 | 43 | dataviewTarget:: 43 44 | - Make Progress:: 5 45 | - Make-Progress:: 92 46 | dataviewTarget1:: 43/5 47 | dataviewTarget2:: 5 @ 92 48 | dataviewTarget3:: 5, 92 49 | 50 | clock-in:: 8:53:5 51 | clock-out:: 17:19:5 52 | 53 | sleep:: 9:40 pm/7:25 am 54 | 55 | #sin:0.40674/0.20791/0.00000/-0.20791/-0.40674/-0.58779/-0.74314/-0.86603/-0.95106 56 | 57 | #sinsquare:0.16543/0.04323/0.00000/0.04323/0.16543/0.34549/0.55226/0.75000/0.90451 58 | 59 | - [x] Say I love you 60 | 61 | -------------------------------------------------------------------------------- /examples/diary/2021-01-15.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 😀 4 | bloodpressure: 176/115 5 | bloodpressure1: 176, 115 6 | bloodpressure2: [176, 115] 7 | bp: 8 | systolic: 176 9 | diastolic: 115 10 | clock-in: 9:20 11 | clock-out: 18:40 12 | sleep: 11:14 pm/6:44 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 44.0 20 | randchar: A 21 | --- 22 | 23 | #weight:69.6kg 24 | 25 | #exercise-pushup:40 26 | #exercise-plank:100sec 27 | 28 | #meditation 29 | 30 | 31 | 32 | 33 | #finance/bank1:-2.5USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | obsidian-tracker@yahoo.com 39 | 40 | weightlifting: 14 41 | 42 | dataviewTarget:: 60 43 | - Make Progress:: 7 44 | - Make-Progress:: 81 45 | dataviewTarget1:: 60/7 46 | dataviewTarget2:: 7 @ 81 47 | dataviewTarget3:: 7, 81 48 | 49 | clock-in:: 9:20:7 50 | clock-out:: 18:40:7 51 | 52 | sleep:: 11:14 pm/6:44 am 53 | 54 | #sin:0.20791/0.00000/-0.20791/-0.40674/-0.58779/-0.74314/-0.86603/-0.95106/-0.99452 55 | 56 | #sinsquare:0.04323/0.00000/0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907 57 | 58 | - [ ] Say I love you 59 | 60 | -------------------------------------------------------------------------------- /examples/diary/2021-01-16.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 😞 4 | bloodpressure: 168.4/114.8 5 | bloodpressure1: 168.4, 114.8 6 | bloodpressure2: [168.4, 114.8] 7 | bp: 8 | systolic: 168.4 9 | diastolic: 114.8 10 | clock-in: 9:54 11 | clock-out: 18:3 12 | sleep: 11:24 pm/6:40 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 81.6 20 | randchar: E 21 | --- 22 | 23 | #weight:70.0kg 24 | 25 | #exercise-pushup:38 26 | #exercise-plank:113sec 27 | 28 | 29 | ⭐⭐ 30 | 31 | #clean-up 32 | 33 | #finance/bank1:-2.6USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | obsidian-tracker+1@gmail.com 39 | 40 | 41 | dataviewTarget:: 17 42 | - Make Progress:: 21 43 | - Make-Progress:: 93 44 | dataviewTarget1:: 17/21 45 | dataviewTarget2:: 21 @ 93 46 | dataviewTarget3:: 21, 93 47 | 48 | clock-in:: 9:54:21 49 | clock-out:: 18:3:21 50 | 51 | sleep:: 11:24 pm/6:40 am 52 | 53 | #sin:0.00000/-0.20791/-0.40674/-0.58779/-0.74314/-0.86603/-0.95106/-0.99452/-0.99452 54 | 55 | #sinsquare:0.00000/0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907 56 | 57 | - [ ] Say I love you 58 | 59 | -------------------------------------------------------------------------------- /examples/diary/2021-01-17.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 🙂 4 | bloodpressure: 165.8/114.6 5 | bloodpressure1: 165.8, 114.6 6 | bloodpressure2: [165.8, 114.6] 7 | bp: 8 | systolic: 165.8 9 | diastolic: 114.6 10 | clock-in: 8:3 11 | clock-out: 16:23 12 | sleep: 10:42 pm/6:30 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 43.0 20 | randchar: B 21 | --- 22 | 23 | #weight:64.6kg 24 | 25 | #exercise-pushup:48 26 | #exercise-plank:93sec 27 | 28 | 29 | ⭐⭐⭐⭐ 30 | 31 | 32 | #finance/bank1:-3.6USD 33 | 34 | [[todo_family|To-Do @Family]] 35 | [[todo_work|To-Do @Work]] 36 | 37 | obsidian-tracker@gmail.com 38 | obsidian-tracker@yahoo.com 39 | 40 | weightlifting: 17 41 | 42 | dataviewTarget:: 46 43 | - Make Progress:: 38 44 | - Make-Progress:: 82 45 | dataviewTarget1:: 46/38 46 | dataviewTarget2:: 38 @ 82 47 | dataviewTarget3:: 38, 82 48 | 49 | clock-in:: 8:3:38 50 | clock-out:: 16:23:38 51 | 52 | sleep:: 10:42 pm/6:30 am 53 | 54 | #sin:-0.20791/-0.40674/-0.58779/-0.74314/-0.86603/-0.95106/-0.99452/-0.99452/-0.95106 55 | 56 | #sinsquare:0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451 57 | 58 | - [ ] Say I love you 59 | 60 | -------------------------------------------------------------------------------- /examples/diary/2021-01-18.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 😀 4 | bloodpressure: 167.2/118.4 5 | bloodpressure1: 167.2, 118.4 6 | bloodpressure2: [167.2, 118.4] 7 | bp: 8 | systolic: 167.2 9 | diastolic: 118.4 10 | clock-in: 8:48 11 | clock-out: 19:49 12 | sleep: 9:10 pm/7:51 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 19.5 20 | randchar: A 21 | --- 22 | 23 | #weight:78.7kg 24 | 25 | #exercise-pushup:42 26 | #exercise-plank:77sec 27 | 28 | #meditation 29 | 30 | ⭐ 31 | 32 | 33 | #finance/bank1:-3.3USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | obsidian-tracker@gmail.com 39 | 40 | weightlifting: 20 41 | 42 | dataviewTarget:: 28 43 | - Make Progress:: 40 44 | - Make-Progress:: 81 45 | dataviewTarget1:: 28/40 46 | dataviewTarget2:: 40 @ 81 47 | dataviewTarget3:: 40, 81 48 | 49 | clock-in:: 8:48:40 50 | clock-out:: 19:49:40 51 | 52 | sleep:: 9:10 pm/7:51 am 53 | 54 | #sin:-0.40674/-0.58779/-0.74314/-0.86603/-0.95106/-0.99452/-0.99452/-0.95106/-0.86603 55 | 56 | #sinsquare:0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000 57 | 58 | - [ ] Say I love you 59 | 60 | -------------------------------------------------------------------------------- /examples/diary/2021-01-19.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 😐 4 | bloodpressure: 165.6/117.2 5 | bloodpressure1: 165.6, 117.2 6 | bloodpressure2: [165.6, 117.2] 7 | bp: 8 | systolic: 165.6 9 | diastolic: 117.2 10 | clock-in: 8:30 11 | clock-out: 17:42 12 | sleep: 9:34 pm/7:2 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 29.5 20 | randchar: C 21 | --- 22 | 23 | #weight:69.3kg 24 | 25 | #exercise-pushup:47 26 | #exercise-plank:69sec 27 | 28 | #meditation 29 | 30 | ⭐⭐ 31 | 32 | 33 | #finance/bank1:-3.5USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | obsidian-tracker@gmail.com 39 | 40 | weightlifting: 16 41 | 42 | dataviewTarget:: 73 43 | - Make Progress:: 8 44 | - Make-Progress:: 59 45 | dataviewTarget1:: 73/8 46 | dataviewTarget2:: 8 @ 59 47 | dataviewTarget3:: 8, 59 48 | 49 | clock-in:: 8:30:8 50 | clock-out:: 17:42:8 51 | 52 | sleep:: 9:34 pm/7:2 am 53 | 54 | #sin:-0.58779/-0.74314/-0.86603/-0.95106/-0.99452/-0.99452/-0.95106/-0.86603/-0.74314 55 | 56 | #sinsquare:0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226 57 | 58 | - [ ] Say I love you 59 | 60 | -------------------------------------------------------------------------------- /examples/diary/2021-01-20.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 🙂 4 | bloodpressure: 163/117 5 | bloodpressure1: 163, 117 6 | bloodpressure2: [163, 117] 7 | bp: 8 | systolic: 163 9 | diastolic: 117 10 | clock-in: 9:30 11 | clock-out: 20:13 12 | sleep: 9:28 pm/7:58 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 56.2 20 | randchar: B 21 | --- 22 | 23 | #weight:80.7kg 24 | 25 | #exercise-pushup:33 26 | #exercise-plank:90sec 27 | 28 | 29 | ⭐⭐⭐ 30 | 31 | 32 | #finance/bank1:-3.2USD 33 | 34 | [[todo_family|To-Do @Family]] 35 | [[todo_work|To-Do @Work]] 36 | 37 | 38 | weightlifting: 19 39 | 40 | dataviewTarget:: 64 41 | - Make Progress:: 0 42 | - Make-Progress:: 54 43 | dataviewTarget1:: 64/0 44 | dataviewTarget2:: 0 @ 54 45 | dataviewTarget3:: 0, 54 46 | 47 | clock-in:: 9:30:0 48 | clock-out:: 20:13:0 49 | 50 | sleep:: 9:28 pm/7:58 am 51 | 52 | #sin:-0.74314/-0.86603/-0.95106/-0.99452/-0.99452/-0.95106/-0.86603/-0.74314/-0.58779 53 | 54 | #sinsquare:0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226/0.34549 55 | 56 | - [x] Say I love you 57 | 58 | -------------------------------------------------------------------------------- /examples/diary/2021-01-21.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 🙂 4 | bloodpressure: 170.4/113.8 5 | bloodpressure1: 170.4, 113.8 6 | bloodpressure2: [170.4, 113.8] 7 | bp: 8 | systolic: 170.4 9 | diastolic: 113.8 10 | clock-in: 9:4 11 | clock-out: 19:29 12 | sleep: 10:43 pm/6:37 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 11.1 20 | randchar: B 21 | sleptwell: false 22 | --- 23 | 24 | #weight:67.3kg 25 | 26 | #exercise-pushup:50 27 | #exercise-plank:94sec 28 | 29 | #meditation 30 | 31 | ⭐⭐⭐ 32 | 33 | 34 | #finance/bank1:-2.8USD 35 | 36 | [[todo_family|To-Do @Family]] 37 | [[todo_work|To-Do @Work]] 38 | 39 | obsidian-tracker@gmail.com 40 | 41 | weightlifting: 19 42 | 43 | dataviewTarget:: 88 44 | - Make Progress:: 41 45 | - Make-Progress:: 75 46 | dataviewTarget1:: 88/41 47 | dataviewTarget2:: 41 @ 75 48 | dataviewTarget3:: 41, 75 49 | 50 | clock-in:: 9:4:41 51 | clock-out:: 19:29:41 52 | 53 | sleep:: 10:43 pm/6:37 am 54 | 55 | #sin:-0.86603/-0.95106/-0.99452/-0.99452/-0.95106/-0.86603/-0.74314/-0.58779/-0.40674 56 | 57 | #sinsquare:0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226/0.34549/0.16543 58 | 59 | - [x] Say I love you 60 | 61 | -------------------------------------------------------------------------------- /examples/diary/2021-01-22.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 😞 4 | bloodpressure: 165.8/116.6 5 | bloodpressure1: 165.8, 116.6 6 | bloodpressure2: [165.8, 116.6] 7 | bp: 8 | systolic: 165.8 9 | diastolic: 116.6 10 | clock-in: 9:32 11 | clock-out: 20:27 12 | sleep: 10:25 pm/5:12 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 83.3 20 | randchar: E 21 | sleptwell: true 22 | --- 23 | 24 | #weight:64.7kg 25 | 26 | #exercise-pushup:30 27 | #exercise-plank:100sec 28 | 29 | 30 | ⭐ 31 | 32 | 33 | #finance/bank1:-3.3USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | obsidian-tracker@gmail.com 39 | 40 | weightlifting: 11 41 | 42 | dataviewTarget:: 36 43 | - Make Progress:: 0 44 | - Make-Progress:: 91 45 | dataviewTarget1:: 36/0 46 | dataviewTarget2:: 0 @ 91 47 | dataviewTarget3:: 0, 91 48 | 49 | clock-in:: 9:32:0 50 | clock-out:: 20:27:0 51 | 52 | sleep:: 10:25 pm/5:12 am 53 | 54 | #sin:-0.95106/-0.99452/-0.99452/-0.95106/-0.86603/-0.74314/-0.58779/-0.40674/-0.20791 55 | 56 | #sinsquare:0.90451/0.98907/0.98907/0.90451/0.75000/0.55226/0.34549/0.16543/0.04323 57 | 58 | - [x] Say I love you 59 | 60 | -------------------------------------------------------------------------------- /examples/diary/2021-01-23.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 😀 4 | bloodpressure: 164.2/115.4 5 | bloodpressure1: 164.2, 115.4 6 | bloodpressure2: [164.2, 115.4] 7 | bp: 8 | systolic: 164.2 9 | diastolic: 115.4 10 | clock-in: 10:36 11 | clock-out: 19:31 12 | sleep: 10:9 pm/7:30 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 28.8 20 | randchar: A 21 | sleptwell: true 22 | --- 23 | 24 | #weight:67.3kg 25 | 26 | #exercise-pushup:47 27 | #exercise-plank:83sec 28 | 29 | 30 | ⭐⭐⭐⭐ 31 | 32 | 33 | #finance/bank1:-2.7USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | obsidian-tracker@gmail.com 39 | 40 | weightlifting: 12 41 | 42 | dataviewTarget:: 45 43 | - Make Progress:: 27 44 | - Make-Progress:: 95 45 | dataviewTarget1:: 45/27 46 | dataviewTarget2:: 27 @ 95 47 | dataviewTarget3:: 27, 95 48 | 49 | clock-in:: 10:36:27 50 | clock-out:: 19:31:27 51 | 52 | sleep:: 10:9 pm/7:30 am 53 | 54 | #sin:-0.99452/-0.99452/-0.95106/-0.86603/-0.74314/-0.58779/-0.40674/-0.20791/-0.00000 55 | 56 | #sinsquare:0.98907/0.98907/0.90451/0.75000/0.55226/0.34549/0.16543/0.04323/0.00000 57 | 58 | - [ ] Say I love you 59 | 60 | -------------------------------------------------------------------------------- /examples/diary/2021-01-24.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 🙂 4 | bloodpressure: 170.6/113.2 5 | bloodpressure1: 170.6, 113.2 6 | bloodpressure2: [170.6, 113.2] 7 | bp: 8 | systolic: 170.6 9 | diastolic: 113.2 10 | clock-in: 8:1 11 | clock-out: 18:9 12 | sleep: 10:53 pm/5:33 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 39.4 20 | randchar: B 21 | sleptwell: true 22 | --- 23 | 24 | #weight:64.1kg 25 | 26 | #exercise-pushup:43 27 | #exercise-plank:44sec 28 | 29 | #meditation 30 | 31 | ⭐⭐⭐⭐ 32 | 33 | 34 | #finance/bank1:-3.3USD 35 | 36 | [[todo_family|To-Do @Family]] 37 | [[todo_work|To-Do @Work]] 38 | 39 | obsidian-tracker@gmail.com 40 | obsidian-tracker@yahoo.com 41 | 42 | weightlifting: 10 43 | 44 | dataviewTarget:: 63 45 | - Make Progress:: 23 46 | - Make-Progress:: 60 47 | dataviewTarget1:: 63/23 48 | dataviewTarget2:: 23 @ 60 49 | dataviewTarget3:: 23, 60 50 | 51 | clock-in:: 8:1:23 52 | clock-out:: 18:9:23 53 | 54 | sleep:: 10:53 pm/5:33 am 55 | 56 | #sin:-0.99452/-0.95106/-0.86603/-0.74314/-0.58779/-0.40674/-0.20791/-0.00000/0.20791 57 | 58 | #sinsquare:0.98907/0.90451/0.75000/0.55226/0.34549/0.16543/0.04323/0.00000/0.04323 59 | 60 | - [ ] Say I love you 61 | 62 | -------------------------------------------------------------------------------- /examples/diary/2021-01-25.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 😞 4 | bloodpressure: 167/114 5 | bloodpressure1: 167, 114 6 | bloodpressure2: [167, 114] 7 | bp: 8 | systolic: 167 9 | diastolic: 114 10 | clock-in: 9:52 11 | clock-out: 17:55 12 | sleep: 10:53 pm/6:3 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 81.4 20 | randchar: E 21 | sleptwell: false 22 | --- 23 | 24 | #weight:62.4kg 25 | 26 | #exercise-pushup:30 27 | #exercise-plank:110sec 28 | 29 | 30 | 31 | 32 | 33 | #finance/bank1:-3.6USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | obsidian-tracker+1@gmail.com 39 | 40 | 41 | dataviewTarget:: 88 42 | - Make Progress:: 12 43 | - Make-Progress:: 96 44 | dataviewTarget1:: 88/12 45 | dataviewTarget2:: 12 @ 96 46 | dataviewTarget3:: 12, 96 47 | 48 | clock-in:: 9:52:12 49 | clock-out:: 17:55:12 50 | 51 | sleep:: 10:53 pm/6:3 am 52 | 53 | #sin:-0.95106/-0.86603/-0.74314/-0.58779/-0.40674/-0.20791/-0.00000/0.20791/0.40674 54 | 55 | #sinsquare:0.90451/0.75000/0.55226/0.34549/0.16543/0.04323/0.00000/0.04323/0.16543 56 | 57 | - [ ] Say I love you 58 | 59 | -------------------------------------------------------------------------------- /examples/diary/2021-01-26.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 🙂 4 | bloodpressure: 162.4/114.8 5 | bloodpressure1: 162.4, 114.8 6 | bloodpressure2: [162.4, 114.8] 7 | bp: 8 | systolic: 162.4 9 | diastolic: 114.8 10 | clock-in: 10:24 11 | clock-out: 19:12 12 | sleep: 11:36 pm/6:2 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 73.1 20 | randchar: B 21 | --- 22 | 23 | #weight:72.7kg 24 | 25 | #exercise-pushup:42 26 | #exercise-plank:114sec 27 | 28 | #meditation 29 | 30 | ⭐ 31 | 32 | 33 | #finance/bank1:-3.3USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | obsidian-tracker@yahoo.com 39 | 40 | 41 | dataviewTarget:: 42 42 | - Make Progress:: 19 43 | - Make-Progress:: 93 44 | dataviewTarget1:: 42/19 45 | dataviewTarget2:: 19 @ 93 46 | dataviewTarget3:: 19, 93 47 | 48 | clock-in:: 10:24:19 49 | clock-out:: 19:12:19 50 | 51 | sleep:: 11:36 pm/6:2 am 52 | 53 | #sin:-0.86603/-0.74314/-0.58779/-0.40674/-0.20791/-0.00000/0.20791/0.40674/0.58779 54 | 55 | #sinsquare:0.75000/0.55226/0.34549/0.16543/0.04323/0.00000/0.04323/0.16543/0.34549 56 | 57 | - [ ] Say I love you 58 | 59 | -------------------------------------------------------------------------------- /examples/diary/2021-01-27.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 🙂 4 | bloodpressure: 165.8/113.6 5 | bloodpressure1: 165.8, 113.6 6 | bloodpressure2: [165.8, 113.6] 7 | bp: 8 | systolic: 165.8 9 | diastolic: 113.6 10 | clock-in: 10:28 11 | clock-out: 18:4 12 | sleep: 11:34 pm/6:12 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 78.5 20 | randchar: B 21 | --- 22 | 23 | #weight:63.7kg 24 | 25 | #exercise-pushup:46 26 | #exercise-plank:40sec 27 | 28 | #meditation 29 | 30 | ⭐⭐⭐ 31 | 32 | 33 | #finance/bank1:-2.2USD 34 | 35 | [[todo_family|To-Do @Family]] 36 | [[todo_work|To-Do @Work]] 37 | 38 | obsidian-tracker@yahoo.com 39 | 40 | weightlifting: 11 41 | 42 | dataviewTarget:: 59 43 | - Make Progress:: 31 44 | - Make-Progress:: 67 45 | dataviewTarget1:: 59/31 46 | dataviewTarget2:: 31 @ 67 47 | dataviewTarget3:: 31, 67 48 | 49 | clock-in:: 10:28:31 50 | clock-out:: 18:4:31 51 | 52 | sleep:: 11:34 pm/6:12 am 53 | 54 | #sin:-0.74314/-0.58779/-0.40674/-0.20791/-0.00000/0.20791/0.40674/0.58779/0.74314 55 | 56 | #sinsquare:0.55226/0.34549/0.16543/0.04323/0.00000/0.04323/0.16543/0.34549/0.55226 57 | 58 | - [ ] Say I love you 59 | 60 | -------------------------------------------------------------------------------- /examples/diary/2021-01-28.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 😀 4 | bloodpressure: 158.2/115.4 5 | bloodpressure1: 158.2, 115.4 6 | bloodpressure2: [158.2, 115.4] 7 | bp: 8 | systolic: 158.2 9 | diastolic: 115.4 10 | clock-in: 10:44 11 | clock-out: 16:41 12 | sleep: 10:27 pm/5:11 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 80.6 20 | randchar: A 21 | --- 22 | 23 | #weight:79.2kg 24 | 25 | #exercise-pushup:36 26 | #exercise-plank:90sec 27 | 28 | 29 | 30 | 31 | 32 | #finance/bank1:-3.9USD 33 | 34 | [[todo_family|To-Do @Family]] 35 | [[todo_work|To-Do @Work]] 36 | 37 | obsidian-tracker@gmail.com 38 | obsidian-tracker@yahoo.com 39 | 40 | weightlifting: 18 41 | 42 | dataviewTarget:: 36 43 | - Make Progress:: 33 44 | - Make-Progress:: 92 45 | dataviewTarget1:: 36/33 46 | dataviewTarget2:: 33 @ 92 47 | dataviewTarget3:: 33, 92 48 | 49 | clock-in:: 10:44:33 50 | clock-out:: 16:41:33 51 | 52 | sleep:: 10:27 pm/5:11 am 53 | 54 | #sin:-0.58779/-0.40674/-0.20791/-0.00000/0.20791/0.40674/0.58779/0.74314/0.86603 55 | 56 | #sinsquare:0.34549/0.16543/0.04323/0.00000/0.04323/0.16543/0.34549/0.55226/0.75000 57 | 58 | - [ ] Say I love you 59 | 60 | -------------------------------------------------------------------------------- /examples/diary/2021-01-29.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log, work_log2 3 | mood: 🙁 4 | bloodpressure: 163.6/112.2 5 | bloodpressure1: 163.6, 112.2 6 | bloodpressure2: [163.6, 112.2] 7 | bp: 8 | systolic: 163.6 9 | diastolic: 112.2 10 | clock-in: 8:19 11 | clock-out: 16:35 12 | sleep: 11:47 pm/6:39 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 18.6 20 | randchar: D 21 | --- 22 | 23 | #weight:63.5kg 24 | 25 | #exercise-pushup:42 26 | #exercise-plank:30sec 27 | 28 | 29 | ⭐ 30 | 31 | 32 | #finance/bank1:-2.7USD 33 | 34 | [[todo_family|To-Do @Family]] 35 | [[todo_work|To-Do @Work]] 36 | 37 | obsidian-tracker@yahoo.com 38 | 39 | weightlifting: 15 40 | 41 | dataviewTarget:: 96 42 | - Make Progress:: 44 43 | - Make-Progress:: 90 44 | dataviewTarget1:: 96/44 45 | dataviewTarget2:: 44 @ 90 46 | dataviewTarget3:: 44, 90 47 | 48 | clock-in:: 8:19:44 49 | clock-out:: 16:35:44 50 | 51 | sleep:: 11:47 pm/6:39 am 52 | 53 | #sin:-0.40674/-0.20791/-0.00000/0.20791/0.40674/0.58779/0.74314/0.86603/0.95106 54 | 55 | #sinsquare:0.16543/0.04323/0.00000/0.04323/0.16543/0.34549/0.55226/0.75000/0.90451 56 | 57 | - [x] Say I love you 58 | 59 | -------------------------------------------------------------------------------- /examples/diary/2021-01-30.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 😐 4 | bloodpressure: 159/114 5 | bloodpressure1: 159, 114 6 | bloodpressure2: [159, 114] 7 | bp: 8 | systolic: 159 9 | diastolic: 114 10 | clock-in: 10:24 11 | clock-out: 18:4 12 | sleep: 11:10 pm/5:46 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 17.9 20 | randchar: C 21 | --- 22 | 23 | #weight:63.3kg 24 | 25 | #exercise-pushup:30 26 | #exercise-plank:83sec 27 | 28 | 29 | ⭐⭐⭐ 30 | 31 | 32 | #finance/bank1:-2.2USD 33 | #finance/bank2:200USD 34 | #finance/bank2/transfer:-100USD 35 | #finance/bank1/transfer:100USD 36 | 37 | [[todo_family|To-Do @Family]] 38 | [[todo_work|To-Do @Work]] 39 | 40 | obsidian-tracker@gmail.com 41 | 42 | weightlifting: 10 43 | 44 | dataviewTarget:: 44 45 | - Make Progress:: 48 46 | - Make-Progress:: 84 47 | dataviewTarget1:: 44/48 48 | dataviewTarget2:: 48 @ 84 49 | dataviewTarget3:: 48, 84 50 | 51 | clock-in:: 10:24:48 52 | clock-out:: 18:4:48 53 | 54 | sleep:: 11:10 pm/5:46 am 55 | 56 | #sin:-0.20791/-0.00000/0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452 57 | 58 | #sinsquare:0.04323/0.00000/0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907 59 | 60 | - [ ] Say I love you 61 | 62 | -------------------------------------------------------------------------------- /examples/diary/2021-01-31.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 🙂 4 | bloodpressure: 160.4/115.8 5 | bloodpressure1: 160.4, 115.8 6 | bloodpressure2: [160.4, 115.8] 7 | bp: 8 | systolic: 160.4 9 | diastolic: 115.8 10 | clock-in: 10:5 11 | clock-out: 17:3 12 | sleep: 9:14 pm/5:9 am 13 | deepValue: 14 | very: 15 | very: 16 | very: 17 | very: 18 | very: 19 | deep: 56.8 20 | randchar: B 21 | --- 22 | 23 | #weight:72.2kg 24 | 25 | #exercise-pushup:36 26 | #exercise-plank:119sec 27 | 28 | 29 | ⭐⭐⭐⭐⭐ 30 | 31 | 32 | #finance/bank1:-2.8USD 33 | 34 | [[todo_family|To-Do @Family]] 35 | [[todo_work|To-Do @Work]] 36 | 37 | obsidian-tracker@gmail.com 38 | 39 | weightlifting: 17 40 | 41 | dataviewTarget:: 59 42 | - Make Progress:: 22 43 | - Make-Progress:: 55 44 | dataviewTarget1:: 59/22 45 | dataviewTarget2:: 22 @ 55 46 | dataviewTarget3:: 22, 55 47 | 48 | clock-in:: 10:5:22 49 | clock-out:: 17:3:22 50 | 51 | sleep:: 9:14 pm/5:9 am 52 | 53 | #sin:-0.00000/0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452 54 | 55 | #sinsquare:0.00000/0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907 56 | 57 | - [ ] Say I love you 58 | 59 | -------------------------------------------------------------------------------- /examples/diary/20210101-D.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 10 4 | bloodpressure: 177.4/121.8 5 | --- 6 | 7 | #weight:74.0kg 8 | 9 | #exercise-pushup:44 10 | #exercise-plank:37sec 11 | 12 | 13 | ⭐⭐⭐⭐⭐ 14 | 15 | #finance/bank1:-3.4USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker+1@gmail.com 21 | obsidian-tracker@yahoo.com 22 | 23 | weightlifting: 10 24 | 25 | #sin:0.00000/0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452 26 | 27 | #sinsquare:0.00000/0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/20210102-D.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 8 4 | bloodpressure: 174.8/121.6 5 | --- 6 | 7 | #weight:68.8kg 8 | 9 | #exercise-pushup:38 10 | #exercise-plank:112sec 11 | 12 | 13 | ⭐⭐⭐ 14 | 15 | #finance/bank1:-2.7USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker@gmail.com 21 | obsidian-tracker@yahoo.com 22 | 23 | weightlifting: 16 24 | 25 | #sin:0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106 26 | 27 | #sinsquare:0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/20210103-D.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 7 4 | bloodpressure: 178.2/119.4 5 | --- 6 | 7 | #weight:74.9kg 8 | 9 | #exercise-pushup:32 10 | #exercise-plank:56sec 11 | 12 | #meditation 13 | 14 | ⭐⭐⭐⭐⭐ 15 | 16 | #finance/bank1:-3.7USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | obsidian-tracker@gmail.com 22 | obsidian-tracker+1@gmail.com 23 | obsidian-tracker@yahoo.com 24 | 25 | weightlifting: 16 26 | 27 | #sin:0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603 28 | 29 | #sinsquare:0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000 30 | 31 | -------------------------------------------------------------------------------- /examples/diary/20210104-D.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 3 4 | bloodpressure: 178.6/119.2 5 | --- 6 | 7 | #weight:73.5kg 8 | 9 | #exercise-pushup:40 10 | #exercise-plank:74sec 11 | 12 | #meditation 13 | 14 | ⭐⭐⭐⭐⭐ 15 | 16 | #finance/bank1:-2.5USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | 22 | weightlifting: 19 23 | 24 | #sin:0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314 25 | 26 | #sinsquare:0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226 27 | 28 | -------------------------------------------------------------------------------- /examples/diary/20210105-D.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 1 4 | bloodpressure: 177/119 5 | --- 6 | 7 | #weight:70.0kg 8 | 9 | #exercise-pushup:5 10 | #exercise-plank:34sec 11 | 12 | #meditation 13 | 14 | ⭐⭐ 15 | 16 | #finance/bank1:-2.6USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | obsidian-tracker@gmail.com 22 | 23 | weightlifting: 10 24 | 25 | #sin:0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314/0.58779 26 | 27 | #sinsquare:0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226/0.34549 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/2023-06-05.md: -------------------------------------------------------------------------------- 1 | Physical:: 😐 -------------------------------------------------------------------------------- /examples/diary/2023-06-06.md: -------------------------------------------------------------------------------- 1 | Physical:: 😐 -------------------------------------------------------------------------------- /examples/diary/2023-06-07.md: -------------------------------------------------------------------------------- 1 | Physical:: 😀 -------------------------------------------------------------------------------- /examples/diary/2023-06-08.md: -------------------------------------------------------------------------------- 1 | Physical:: 😞 -------------------------------------------------------------------------------- /examples/diary/3-20210103.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 5 4 | --- 5 | 6 | #weight:69.3kg 7 | 8 | #exercise-pushup:39 9 | #exercise-plank:98sec 10 | 11 | 12 | ⭐ 13 | 14 | #finance/bank1:-2.2USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker@gmail.com 20 | obsidian-tracker+1@gmail.com 21 | 22 | weightlifting: 14 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/4-20210104.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 7 4 | --- 5 | 6 | #weight:70.6kg 7 | 8 | #exercise-pushup:41 9 | #exercise-plank:87sec 10 | 11 | 12 | ⭐ 13 | 14 | #finance/bank1:-3.3USD 15 | 16 | [[todo_family|To-Do @Family]] 17 | [[todo_work|To-Do @Work]] 18 | 19 | obsidian-tracker+1@gmail.com 20 | obsidian-tracker@yahoo.com 21 | 22 | weightlifting: 11 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/5-20210105.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 8 4 | --- 5 | 6 | #weight:60.2kg 7 | 8 | #exercise-pushup:50 9 | #exercise-plank:55sec 10 | 11 | #meditation 12 | 13 | ⭐⭐⭐ 14 | 15 | #finance/bank1:-2.2USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker@yahoo.com 21 | 22 | weightlifting: 20 23 | 24 | -------------------------------------------------------------------------------- /examples/diary/D-20210101.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 10 4 | bloodpressure: 177.4/121.8 5 | --- 6 | 7 | #weight:74.0kg 8 | 9 | #exercise-pushup:44 10 | #exercise-plank:37sec 11 | 12 | 13 | ⭐⭐⭐⭐⭐ 14 | 15 | #finance/bank1:-3.4USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker+1@gmail.com 21 | obsidian-tracker@yahoo.com 22 | 23 | weightlifting: 10 24 | 25 | #sin:0.00000/0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452 26 | 27 | #sinsquare:0.00000/0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/D-20210102.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 8 4 | bloodpressure: 174.8/121.6 5 | --- 6 | 7 | #weight:68.8kg 8 | 9 | #exercise-pushup:38 10 | #exercise-plank:112sec 11 | 12 | 13 | ⭐⭐⭐ 14 | 15 | #finance/bank1:-2.7USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker@gmail.com 21 | obsidian-tracker@yahoo.com 22 | 23 | weightlifting: 16 24 | 25 | #sin:0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106 26 | 27 | #sinsquare:0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/D-20210103.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 7 4 | bloodpressure: 178.2/119.4 5 | --- 6 | 7 | #weight:74.9kg 8 | 9 | #exercise-pushup:32 10 | #exercise-plank:56sec 11 | 12 | #meditation 13 | 14 | ⭐⭐⭐⭐⭐ 15 | 16 | #finance/bank1:-3.7USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | obsidian-tracker@gmail.com 22 | obsidian-tracker+1@gmail.com 23 | obsidian-tracker@yahoo.com 24 | 25 | weightlifting: 16 26 | 27 | #sin:0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603 28 | 29 | #sinsquare:0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000 30 | 31 | -------------------------------------------------------------------------------- /examples/diary/D-20210104.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 3 4 | bloodpressure: 178.6/119.2 5 | --- 6 | 7 | #weight:73.5kg 8 | 9 | #exercise-pushup:40 10 | #exercise-plank:74sec 11 | 12 | #meditation 13 | 14 | ⭐⭐⭐⭐⭐ 15 | 16 | #finance/bank1:-2.5USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | 22 | weightlifting: 19 23 | 24 | #sin:0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314 25 | 26 | #sinsquare:0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226 27 | 28 | -------------------------------------------------------------------------------- /examples/diary/D-20210105.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 1 4 | bloodpressure: 177/119 5 | --- 6 | 7 | #weight:70.0kg 8 | 9 | #exercise-pushup:5 10 | #exercise-plank:34sec 11 | 12 | #meditation 13 | 14 | ⭐⭐ 15 | 16 | #finance/bank1:-2.6USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | obsidian-tracker@gmail.com 22 | 23 | weightlifting: 10 24 | 25 | #sin:0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314/0.58779 26 | 27 | #sinsquare:0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226/0.34549 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/Jeffrey-20210101-Diary.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 10 4 | bloodpressure: 177.4/121.8 5 | --- 6 | 7 | #weight:74.0kg 8 | 9 | #exercise-pushup:44 10 | #exercise-plank:37sec 11 | 12 | 13 | ⭐⭐⭐⭐⭐ 14 | 15 | #finance/bank1:-3.4USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker+1@gmail.com 21 | obsidian-tracker@yahoo.com 22 | 23 | weightlifting: 10 24 | 25 | #sin:0.00000/0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452 26 | 27 | #sinsquare:0.00000/0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/Jeffrey-20210101-Journal.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 10 4 | bloodpressure: 177.4/121.8 5 | --- 6 | 7 | #weight:74.0kg 8 | 9 | #exercise-pushup:44 10 | #exercise-plank:37sec 11 | 12 | 13 | ⭐⭐⭐⭐⭐ 14 | 15 | #finance/bank1:-3.4USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker+1@gmail.com 21 | obsidian-tracker@yahoo.com 22 | 23 | weightlifting: 10 24 | 25 | #sin:0.00000/0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452 26 | 27 | #sinsquare:0.00000/0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/Jeffrey-20210102-Diary.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 8 4 | bloodpressure: 174.8/121.6 5 | --- 6 | 7 | #weight:68.8kg 8 | 9 | #exercise-pushup:38 10 | #exercise-plank:112sec 11 | 12 | 13 | ⭐⭐⭐ 14 | 15 | #finance/bank1:-2.7USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker@gmail.com 21 | obsidian-tracker@yahoo.com 22 | 23 | weightlifting: 16 24 | 25 | #sin:0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106 26 | 27 | #sinsquare:0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/Jeffrey-20210102-Journal.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 8 4 | bloodpressure: 174.8/121.6 5 | --- 6 | 7 | #weight:68.8kg 8 | 9 | #exercise-pushup:38 10 | #exercise-plank:112sec 11 | 12 | 13 | ⭐⭐⭐ 14 | 15 | #finance/bank1:-2.7USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker@gmail.com 21 | obsidian-tracker@yahoo.com 22 | 23 | weightlifting: 16 24 | 25 | #sin:0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106 26 | 27 | #sinsquare:0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/Jeffrey-20210103-Diary.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 7 4 | bloodpressure: 178.2/119.4 5 | --- 6 | 7 | #weight:74.9kg 8 | 9 | #exercise-pushup:32 10 | #exercise-plank:56sec 11 | 12 | #meditation 13 | 14 | ⭐⭐⭐⭐⭐ 15 | 16 | #finance/bank1:-3.7USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | obsidian-tracker@gmail.com 22 | obsidian-tracker+1@gmail.com 23 | obsidian-tracker@yahoo.com 24 | 25 | weightlifting: 16 26 | 27 | #sin:0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603 28 | 29 | #sinsquare:0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000 30 | 31 | -------------------------------------------------------------------------------- /examples/diary/Jeffrey-20210103-Journal.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 7 4 | bloodpressure: 178.2/119.4 5 | --- 6 | 7 | #weight:74.9kg 8 | 9 | #exercise-pushup:32 10 | #exercise-plank:56sec 11 | 12 | #meditation 13 | 14 | ⭐⭐⭐⭐⭐ 15 | 16 | #finance/bank1:-3.7USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | obsidian-tracker@gmail.com 22 | obsidian-tracker+1@gmail.com 23 | obsidian-tracker@yahoo.com 24 | 25 | weightlifting: 16 26 | 27 | #sin:0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603 28 | 29 | #sinsquare:0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000 30 | 31 | -------------------------------------------------------------------------------- /examples/diary/Jeffrey-20210104-Diary.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 3 4 | bloodpressure: 178.6/119.2 5 | --- 6 | 7 | #weight:73.5kg 8 | 9 | #exercise-pushup:40 10 | #exercise-plank:74sec 11 | 12 | #meditation 13 | 14 | ⭐⭐⭐⭐⭐ 15 | 16 | #finance/bank1:-2.5USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | 22 | weightlifting: 19 23 | 24 | #sin:0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314 25 | 26 | #sinsquare:0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226 27 | 28 | -------------------------------------------------------------------------------- /examples/diary/Jeffrey-20210104-Journal.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 3 4 | bloodpressure: 178.6/119.2 5 | --- 6 | 7 | #weight:73.5kg 8 | 9 | #exercise-pushup:40 10 | #exercise-plank:74sec 11 | 12 | #meditation 13 | 14 | ⭐⭐⭐⭐⭐ 15 | 16 | #finance/bank1:-2.5USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | 22 | weightlifting: 19 23 | 24 | #sin:0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314 25 | 26 | #sinsquare:0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226 27 | 28 | -------------------------------------------------------------------------------- /examples/diary/Jeffrey-20210105-Diary.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 1 4 | bloodpressure: 177/119 5 | --- 6 | 7 | #weight:70.0kg 8 | 9 | #exercise-pushup:5 10 | #exercise-plank:34sec 11 | 12 | #meditation 13 | 14 | ⭐⭐ 15 | 16 | #finance/bank1:-2.6USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | obsidian-tracker@gmail.com 22 | 23 | weightlifting: 10 24 | 25 | #sin:0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314/0.58779 26 | 27 | #sinsquare:0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226/0.34549 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/Jeffrey-20210105-Journal.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 1 4 | bloodpressure: 177/119 5 | --- 6 | 7 | #weight:70.0kg 8 | 9 | #exercise-pushup:5 10 | #exercise-plank:34sec 11 | 12 | #meditation 13 | 14 | ⭐⭐ 15 | 16 | #finance/bank1:-2.6USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | obsidian-tracker@gmail.com 22 | 23 | weightlifting: 10 24 | 25 | #sin:0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314/0.58779 26 | 27 | #sinsquare:0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226/0.34549 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/Lucas-20210101-Diary.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 10 4 | bloodpressure: 177.4/121.8 5 | --- 6 | 7 | #weight:74.0kg 8 | 9 | #exercise-pushup:44 10 | #exercise-plank:37sec 11 | 12 | 13 | ⭐⭐⭐⭐⭐ 14 | 15 | #finance/bank1:-3.4USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker+1@gmail.com 21 | obsidian-tracker@yahoo.com 22 | 23 | weightlifting: 10 24 | 25 | #sin:0.00000/0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452 26 | 27 | #sinsquare:0.00000/0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/Lucas-20210101-Journal.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 10 4 | bloodpressure: 177.4/121.8 5 | --- 6 | 7 | #weight:74.0kg 8 | 9 | #exercise-pushup:44 10 | #exercise-plank:37sec 11 | 12 | 13 | ⭐⭐⭐⭐⭐ 14 | 15 | #finance/bank1:-3.4USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker+1@gmail.com 21 | obsidian-tracker@yahoo.com 22 | 23 | weightlifting: 10 24 | 25 | #sin:0.00000/0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452 26 | 27 | #sinsquare:0.00000/0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/Lucas-20210102-Diary.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 8 4 | bloodpressure: 174.8/121.6 5 | --- 6 | 7 | #weight:68.8kg 8 | 9 | #exercise-pushup:38 10 | #exercise-plank:112sec 11 | 12 | 13 | ⭐⭐⭐ 14 | 15 | #finance/bank1:-2.7USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker@gmail.com 21 | obsidian-tracker@yahoo.com 22 | 23 | weightlifting: 16 24 | 25 | #sin:0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106 26 | 27 | #sinsquare:0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/Lucas-20210102-Journal.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 8 4 | bloodpressure: 174.8/121.6 5 | --- 6 | 7 | #weight:68.8kg 8 | 9 | #exercise-pushup:38 10 | #exercise-plank:112sec 11 | 12 | 13 | ⭐⭐⭐ 14 | 15 | #finance/bank1:-2.7USD 16 | 17 | [[todo_family|To-Do @Family]] 18 | [[todo_work|To-Do @Work]] 19 | 20 | obsidian-tracker@gmail.com 21 | obsidian-tracker@yahoo.com 22 | 23 | weightlifting: 16 24 | 25 | #sin:0.20791/0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106 26 | 27 | #sinsquare:0.04323/0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/Lucas-20210103-Diary.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 7 4 | bloodpressure: 178.2/119.4 5 | --- 6 | 7 | #weight:74.9kg 8 | 9 | #exercise-pushup:32 10 | #exercise-plank:56sec 11 | 12 | #meditation 13 | 14 | ⭐⭐⭐⭐⭐ 15 | 16 | #finance/bank1:-3.7USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | obsidian-tracker@gmail.com 22 | obsidian-tracker+1@gmail.com 23 | obsidian-tracker@yahoo.com 24 | 25 | weightlifting: 16 26 | 27 | #sin:0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603 28 | 29 | #sinsquare:0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000 30 | 31 | -------------------------------------------------------------------------------- /examples/diary/Lucas-20210103-Journal.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | mood: 7 4 | bloodpressure: 178.2/119.4 5 | --- 6 | 7 | #weight:74.9kg 8 | 9 | #exercise-pushup:32 10 | #exercise-plank:56sec 11 | 12 | #meditation 13 | 14 | ⭐⭐⭐⭐⭐ 15 | 16 | #finance/bank1:-3.7USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | obsidian-tracker@gmail.com 22 | obsidian-tracker+1@gmail.com 23 | obsidian-tracker@yahoo.com 24 | 25 | weightlifting: 16 26 | 27 | #sin:0.40674/0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603 28 | 29 | #sinsquare:0.16543/0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000 30 | 31 | -------------------------------------------------------------------------------- /examples/diary/Lucas-20210104-Diary.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 3 4 | bloodpressure: 178.6/119.2 5 | --- 6 | 7 | #weight:73.5kg 8 | 9 | #exercise-pushup:40 10 | #exercise-plank:74sec 11 | 12 | #meditation 13 | 14 | ⭐⭐⭐⭐⭐ 15 | 16 | #finance/bank1:-2.5USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | 22 | weightlifting: 19 23 | 24 | #sin:0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314 25 | 26 | #sinsquare:0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226 27 | 28 | -------------------------------------------------------------------------------- /examples/diary/Lucas-20210104-Journal.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 3 4 | bloodpressure: 178.6/119.2 5 | --- 6 | 7 | #weight:73.5kg 8 | 9 | #exercise-pushup:40 10 | #exercise-plank:74sec 11 | 12 | #meditation 13 | 14 | ⭐⭐⭐⭐⭐ 15 | 16 | #finance/bank1:-2.5USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | 22 | weightlifting: 19 23 | 24 | #sin:0.58779/0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314 25 | 26 | #sinsquare:0.34549/0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226 27 | 28 | -------------------------------------------------------------------------------- /examples/diary/Lucas-20210105-Diary.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 1 4 | bloodpressure: 177/119 5 | --- 6 | 7 | #weight:70.0kg 8 | 9 | #exercise-pushup:5 10 | #exercise-plank:34sec 11 | 12 | #meditation 13 | 14 | ⭐⭐ 15 | 16 | #finance/bank1:-2.6USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | obsidian-tracker@gmail.com 22 | 23 | weightlifting: 10 24 | 25 | #sin:0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314/0.58779 26 | 27 | #sinsquare:0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226/0.34549 28 | 29 | -------------------------------------------------------------------------------- /examples/diary/Lucas-20210105-Journal.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: work_log 3 | mood: 1 4 | bloodpressure: 177/119 5 | --- 6 | 7 | #weight:70.0kg 8 | 9 | #exercise-pushup:5 10 | #exercise-plank:34sec 11 | 12 | #meditation 13 | 14 | ⭐⭐ 15 | 16 | #finance/bank1:-2.6USD 17 | 18 | [[todo_family|To-Do @Family]] 19 | [[todo_work|To-Do @Work]] 20 | 21 | obsidian-tracker@gmail.com 22 | 23 | weightlifting: 10 24 | 25 | #sin:0.74314/0.86603/0.95106/0.99452/0.99452/0.95106/0.86603/0.74314/0.58779 26 | 27 | #sinsquare:0.55226/0.75000/0.90451/0.98907/0.98907/0.90451/0.75000/0.55226/0.34549 28 | 29 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-tracker", 3 | "name": "Tracker", 4 | "version": "1.16.0", 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 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "obsidian-tracker", 3 | "version": "1.16.0", 4 | "description": "A plugin tracks occurrences and numbers in your notes", 5 | "main": "main.js", 6 | "scripts": { 7 | "dev": "rollup --config rollup.config.dev.mjs -w", 8 | "build": "rollup --config rollup.config.build.mjs", 9 | "zip": "zip -9 obsidian-tracker-v$npm_package_version.zip main.js manifest.json styles.css" 10 | }, 11 | "keywords": [], 12 | "author": "pyrochlore", 13 | "license": "MIT", 14 | "devDependencies": { 15 | "@rollup/plugin-commonjs": "^28.0.3", 16 | "@rollup/plugin-node-resolve": "^16.0.1", 17 | "@rollup/plugin-terser": "^0.4.4", 18 | "@rollup/plugin-typescript": "^12.1.2", 19 | "@types/d3": "^7.4.3", 20 | "@types/node": "^22.15.17", 21 | "@types/sprintf-js": "^1.1.4", 22 | "obsidian": "https://github.com/obsidianmd/obsidian-api/tarball/master", 23 | "rollup": "^4.40.2", 24 | "rollup-plugin-copy": "^3.5.0", 25 | "tslib": "^2.8.1", 26 | "typescript": "^5.8.3" 27 | }, 28 | "dependencies": { 29 | "d3": "^7.9.0", 30 | "d3-interpolate": "^3.0.1", 31 | "jsep": "^1.4.0", 32 | "sprintf-js": "^1.1.3" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /rollup.config.build.mjs: -------------------------------------------------------------------------------- 1 | import typescript from '@rollup/plugin-typescript'; 2 | import { nodeResolve } from '@rollup/plugin-node-resolve'; 3 | import commonjs from '@rollup/plugin-commonjs'; 4 | import terser from "@rollup/plugin-terser"; 5 | 6 | export default { 7 | input: 'src/main.ts', 8 | output: { 9 | dir: '.', 10 | sourcemap: 'inline', 11 | format: 'cjs', 12 | exports: 'default' 13 | }, 14 | external: ['obsidian'], 15 | plugins: [ 16 | typescript(), 17 | nodeResolve({browser: true}), 18 | commonjs(), 19 | terser() 20 | ], 21 | onwarn: function(warning, warner){ 22 | if (warning.code === 'CIRCULAR_DEPENDENCY') { 23 | if (warning.importer && warning.importer.startsWith('node_modules')) { 24 | console.warn(`(!) Circular dependency: ${warning.importer}`); 25 | } 26 | } else { 27 | warner(warning); 28 | } 29 | } 30 | }; -------------------------------------------------------------------------------- /rollup.config.dev.mjs: -------------------------------------------------------------------------------- 1 | import typescript from '@rollup/plugin-typescript'; 2 | import {nodeResolve} from '@rollup/plugin-node-resolve'; 3 | import commonjs from '@rollup/plugin-commonjs'; 4 | import copy from 'rollup-plugin-copy' 5 | 6 | export default { 7 | input: 'src/main.ts', 8 | output: { 9 | dir: 'examples/.obsidian/plugins/obsidian-tracker', 10 | sourcemap: 'inline', 11 | format: 'cjs', 12 | exports: 'default' 13 | }, 14 | external: ['obsidian'], 15 | plugins: [ 16 | typescript(), 17 | nodeResolve({browser: true}), 18 | commonjs(), 19 | copy({ 20 | targets: [ 21 | { src: ['styles.css', 'manifest.json'], dest: 'examples/.obsidian/plugins/obsidian-tracker' } 22 | ] 23 | }) 24 | ], 25 | onwarn: function(warning, warner){ 26 | if (warning.code === 'CIRCULAR_DEPENDENCY') { 27 | if (warning.importer && warning.importer.startsWith('node_modules')) { 28 | console.warn(`(!) Circular dependency: ${warning.importer}`); 29 | } 30 | } else { 31 | warner(warning); 32 | } 33 | } 34 | }; -------------------------------------------------------------------------------- /src/heatmap.ts: -------------------------------------------------------------------------------- 1 | import { Moment } from "moment"; 2 | import { 3 | Datasets, 4 | DataPoint, 5 | RenderInfo, 6 | MonthInfo, 7 | HeatmapInfo, 8 | Dataset, 9 | Size, 10 | Transform, 11 | ChartElements, 12 | GraphType, 13 | ValueType, 14 | } from "./data"; 15 | import * as helper from "./helper"; 16 | import * as d3 from "d3"; 17 | 18 | interface DayInfo { 19 | date: string; 20 | value: number; 21 | scaledValue: number; 22 | row: number; 23 | col: number; 24 | } 25 | 26 | function createAreas( 27 | chartElements: ChartElements, 28 | canvas: HTMLElement, 29 | renderInfo: RenderInfo, 30 | heatmapInfo: HeatmapInfo 31 | ): ChartElements { 32 | // clean areas 33 | d3.select(canvas).select("#svg").remove(); 34 | var props = Object.getOwnPropertyNames(chartElements); 35 | for (var i = 0; i < props.length; i++) { 36 | // d3.select(chartElements[props[i]]).remove(); 37 | delete chartElements[props[i]]; 38 | } 39 | // console.log(chartElements); 40 | 41 | // whole area for plotting, includes margins 42 | let svg = d3 43 | .select(canvas) 44 | .append("svg") 45 | .attr("id", "svg") 46 | .attr( 47 | "width", 48 | renderInfo.dataAreaSize.width + 49 | renderInfo.margin.left + 50 | renderInfo.margin.right 51 | ) 52 | .attr( 53 | "height", 54 | renderInfo.dataAreaSize.height + 55 | renderInfo.margin.top + 56 | renderInfo.margin.bottom 57 | ); 58 | chartElements["svg"] = svg; 59 | 60 | // graphArea, includes chartArea, title, legend 61 | let graphArea = svg 62 | .append("g") 63 | .attr("id", "graphArea") 64 | .attr( 65 | "transform", 66 | "translate(" + 67 | renderInfo.margin.left + 68 | "," + 69 | renderInfo.margin.top + 70 | ")" 71 | ) 72 | .attr("width", renderInfo.dataAreaSize.width + renderInfo.margin.right) 73 | .attr( 74 | "height", 75 | renderInfo.dataAreaSize.height + renderInfo.margin.bottom 76 | ); 77 | chartElements["graphArea"] = graphArea; 78 | 79 | // dataArea, under graphArea, includes points, lines, xAxis, yAxis 80 | let dataArea = graphArea 81 | .append("g") 82 | .attr("id", "dataArea") 83 | .attr("width", renderInfo.dataAreaSize.width) 84 | .attr("height", renderInfo.dataAreaSize.height); 85 | chartElements["dataArea"] = dataArea; 86 | 87 | return chartElements; 88 | } 89 | 90 | function renderHeatmapHeader( 91 | canvas: HTMLElement, 92 | chartElements: ChartElements, 93 | renderInfo: RenderInfo, 94 | heatmapInfo: HeatmapInfo, 95 | dataset: Dataset 96 | ) { 97 | // console.log("renderMonthHeader") 98 | 99 | if (!renderInfo || !heatmapInfo) return; 100 | 101 | } 102 | 103 | function renderHeatmapDays( 104 | canvas: HTMLElement, 105 | chartElements: ChartElements, 106 | renderInfo: RenderInfo, 107 | heatmapInfo: HeatmapInfo, 108 | dataset: Dataset, 109 | ) { 110 | // console.log("renderHeatmapDays"); 111 | 112 | if (!renderInfo || !heatmapInfo) return; 113 | 114 | let cellSize = 20; 115 | let dotRadius = cellSize / 2.0 * 0.6; 116 | 117 | // Get min and max, null values will be treated as zero here 118 | let yMin = d3.min(dataset.getValues()); 119 | if (heatmapInfo.yMin !== null) { 120 | yMin = heatmapInfo.yMin; 121 | } 122 | let yMax = d3.max(dataset.getValues()); 123 | if (heatmapInfo.yMax !== null) { 124 | yMax = heatmapInfo.yMax; 125 | } 126 | // console.log(`yMin:${yMin}, yMax:${yMax}`); 127 | 128 | // Prepare data for graph 129 | let daysInHeatmapView: Array = []; 130 | const dataStartDate = dataset.getStartDate().clone(); 131 | let startDate = dataStartDate 132 | .clone() 133 | .subtract(dataStartDate.day(), "days"); 134 | if (heatmapInfo.startWeekOn.toLowerCase() === "mon") { 135 | startDate = startDate.add(1, "days"); 136 | } 137 | const dataEndDate = dataset.getEndDate().clone(); 138 | let endDate = dataEndDate.clone().add(7 - dataEndDate.day() - 1, "days"); 139 | if (heatmapInfo.startWeekOn.toLowerCase() === "mon") { 140 | endDate = endDate.add(1, "days"); 141 | } 142 | // console.log(startDate.format("YYYY-MM-DD")); 143 | // console.log(endDate.format("YYYY-MM-DD")); 144 | 145 | let indCol = 0; 146 | let indRow = 0; 147 | let ind = 0; 148 | for ( 149 | let curDate = startDate.clone(); 150 | curDate <= endDate; 151 | curDate.add(1, "days") 152 | ) { 153 | if (heatmapInfo.startWeekOn.toLowerCase() === "mon") { 154 | indCol = curDate.day() - 1; 155 | if (indCol < 0) { 156 | indCol = 6; 157 | } 158 | indRow = Math.floor(ind / 7); 159 | } else { 160 | indCol = curDate.day(); // 0~6 161 | indRow = Math.floor(ind / 7); 162 | } 163 | 164 | // curValue and scaledValue 165 | let curValue = dataset.getValue(curDate); 166 | let scaledValue = 0; 167 | if (Number.isNumber(yMax) && Number.isNumber(yMin) && yMax - yMin > 0) { 168 | scaledValue = (curValue - yMin) / (yMax - yMin); 169 | } 170 | 171 | daysInHeatmapView.push({ 172 | date: helper.dateToStr(curDate, renderInfo.dateFormat), 173 | value: curValue, 174 | scaledValue: scaledValue, 175 | row: indRow, 176 | col: indCol, 177 | }); 178 | 179 | ind++; 180 | } 181 | // console.log(daysInHeatmapView); 182 | 183 | // scale 184 | let totalDayBlockWidth = (indCol + 1) * cellSize; 185 | let totalBlockHeight = (indRow + 1) * cellSize; 186 | let scale = d3 187 | .scaleLinear() 188 | .domain([-0.5, 6.5]) 189 | .range([0, totalDayBlockWidth]); 190 | 191 | // circles 192 | let heatmapColor = "#69b3a2"; 193 | if (heatmapInfo.color) { 194 | heatmapColor = heatmapInfo.color; 195 | } 196 | 197 | // days, shown as dots or squares 198 | let days = chartElements.dataArea 199 | .selectAll("dot") 200 | .data(daysInHeatmapView) 201 | .enter() 202 | .append("circle") 203 | .attr("r", dotRadius) 204 | .attr("cx", function (d: DayInfo) { 205 | return scale(d.col); 206 | }) 207 | .attr("cy", function (d: DayInfo) { 208 | return scale(d.row); 209 | }) 210 | .style("fill", function (d: DayInfo) { 211 | return d3.interpolateLab( 212 | "white", 213 | heatmapColor 214 | )(d.scaledValue); 215 | }) 216 | .style("cursor", "default"); 217 | 218 | // Expand areas 219 | let svgWidth = parseFloat(chartElements.svg.attr("width")); 220 | let svgHeight = parseFloat(chartElements.svg.attr("height")); 221 | let graphAreaWidth = parseFloat(chartElements.graphArea.attr("width")); 222 | let graphAreaHeight = parseFloat(chartElements.graphArea.attr("height")); 223 | let totalHeight = 224 | (indRow + 2) * cellSize;// + parseFloat(chartElements.header.attr("height")); 225 | let totalWidth = (indCol + 1) * cellSize; 226 | if (totalHeight > svgHeight) { 227 | helper.expandArea(chartElements.svg, 0, totalHeight - svgHeight); 228 | } 229 | if (totalWidth > svgWidth) { 230 | helper.expandArea(chartElements.svg, totalWidth - svgWidth, 0); 231 | } 232 | if (totalHeight > graphAreaHeight) { 233 | helper.expandArea( 234 | chartElements.graphArea, 235 | 0, 236 | totalHeight - graphAreaHeight 237 | ); 238 | } 239 | if (totalWidth > graphAreaWidth) { 240 | helper.expandArea(chartElements.svg, totalWidth - graphAreaWidth, 0); 241 | } 242 | } 243 | 244 | export function renderHeatmap( 245 | canvas: HTMLElement, 246 | renderInfo: RenderInfo, 247 | heatmapInfo: HeatmapInfo 248 | ) { 249 | // console.log("renderHeatmap"); 250 | // console.log(renderInfo); 251 | if (!renderInfo || !renderHeatmap) return; 252 | 253 | return "Under construction"; 254 | 255 | let chartElements: ChartElements = {}; 256 | chartElements = createAreas(chartElements, canvas, renderInfo, heatmapInfo); 257 | 258 | let today = window.moment(); 259 | let lastDataMonthDate = renderInfo.datasets.getDates().last(); 260 | 261 | let datasetId = parseFloat(heatmapInfo.dataset); 262 | let dataset = renderInfo.datasets.getDatasetById(datasetId); 263 | 264 | renderHeatmapHeader( 265 | canvas, 266 | chartElements, 267 | renderInfo, 268 | heatmapInfo, 269 | dataset 270 | ); 271 | 272 | renderHeatmapDays( 273 | canvas, 274 | chartElements, 275 | renderInfo, 276 | heatmapInfo, 277 | dataset 278 | ); 279 | } 280 | -------------------------------------------------------------------------------- /src/settings.ts: -------------------------------------------------------------------------------- 1 | import { App, PluginSettingTab, Setting } from "obsidian"; 2 | import Tracker from "./main"; 3 | 4 | export interface TrackerSettings { 5 | folder: string; 6 | dateFormat: string; 7 | } 8 | 9 | export const DEFAULT_SETTINGS: TrackerSettings = { 10 | folder: "/", 11 | dateFormat: "YYYY-MM-DD", 12 | }; 13 | 14 | export class TrackerSettingTab extends PluginSettingTab { 15 | plugin: Tracker; 16 | 17 | constructor(app: App, plugin: Tracker) { 18 | super(app, plugin); 19 | this.plugin = plugin; 20 | } 21 | 22 | display(): void { 23 | let { containerEl } = this; 24 | 25 | containerEl.empty(); 26 | 27 | new Setting(containerEl) 28 | .setName("Default folder location") 29 | .setDesc( 30 | "Files in this folder will be parsed and used as input data of the tracker plugin.\nYou can also override it using 'folder' argument in the tracker codeblock." 31 | ) 32 | .addText((text) => 33 | text 34 | .setPlaceholder("Folder Path") 35 | .setValue(this.plugin.settings.folder) 36 | .onChange(async (value) => { 37 | this.plugin.settings.folder = value; 38 | await this.plugin.saveSettings(); 39 | }) 40 | ); 41 | 42 | new Setting(containerEl) 43 | .setName("Default date format") 44 | .setDesc( 45 | "This format is used to parse the date in your diary title.\nYou can also override it using 'dateFormat' argument in the tracker codeblock." 46 | ) 47 | .addText((text) => 48 | text 49 | .setPlaceholder("YYYY-MM-DD") 50 | .setValue(this.plugin.settings.dateFormat) 51 | .onChange(async (value) => { 52 | this.plugin.settings.dateFormat = value; 53 | await this.plugin.saveSettings(); 54 | }) 55 | ); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/summary.ts: -------------------------------------------------------------------------------- 1 | import * as d3 from "d3"; 2 | import { RenderInfo, SummaryInfo } from "./data"; 3 | import * as expr from "./expr"; 4 | 5 | function checkSummaryTemplateValid(summaryTemplate: string): boolean { 6 | return true; 7 | } 8 | 9 | export function renderSummary( 10 | canvas: HTMLElement, 11 | renderInfo: RenderInfo, 12 | summaryInfo: SummaryInfo 13 | ) { 14 | // console.log("renderSummary"); 15 | // console.log(renderInfo); 16 | if (!renderInfo || !summaryInfo) return; 17 | 18 | // console.log(summaryInfo.template); 19 | let outputSummary = ""; 20 | if (checkSummaryTemplateValid(summaryInfo.template)) { 21 | outputSummary = summaryInfo.template; 22 | } else { 23 | return "Invalid summary template"; 24 | } 25 | 26 | let retResolvedTemplate = expr.resolveTemplate(outputSummary, renderInfo); 27 | // console.log(retResolvedTemplate); 28 | if (retResolvedTemplate.startsWith("Error:")) { 29 | return retResolvedTemplate; 30 | } 31 | outputSummary = retResolvedTemplate; 32 | 33 | if (outputSummary !== "") { 34 | let textBlock = d3.select(canvas).append("div"); 35 | if (outputSummary.includes("\n") || outputSummary.includes("\\n")) { 36 | let outputLines = outputSummary.split(/(\n|\\n)/); 37 | // console.log(outputLines); 38 | for (let outputLine of outputLines) { 39 | if (outputLine !== "\n" && outputLine !== "\\n") 40 | textBlock.append("div").text(outputLine); 41 | } 42 | } else { 43 | textBlock.text(outputSummary); 44 | } 45 | 46 | if (summaryInfo.style !== "") { 47 | textBlock.attr("style", summaryInfo.style); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "inlineSourceMap": true, 5 | "inlineSources": true, 6 | "module": "ESNext", 7 | "target": "ES2018", 8 | "allowJs": true, 9 | "noImplicitAny": true, 10 | "moduleResolution": "node", 11 | "importHelpers": true, 12 | "allowSyntheticDefaultImports": true, 13 | 14 | "lib": [ 15 | "dom", 16 | "es5", 17 | "scripthost", 18 | "es2015", 19 | "ESNext.String" 20 | ] 21 | }, 22 | "include": [ 23 | "**/*.ts" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /versions.json: -------------------------------------------------------------------------------- 1 | { 2 | "1.0.0": "0.9.12", 3 | "1.0.1": "0.9.12", 4 | "1.0.2": "0.9.12", 5 | "1.1.0": "0.9.12", 6 | "1.2.0": "0.9.12", 7 | "1.2.1": "0.9.12", 8 | "1.3.0": "0.9.12", 9 | "1.4.0": "0.9.12", 10 | "1.4.1": "0.9.12", 11 | "1.5.0": "0.9.12", 12 | "1.5.1": "0.9.12", 13 | "1.6.0": "0.9.12", 14 | "1.6.1": "0.9.12", 15 | "1.7.0": "0.9.12", 16 | "1.8.0": "0.9.12", 17 | "1.8.1": "0.9.12", 18 | "1.8.2": "0.9.12", 19 | "1.9.0": "0.9.12", 20 | "1.9.1": "0.9.12", 21 | "1.9.2": "0.9.12", 22 | "1.10.0": "0.9.12", 23 | "1.10.1": "0.9.12", 24 | "1.10.2": "0.9.12", 25 | "1.10.3": "0.9.12", 26 | "1.10.4": "0.9.12", 27 | "1.10.5": "0.9.12", 28 | "1.10.6": "0.9.12", 29 | "1.10.7": "0.9.12", 30 | "1.10.8": "0.9.12", 31 | "1.10.9": "0.9.12", 32 | "1.11.0": "0.9.12", 33 | "1.12.0": "0.9.12", 34 | "1.13.0": "0.9.12", 35 | "1.13.1": "0.9.12", 36 | "1.13.2": "0.9.12", 37 | "1.13.3": "0.9.12", 38 | "1.14.0": "0.9.12", 39 | "1.15.0": "0.9.12", 40 | "1.15.1": "0.9.12", 41 | "1.16.0": "0.9.12" 42 | } 43 | --------------------------------------------------------------------------------