Skip to content
This repository was archived by the owner on Jan 13, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
68e4f69
Added two callbacks
BeFiveINFO Apr 1, 2015
e2027b0
added 2 more callbacks
BeFiveINFO Apr 1, 2015
ac395cd
Update README.md
BeFiveINFO Apr 1, 2015
3417a3f
Bug fix
BeFiveINFO Apr 1, 2015
9841b3f
Update README.md
BeFiveINFO Apr 1, 2015
389cf0e
Using trigger upon bigfoot90's suggestion
BeFiveINFO Apr 4, 2015
ce0c0ec
example changed
BeFiveINFO Apr 4, 2015
29a6b27
Forgot removing a debug line
BeFiveINFO Apr 4, 2015
89c9ee0
forgot including "list" which trigger returns
BeFiveINFO Apr 4, 2015
597e0f3
added dragJustBeforeStart callback
BeFiveINFO Apr 4, 2015
e8ae799
updated with dragJustBeforeStart example
BeFiveINFO Apr 4, 2015
a3e8b20
Update README.md
BeFiveINFO Apr 4, 2015
ecf0343
dragJustBeforeStart returns handle
BeFiveINFO Apr 4, 2015
dcd85a7
Update README.md
BeFiveINFO Apr 4, 2015
b2bb95c
Destination list of dragStart callback removed
BeFiveINFO Apr 4, 2015
fe05fe8
Destination list removed where unnecessary
BeFiveINFO Apr 4, 2015
23e0716
Destination list removed from onMoveEvent
BeFiveINFO Apr 4, 2015
6dd9d4b
unnecessary settings in the example removed
BeFiveINFO Apr 4, 2015
0f3282d
Destination for dragMove readded
BeFiveINFO Apr 5, 2015
d2fd7d4
Update README.md
BeFiveINFO May 4, 2015
30f395b
added beforeDragEnd
BeFiveINFO May 4, 2015
05f1919
file name change (to the original file name)
BeFiveINFO May 6, 2015
d917aeb
Event name changed: dragJustBeforeStart
BeFiveINFO May 6, 2015
7c22c1e
correction thanks to bigfoot90
BeFiveINFO May 9, 2015
5bf3ad5
beforeDragStart returns same params as dragStart
BeFiveINFO May 9, 2015
b6d63e4
Reverted the beforeDragStart parameter
BeFiveINFO May 9, 2015
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 27 additions & 101 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,107 +1,33 @@
Nestable
Nestable with 5 little callbacks
========

## PLEASE NOTE

**I cannot provide any support or guidance beyond this README. If this code helps you that's great but I have no plans to develop Nestable beyond this demo (it's not a final product and has limited functionality). I cannot reply to any requests for help.**

* * *

### Drag & drop hierarchical list with mouse and touch compatibility (jQuery / Zepto plugin)

