kanblendar/README.md

150 lines
4.4 KiB
Markdown
Raw Normal View History

# Kanblendar
[![Support Private.coffee!](https://shields.private.coffee/badge/private.coffee-support%20us!-pink?logo=coffeescript)](https://private.coffee)
Kanblendar is a JavaScript class that blends the functionality of a Kanban board and a daily calendar. Users can create, edit, and organize tasks within columns and time slots, and receive notifications for upcoming tasks.
## Features
- Plain JavaScript class with no dependencies
- Create, edit, and delete tasks
- Organize tasks into columns and time slots
- Drag and drop tasks between columns and time slots
- Set due times and receive notifications
- Visual feedback during drag-and-drop operations
## Installation
1. Clone the repository:
```sh
git clone https://git.private.coffee/kumi/kanblendar.git
```
2. Navigate to the project directory:
```sh
cd kanblendar
```
3. Open `example.html` in your web browser to start the example application.
## Usage
### Creating a Task
1. Click the "Create Task" button.
2. Fill out the task form with the title, description, due time, column, and notification time.
3. Click "Save" to create the task.
### Editing a Task
1. Click on an existing task to open the edit form.
2. Update the task details as needed.
3. Click "Save" to save the changes.
### Deleting a Task
1. Click on an existing task to open the edit form.
2. Click the "Delete" button to remove the task.
### Drag and Drop
- Drag tasks between columns or into specific time slots.
- Tasks will update their due time if moved into a time slot where the current due time is not valid.
## Notifications
- Kanblendar requests notification permissions on load.
- Notifications are shown for tasks based on the specified notification time.
- Notifications are automatically unscheduled if a task is modified or deleted.
- If notifications are not supported or denied, a alert will be shown instead.
## Programmatically Modifying the Kanblendar
You can programmatically create, edit, and delete tasks using JavaScript. Here are some examples:
### Creating a Task
```javascript
const kanblendar = new Kanblendar();
const title = 'New Task';
const description = 'This is a new task.';
const dueTime = '2023-10-31T14:00';
const column = 'backlog';
const notifyBefore = 10; // Notify 10 minutes before the due time
const newTask = kanblendar.createTaskElement(title, description, dueTime, column, notifyBefore);
kanblendar.moveTaskToColumn(newTask, column);
kanblendar.updateTaskLocation(newTask, dueTime);
kanblendar.scheduleNotification(title, description, new Date(dueTime), notifyBefore, newTask.id);
```
### Editing a Task
```javascript
const taskId = 'task-1234567890'; // Replace with the actual task ID
const task = document.getElementById(taskId);
const newTitle = 'Updated Task';
const newDescription = 'This is an updated task.';
const newDueTime = '2023-10-31T15:00';
const newColumn = 'in-progress';
const newNotifyBefore = 15; // Notify 15 minutes before the due time
task.querySelector('.kanblendar-task-title').innerText = newTitle;
task.querySelector('.kanblendar-task-desc').innerText = newDescription;
task.dataset.dueTime = newDueTime;
task.dataset.column = newColumn;
task.dataset.notifyBefore = newNotifyBefore;
kanblendar.moveTaskToColumn(task, newColumn);
kanblendar.updateTaskLocation(task, newDueTime);
kanblendar.cancelNotification(task.id);
kanblendar.scheduleNotification(newTitle, newDescription, new Date(newDueTime), newNotifyBefore, task.id);
```
### Deleting a Task
```javascript
const taskId = 'task-1234567890'; // Replace with the actual task ID
const task = document.getElementById(taskId);
kanblendar.deleteTask(task);
```
## Development
### Project Structure
- `kanblendar.css` - CSS styles
- `kanblendar.js` - JavaScript functionality
- `example.html` - Example HTML file
- `example.js` - Additional JavaScript code for the example
- `example.css` - Additional CSS styles for the example
### Adding Features
1. Clone the repository and create a new branch:
```sh
git checkout -b feature-branch
```
2. Make your changes and commit them:
```sh
git commit -m "Add new feature"
```
3. Push the changes to the remote repository:
```sh
git push origin feature-branch
```
4. Open a pull request to the main branch.
## Contributing
Contributions are welcome! Please open an issue or submit a pull request for any improvements or bug fixes.
## License
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.