提交 846007e2 编写于 作者: R RubaXa

#156: * filter-method

上级 81748a58
...@@ -136,6 +136,29 @@ You can also define whether lists can give away, give and keep a copy (`clone`), ...@@ -136,6 +136,29 @@ You can also define whether lists can give away, give and keep a copy (`clone`),
--- ---
#### `filter` option
```js
Sortable.create(list, {
filter: ".js-remove, .js-edit",
onFilter: function (evt) {
var item = el.item;
if (Sortable.utils.is(evt.target, ".js-remove")) { // Click on remove button
el.parentNode.removeChild(el); // remove sortable item
}
else if (Sortable.utils.is(evt.target, ".js-edit")) { // Click on edit link
// ...
}
}
})
```
---
<a name="ng"></a> <a name="ng"></a>
### Support AngularJS ### Support AngularJS
Include [ng-sortable.js](ng-sortable.js) Include [ng-sortable.js](ng-sortable.js)
...@@ -184,22 +207,6 @@ Get or set the option. ...@@ -184,22 +207,6 @@ Get or set the option.
##### closest(el:`String`[, selector:`HTMLElement`]):`HTMLElement|null` ##### closest(el:`String`[, selector:`HTMLElement`]):`HTMLElement|null`
For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
```js
var editableList = new Sortable(list, {
filter: ".js-remove, .js-edit",
onFilter: function (evt) {
var el = editableList.closest(evt.target); // list item
if (editableList.closest(evt.item, ".js-remove")) { // Click on remove button
el.parentNode.removeChild(el); // remove sortable item
}
else if (editableList.closest(evt.item, ".js-edit")) { // Click on edit link
// ...
}
}
})
```
##### toArray():`String[]` ##### toArray():`String[]`
Serializes the sortable's item `data-id`'s into an array of string. Serializes the sortable's item `data-id`'s into an array of string.
......
...@@ -182,18 +182,22 @@ ...@@ -182,18 +182,22 @@
// Check filter // Check filter
if (typeof filter === 'function') { if (typeof filter === 'function') {
if (filter.call(this, target, this)) { if (filter.call(this, evt, target, this)) {
_dispatchEvent(el, 'filter', target, undefined, startIndex); _dispatchEvent(originalTarget, 'filter', target, el, startIndex);
return; // cancel dnd return; // cancel dnd
} }
} }
else if (filter) { else if (filter) {
filter = filter.split(',').filter(function (criteria) { filter = filter.split(',').some(function (criteria) {
return _closest(target, criteria.trim(), el); criteria = _closest(originalTarget, criteria.trim(), el);
if (criteria) {
_dispatchEvent(criteria, 'filter', target, el, startIndex);
return true;
}
}); });
if (filter.length) { if (filter.length) {
_dispatchEvent(originalTarget, 'filter', target, undefined, startIndex);
return; // cancel dnd return; // cancel dnd
} }
} }
...@@ -670,7 +674,7 @@ ...@@ -670,7 +674,7 @@
} }
function _closest(el, selector, ctx) { function _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx) {
if (selector === '*') { if (selector === '*') {
return el; return el;
} }
...@@ -823,6 +827,9 @@ ...@@ -823,6 +827,9 @@
css: _css, css: _css,
find: _find, find: _find,
bind: _bind, bind: _bind,
is: function (el, selector) {
return !!_closest(el, selector, el);
},
closest: _closest, closest: _closest,
toggleClass: _toggleClass, toggleClass: _toggleClass,
dispatchEvent: _dispatchEvent, dispatchEvent: _dispatchEvent,
......
...@@ -276,7 +276,7 @@ var editableList = new Sortable(editable, { ...@@ -276,7 +276,7 @@ var editableList = new Sortable(editable, {
} }
new Sortable(foo, { Sortable.create(foo, {
group: "words", group: "words",
animation: 150, animation: 150,
store: { store: {
...@@ -297,7 +297,7 @@ var editableList = new Sortable(editable, { ...@@ -297,7 +297,7 @@ var editableList = new Sortable(editable, {
}); });
new Sortable(bar, { Sortable.create(bar, {
group: "words", group: "words",
animation: 150, animation: 150,
onAdd: function (evt){ console.log('onAdd.bar:', evt.item); }, onAdd: function (evt){ console.log('onAdd.bar:', evt.item); },
...@@ -308,19 +308,18 @@ var editableList = new Sortable(editable, { ...@@ -308,19 +308,18 @@ var editableList = new Sortable(editable, {
}); });
new Sortable(multi, { Sortable.create(multi, {
animation: 150, animation: 150,
draggable: '.tile', draggable: '.tile',
handle: '.tile__name' handle: '.tile__name'
}); });
var editableList = new Sortable(editable, { var editableList = Sortable.create(editable, {
animation: 150, animation: 150,
filter: '.js-remove', filter: '.js-remove',
onFilter: function (evt) { onFilter: function (evt) {
var el = editableList.closest(evt.item); evt.item.parentNode.removeChild(evt.item);
el && el.parentNode.removeChild(el);
} }
}); });
...@@ -338,7 +337,7 @@ var editableList = new Sortable(editable, { ...@@ -338,7 +337,7 @@ var editableList = new Sortable(editable, {
[].forEach.call(multi.getElementsByClassName('tile__list'), function (el){ [].forEach.call(multi.getElementsByClassName('tile__list'), function (el){
new Sortable(el, { Sortable.create(el, {
group: 'photo', group: 'photo',
animation: 150 animation: 150
}); });
...@@ -359,14 +358,14 @@ var editableList = new Sortable(editable, { ...@@ -359,14 +358,14 @@ var editableList = new Sortable(editable, {
pull: false, pull: false,
put: true put: true
}].forEach(function (groupOpts, i) { }].forEach(function (groupOpts, i) {
new Sortable(document.getElementById('advanced-' + (i + 1)), { Sortable.create(document.getElementById('advanced-' + (i + 1)), {
sort: (i != 1), sort: (i != 1),
group: groupOpts, group: groupOpts,
animation: 150 animation: 150
}); });
}); });
new Sortable(document.getElementById('handle-1'), { Sortable.create(document.getElementById('handle-1'), {
handle: '.drag-handle', handle: '.drag-handle',
animation: 150 animation: 150
}); });
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册