# jKanban
> Javascript plugin for Kanban boards
jKanban allow you to create and manage Kanban Board in your project!
Please try out the live [demo][1]!
[1]: http://www.riccardotartaglia.it/jkanban/
## GET SUPPORT / REQUIRE CUSTOM FEATURE
[![jKanban](https://www.riccardotartaglia.it/blog/wp-content/uploads/2020/08/jKanban-banner.png)](https://xscode.com/riktar/jkanban)
## Install
Clone the repo and use the javascript and the css files in the `dist` folder.
You have to include
``
and
``
in your page and you are done.
## Usage
Init jKanban is a piece of cake!
### `var kanban = new jKanban(options)`
Here's an **overview of the default values**.
```js
var kanban = new jKanban({
element : '', // selector of the kanban container
gutter : '15px', // gutter of the board
widthBoard : '250px', // width of the board
responsivePercentage: false, // if it is true I use percentage in the width of the boards and it is not necessary gutter and widthBoard
dragItems : true, // if false, all items are not draggable
boards : [], // json of boards
dragBoards : true, // the boards are draggable, if false only item can be dragged
itemAddOptions: {
enabled: false, // add a button to board for easy item creation
content: '+', // text or html content of the board button
class: 'kanban-title-button btn btn-default btn-xs', // default class of the button
footer: false // position the button on footer
},
itemHandleOptions: {
enabled : false, // if board item handle is enabled or not
handleClass : "item_handle", // css class for your custom item handle
customCssHandler : "drag_handler", // when customHandler is undefined, jKanban will use this property to set main handler class
customCssIconHandler: "drag_handler_icon", // when customHandler is undefined, jKanban will use this property to set main icon handler class. If you want, you can use font icon libraries here
customHandler : "+ %s"// your entirely customized handler. Use %s to position item title
},
click : function (el) {}, // callback when any board's item are clicked
dragEl : function (el, source) {}, // callback when any board's item are dragged
dragendEl : function (el) {}, // callback when any board's item stop drag
dropEl : function (el, target, source, sibling) {}, // callback when any board's item drop in a board
dragBoard : function (el, source) {}, // callback when any board stop drag
dragendBoard : function (el) {}, // callback when any board stop drag
buttonClick : function(el, boardId) {} // callback when the board's button is clicked
})
```
Now take a look to the `boards` object
```js
[
{
"id" : "board-id-1", // id of the board
"title" : "Board Title", // title of the board
"class" : "class1,class2,...", // css classes to add at the title
"dragTo": ['another-board-id',...], // array of ids of boards where items can be dropped (default: [])
"item" : [ // item of this board
{
"id" : "item-id-1", // id of the item
"title" : "Item 1" // title of the item
"class" : ["myClass",...] // array of additional classes
},
{
"id" : "item-id-2",
"title" : "Item 2"
}
]
},
{
"id" : "board-id-2",
"title" : "Board Title 2"
}
]
```
**WARNING: all ids are unique!**
### About custom properties
jKanban also support custom properties on items to improve your applications with html data- properties. You can define them at like:
```js
[
{
"id" : "board-id-1",
"title" : "Board Title",
"item" : [
{
"id" : "item-id-1",
"title" : "Item 1",
"username": "username1"
},
{
"id" : "item-id-2",
"title" : "Item 2",
"username": "username2"
}
]
}
]
```
Which jKanban will convert to:
```html
Item 1
Item 2
```
## API
jKanban provides the easiest possible API to make your boards awesome!
Method Name | Arguments | Description
----------------------|----------------------------------|------------------------------------------------------------------------------------------------------------------------------
`addElement` | `boardID, element` | Add `element` in the board with ID `boardID`, `element` is the standard format
`addForm` | `boardID, formItem` | Add `formItem` as html element into the board with ID `boardID`
`addBoards` | `boards` | Add one or more boards in the kanban, `boards` are in the standard format
`findElement` | `id` | Find board's item by `id`
`replaceElement` | `id, element` | Replace item by `id` with `element` JSON standard format
`getParentBoardID` | `id` | Get board ID of item `id` passed
`findBoard` | `id` | Find board by `id`
`getBoardElements` | `id` | Get all item of a board
`removeElement` | `id` | Remove a board's element by id
`removeBoard` | `id` | Remove a board by id
## Example
Clone the repo and look in the `example` folder
## Thanks
jKanban use [dragula](https://github.com/bevacqua/dragula) for drag&drop
## Develop
Clone the repo then use `npm install` for download all the dependencies then launch `npm run build` for build the project
### Pull Requests?
I'd love them!
### Comments?
Let's hear them! (The nice ones please!)
### Me?
In case you're interested I'm [@riktarweb](http://twitter.com/riktarweb)