import ngModule from '../module'; import './droppable.scss'; class Controller { constructor($element, $, $attrs) { this.element = $element[0]; this.$ = $; this.$attrs = $attrs; this.element.addEventListener('dragover', event => event.preventDefault()); // Prevents page reload this.element.addEventListener('drop', event => this.drop(event)); this.element.addEventListener('dragenter', event => this.dragEnter(event)); this.element.addEventListener('dragleave', event => this.dragLeave(event)); } dragEnter(event) { this.droppedElement = event.target; this.element.classList.add('dropping'); } dragLeave(event) { if (this.droppedElement === event.target) this.element.classList.remove('dropping'); } drop(event) { if (event.defaultPrevented) return; event.preventDefault(); this.element.classList.remove('dropping'); this.$.$eval(this.$attrs.vnDroppable, {$event: event}); } } Controller.$inject = ['$element', '$scope', '$attrs']; ngModule.directive('vnDroppable', () => { return { controller: Controller }; });