UNPKG

@syncfusion/ej2-base

Version:

A common package of Essential JS 2 base libraries, methods and class definitions

140 lines (139 loc) 5.36 kB
var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { Base } from './base'; import { Browser } from './browser'; import { isVisible, matches } from './dom'; import { Property, NotifyPropertyChanges, Event } from './notify-property-change'; import { EventHandler } from './event-handler'; import { compareElementParent } from './util'; /** * Droppable Module provides support to enable droppable functionality in Dom Elements. * ```html * <div id='drop'>Droppable</div> * <script> * let ele:HTMLElement = document.getElementById('drop'); * var drag:Droppable = new Droppable(ele,{ * accept:'.drop', * drop: function(e) { * //drop handler code. * } * }); * </script> * ``` */ var Droppable = /** @class */ (function (_super) { __extends(Droppable, _super); function Droppable(element, options) { var _this = _super.call(this, options, element) || this; _this.mouseOver = false; _this.dragData = {}; _this.dragStopCalled = false; _this.bind(); return _this; } Droppable.prototype.bind = function () { this.wireEvents(); }; Droppable.prototype.wireEvents = function () { EventHandler.add(this.element, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDrop, this); }; // triggers when property changed Droppable.prototype.onPropertyChanged = function (newProp, oldProp) { //No Code to handle }; Droppable.prototype.getModuleName = function () { return 'droppable'; }; Droppable.prototype.intOver = function (event, element) { if (!this.mouseOver) { var drag = this.dragData[this.scope]; this.trigger('over', { event: event, target: element, dragData: drag }); this.mouseOver = true; } }; Droppable.prototype.intOut = function (event, element) { if (this.mouseOver) { this.trigger('out', { evt: event, target: element }); this.mouseOver = false; } }; Droppable.prototype.intDrop = function (evt, element) { if (!this.dragStopCalled) { return; } else { this.dragStopCalled = false; } var accept = true; var drag = this.dragData[this.scope]; var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false; var area; if (isDrag) { area = this.isDropArea(evt, drag.helper, element); if (this.accept) { accept = matches(drag.helper, this.accept); } } if (isDrag && this.drop && area.canDrop && accept) { this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag }); } this.mouseOver = false; }; Droppable.prototype.isDropArea = function (evt, helper, element) { var area = { canDrop: true, target: element || evt.target }; var isTouch = evt.type === 'touchend'; if (isTouch || area.target === helper) { helper.style.display = 'none'; var coord = isTouch ? (evt.changedTouches[0]) : evt; var ele = document.elementFromPoint(coord.clientX, coord.clientY); area.canDrop = false; area.canDrop = compareElementParent(ele, this.element); if (area.canDrop) { area.target = ele; } helper.style.display = ''; } return area; }; Droppable.prototype.destroy = function () { EventHandler.remove(this.element, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDrop); _super.prototype.destroy.call(this); }; __decorate([ Property() ], Droppable.prototype, "accept", void 0); __decorate([ Property('default') ], Droppable.prototype, "scope", void 0); __decorate([ Event() ], Droppable.prototype, "drop", void 0); __decorate([ Event() ], Droppable.prototype, "over", void 0); __decorate([ Event() ], Droppable.prototype, "out", void 0); Droppable = __decorate([ NotifyPropertyChanges ], Droppable); return Droppable; }(Base)); export { Droppable };