angular.module('fasit') .directive('fbDraggable', [function () { var link = function ( scope: fb.IFbDraggableScope, element: ng.IRootElementService, attrs: ng.IAttributes ) { var cleanUp = function () { el.removeEventListener('dragstart', scope.handler); } scope.$on('$destroy', cleanUp); scope.handler = function (event) { event.dataTransfer.effectAllowed = 'move'; if (scope.idList) { $(scope.listSelector).css('opacity', '0.4'); event.dataTransfer.setData('Text', scope.idList); var img = document.createElement("img"); event.dataTransfer.setDragImage(img, 0, 0); } else { event.target.parentElement.parentElement.style.opacity = 0.4; event.dataTransfer.setData('Text', scope.id); } scope.$apply(function (scope: fb.IFbDraggableScope) { var fn = scope.drag(); if ('undefined' !== typeof fn) { fn(); } }); return false; }; const handleEnd = function (event) { if (scope.idList) { $(scope.listSelector).css('opacity', '1'); } else { this.parentElement.parentElement.style.opacity = 1; } return false; }; var el = element[0]; el.draggable = true; el.addEventListener('dragstart', scope.handler, false); el.addEventListener('dragend', handleEnd, false); } return { scope: { id: '@', idList: '=', drag: '&', listSelector: '@' }, link: link } }]);