Rename ChronoSync Plugin to TaskNotes Plugin and Remove Legacy Daily Metadata Commands

• Renamed the main plugin class from ChronoSyncPlugin to TaskNotesPlugin and updated all related types, settings, and UI elements accordingly.
• Updated settings interface and default folder paths from "ChronoSync" to "TaskNotes", and renamed ChronoSyncSettingTab to TaskNotesSettingTab.
• Modified all ribbon icon labels, command names, group identifiers, and user notices to reflect the new "TaskNotes" branding.
• In view types (CalendarView, NotesView, TaskListView), updated container classes and hover sources from "chronosync-*" to "tasknotes-*" for consistent styling and identification.
• Changed the view type constants in types.ts to use "tasknotes" prefixes.
• In task creation modal and helper functions, adjusted import and instance type to reference TaskNotesPlugin.
• Removed legacy daily note metadata commands (incrementPomodoros, toggle-workout, toggle-meditate, and associated update logic) from the main plugin as they are no longer part of TaskNotes functionality.
• Cleaned up YAML frontmatter generation in helpers by removing default values for pomodoros, workout, and meditate.

This commit ensures branding consistency across the codebase and removes unused functionality, paving the way for continued development of TaskNotes features.
This commit is contained in:
Callum Alpass 2025-05-31 11:29:17 +10:00
parent 6c6184d402
commit 1be4fb0329
13 changed files with 121 additions and 203 deletions

View file

@ -1,12 +1,12 @@
# ChronoSync for Obsidian
# TaskNotes for Obsidian
ChronoSync is a comprehensive diary, task, note, and time management plugin for Obsidian. It integrates calendar views, task management, daily notes, and timeblocking into a seamless workflow.
TaskNotes is a comprehensive task and note management plugin for Obsidian with integrated calendar views, daily notes, and timeblocking.
## Why ChronoSync?
## Why TaskNotes?
With the introduction of Obsidian's new Bases core plugin, structured YAML frontmatter has become a standard way to manage data in Obsidian. ChronoSync uses YAML metadata extensively to store task properties, daily note information, and time tracking data. This means all your tasks and notes remain as plain Markdown files with structured frontmatter that can be queried and viewed in Bases tables.
With the introduction of Obsidian's new Bases core plugin, structured YAML frontmatter has become a standard way to manage data in Obsidian. TaskNotes uses YAML metadata extensively to store task properties, daily note information, and time tracking data. This means all your tasks and notes remain as plain Markdown files with structured frontmatter that can be queried and viewed in Bases tables.
ChronoSync focuses on time-based organization and task management, storing all data as YAML properties. While Bases provides database views of your notes, ChronoSync handles the day-to-day workflow of creating tasks, tracking time, managing recurring items, and organizing your daily activities. The structured data ChronoSync creates can then be analyzed and visualized using Bases or other data query tools.
TaskNotes focuses on time-based organization and task management, storing all data as YAML properties. While Bases provides database views of your notes, TaskNotes handles the day-to-day workflow of creating tasks, tracking time, managing recurring items, and organizing your daily activities. The structured data TaskNotes creates can then be analyzed and visualized using Bases or other data query tools.
## Features
@ -20,15 +20,14 @@ ChronoSync focuses on time-based organization and task management, storing all d
### Calendar Integration
- Month view with agenda display showing tasks and notes
- Visual indicators for daily notes, due tasks, and daily metadata (pomodoros, workout, meditation)
- Visual indicators for daily notes and due tasks
- Keyboard navigation and date selection synchronized across all views
- Color coding based on priority, note presence, or daily activities
### Daily Notes
- Automatic creation with configurable templates
- YAML frontmatter tracking: date, pomodoros, workout, meditation, important flag
- YAML frontmatter tracking: date, tags, important flag
- Timeblock tables with configurable intervals (15, 30, or 60 minutes)
- Quick commands to update daily metadata without opening the note
### Time Management
- Integrated time tracking for tasks with start/stop functionality
@ -61,27 +60,27 @@ All data is stored as YAML frontmatter in Markdown files, making it:
1. Open Obsidian Settings
2. Go to Community Plugins and turn off Safe Mode
3. Click Browse and search for "ChronoSync"
3. Click Browse and search for "TaskNotes"
4. Install the plugin and enable it
### Manual Installation
1. Download the latest release from the GitHub releases page
2. Extract the files to your Obsidian vault's plugins folder: `<vault>/.obsidian/plugins/chronosync/`
2. Extract the files to your Obsidian vault's plugins folder: `<vault>/.obsidian/plugins/tasknotes/`
3. Reload Obsidian
4. Go to Settings > Community Plugins and enable "ChronoSync"
4. Go to Settings > Community Plugins and enable "TaskNotes"
## Usage
### Getting Started
1. After installation, click the calendar icon in the ribbon to open the ChronoSync dashboard
2. Configure the plugin settings in Settings > ChronoSync
1. After installation, click the calendar icon in the ribbon to open the TaskNotes dashboard
2. Configure the plugin settings in Settings > TaskNotes
3. Create your first task or navigate to today's daily note
### Task Management and Interaction
ChronoSync provides intuitive controls to interact with your tasks directly from the task list view:
TaskNotes provides intuitive controls to interact with your tasks directly from the task list view:
- Change a task's status (Open, In Progress, Done) using the status dropdown
- Adjust task priority (High, Normal, Low) using the priority dropdown
@ -90,7 +89,7 @@ ChronoSync provides intuitive controls to interact with your tasks directly from
### Task Archiving
ChronoSync allows you to archive tasks to keep your task list clean while preserving task history:
TaskNotes allows you to archive tasks to keep your task list clean while preserving task history:
- To archive a task, click the "Archive" button in the task controls
- Archived tasks are tagged with the "archive" tag in their YAML frontmatter
@ -100,25 +99,20 @@ ChronoSync allows you to archive tasks to keep your task list clean while preser
### Commands
ChronoSync adds several commands to Obsidian's command palette:
TaskNotes adds several commands to Obsidian's command palette:
- **Open Dashboard/Calendar View**: Opens the main ChronoSync dashboard
- **Open Dashboard/Calendar View**: Opens the main TaskNotes dashboard
- **Create New Task**: Opens a modal to create a new task
- **Go to Today's Note**: Navigates to or creates today's daily note
- **Open Home Note**: Navigates to or creates your home note
- **Increment Daily Pomodoros**: Adds 1 to the pomodoro count in today's note
- **Toggle Daily Workout**: Toggles the workout flag in today's note
- **Toggle Daily Meditation**: Toggles the meditation flag in today's note
- **Toggle Daily Important Flag**: Toggles the important flag in today's note
### Folder Structure
ChronoSync uses the following folder structure by default (configurable in settings):
TaskNotes uses the following folder structure by default (configurable in settings):
- `ChronoSync/Daily/`: Daily notes (YYYY-MM-DD.md)
- `ChronoSync/Tasks/`: Task files
- `ChronoSync/Notes/`: General notes
- `ChronoSync/Home.md`: Home note
- `TaskNotes/Daily/`: Daily notes (YYYY-MM-DD.md)
- `TaskNotes/Tasks/`: Task files
- `TaskNotes/Notes/`: General notes
- `TaskNotes/Home.md`: Home note
## YAML Structure Examples
@ -145,9 +139,6 @@ timeEntries:
### Daily Note
```yaml
date: "2024-01-15"
pomodoros: 6
workout: true
meditate: true
tags: ["daily"]
important: false
```

