From 0b17f4f3c2915d7f92d714db98ab294f70685bc3 Mon Sep 17 00:00:00 2001 From: stfrigerio Date: Fri, 9 May 2025 17:23:41 +0200 Subject: [PATCH] updated readme --- README.md | 154 +++++++++++++++++++++++++++++++----------- assets/boolean.png | Bin 0 -> 7207 bytes assets/habits.png | Bin 0 -> 14952 bytes assets/text-input.png | Bin 0 -> 18076 bytes 4 files changed, 114 insertions(+), 40 deletions(-) create mode 100644 assets/boolean.png create mode 100644 assets/habits.png create mode 100644 assets/text-input.png diff --git a/README.md b/README.md index 56ad79a..95af8a3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# SQLite DB Plugin for Obsidian +# SQLite DB Plugin -The **SQLite DB Plugin for Obsidian** allows you to interact with SQLite databases directly within your Obsidian vault. You can execute SQL queries, generate charts from your data, inspect table structures, and even export table rows as notes. +The **SQLite DB Plugin** allows you to interact with SQLite databases directly within your Obsidian vault. You can execute SQL queries, generate charts from your data, inspect table structures, and even export table rows as notes. --- @@ -19,28 +19,35 @@ The **SQLite DB Plugin for Obsidian** allows you to interact with SQLite databas --- -## Installation - -1. **Open Obsidian Settings** - Navigate to **Community Plugins** and disable **Safe Mode**. -2. **Browse Community Plugins** - Search for **SQLite DB Plugin**, then click **Install**. -3. **Enable the Plugin** - In your Community Plugins list, enable the plugin. - ---- - ## Configuration -Before using the plugin, set the path to your SQLite database in the plugin settings: -- **Database Path:** Absolute path to your SQLite database file. - _Example:_ `/home/user/path/to/database.db` +Once the plugin is installed, open Settings → SQLite DB Plugin to configure it. +You can choose to work with either a local database file or a remote API, and optionally integrate with your daily notes or Cloudflare Access for secure API access. + +🔀 Database Mode +Choose whether the plugin interacts with a local SQLite file or a remote API server. + +📁 Local Mode Settings +Used when Database mode is set to Local. Here you can set your full absolute path to your .db SQLite file + +🌐 Remote Mode Settings +Used when Database mode is set to Remote. +Ideal for syncing across devices or accessing a shared dataset via HTTP. + +If you protect your API using Cloudflare Access, provide your Client ID and Client Secret here for automatic token-based login. + +🗓️ Journal Settings +These options help the plugin locate and manage your journal entries if you have some. This + the commands registered in the plugin allows you to dump the entries in your db into the folder or the other way round, upsert the journal you wrote in obsidian into your own DB. + +This as other parts of the plugin requires you to setup a specific database schema for the tables --- ## Usage -### SQL Code Blocks +### Codeblocks + +#### SQL Code Blocks Create a code block labeled with `sql` to run a SQL query. For example: @@ -65,21 +72,6 @@ This query will: - Order the result by the `due` column in ascending order. - Limit the number of rows to 10. -### Chart Code Blocks - -Create a code block labeled with `sql-chart` for visualizations. For example: - -```sql-chart -table: Time -chartType: pie -categoryColumn: tag -valueColumn: duration -``` - -![Pie Chart](./assets/pie-chart.png) - -## Query Parameters - Below is a list of available parameters you can use in your SQL blocks: | Parameter | Description | Example | @@ -93,11 +85,22 @@ Below is a list of available parameters you can use in your SQL blocks: | `endDate` | Ending date for filtering. | `endDate: 2024-12-31` | | `orderBy` | Column to order the results by. | `orderBy: due` | | `orderDirection`| Direction of sort (`asc` or `desc`). | `orderDirection: asc` | -| `limit` | Maximum number of rows to return. | `limit: 10` | +| `limit` | Maximum number of rows to return. | `limit: 10` ---- +#### Chart Code Blocks -## Chart Parameters +Create a code block labeled with `sql-chart` for visualizations. For example: + +```sql-chart +table: Time +chartType: pie +categoryColumn: tag +valueColumn: duration +``` + +![Pie Chart](./assets/pie-chart.png) + +**Parameters** | Parameter | Description | Example | | --------------- | ------------------------------------------------------------------- | --------------------------------- | @@ -107,7 +110,7 @@ Below is a list of available parameters you can use in your SQL blocks: Each chart takes an optional chartOptions object that can be used to customize the different chart types: -### Line Chart +**Chart types** ```sql-chart @@ -134,7 +137,6 @@ chartOptions: { ``` -### Bar Chart ```sql-chart table: QuantifiableHabits @@ -157,8 +159,6 @@ chartOptions: { } ``` -### Pie Chart - ```sql-chart table: Money @@ -175,4 +175,78 @@ chartOptions: { showLegend: true, isDoughnut: true } -``` \ No newline at end of file +``` + +### Interactive Components + +The plugin supports custom interactive HTML components you can embed in your notes to view and update data live. These components are initialized at runtime using your database settings. +I wrote these to create interactive Periodic Notes, and update data in them accordingly + +#### Boolean Switch + +Use the component to create toggleable switches tied to boolean habit data. This lets you interact with your data directly from a note, such as marking a habit done or undone for a given day. + +``` + + data-emoji="🧘" + data-date="2025-05-09" + data-table="BooleanHabits" + data-habit-id-col="habitKey" + data-value-col="value" + data-date-col="date"> + +``` + +![Boolean Switch](./assets/boolean.png) + +#### Habit Counter + +Use the component to track numerical habits, such as how many coffees you had or how many cigarettes you smoked today. + +``` + + data-emoji="🚬" + data-date="2025-05-09" + data-table="QuantifiableHabits" + data-habit-id-col="habitKey" + data-value-col="value" + data-date-col="date"> + +``` + +![Habit Counter](./assets/habits.png) + +#### Text Input + +Use the component to display and optionally update text fields in your database. + +``` + + data-date="@date" + data-value-col="dayRating" + data-date-col="date" + placeholder="How do u feel today?" + data-label="Day Rating 📈" +/> +``` + +It supports both inline editing and a "button-triggered" modal input, making it versatile for journal prompts, mood logs, notes, or custom fields. + +``` + + data-modal-type="time-picker" + placeholder="Select Time" + data-label="Sleep Time 💤" +/> +``` + +![Text Input](./assets/text-input.png) \ No newline at end of file diff --git a/assets/boolean.png b/assets/boolean.png new file mode 100644 index 0000000000000000000000000000000000000000..140c9c93b7f71d3d27512e541a3bc250bcee09fb GIT binary patch literal 7207 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 literal 0 HcmV?d00001 diff --git a/assets/text-input.png b/assets/text-input.png new file mode 100644 index 0000000000000000000000000000000000000000..d28c3cd2618a152f87f82fed7760a4b8018694d8 GIT binary patch literal 18076 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 literal 0 HcmV?d00001