superdesk/superdesk-client-core

View on GitHub
scripts/core/directives/DraggableDirective.ts

Summary

Maintainability
A
0 mins
Test Coverage
export default angular.module('superdesk.core.directives.draggable', [])
    /**
     * @ngdoc directive
     * @module superdesk.core.directives
     * @name sdDraggable
     *
     * @param {Object} item Data to be carried.
     * @param {String} container css selector to attach dragged item to.
     * @param {Boolean} cursor - enable/disable stucking drag object to cursor
     *
     * @description Creates a draggable item. Works with sdDroppable.
     */
    .directive('sdDraggable', ['dragDropService', function(dragDropService) {
        return {
            scope: {item: '=', container: '=', cursor: '='},
            link: function(scope, element, attrs) {
                element.draggable({
                    helper: 'clone',
                    appendTo: scope.container,
                    start: function(event, ui) {
                        dragDropService.item = scope.item;
                    },
                });
                scope.$watch('cursor', (val) => {
                    if (val) {
                        element.draggable('option', 'cursorAt', {
                            left: 5,
                            top: 5,
                        });
                    } else {
                        element.draggable('option', 'cursorAt', false);
                    }
                });
            },
        };
    }]);