View file

@ -1,2 +1,2 @@
import ChronoSyncPlugin from './src/main';
export default ChronoSyncPlugin;
import TaskNotesPlugin from './src/main';
export default TaskNotesPlugin;

View file

@ -1,9 +1,9 @@
{
"id": "chronosync",
"name": "ChronoSync",
"id": "tasknotes",
"name": "TaskNotes",
"version": "0.6.3",
"minAppVersion": "1.0.0",
"description": "Comprehensive diary, task, note, and time management for Obsidian.",
"description": "Comprehensive task and note management with calendar integration for Obsidian.",
"author": "Callum Alpass",
"authorUrl": "https://github.com/callumalpass",
"isDesktopOnly": false

View file

@ -1,7 +1,7 @@
{
"name": "chronosync",
"name": "tasknotes",
"version": "0.6.3",
"description": "Comprehensive diary, task, note, and time management for Obsidian",
"description": "Comprehensive task and note management with calendar integration for Obsidian",
"main": "main.js",
"scripts": {
"dev": "node esbuild.config.mjs",

View file

@ -2,9 +2,9 @@ import { Notice, Plugin, TFile, WorkspaceLeaf, normalizePath, Platform } from 'o
import { format } from 'date-fns';
import * as YAML from 'yaml';
import {
ChronoSyncSettings,
TaskNotesSettings,
DEFAULT_SETTINGS,
ChronoSyncSettingTab
TaskNotesSettingTab
} from './settings/settings';
import {
CALENDAR_VIEW_TYPE,
@ -32,8 +32,8 @@ import { EventEmitter } from './utils/EventEmitter';
import { FileIndexer } from './utils/FileIndexer';
import { YAMLCache } from './utils/YAMLCache';
export default class ChronoSyncPlugin extends Plugin {
settings: ChronoSyncSettings;
export default class TaskNotesPlugin extends Plugin {
settings: TaskNotesSettings;
// Shared state between views
selectedDate: Date = new Date();
@ -70,17 +70,17 @@ export default class ChronoSyncPlugin extends Plugin {
);
// Add ribbon icon
this.addRibbonIcon('calendar-days', 'ChronoSync', async () => {
this.addRibbonIcon('calendar-days', 'TaskNotes', async () => {
await this.activateLinkedViews();
});
// Add ribbon icon for a side-by-side layout
this.addRibbonIcon('layout-grid', 'ChronoSync Grid Layout', async () => {
this.addRibbonIcon('layout-grid', 'TaskNotes Grid Layout', async () => {
await this.createGridLayout();
});
// Add ribbon icon for a tabs layout
this.addRibbonIcon('layout-tabs', 'ChronoSync Tabs Layout', async () => {
this.addRibbonIcon('layout-tabs', 'TaskNotes Tabs Layout', async () => {
await this.createTabsLayout();
});
@ -88,7 +88,7 @@ export default class ChronoSyncPlugin extends Plugin {
this.addCommands();
// Add settings tab
this.addSettingTab(new ChronoSyncSettingTab(this.app, this));
this.addSettingTab(new TaskNotesSettingTab(this.app, this));
}
// Methods for updating shared state and emitting events
@ -216,7 +216,7 @@ export default class ChronoSyncPlugin extends Plugin {
this.addCommand({
id: 'open-grid-layout',
name: 'Open ChronoSync in grid layout',
name: 'Open TaskNotes in grid layout',
callback: async () => {
await this.createGridLayout();
}
@ -224,7 +224,7 @@ export default class ChronoSyncPlugin extends Plugin {
this.addCommand({
id: 'open-tabs-layout',
name: 'Open ChronoSync in tabs layout',
name: 'Open TaskNotes in tabs layout',
callback: async () => {
await this.createTabsLayout();
}
@ -275,30 +275,6 @@ export default class ChronoSyncPlugin extends Plugin {
}
});
// Daily note metadata commands
this.addCommand({
id: 'increment-pomodoros',
name: 'Increment daily pomodoros',
callback: async () => {
await this.incrementPomodoros();
}
});
this.addCommand({
id: 'toggle-workout',
name: 'Toggle daily workout',
callback: async () => {
await this.toggleDailyMetadata('workout');
}
});
this.addCommand({
id: 'toggle-meditate',
name: 'Toggle daily meditation',
callback: async () => {
await this.toggleDailyMetadata('meditate');
}
});
}
// Helper method to create or activate a view of specific type
@ -397,7 +373,7 @@ export default class ChronoSyncPlugin extends Plugin {
});
// Group these leaves together for synchronized date selection
const groupName = 'chronosync-views';
const groupName = 'tasknotes-views';
calendarLeaf.setGroup(groupName);
tasksLeaf.setGroup(groupName);
notesLeaf.setGroup(groupName);
@ -405,7 +381,7 @@ export default class ChronoSyncPlugin extends Plugin {
// Make calendar the active view
workspace.setActiveLeaf(calendarLeaf, { focus: true });
new Notice('ChronoSync views created. You can drag and rearrange these tabs as needed.');
new Notice('TaskNotes views created. You can drag and rearrange these tabs as needed.');
}
/**
@ -443,7 +419,7 @@ export default class ChronoSyncPlugin extends Plugin {
});
// Group these leaves together
const groupName = 'chronosync-grid';
const groupName = 'tasknotes-grid';
calendarLeaf.setGroup(groupName);
tasksLeaf.setGroup(groupName);
notesLeaf.setGroup(groupName);
@ -452,7 +428,7 @@ export default class ChronoSyncPlugin extends Plugin {
workspace.setActiveLeaf(calendarLeaf, { focus: true });
// Show a notice to let the user know they can rearrange the tabs
new Notice('ChronoSync views created in grid layout. You can drag and rearrange these tabs freely.');
new Notice('TaskNotes views created in grid layout. You can drag and rearrange these tabs freely.');
}
/**
@ -494,7 +470,7 @@ export default class ChronoSyncPlugin extends Plugin {
});
// Group these views for synchronized date selection
const groupName = 'chronosync-tabs';
const groupName = 'tasknotes-tabs';
firstLeaf.setGroup(groupName);
secondLeaf.setGroup(groupName);
thirdLeaf.setGroup(groupName);
@ -502,7 +478,7 @@ export default class ChronoSyncPlugin extends Plugin {
// Make the calendar view active
workspace.setActiveLeaf(firstLeaf, { focus: true });
new Notice('ChronoSync tabs created. You can now freely drag and rearrange these tabs.');
new Notice('TaskNotes tabs created. You can now freely drag and rearrange these tabs.');
}
getLeafOfType(viewType: string): WorkspaceLeaf | null {
@ -563,49 +539,6 @@ export default class ChronoSyncPlugin extends Plugin {
}
}
async incrementPomodoros() {
await this.updateDailyNoteMetadata('pomodoros', (val) => {
const current = typeof val === 'number' ? val : 0;
return current + 1;
});
}
async toggleDailyMetadata(key: 'workout' | 'meditate') {
await this.updateDailyNoteMetadata(key, (val) => {
return typeof val === 'boolean' ? !val : true;
});
}
async updateDailyNoteMetadata(key: string, updateFn: (val: any) => any) {
// Get the current daily note file
const date = new Date();
const dailyNoteFileName = format(date, 'yyyy-MM-dd') + '.md';
const dailyNotePath = normalizePath(`${this.settings.dailyNotesFolder}/${dailyNoteFileName}`);
// Check if the daily note exists, if not create it
const fileExists = await this.app.vault.adapter.exists(dailyNotePath);
if (!fileExists) {
await this.navigateToCurrentDailyNote();
}
// Get the file and update its metadata
const file = this.app.vault.getAbstractFileByPath(dailyNotePath);
if (file instanceof TFile) {
try {
// Process the frontmatter using FileManager.processFrontMatter for safer modification
await this.app.fileManager.processFrontMatter(file, (frontmatter) => {
frontmatter[key] = updateFn(frontmatter[key]);
});
// Show notice
new Notice(`Updated ${key} in daily note`);
} catch (error) {
console.error('Error updating daily note metadata:', error);
new Notice('Error updating daily note metadata');
}
}
}
generateDailyNoteTemplate(date: Date): string {
const startTime = parseTime(this.settings.timeblockStartTime);

View file

@ -1,12 +1,12 @@
import { App, Modal, Notice, TFile } from 'obsidian';
import { format } from 'date-fns';
import * as YAML from 'yaml';
import ChronoSyncPlugin from '../main';
import TaskNotesPlugin from '../main';
import { ensureFolderExists } from '../utils/helpers';
import { CALENDAR_VIEW_TYPE, TaskFrontmatter, TaskInfo, TimeEntry } from '../types';
export class TaskCreationModal extends Modal {
plugin: ChronoSyncPlugin;
plugin: TaskNotesPlugin;
title: string = '';
details: string = '';
dueDate: string = '';
@ -20,7 +20,7 @@ export class TaskCreationModal extends Modal {
dayOfMonth: string = '';
monthOfYear: string = '';
constructor(app: App, plugin: ChronoSyncPlugin) {
constructor(app: App, plugin: TaskNotesPlugin) {
super(app);
this.plugin = plugin;
}

View file

@ -1,7 +1,7 @@
import { App, PluginSettingTab, Setting } from 'obsidian';
import ChronoSyncPlugin from '../main';
import TaskNotesPlugin from '../main';
export interface ChronoSyncSettings {
export interface TaskNotesSettings {
dailyNotesFolder: string;
tasksFolder: string; // Now just a default location for new tasks
taskTag: string; // The tag that identifies tasks
@ -15,9 +15,9 @@ export interface ChronoSyncSettings {
taskOrgFiltersCollapsed: boolean; // Save collapse state of task organization filters
}
export const DEFAULT_SETTINGS: ChronoSyncSettings = {
dailyNotesFolder: 'ChronoSync/Daily',
tasksFolder: 'ChronoSync/Tasks',
export const DEFAULT_SETTINGS: TaskNotesSettings = {
dailyNotesFolder: 'TaskNotes/Daily',
tasksFolder: 'TaskNotes/Tasks',
taskTag: 'task',
excludedFolders: '', // Default to no excluded folders
defaultTaskPriority: 'normal',
@ -29,10 +29,10 @@ export const DEFAULT_SETTINGS: ChronoSyncSettings = {
taskOrgFiltersCollapsed: false // Default to expanded
};
export class ChronoSyncSettingTab extends PluginSettingTab {
plugin: ChronoSyncPlugin;
export class TaskNotesSettingTab extends PluginSettingTab {
plugin: TaskNotesPlugin;
constructor(app: App, plugin: ChronoSyncPlugin) {
constructor(app: App, plugin: TaskNotesPlugin) {
super(app, plugin);
this.plugin = plugin;
}
@ -46,7 +46,7 @@ export class ChronoSyncSettingTab extends PluginSettingTab {
.setName('Daily notes folder')
.setDesc('Folder where daily notes will be stored')
.addText(text => text
.setPlaceholder('ChronoSync/Daily')
.setPlaceholder('TaskNotes/Daily')
.setValue(this.plugin.settings.dailyNotesFolder)
.onChange(async (value) => {
this.plugin.settings.dailyNotesFolder = value;
@ -57,7 +57,7 @@ export class ChronoSyncSettingTab extends PluginSettingTab {
.setName('Default tasks folder')
.setDesc('Default folder for new tasks (tasks are identified by tag, not folder)')
.addText(text => text
.setPlaceholder('ChronoSync/Tasks')
.setPlaceholder('TaskNotes/Tasks')
.setValue(this.plugin.settings.tasksFolder)
.onChange(async (value) => {
this.plugin.settings.tasksFolder = value;

View file

@ -1,7 +1,7 @@
// View types
export const CALENDAR_VIEW_TYPE = 'chronosync-calendar-view';
export const TASK_LIST_VIEW_TYPE = 'chronosync-task-list-view';
export const NOTES_VIEW_TYPE = 'chronosync-notes-view';
export const CALENDAR_VIEW_TYPE = 'tasknotes-calendar-view';
export const TASK_LIST_VIEW_TYPE = 'tasknotes-task-list-view';
export const NOTES_VIEW_TYPE = 'tasknotes-notes-view';
// Event types
export const EVENT_DATE_SELECTED = 'date-selected';
@ -85,9 +85,6 @@ export interface IndexedFile {
// YAML Frontmatter types
export interface DailyNoteFrontmatter {
date?: string;
pomodoros?: number;
workout?: boolean;
meditate?: boolean;
tags?: string[];
important?: boolean;
}

View file

@ -142,9 +142,6 @@ export function generateDailyNoteTemplate(date: Date, timeblockStartTime: TimeIn
// Create the YAML frontmatter
const yaml = {
date: dateStr,
pomodoros: 0,
workout: false,
meditate: false,
tags: ['daily']
};

View file

@ -1,6 +1,6 @@
import { Notice, TFile, ItemView, WorkspaceLeaf, normalizePath } from 'obsidian';
import { format } from 'date-fns';
import ChronoSyncPlugin from '../main';
import TaskNotesPlugin from '../main';
import {
CALENDAR_VIEW_TYPE,
EVENT_DATA_CHANGED,
@ -22,14 +22,14 @@ export class CalendarView extends ItemView {
// Static property to track initialization status for daily notes
static dailyNotesInitialized: boolean = false;
plugin: ChronoSyncPlugin;
plugin: TaskNotesPlugin;
displayMode: CalendarDisplayMode = 'month';
colorizeMode: ColorizeMode = 'tasks';
// Event listeners
private listeners: (() => void)[] = [];
constructor(leaf: WorkspaceLeaf, plugin: ChronoSyncPlugin) {
constructor(leaf: WorkspaceLeaf, plugin: TaskNotesPlugin) {
super(leaf);
this.plugin = plugin;
@ -67,7 +67,7 @@ export class CalendarView extends ItemView {
contentEl.empty();
// Add a container for our view content
const container = contentEl.createDiv({ cls: 'chronosync-container calendar-view-container' });
const container = contentEl.createDiv({ cls: 'tasknotes-container calendar-view-container' });
// Show loading indicator while loading initial data
this.showLoadingIndicator();
@ -348,7 +348,7 @@ export class CalendarView extends ItemView {
this.showLoadingIndicator();
try {
const container = this.contentEl.querySelector('.chronosync-container') as HTMLElement;
const container = this.contentEl.querySelector('.tasknotes-container') as HTMLElement;
if (container) {
// Simply render the view and get fresh data from FileIndexer
this.renderView(container);
@ -388,7 +388,7 @@ export class CalendarView extends ItemView {
// Show a loading indicator while building cache
private showLoadingIndicator() {
const container = this.contentEl.querySelector('.chronosync-container');
const container = this.contentEl.querySelector('.tasknotes-container');
if (!container) return;
// Check if indicator already exists
@ -515,7 +515,7 @@ export class CalendarView extends ItemView {
// Today button
const todayButton = navContainer.createEl('button', {
text: 'Today',
cls: 'today-button chronosync-button chronosync-button-primary',
cls: 'today-button tasknotes-button tasknotes-button-primary',
attr: {
'aria-label': 'Go to today',
'title': 'Go to today (T key)'
@ -1029,7 +1029,7 @@ export class CalendarView extends ItemView {
// Show preview for the daily note only
this.app.workspace.trigger('hover-link', {
event,
source: 'chronosync-calendar',
source: 'tasknotes-calendar',
hoverParent: this,
targetEl: targetEl,
linktext: dailyNotePath,
@ -1171,7 +1171,7 @@ export class CalendarView extends ItemView {
if (file) {
this.app.workspace.trigger('hover-link', {
event,
source: 'chronosync-agenda',
source: 'tasknotes-agenda',
hoverParent: this,
targetEl: item,
linktext: task.path,
@ -1208,7 +1208,7 @@ export class CalendarView extends ItemView {
if (file) {
this.app.workspace.trigger('hover-link', {
event,
source: 'chronosync-agenda',
source: 'tasknotes-agenda',
hoverParent: this,
targetEl: item,
linktext: note.path,

View file

@ -1,6 +1,6 @@
import { Notice, TFile, ItemView, WorkspaceLeaf } from 'obsidian';
import { format } from 'date-fns';
import ChronoSyncPlugin from '../main';
import TaskNotesPlugin from '../main';
import {
NOTES_VIEW_TYPE,
NoteInfo,
@ -9,7 +9,7 @@ import {
} from '../types';
export class NotesView extends ItemView {
plugin: ChronoSyncPlugin;
plugin: TaskNotesPlugin;
// UI elements
private loadingIndicator: HTMLElement | null = null;
@ -25,7 +25,7 @@ export class NotesView extends ItemView {
// Event listeners
private listeners: (() => void)[] = [];
constructor(leaf: WorkspaceLeaf, plugin: ChronoSyncPlugin) {
constructor(leaf: WorkspaceLeaf, plugin: TaskNotesPlugin) {
super(leaf);
this.plugin = plugin;
@ -88,7 +88,7 @@ export class NotesView extends ItemView {
}
async render() {
const container = this.contentEl.createDiv({ cls: 'chronosync-container notes-view-container' });
const container = this.contentEl.createDiv({ cls: 'tasknotes-container notes-view-container' });
// Create header with current date information
this.createHeader(container);
@ -110,7 +110,7 @@ export class NotesView extends ItemView {
// Add refresh button
const refreshButton = actionsContainer.createEl('button', {
text: 'Refresh',
cls: 'refresh-notes-button chronosync-button chronosync-button-secondary',
cls: 'refresh-notes-button tasknotes-button tasknotes-button-secondary',
attr: {
'aria-label': 'Refresh notes list',
'title': 'Refresh notes list'
@ -162,10 +162,10 @@ export class NotesView extends ItemView {
notes.forEach(note => {
const noteItem = document.createElement('div');
const isDailyNote = note.path.startsWith(this.plugin.settings.dailyNotesFolder);
noteItem.className = `note-item chronosync-card ${isDailyNote ? 'daily-note-item' : ''}`;
noteItem.className = `note-item tasknotes-card ${isDailyNote ? 'daily-note-item' : ''}`;
const titleEl = document.createElement('div');
titleEl.className = 'note-item-title chronosync-card-header';
titleEl.className = 'note-item-title tasknotes-card-header';
// Add indicator for daily notes
if (isDailyNote) {
@ -180,7 +180,7 @@ export class NotesView extends ItemView {
noteItem.appendChild(titleEl);
const contentContainer = document.createElement('div');
contentContainer.className = 'chronosync-card-content';
contentContainer.className = 'tasknotes-card-content';
// Add created date if available
if (note.createdDate) {
@ -198,7 +198,7 @@ export class NotesView extends ItemView {
// Add tags as footer
if (note.tags && note.tags.length > 0) {
const tagContainer = document.createElement('div');
tagContainer.className = 'note-item-tags chronosync-card-footer';
tagContainer.className = 'note-item-tags tasknotes-card-footer';
note.tags.forEach(tag => {
const tagEl = document.createElement('span');
@ -221,7 +221,7 @@ export class NotesView extends ItemView {
if (file) {
this.app.workspace.trigger('hover-link', {
event,
source: 'chronosync-notes',
source: 'tasknotes-notes',
hoverParent: this,
targetEl: noteItem,
linktext: note.path,

View file

@ -1,6 +1,6 @@
import { Notice, TFile, ItemView, WorkspaceLeaf } from 'obsidian';
import { format } from 'date-fns';
import ChronoSyncPlugin from '../main';
import TaskNotesPlugin from '../main';
import {
TASK_LIST_VIEW_TYPE,
TaskInfo,
@ -17,7 +17,7 @@ import {
} from '../utils/helpers';
export class TaskListView extends ItemView {
plugin: ChronoSyncPlugin;
plugin: TaskNotesPlugin;
// UI elements
private taskListContainer: HTMLElement | null = null;
@ -45,7 +45,7 @@ export class TaskListView extends ItemView {
// Event listeners
private listeners: (() => void)[] = [];
constructor(leaf: WorkspaceLeaf, plugin: ChronoSyncPlugin) {
constructor(leaf: WorkspaceLeaf, plugin: TaskNotesPlugin) {
super(leaf);
this.plugin = plugin;
@ -117,7 +117,7 @@ export class TaskListView extends ItemView {
}
async render() {
const container = this.contentEl.createDiv({ cls: 'chronosync-container task-list-view-container' });
const container = this.contentEl.createDiv({ cls: 'tasknotes-container task-list-view-container' });
// Create header with current date information
this.createHeader(container);
@ -138,7 +138,7 @@ export class TaskListView extends ItemView {
const addTaskButton = actionsContainer.createEl('button', {
text: 'New Task',
cls: 'add-task-button chronosync-button chronosync-button-primary',
cls: 'add-task-button tasknotes-button tasknotes-button-primary',
attr: {
'aria-label': 'Create new task',
'title': 'Create new task'
@ -180,7 +180,7 @@ export class TaskListView extends ItemView {
// Refresh button in primary row
const refreshButton = primaryFiltersRow.createEl('button', {
text: 'Refresh',
cls: 'refresh-tasks-button chronosync-button chronosync-button-secondary',
cls: 'refresh-tasks-button tasknotes-button tasknotes-button-secondary',
attr: {
'aria-label': 'Refresh task list',
'title': 'Refresh task list'
@ -438,7 +438,7 @@ export class TaskListView extends ItemView {
: task.status;
const taskItem = container.createDiv({
cls: `task-item priority-${task.priority} ${isDueOnSelectedDate ? 'task-due-today' : ''} ${task.archived ? 'task-archived' : ''} ${task.recurrence ? 'task-recurring' : ''} chronosync-card`
cls: `task-item priority-${task.priority} ${isDueOnSelectedDate ? 'task-due-today' : ''} ${task.archived ? 'task-archived' : ''} ${task.recurrence ? 'task-recurring' : ''} tasknotes-card`
});
// Store reference to this task element for future updates
@ -446,7 +446,7 @@ export class TaskListView extends ItemView {
this.taskElements.set(task.path, taskItem);
// Create header row (title and metadata)
const taskHeader = taskItem.createDiv({ cls: 'task-header chronosync-card-header' });
const taskHeader = taskItem.createDiv({ cls: 'task-header tasknotes-card-header' });
// Create info section (left side)
const taskInfo = taskHeader.createDiv({ cls: 'task-info' });
@ -801,7 +801,7 @@ export class TaskListView extends ItemView {
if (file) {
this.app.workspace.trigger('hover-link', {
event,
source: 'chronosync-tasks',
source: 'tasknotes-tasks',
hoverParent: this,
targetEl: taskInfo,
linktext: task.path,
@ -1135,7 +1135,7 @@ export class TaskListView extends ItemView {
(updatedTask.recurrence && isRecurringTaskDueOn(updatedTask, this.plugin.selectedDate))
);
taskElement.className = `task-item priority-${updatedTask.priority} ${isDueOnSelectedDate ? 'task-due-today' : ''} ${updatedTask.archived ? 'task-archived' : ''} ${updatedTask.recurrence ? 'task-recurring' : ''} chronosync-card`;
taskElement.className = `task-item priority-${updatedTask.priority} ${isDueOnSelectedDate ? 'task-due-today' : ''} ${updatedTask.archived ? 'task-archived' : ''} ${updatedTask.recurrence ? 'task-recurring' : ''} tasknotes-card`;
// Add visual feedback for the update
taskElement.classList.add('task-updated');

View file

@ -70,7 +70,7 @@ button.processing::after {
/* Accessibility - Focus Styles */
.calendar-day:focus,
.chronosync-tab:focus,
.tasknotes-tab:focus,
.task-toggle-button:focus,
.calendar-nav button:focus,
.add-task-button:focus,
@ -101,7 +101,7 @@ button.processing::after {
}
/* Main container for all views - denser layout */
.chronosync-container {
.tasknotes-container {
padding: var(--cs-spacing-sm);
display: flex;
flex-direction: column;
@ -666,7 +666,7 @@ button.processing::after {
}
/* Main Content Area with Tabs */
.chronosync-main-content {
.tasknotes-main-content {
border: 1px solid var(--background-modifier-border);
border-radius: 6px;
overflow: hidden;
@ -676,13 +676,13 @@ button.processing::after {
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
}
.chronosync-tabs {
.tasknotes-tabs {
display: flex;
background-color: var(--background-secondary);
border-bottom: 1px solid var(--background-modifier-border);
}
.chronosync-tab {
.tasknotes-tab {
padding: 0.5rem 1rem;
cursor: pointer;
background: none;
@ -695,17 +695,17 @@ button.processing::after {
text-align: center;
}
.chronosync-tab:hover {
.tasknotes-tab:hover {
background-color: var(--background-modifier-hover);
}
.chronosync-tab.active {
.tasknotes-tab.active {
background-color: var(--background-primary);
color: var(--text-accent);
font-weight: bold;
}
.chronosync-tab.active::after {
.tasknotes-tab.active::after {
content: '';
position: absolute;
bottom: 0;
@ -716,7 +716,7 @@ button.processing::after {
transition: transform 0.2s ease-in-out;
}
.chronosync-content-area {
.tasknotes-content-area {
padding: 1rem;
background-color: var(--background-primary);
flex-grow: 1;
@ -923,7 +923,7 @@ button.processing::after {
}
/* Unified Card Styles - more compact and consistent */
.chronosync-card {
.tasknotes-card {
padding: var(--cs-spacing-sm);
border-radius: var(--cs-radius-sm);
border: 1px solid var(--background-modifier-border);
@ -932,13 +932,13 @@ button.processing::after {
transition: all var(--cs-transition-fast);
}
.chronosync-card:hover {
.tasknotes-card:hover {
background-color: var(--background-modifier-hover);
transform: translateY(-1px);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.chronosync-card-header {
.tasknotes-card-header {
font-weight: 500;
font-size: var(--cs-text-sm);
margin-bottom: var(--cs-spacing-xs);
@ -949,12 +949,12 @@ button.processing::after {
align-items: center;
}
.chronosync-card-content {
.tasknotes-card-content {
color: var(--text-normal);
font-size: var(--cs-text-sm);
}
.chronosync-card-footer {
.tasknotes-card-footer {
margin-top: var(--cs-spacing-xs);
padding-top: var(--cs-spacing-xs);
border-top: 1px solid var(--background-modifier-border);
@ -1283,7 +1283,7 @@ button.processing::after {
@media (pointer: coarse) {
/* Improvements for touch interfaces */
.calendar-day,
.chronosync-tab,
.tasknotes-tab,
.task-toggle-button,
.refresh-tasks-button,
.add-task-button,
@ -1833,7 +1833,7 @@ button.processing::after {
}
/* Unified Button Styles */
.chronosync-button {
.tasknotes-button {
padding: 0.35rem 0.7rem;
border-radius: 4px;
font-size: 0.9rem;
@ -1846,41 +1846,41 @@ button.processing::after {
transition: background-color 0.2s, transform 0.1s, box-shadow 0.2s;
}
.chronosync-button:hover {
.tasknotes-button:hover {
transform: translateY(-1px);
box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1);
}
.chronosync-button:active {
.tasknotes-button:active {
transform: translateY(0);
box-shadow: none;
}
.chronosync-button-primary {
.tasknotes-button-primary {
background-color: var(--interactive-accent);
color: var(--text-on-accent);
}
.chronosync-button-primary:hover {
.tasknotes-button-primary:hover {
background-color: var(--interactive-accent-hover);
}
.chronosync-button-secondary {
.tasknotes-button-secondary {
background-color: var(--background-secondary);
color: var(--text-normal);
border: 1px solid var(--background-modifier-border);
}
.chronosync-button-secondary:hover {
.tasknotes-button-secondary:hover {
background-color: var(--background-secondary-alt);
}
.chronosync-button-small {
.tasknotes-button-small {
padding: 0.2rem 0.4rem;
font-size: 0.8rem;
}
.chronosync-button-icon {
.tasknotes-button-icon {
display: flex;
align-items: center;
justify-content: center;
@ -2433,7 +2433,7 @@ button.processing::after {
}
/* Status Messages */
.chronosync-status-message {
.tasknotes-status-message {
position: fixed;
bottom: 20px;
right: 20px;
@ -2457,17 +2457,17 @@ button.processing::after {
flex: 1;
}
.chronosync-status-success {
.tasknotes-status-success {
background-color: var(--background-modifier-success);
color: var(--text-on-accent);
}
.chronosync-status-error {
.tasknotes-status-error {
background-color: var(--background-modifier-error);
color: var(--text-on-accent);
}
.chronosync-status-warning {
.tasknotes-status-warning {
background-color: var(--background-modifier-error-hover);
color: var(--text-normal);
}
@ -2479,7 +2479,7 @@ button.processing::after {
/* Responsive adjustments - maintaining compact design */
@media (max-width: 768px) {
.chronosync-container {
.tasknotes-container {
padding: var(--cs-spacing-xs);
}
@ -2526,11 +2526,11 @@ button.processing::after {
font-size: var(--cs-text-xs);
}
.chronosync-tabs {
.tasknotes-tabs {
flex-wrap: wrap;
}
.chronosync-tab {
.tasknotes-tab {
padding: var(--cs-spacing-sm);
font-size: var(--cs-text-xs);
}