[**Try Nestable Demo**](http://dbushell.github.com/Nestable/)

Nestable is an experimental example and not under active development. If it suits your requirements feel free to expand upon it!

## Usage

Write your nested HTML lists like so:

<div class="dd">
<ol class="dd-list">
<li class="dd-item" data-id="1">
<div class="dd-handle">Item 1</div>
</li>
<li class="dd-item" data-id="2">
<div class="dd-handle">Item 2</div>
</li>
<li class="dd-item" data-id="3">
<div class="dd-handle">Item 3</div>
<ol class="dd-list">
<li class="dd-item" data-id="4">
<div class="dd-handle">Item 4</div>
</li>
<li class="dd-item" data-id="5">
<div class="dd-handle">Item 5</div>
</li>
</ol>
</li>
</ol>
</div>

Then activate with jQuery like so:

$('.dd').nestable({ /* config options */ });

### Events

The `change` event is fired when items are reordered.

$('.dd').on('change', function() {
/* on change event */
});

### Methods

You can get a serialised object with all `data-*` attributes for each item.

$('.dd').nestable('serialize');

The serialised JSON for the example above would be:

[{"id":1},{"id":2},{"id":3,"children":[{"id":4},{"id":5}]}]

### Configuration

You can change the follow options:

* `maxDepth` number of levels an item can be nested (default `5`)
* `group` group ID to allow dragging between lists (default `0`)

These advanced config options are also available:

* `listNodeName` The HTML element to create for lists (default `'ol'`)
* `itemNodeName` The HTML element to create for list items (default `'li'`)
* `rootClass` The class of the root element `.nestable()` was used on (default `'dd'`)
* `listClass` The class of all list elements (default `'dd-list'`)
* `itemClass` The class of all list item elements (default `'dd-item'`)
* `dragClass` The class applied to the list element that is being dragged (default `'dd-dragel'`)
* `handleClass` The class of the content element inside each list item (default `'dd-handle'`)
* `collapsedClass` The class applied to lists that have been collapsed (default `'dd-collapsed'`)
* `placeClass` The class of the placeholder element (default `'dd-placeholder'`)
* `emptyClass` The class used for empty list placeholder elements (default `'dd-empty'`)
* `expandBtnHTML` The HTML text used to generate a list item expand button (default `'<button data-action="expand">Expand></button>'`)
* `collapseBtnHTML` The HTML text used to generate a list item collapse button (default `'<button data-action="collapse">Collapse</button>'`)

**Inspect the [Nestable Demo](http://dbushell.github.com/Nestable/) for guidance.**

## Change Log

### 15th October 2012

* Merge for Zepto.js support
* Merge fix for remove/detach items

### 27th June 2012

* Added `maxDepth` option (default to 5)
* Added empty placeholder
* Updated CSS class structure with options for `listClass` and `itemClass`.
* Fixed to allow drag and drop between multiple Nestable instances (off by default).
* Added `group` option to enabled the above.

## This is a modified version of Nestable

Original can be found here: https://github.com/dbushell/Nestable

## Example
```
$('#example-list-element').nestable({
'maxDepth': 3,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This setting is not related to events

afterInit: function ( event ) {
console.log( event );
}
})
.on('dragJustBeforeStart', function(handle) {
console.log('dragStart', handle);
})
.on('dragStart', function(event, item, source, destination) {
console.log('dragStart', event, item, source, destination);
})
.on('dragEnd', function(event, item, source, destination) {
console.log('dragEnd', event, item, source, destination);
})
.on('dragMove', function(event, item, source, destination) {
console.log('dragMove', event, item, source, destination);
});
```
* * *

Author: David Bushell [http://dbushell.com](http://dbushell.com/) [@dbushell](http://twitter.com/dbushell/)
Original Author: David Bushell [http://dbushell.com](http://dbushell.com/) [@dbushell](http://twitter.com/dbushell/)

Copyright © 2012 David Bushell | BSD & MIT license
41 changes: 40 additions & 1 deletion jquery.nestable.js → jquery.nestable.withCallbacks.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
/*!
* Nestable jQuery Plugin - Copyright (c) 2012 David Bushell - http://dbushell.com/
* Dual-licensed under the BSD or MIT licenses
*
* Modified(1 April 2015):
* Added 2 callbacks
* afterInit
* onStartEvent
*/
;(function($, window, document, undefined)
{
Expand Down Expand Up @@ -42,7 +47,9 @@
collapseBtnHTML : '<button data-action="collapse" type="button">Collapse</button>',
group : 0,
maxDepth : 5,
threshold : 20
threshold : 20,
/* callback */
afterInit: null,
};

function Plugin(element, options)
Expand Down Expand Up @@ -87,6 +94,10 @@
var onStartEvent = function(e)
{
var handle = $(e.target);

/* callback for dragJustBeforeStart */
list.el.trigger('dragJustBeforeStart', [handle]);

if (!handle.hasClass(list.options.handleClass)) {
if (handle.closest('.' + list.options.noDragClass).length) {
return;
Expand All @@ -105,20 +116,44 @@

e.preventDefault();
list.dragStart(e.touches ? e.touches[0] : e);

/* callback for dragStart */
var item = list.dragEl.find('.'+list.options.itemClass);
list.dragRootEl.trigger('dragStart', [
item, // List item
list.el, // Source list
list.dragRootEl, // Destination list

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is not a destination list on dragStart event

]);
};

var onMoveEvent = function(e)
{
if (list.dragEl) {
e.preventDefault();
list.dragMove(e.touches ? e.touches[0] : e);
/* callback for dragMove */
var item = list.dragEl.find('.'+list.options.itemClass);
list.dragRootEl.trigger('dragMove', [
item, // List item
list.el, // Source list
list.dragRootEl // Destination list
]);
}
};

var onEndEvent = function(e)
{
if (list.dragEl) {
e.preventDefault();

/* callback for dragEnd */
var item = list.dragEl.find('.'+list.options.itemClass);
list.dragRootEl.trigger('dragEnd', [
item, // List item
list.el, // Source list
list.dragRootEl // Destination list
]);

list.dragStop(e.touches ? e.touches[0] : e);
}
};
Expand All @@ -134,6 +169,10 @@
list.w.on('mousemove', onMoveEvent);
list.w.on('mouseup', onEndEvent);

/* callback for afterInit */
if (typeof list.options.afterInit == 'function') {
list.options.afterInit.call(window, this);
}
},

serialize: function()
Expand Down