Security News
GitHub Removes Malicious Pull Requests Targeting Open Source Repositories
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
ng-drag-to-reorder
Advanced tools
Lightweight AngularJS drag and drop functionality to reorder lists without any dependencies other than Angular.
Lightweight AngularJS drag and drop functionality to reorder lists without any dependencies other than Angular. Works great with ng-repeats!
$ npm install ng-drag-to-reorder
or
$ bower install ng-drag-to-reorder
angular.module('yourApp', ['ngDragToReorder']);
drag-to-reorder
attribute to the parent element and pass it the list you want it to track.
Then on the draggable elements, add the dtr-draggable
attribute. And that's it!<ul drag-to-reorder="$ctrl.avengers">
<li ng-repeat="avenger in $ctrl.avengers" dtr-draggable>
<span ng-bind="avenger.rank"></span>
<span ng-bind="avenger.name"></span>
</li>
</ul>
dragToReorder.dropped
event is broadcasted and will contain the relevant data,
allowing your controllers to know when the list has been reordered and react to the changes.
(See #4dtrEvent
in Options below on how you can customize the event name.)$scope.$on('dragToReorder.dropped', function (evt, data) {
// The dragged item
data.item
// The new index number for the dragged item
data.newIndex
// The previous index number for the dragged item
data.prevIndex
// The list after it has been reordered
data.list
});
When you start dragging the element, different classes are added to the element being dragged as well as the elements you are dragging over.
(All classes are added to the elements containing the dtr-draggable
attribute)
dtr-dragging
is added to the element that is being dragged when you start to drag it.dtr-over
is added to the element you are hovering over.dtr-dropping-above
is added to the element if you are hovering above the the middle point of the element. ***dtr-dropping-below
is added to the element if you are hovering below the the middle point of the element. ***dtr-transition
is added to the dragged element when you start to drag it, but is removed on a delay after being dropped.
This default delay is 1 second (1000 ms), but can be designated by using the dtr-transition-timeout
attribute (see Options below).*** Important: The class dtr-dropping-above
or dtr-dropping-below
will also be added to the previous or next sibling element of the one you are hovering over.
Depending on which class the element you are hovering over has will determine which sibling will have a class added. (See example below...)
E.g. - CSS Classes Demo
If you have Elements 1-10. And you begin dragging Element 1. Element 1 will have the dtr-dragging
and dtr-transition
classes added to it.
Let's say you drag Element 1 and are hovering over Element 5. Element 5 will have the dtr-over
class and either the dtr-dropping-above
class if the mouse is above the
halfway point (offsetY) or dtr-dropping-below
if below it. If above it, the previous sibling above (Element 4) will have the dtr-dropping-below
class added to it.
If below the halfway point, the next sibling below (Element 6) will have the dtr-dropping-above
class added to it.
After you drop Element 1, the dtr-dragging
class is removed immediately, followed by the dtr-transition
class one second later or after the number of milliseconds passed
in via the dtr-transition-timeout
attribute (see Options below). This allows for more flexibility in how you want to style the elements during the drag and drop process.
dtr-init
allows you turn the drag and drop functionality on and off. You can pass it an expression to observe and will add or remove the event listeners based on a true/false value.<!-- In your template (example) -->
<ul drag-to-reorder="$ctrl.avengers">
<li ng-repeat="avenger in $ctrl.avengers"
dtr-draggable
dtr-init="{{$ctrl.draggable}}">
<span ng-bind="avenger.rank"></span>
<span ng-bind="avenger.name"></span>
</li>
</ul>
<button ng-click="$ctrl.toggleDrag()">Toggle Drag and Drop</button>
// In your controller (example)
//prevent the list from being draggable on load
this.draggable = false;
//toggle drag and drop
this.toggleDrag = () => this.draggable = !this.draggable;
dtr-transition-timeout
allows you to set the timeout period (in milliseconds) for when the dtr-transition
class is removed from the dragged element.
This is just an available option in case you want to add some custom animation.<!-- In your template (example) -->
<ul drag-to-reorder="$ctrl.avengers">
<li ng-repeat="avenger in $ctrl.avengers"
dtr-draggable
dtr-transition-timeout="5000">
<span ng-bind="avenger.rank"></span>
<span ng-bind="avenger.name"></span>
</li>
</ul>
dtr-draggable
directive uses this service to prevent itself from wiring up event listeners if the browser doesn't support
it. You can use the same service if you want to show or hide any buttons or other UI based on browser support.<!-- In your template (example) -->
<ul drag-to-reorder="$ctrl.avengers">
<li ng-repeat="avenger in $ctrl.avengers"
dtr-draggable
dtr-init="{{$ctrl.draggable}}">
<span ng-bind="avenger.rank"></span>
<span ng-bind="avenger.name"></span>
</li>
</ul>
<button ng-if="$ctrl.isSupported" ng-click="$ctrl.toggleDrag()">Toggle Drag and Drop</button>
/* @ngInject */
function exampleComponentController(ngDragToReorder, $scope) {
//check to see if the browser supports drag and drop
this.isSupported = ngDragToReorder.isSupported();
//prevent the list from being draggable on load
this.draggable = false;
//toggle drag and drop
this.toggleDrag = () => this.draggable = !this.draggable;
}
dtr-event
allows you to customize the name of the event broadcasted when an element is dropped.
This is particularly helpful if you have more than one list and/or do not want multiple controllers reacting to the same event.
The name passed in will replace the 'dropped' in 'dragToReorder.dropped'. See below for example.<!-- In your template (example) -->
<ul drag-to-reorder="$ctrl.avengers">
<li ng-repeat="avenger in $ctrl.avengers"
dtr-draggable
dtr-event="suchEvent">
<span ng-bind="avenger.rank"></span>
<span ng-bind="avenger.name"></span>
</li>
</ul>
<ul drag-to-reorder="$ctrl.list">
<li ng-repeat="item in $ctrl.list"
dtr-draggable
dtr-event="myListChanged">
{{item}}
</li>
</ul>
$scope.$on('dragToReorder.suchEvent', function (evt, data) {
//do something only when suchEvent is fired
});
$scope.$on('dragToReorder.myListChanged', function (evt, data) {
//do something only when myListChanged is fired
});
FAQs
Lightweight AngularJS drag and drop functionality to reorder lists without any dependencies other than Angular.
We found that ng-drag-to-reorder demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.