Compare commits

..

No commits in common. "master" and "0.1.6" have entirely different histories.

12 changed files with 116 additions and 370 deletions

View file

@ -8,8 +8,6 @@ If you like the see your notes on a Calendar and easily find them using a certai
## Configure
> IMPORTANT: Please make sure that you check the date formatting of the library, which is used by this plugin following [Day.js Date Format Link](https://day.js.org/docs/en/display/format).
### 01 YAML Option as Date Source
1. Go to the plugin settings
@ -49,15 +47,9 @@ You can define this in the plugin settings:
- You can right-click any date in the calendar view to create a note for a certain date
- The plus icon is defaulted to create a note for today
## Plugin Commands
## Commands for Day Navigation
### Day Navigation
You can use directly **Go to Previous Day**, **Go to Next Day** and **Go to Today** commands to navigate between dates. You can also assign hotkey to these commands to change the active date easily from your keyboard.
### New Note Creation
You can use the **Create a New Note** command to trigger the create a new note action customized for the plugin. Same as day navigation, you can assign hotkey to this command for easy keyboard navigation.
You can use directly **Go to Previous Day** and **Go to Next Day** commands to navigate between dates or assign any hotkey to change the active date easily from your keyboard.
## Style Settings Plugin Support

View file

@ -1,7 +1,7 @@
{
"id": "oz-calendar",
"name": "OZ Calendar",
"version": "0.3.4",
"version": "0.1.5",
"minAppVersion": "0.15.0",
"description": "View your notes in Calendar using any YAML key with date",
"author": "Ozan Tellioglu",

View file

@ -1,6 +1,6 @@
{
"name": "oz-calendar",
"version": "0.3.4",
"version": "0.1.5",
"description": "View your notes in Calendar using any YAML key with date",
"main": "main.js",
"scripts": {
@ -14,9 +14,9 @@
"devDependencies": {
"@types/common-tags": "^1.8.1",
"@types/node": "^16.11.6",
"@types/react": "18.2.38",
"@types/react": "17.0.2",
"@types/react-calendar": "^3.9.0",
"@types/react-dom": "18.2.17",
"@types/react-dom": "17.0.2",
"@typescript-eslint/eslint-plugin": "5.29.0",
"@typescript-eslint/parser": "5.29.0",
"builtin-modules": "3.3.0",
@ -30,9 +30,10 @@
"@popperjs/core": "^2.11.6",
"common-tags": "^1.8.2",
"dayjs": "1.11.7",
"react": "18.2.0",
"preact": "10",
"react": "npm:@preact/compat@17.0.2",
"react-calendar": "4.0.0",
"react-dom": "18.2.0",
"react-dom": "npm:@preact/compat@17.0.2",
"react-icons": "4.8.0"
}
}

View file

@ -28,21 +28,9 @@ export default function MyCalendar(params: { plugin: OZCalendarPlugin }) {
}, []);
const createNote = () => {
let currentSelectedDay: Date = selectedDay;
let dateNow: Date = new Date();
setSelectedDay((selectedDay) => {
currentSelectedDay = selectedDay;
return selectedDay;
});
// Add now time details to the existing date if current date
if (plugin.settings.newNoteDate === 'active-date') {
currentSelectedDay.setHours(dateNow.getHours());
currentSelectedDay.setMinutes(dateNow.getMinutes());
currentSelectedDay.setMilliseconds(dateNow.getMilliseconds());
}
let newFileModal = new CreateNoteModal(
plugin,
plugin.settings.newNoteDate === 'current-date' ? dateNow : currentSelectedDay
plugin.settings.newNoteDate === 'current-date' ? new Date() : selectedDay
);
newFileModal.open();
};
@ -77,7 +65,7 @@ export default function MyCalendar(params: { plugin: OZCalendarPlugin }) {
return (
<div className="dots-wrapper">
{[...Array(Math.min(dotsCount, 2))].map((_, index) => (
<RxDotFilled key={index} viewBox="0 0 15 15" />
<RxDotFilled viewBox="0 0 15 15" />
))}
{dotsCount > 2 && <span>+{dotsCount - 2}</span>}
</div>
@ -86,31 +74,15 @@ export default function MyCalendar(params: { plugin: OZCalendarPlugin }) {
return null;
};
const customTileClass = ({ activeStartDate, date, view }: CalendarTileProperties) => {
// Assign a custom class in case the day is the current day
let today = new Date();
return date.getFullYear() === today.getFullYear() &&
date.getMonth() === today.getMonth() &&
date.getDate() === today.getDate()
? 'oz-calendar-plugin-today'
: '';
};
const fixedCalendarClass = plugin.settings.fixedCalendar ? 'fixed' : '';
return (
<div className={'oz-calendar-plugin-view ' + fixedCalendarClass}>
<div className={'oz-calendar-plugin-view' + (plugin.settings.fixedCalendar ? ' fixed' : '')}>
<Calendar
onChange={setSelectedDay}
value={selectedDay}
maxDetail="month"
minDetail="month"
showWeekNumbers={plugin.settings.showWeekNumbers}
view="month"
tileContent={customTileContent}
tileClassName={customTileClass}
calendarType={plugin.settings.calendarType}
showFixedNumberOfWeeks={plugin.settings.fixedCalendar}
activeStartDate={activeStartDate}
onActiveStartDateChange={(props) => {
if (props.action === 'next') {

View file

@ -7,8 +7,7 @@ import dayjs from 'dayjs';
import OZCalendarPlugin from 'main';
import { isMouseEvent, openFile } from '../util/utils';
import { Menu, TFile } from 'obsidian';
import { VIEW_TYPE } from 'view';
import { OZNote } from 'types';
import { CreateNoteModal } from 'modal';
interface NoteListComponentParams {
selectedDay: Date;
@ -37,39 +36,26 @@ export default function NoteListComponent(params: NoteListComponentParams) {
}
};
const openFilePath = (e: React.MouseEvent<HTMLDivElement, MouseEvent>, filePath: string) => {
const openFilePath = (filePath: string) => {
let abstractFile = plugin.app.vault.getAbstractFileByPath(filePath);
let openFileBehaviour = plugin.settings.openFileBehaviour;
if (abstractFile && abstractFile instanceof TFile) {
// Define the Default Open Behaviour by looking at the plugin settings
let openInNewLeaf: boolean = openFileBehaviour === 'new-tab';
let openInNewTabGroup: boolean = openFileBehaviour === 'new-tab-group';
if (openFileBehaviour === 'obsidian-default') {
openInNewLeaf = (e.ctrlKey || e.metaKey) && !(e.shiftKey || e.altKey);
openInNewTabGroup = (e.ctrlKey || e.metaKey) && (e.shiftKey || e.altKey);
}
// Open the file by using the open file behaviours above
if (abstractFile) {
openFile({
file: abstractFile,
file: abstractFile as TFile,
plugin: plugin,
newLeaf: openInNewLeaf,
leafBySplit: openInNewTabGroup,
newLeaf: openFileBehaviour === 'new-tab',
leafBySplit: openFileBehaviour === 'new-tab-group',
});
}
};
const selectedDayNotes: OZNote[] = useMemo(() => {
const selectedDayNotes = useMemo(() => {
const selectedDayIso = dayjs(selectedDay).format('YYYY-MM-DD');
let sortedList: OZNote[] = [];
if (selectedDayIso in plugin.OZCALENDARDAYS_STATE) {
sortedList = plugin.OZCALENDARDAYS_STATE[selectedDayIso].filter(
(ozItem) => ozItem.type === 'note'
) as OZNote[];
}
let sortedList =
selectedDayIso in plugin.OZCALENDARDAYS_STATE ? plugin.OZCALENDARDAYS_STATE[selectedDayIso] : [];
sortedList = sortedList.sort((a, b) => {
if (plugin.settings.sortingOption === 'name-rev')
[a.displayName, b.displayName] = [b.displayName, a.displayName];
return a.displayName.localeCompare(b.displayName, 'en', { numeric: true });
if (plugin.settings.sortingOption === 'name-rev') [a, b] = [b, a];
return extractFileName(a).localeCompare(extractFileName(b), 'en', { numeric: true });
});
return sortedList;
}, [selectedDay, forceValue]);
@ -78,7 +64,7 @@ export default function NoteListComponent(params: NoteListComponentParams) {
let abstractFile = plugin.app.vault.getAbstractFileByPath(filePath);
if (abstractFile) {
const fileMenu = new Menu();
plugin.app.workspace.trigger('file-menu', fileMenu, abstractFile, VIEW_TYPE);
plugin.app.workspace.trigger('file-menu', fileMenu, abstractFile, 'file-explorer');
if (isMouseEvent(e)) {
fileMenu.showAtPosition({ x: e.pageX, y: e.pageY });
} else {
@ -117,32 +103,22 @@ export default function NoteListComponent(params: NoteListComponentParams) {
/>
</div>
</div>
<div
className={
'oz-calendar-notelist-container ' +
(plugin.settings.fileNameOverflowBehaviour == 'scroll' ? 'oz-calendar-overflow-scroll' : '')
}>
<div className="oz-calendar-notelist-container">
{selectedDayNotes.length === 0 && (
<div className="oz-calendar-note-no-note">
<RiPhoneFindLine className="oz-calendar-no-note-icon" />
No note found
</div>
)}
{selectedDayNotes.map((ozNote) => {
{selectedDayNotes.map((notePath) => {
return (
<div
className={
'oz-calendar-note-line' +
(plugin.settings.fileNameOverflowBehaviour == 'hide'
? ' oz-calendar-overflow-hide'
: '')
}
id={ozNote.path}
key={ozNote.path}
onClick={(e) => openFilePath(e, ozNote.path)}
onContextMenu={(e) => triggerFileContextMenu(e, ozNote.path)}>
className="oz-calendar-note-line"
id={notePath}
onClick={() => openFilePath(notePath)}
onContextMenu={(e) => triggerFileContextMenu(e, notePath)}>
<HiOutlineDocumentText className="oz-calendar-note-line-icon" />
<span>{ozNote.displayName}</span>
<span>{extractFileName(notePath)}</span>
</div>
);
})}

View file

@ -2,14 +2,13 @@ import { CachedMetadata, Menu, Plugin, TAbstractFile, TFile, addIcon } from 'obs
import { OZCalendarView, VIEW_TYPE } from 'view';
import dayjs from 'dayjs';
import customParseFormat from 'dayjs/plugin/customParseFormat';
import { DayChangeCommandAction, OZCalendarDaysMap, fileToOZItem } from 'types';
import { DayChangeCommandAction, OZCalendarDaysMap } from 'types';
import { OZCAL_ICON } from './util/icons';
import { OZCalendarPluginSettings, DEFAULT_SETTINGS, OZCalendarPluginSettingsTab } from './settings/settings';
import { CreateNoteModal } from 'modal';
export default class OZCalendarPlugin extends Plugin {
settings: OZCalendarPluginSettings;
dayjs = dayjs;
OZCALENDARDAYS_STATE: OZCalendarDaysMap = {};
initialScanCompleted: boolean = false;
EVENT_TYPES = {
@ -110,14 +109,6 @@ export default class OZCalendarPlugin extends Plugin {
);
},
});
this.addCommand({
id: 'oz-calendar-open-leaf',
name: 'Open OZ Calendar',
callback: () => {
this.openOZCalendarLeaf({ showAfterAttach: true });
},
});
}
onunload() {
@ -140,13 +131,13 @@ export default class OZCalendarPlugin extends Plugin {
* @param date
* @param filePath
*/
addFilePathToState = (date: string, file: TFile) => {
addFilePathToState = (date: string, filePath: string) => {
let newStateMap = this.OZCALENDARDAYS_STATE;
// if exists, add the new file path
if (date in newStateMap) {
newStateMap[date] = [...newStateMap[date], fileToOZItem({ note: file })];
newStateMap[date] = [...newStateMap[date], filePath];
} else {
newStateMap[date] = [fileToOZItem({ note: file })];
newStateMap[date] = [filePath];
}
this.OZCALENDARDAYS_STATE = newStateMap;
};
@ -160,10 +151,8 @@ export default class OZCalendarPlugin extends Plugin {
let changeFlag = false;
let newStateMap = this.OZCALENDARDAYS_STATE;
for (let k of Object.keys(newStateMap)) {
if (newStateMap[k].some((ozItem) => ozItem.type === 'note' && ozItem.path === filePath)) {
newStateMap[k] = newStateMap[k].filter((ozItem) => {
return !(ozItem.type === 'note' && ozItem.path === filePath);
});
if (newStateMap[k].contains(filePath)) {
newStateMap[k] = newStateMap[k].filter((p) => p !== filePath);
changeFlag = true;
}
}
@ -183,9 +172,9 @@ export default class OZCalendarPlugin extends Plugin {
let fm = cache.frontmatter;
for (let k of Object.keys(cache.frontmatter)) {
if (k === this.settings.yamlKey) {
let fmValue = String(fm[k]);
let fmValue = fm[k];
let parsedDayISOString = dayjs(fmValue, this.settings.dateFormat).format('YYYY-MM-DD');
this.addFilePathToState(parsedDayISOString, file);
this.addFilePathToState(parsedDayISOString, file.path);
changeFlag = true;
}
}
@ -213,15 +202,15 @@ export default class OZCalendarPlugin extends Plugin {
let fm = cache.frontmatter;
for (let k of Object.keys(cache.frontmatter)) {
if (k === this.settings.yamlKey) {
let fmValue = String(fm[k]);
let fmValue = fm[k];
let parsedDayISOString = dayjs(fmValue, this.settings.dateFormat).format('YYYY-MM-DD');
// If date doesn't exist, create a new one
if (!(parsedDayISOString in this.OZCALENDARDAYS_STATE)) {
this.addFilePathToState(parsedDayISOString, file);
this.addFilePathToState(parsedDayISOString, file.path);
} else {
// if date exists and note is not in the date list
if (!(file.path in this.OZCALENDARDAYS_STATE[parsedDayISOString])) {
this.addFilePathToState(parsedDayISOString, file);
this.addFilePathToState(parsedDayISOString, file.path);
}
}
}
@ -237,16 +226,14 @@ export default class OZCalendarPlugin extends Plugin {
let changeFlag = false;
if (file instanceof TFile && file.extension === 'md') {
for (let k of Object.keys(this.OZCALENDARDAYS_STATE)) {
for (let ozItem of this.OZCALENDARDAYS_STATE[k]) {
if (ozItem.type === 'note' && ozItem.path === oldPath) {
for (let filePath of this.OZCALENDARDAYS_STATE[k]) {
if (filePath === oldPath) {
let oldIndex = this.OZCALENDARDAYS_STATE[k].indexOf(filePath);
if (this.settings.dateSource === 'yaml') {
ozItem.path = file.path;
ozItem.displayName = file.basename;
this.OZCALENDARDAYS_STATE[k][oldIndex] = file.path;
changeFlag = true;
} else if (this.settings.dateSource === 'filename') {
this.OZCALENDARDAYS_STATE[k] = this.OZCALENDARDAYS_STATE[k].filter((ozItem) => {
return !(ozItem.type === 'note' && ozItem.path === oldPath);
});
this.OZCALENDARDAYS_STATE[k].splice(oldIndex, 1);
changeFlag = true;
}
}
@ -255,17 +242,23 @@ export default class OZCalendarPlugin extends Plugin {
}
// Make sure that you scan the new file name for filename source
if (this.settings.dateSource === 'filename' && dayjs(file.name, this.settings.dateFormat).isValid()) {
let parsedDayISOString = dayjs(file.name, this.settings.dateFormat).format('YYYY-MM-DD');
if (parsedDayISOString in this.OZCALENDARDAYS_STATE) {
this.OZCALENDARDAYS_STATE[parsedDayISOString] = [
...this.OZCALENDARDAYS_STATE[parsedDayISOString],
fileToOZItem({ note: file }),
];
} else {
this.OZCALENDARDAYS_STATE[parsedDayISOString] = [fileToOZItem({ note: file })];
if (file.name.length >= this.settings.dateFormat.length) {
let cleanFileName = file.name.substring(0, this.settings.dateFormat.length);
if (
this.settings.dateSource === 'filename' &&
dayjs(cleanFileName, this.settings.dateFormat, true).isValid()
) {
let parsedDayISOString = dayjs(cleanFileName, this.settings.dateFormat).format('YYYY-MM-DD');
if (parsedDayISOString in this.OZCALENDARDAYS_STATE) {
this.OZCALENDARDAYS_STATE[parsedDayISOString] = [
...this.OZCALENDARDAYS_STATE[parsedDayISOString],
file.path,
];
} else {
this.OZCALENDARDAYS_STATE[parsedDayISOString] = [file.path];
}
changeFlag = true;
}
changeFlag = true;
}
// If change happened force update the component
@ -279,15 +272,16 @@ export default class OZCalendarPlugin extends Plugin {
handleCreate = (file: TAbstractFile) => {
if (file instanceof TFile && file.extension === 'md' && this.settings.dateSource === 'filename') {
if (dayjs(file.name, this.settings.dateFormat).isValid()) {
let parsedDayISOString = dayjs(file.name, this.settings.dateFormat).format('YYYY-MM-DD');
let cleanFileName = file.name.substring(0, this.settings.dateFormat.length);
if (dayjs(cleanFileName, this.settings.dateFormat, true).isValid()) {
let parsedDayISOString = dayjs(cleanFileName, this.settings.dateFormat).format('YYYY-MM-DD');
if (parsedDayISOString in this.OZCALENDARDAYS_STATE) {
this.OZCALENDARDAYS_STATE[parsedDayISOString] = [
...this.OZCALENDARDAYS_STATE[parsedDayISOString],
fileToOZItem({ note: file }),
file.path,
];
} else {
this.OZCALENDARDAYS_STATE[parsedDayISOString] = [fileToOZItem({ note: file })];
this.OZCALENDARDAYS_STATE[parsedDayISOString] = [file.path];
}
}
this.calendarForceUpdate();
@ -330,7 +324,7 @@ export default class OZCalendarPlugin extends Plugin {
// Check the FM keys vs the provided key by the user in settings
for (let k of Object.keys(fm)) {
if (k === this.settings.yamlKey) {
let fmValue = String(fm[k]);
let fmValue = (fm[k] as string).substring(0, this.settings.dateFormat.length);
// Parse the date with provided date format
let parsedDayJsDate = dayjs(fmValue, this.settings.dateFormat);
// Take only YYYY-MM-DD part fromt the date as String
@ -339,10 +333,10 @@ export default class OZCalendarPlugin extends Plugin {
if (parsedDayISOString in OZCalendarDays) {
OZCalendarDays[parsedDayISOString] = [
...OZCalendarDays[parsedDayISOString],
fileToOZItem({ note: mdFile }),
mdFile.path,
];
} else {
OZCalendarDays[parsedDayISOString] = [fileToOZItem({ note: mdFile })];
OZCalendarDays[parsedDayISOString] = [mdFile.path];
}
}
}
@ -350,15 +344,16 @@ export default class OZCalendarPlugin extends Plugin {
} else if (this.settings.dateSource === 'filename') {
let dateFormatLength = this.settings.dateFormat.length;
if (mdFile.name.length >= dateFormatLength) {
if (dayjs(mdFile.name, this.settings.dateFormat).isValid()) {
let parsedDayISOString = dayjs(mdFile.name, this.settings.dateFormat).format('YYYY-MM-DD');
let value = mdFile.name.substring(0, dateFormatLength);
if (dayjs(value, this.settings.dateFormat, true).isValid()) {
let parsedDayISOString = dayjs(value, this.settings.dateFormat).format('YYYY-MM-DD');
if (parsedDayISOString in OZCalendarDays) {
OZCalendarDays[parsedDayISOString] = [
...OZCalendarDays[parsedDayISOString],
fileToOZItem({ note: mdFile }),
mdFile.path,
];
} else {
OZCalendarDays[parsedDayISOString] = [fileToOZItem({ note: mdFile })];
OZCalendarDays[parsedDayISOString] = [mdFile.path];
}
}
}

View file

@ -46,13 +46,10 @@ export class CreateNoteModal extends Modal {
let addSpace = contentEl.createEl('div', { cls: 'oz-calendar-modal-addspacediv ' });
// Create - Cancel Buttons
const createButton = contentEl.createEl('button', {
text: 'Create Note',
cls: this.plugin.settings.newNoteCancelButtonReverse ? 'oz-calendar-modal-float-right' : '',
});
const createButton = contentEl.createEl('button', { text: 'Create Note' });
const cancelButton = contentEl.createEl('button', {
text: 'Cancel',
cls: this.plugin.settings.newNoteCancelButtonReverse ? '' : 'oz-calendar-modal-float-right',
cls: 'oz-calendar-modal-float-right',
});
cancelButton.addEventListener('click', () => {
thisModal.close();
@ -60,41 +57,32 @@ export class CreateNoteModal extends Modal {
const onClickCreateButton = async () => {
let newFileName = fileNameInputEl.value;
if (newFileName === '') {
if (newFileName !== '') {
let defFolderSrc = folderInputEl ? folderInputEl.value : this.plugin.settings.defaultFolder;
let defFolder = this.app.vault.getAbstractFileByPath(defFolderSrc);
if (defFolder && defFolder instanceof TFolder) {
// Default Text Preparation for File with YAML and Date
let defaultNewFileText = stripIndents`
---
${this.plugin.settings.yamlKey}: ${dayjs(this.destinationDate).format(
this.plugin.settings.dateFormat
)}
---
`;
// Create the MD File and close the modal
await createNewMarkdownFile(
this.plugin,
defFolder,
newFileName,
this.plugin.settings.dateSource === 'yaml' ? defaultNewFileText : ''
);
thisModal.close();
} else {
new Notice('Folder couldnt be found in the Vault');
}
} else {
new Notice('You didnt provide file name');
return;
}
if (newFileName.includes('/') && !this.plugin.settings.allowSlashhDuringCreate) {
new Notice('You can not have a slash (/) in file name');
return;
}
let defFolderSrc = folderInputEl ? folderInputEl.value : this.plugin.settings.defaultFolder;
let defFolder = this.app.vault.getAbstractFileByPath(defFolderSrc);
if (!defFolder || !(defFolder instanceof TFolder)) {
new Notice('Folder couldnt be found in the Vault');
return;
}
// Default Text Preparation for File with YAML and Date
let defaultNewFileText = stripIndents`
---
${this.plugin.settings.yamlKey}: ${dayjs(this.destinationDate).format(this.plugin.settings.dateFormat)}
---
`;
// Create the MD File and close the modal
await createNewMarkdownFile(
this.plugin,
defFolder as TFolder,
newFileName,
this.plugin.settings.dateSource === 'yaml' ? defaultNewFileText : ''
);
thisModal.close();
};
createButton.addEventListener('click', onClickCreateButton);

View file

@ -2,16 +2,13 @@ import OZCalendarPlugin from 'main';
import { PluginSettingTab, App, Setting } from 'obsidian';
import { FolderSuggest } from 'settings/suggestor';
export type OpenFileBehaviourType = 'new-tab' | 'new-tab-group' | 'current-tab' | 'obsidian-default';
export type OpenFileBehaviourType = 'new-tab' | 'new-tab-group' | 'current-tab';
export type SortingOption = 'name' | 'name-rev';
export type DateSourceOption = 'filename' | 'yaml';
export type NewNoteDateType = 'current-date' | 'active-date';
export type CalendarType = 'US' | 'ISO 8601';
export type OverflowBehaviour = 'scroll' | 'hide' | 'next-line';
export interface OZCalendarPluginSettings {
openViewOnStart: boolean;
calendarType: CalendarType;
dateSource: DateSourceOption;
yamlKey: string;
dateFormat: string;
@ -19,18 +16,13 @@ export interface OZCalendarPluginSettings {
defaultFileNamePrefix: string;
fixedCalendar: boolean;
showDestinationFolderDuringCreate: boolean;
allowSlashhDuringCreate: boolean;
openFileBehaviour: OpenFileBehaviourType;
sortingOption: SortingOption;
newNoteDate: NewNoteDateType;
newNoteCancelButtonReverse: boolean;
fileNameOverflowBehaviour: OverflowBehaviour;
showWeekNumbers: boolean;
}
export const DEFAULT_SETTINGS: OZCalendarPluginSettings = {
openViewOnStart: true,
calendarType: 'ISO 8601',
dateSource: 'yaml',
yamlKey: 'created',
dateFormat: 'YYYY-MM-DD hh:mm:ss',
@ -38,13 +30,9 @@ export const DEFAULT_SETTINGS: OZCalendarPluginSettings = {
defaultFileNamePrefix: 'YYYY-MM-DD',
fixedCalendar: true,
showDestinationFolderDuringCreate: true,
allowSlashhDuringCreate: false,
openFileBehaviour: 'current-tab',
sortingOption: 'name',
newNoteDate: 'current-date',
newNoteCancelButtonReverse: false,
fileNameOverflowBehaviour: 'hide',
showWeekNumbers: false,
};
export class OZCalendarPluginSettingsTab extends PluginSettingTab {
@ -97,42 +85,11 @@ export class OZCalendarPluginSettingsTab extends PluginSettingTab {
});
});
new Setting(containerEl)
.setName('Calendar Type')
.setDesc(
`
Select the calendar type to be displayed. While the week in the US type starts from Sunday,
in the ISO 8601 type, the week starts from Monday`
)
.addDropdown((dropdown) => {
dropdown
.addOption('ISO 8601', 'ISO 8601')
.addOption('US', 'US')
.setValue(this.plugin.settings.calendarType)
.onChange((newValue: CalendarType) => {
this.plugin.settings.calendarType = newValue;
this.plugin.saveSettings();
this.plugin.calendarForceUpdate();
});
});
new Setting(containerEl)
.setName('Show Week Numbers')
.setDesc('Enable if you want to have week numbers within the calendar view')
.addToggle((toggle) => {
toggle.setValue(this.plugin.settings.showWeekNumbers).onChange((newValue) => {
this.plugin.settings.showWeekNumbers = newValue;
this.plugin.saveSettings();
this.plugin.calendarForceUpdate();
});
});
new Setting(containerEl)
.setName('Open File Behaviour')
.setDesc('Select the behaviour you want to have when you click on file name in the calendar view')
.addDropdown((dropdown) => {
dropdown
.addOption('obsidian-default', "Obsidian's Default")
.addOption('new-tab', 'Open in a New Tab')
.addOption('new-tab-group', 'Open in a New Tab Group')
.addOption('current-tab', 'Open in the Active Tab')
@ -306,35 +263,6 @@ export class OZCalendarPluginSettingsTab extends PluginSettingTab {
});
});
new Setting(containerEl)
.setName('Allow to provide slash during the file creation')
.setDesc(
`
Enable this option if you want to allow file creation modal to allow slash (/) in the filename, which will help creating a folder.
i.e. if this option is enabled and you provide an input like Folder1/File1, this will create Folder1 and place File1 under it. If
the folder exists, the file will be placed under the existing folder. This will respect the default folder location and create the
new folder as a subfolder under the default one.
`
)
.addToggle((toggle) => {
toggle.setValue(this.plugin.settings.allowSlashhDuringCreate).onChange((newValue) => {
this.plugin.settings.allowSlashhDuringCreate = newValue;
this.plugin.saveSettings();
});
});
new Setting(containerEl)
.setName('Reverse direction of Cancel and New Note Buttons')
.setDesc(
`Enable this setting to change the direction of Cancel and New Note buttons within the New Note Creation Modal`
)
.addToggle((toggle) => {
toggle.setValue(this.plugin.settings.newNoteCancelButtonReverse).onChange((newValue) => {
this.plugin.settings.newNoteCancelButtonReverse = newValue;
this.plugin.saveSettings();
});
});
containerEl.createEl('h2', { text: 'Style Settings' });
containerEl.createEl('p', {
@ -356,21 +284,5 @@ export class OZCalendarPluginSettingsTab extends PluginSettingTab {
this.plugin.calendarForceUpdate();
});
});
new Setting(containerEl)
.setName('File Names Overflow Behaviour')
.setDesc('Change the default behaviour for file names when they dont fit to the view')
.addDropdown((dropdown) => {
dropdown
.addOption('hide', 'Hide Overflow')
.addOption('scroll', 'Scroll Overflow')
.addOption('next-line', 'Show Overflow in the Next Line')
.setValue(this.plugin.settings.fileNameOverflowBehaviour)
.onChange((newValue: OverflowBehaviour) => {
this.plugin.settings.fileNameOverflowBehaviour = newValue;
this.plugin.saveSettings();
this.plugin.calendarForceUpdate();
});
});
}
}

View file

@ -1,29 +1,5 @@
import { TFile } from 'obsidian';
export type OZNote = {
type: 'note';
displayName: string;
path: string;
};
export type OZReminder = {
type: 'task' | 'periodic';
displayName: string;
date: string;
};
type OZItem = OZNote | OZReminder;
export interface OZCalendarDaysMap {
[key: string]: OZItem[];
[key: string]: string[];
}
export type DayChangeCommandAction = 'next-day' | 'previous-day' | 'today';
export const fileToOZItem = (params: { note: TFile }): OZItem => {
return {
type: 'note',
displayName: params.note.basename,
path: params.note.path,
};
};

View file

@ -1,8 +1,8 @@
import { ItemView, WorkspaceLeaf } from 'obsidian';
import React from 'react';
import ReactDOM from 'react-dom';
import OZCalendarPlugin from './main';
import MyCalendar from './components/calendar';
import { createRoot, Root } from 'react-dom/client';
export const VIEW_TYPE = 'oz-calendar';
export const VIEW_DISPLAY_TEXT = 'OZ Calendar';
@ -10,7 +10,6 @@ export const ICON = 'OZCAL_ICON';
export class OZCalendarView extends ItemView {
plugin: OZCalendarPlugin;
root: Root;
constructor(leaf: WorkspaceLeaf, plugin: OZCalendarPlugin) {
super(leaf);
@ -34,12 +33,11 @@ export class OZCalendarView extends ItemView {
}
destroy() {
if (this.root) this.root.unmount();
ReactDOM.unmountComponentAtNode(this.contentEl);
}
async onOpen() {
this.destroy();
this.root = createRoot(this.contentEl)
this.root.render(<MyCalendar plugin={this.plugin} />);
ReactDOM.render(<MyCalendar plugin={this.plugin} />, this.contentEl);
}
}

View file

@ -18,13 +18,6 @@ settings:
type: variable-color
format: hex
default: '#'
-
id: oz-calendar-current-day-color
title: Current Day (Today) Text Color
description: Set the color of the current day in the month view
type: variable-color
format: hex
default: '#'
-
id: oz-calendar-selected-day-background
title: Selected Day Background Color
@ -39,13 +32,6 @@ settings:
type: variable-color
format: hex
default: '#'
-
id: oz-calendar-weeknr-date-color
title: Week Number Text Color
description: Set the color of week numbers, defaulted to the interactive-accent
type: variable-color
format: hex
default: '#'
*/
.theme-light,
@ -54,8 +40,6 @@ settings:
--oz-calendar-selected-daycolor: var(--text-normal);
--oz-calendar-selected-day-background: var(--interactive-accent);
--oz-calendar-header-date-color: var(--interactive-accent);
--oz-calendar-current-day-color: #74dd58;
--oz-calendar-weeknr-date-color: var(--color-accent-2);
}
.oz-cal-coffee-div,
@ -72,12 +56,6 @@ settings:
fill: var(--icon-color) !important;
}
.oz-calendar-plugin-view {
min-height: 100%;
display: flex;
flex-direction: column;
}
.oz-calendar-plugin-view .react-calendar__tile.react-calendar__month-view__days__day:hover {
background: var(--background-secondary-alt);
}
@ -166,10 +144,10 @@ settings:
}
.oz-calendar-notelist-container {
display: flex;
flex-direction: row;
justify-content: space-between;
display: block;
padding: 5px;
flex: 1;
vertical-align: middle;
}
.oz-calendar-nav-action-plus {
@ -215,6 +193,11 @@ settings:
opacity: 0.6;
}
.oz-calendar-notelist-container {
display: block;
padding: 5px;
}
.oz-calendar-note-line {
padding-top: 3px;
padding-bottom: 3px;
@ -246,11 +229,6 @@ settings:
margin-right: 3px;
}
.oz-calendar-plugin-today abbr {
color: var(--oz-calendar-current-day-color);
font-weight: bold;
}
/* START - Fixed Calendar Except Note List - Scroll */
.oz-calendar-plugin-view.fixed {
@ -261,7 +239,7 @@ settings:
}
.oz-calendar-plugin-view.fixed .react-calendar {
height: 295px;
height: 255px;
}
.oz-calendar-plugin-view.fixed #oz-calendar-divider {
@ -278,14 +256,6 @@ settings:
vertical-align: top;
}
.oz-calendar-plugin-view .react-calendar__month-view__weekNumbers {
display: block !important;
color: var(--oz-calendar-weeknr-date-color);
flex-basis: auto !important;
background-color: var(--background-modifier-cover);
font-size: var(--nav-item-size);
}
/* END - Fixed Calendar */
.oz-calendar-modal-inputel {
@ -304,18 +274,3 @@ settings:
.oz-calendar-custom-hidden {
display: none !important;
}
.oz-calendar-note-line {
color: var(--text-muted);
}
.oz-calendar-overflow-scroll {
overflow: scroll;
white-space: nowrap;
}
.oz-calendar-overflow-hide {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}

View file

@ -1,23 +1,4 @@
{
"0.3.4": "0.15.0",
"0.3.3": "0.15.0",
"0.3.2": "0.15.0",
"0.3.1": "0.15.0",
"0.3.0": "0.15.0",
"0.2.9": "0.15.0",
"0.2.8": "0.15.0",
"0.2.7": "0.15.0",
"0.2.6": "0.15.0",
"0.2.5": "0.15.0",
"0.2.4": "0.15.0",
"0.2.3": "0.15.0",
"0.2.2": "0.15.0",
"0.2.1": "0.15.0",
"0.2.0": "0.15.0",
"0.1.9": "0.15.0",
"0.1.8": "0.15.0",
"0.1.7": "0.15.0",
"0.1.6": "0.15.0",
"0.1.5": "0.15.0",
"0.1.4": "0.15.0",
"0.1.3": "0.15.0",