UNPKG

54.4 kBJavaScriptView Raw
1(function (global, factory) {
2 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/forms')) :
3 typeof define === 'function' && define.amd ? define('ng2-dnd', ['exports', '@angular/core', '@angular/forms'], factory) :
4 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['ng2-dnd'] = {}, global.ng.core, global.ng.forms));
5}(this, (function (exports, core, forms) { 'use strict';
6
7 /*! *****************************************************************************
8 Copyright (c) Microsoft Corporation.
9
10 Permission to use, copy, modify, and/or distribute this software for any
11 purpose with or without fee is hereby granted.
12
13 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
14 REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
15 AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
16 INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
17 LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
18 OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 PERFORMANCE OF THIS SOFTWARE.
20 ***************************************************************************** */
21 /* global Reflect, Promise */
22 var extendStatics = function (d, b) {
23 extendStatics = Object.setPrototypeOf ||
24 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
25 function (d, b) { for (var p in b)
26 if (b.hasOwnProperty(p))
27 d[p] = b[p]; };
28 return extendStatics(d, b);
29 };
30 function __extends(d, b) {
31 extendStatics(d, b);
32 function __() { this.constructor = d; }
33 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
34 }
35 var __assign = function () {
36 __assign = Object.assign || function __assign(t) {
37 for (var s, i = 1, n = arguments.length; i < n; i++) {
38 s = arguments[i];
39 for (var p in s)
40 if (Object.prototype.hasOwnProperty.call(s, p))
41 t[p] = s[p];
42 }
43 return t;
44 };
45 return __assign.apply(this, arguments);
46 };
47 function __rest(s, e) {
48 var t = {};
49 for (var p in s)
50 if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
51 t[p] = s[p];
52 if (s != null && typeof Object.getOwnPropertySymbols === "function")
53 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
54 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
55 t[p[i]] = s[p[i]];
56 }
57 return t;
58 }
59 function __decorate(decorators, target, key, desc) {
60 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
61 if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
62 r = Reflect.decorate(decorators, target, key, desc);
63 else
64 for (var i = decorators.length - 1; i >= 0; i--)
65 if (d = decorators[i])
66 r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
67 return c > 3 && r && Object.defineProperty(target, key, r), r;
68 }
69 function __param(paramIndex, decorator) {
70 return function (target, key) { decorator(target, key, paramIndex); };
71 }
72 function __metadata(metadataKey, metadataValue) {
73 if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
74 return Reflect.metadata(metadataKey, metadataValue);
75 }
76 function __awaiter(thisArg, _arguments, P, generator) {
77 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
78 return new (P || (P = Promise))(function (resolve, reject) {
79 function fulfilled(value) { try {
80 step(generator.next(value));
81 }
82 catch (e) {
83 reject(e);
84 } }
85 function rejected(value) { try {
86 step(generator["throw"](value));
87 }
88 catch (e) {
89 reject(e);
90 } }
91 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
92 step((generator = generator.apply(thisArg, _arguments || [])).next());
93 });
94 }
95 function __generator(thisArg, body) {
96 var _ = { label: 0, sent: function () { if (t[0] & 1)
97 throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
98 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g;
99 function verb(n) { return function (v) { return step([n, v]); }; }
100 function step(op) {
101 if (f)
102 throw new TypeError("Generator is already executing.");
103 while (_)
104 try {
105 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
106 return t;
107 if (y = 0, t)
108 op = [op[0] & 2, t.value];
109 switch (op[0]) {
110 case 0:
111 case 1:
112 t = op;
113 break;
114 case 4:
115 _.label++;
116 return { value: op[1], done: false };
117 case 5:
118 _.label++;
119 y = op[1];
120 op = [0];
121 continue;
122 case 7:
123 op = _.ops.pop();
124 _.trys.pop();
125 continue;
126 default:
127 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
128 _ = 0;
129 continue;
130 }
131 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
132 _.label = op[1];
133 break;
134 }
135 if (op[0] === 6 && _.label < t[1]) {
136 _.label = t[1];
137 t = op;
138 break;
139 }
140 if (t && _.label < t[2]) {
141 _.label = t[2];
142 _.ops.push(op);
143 break;
144 }
145 if (t[2])
146 _.ops.pop();
147 _.trys.pop();
148 continue;
149 }
150 op = body.call(thisArg, _);
151 }
152 catch (e) {
153 op = [6, e];
154 y = 0;
155 }
156 finally {
157 f = t = 0;
158 }
159 if (op[0] & 5)
160 throw op[1];
161 return { value: op[0] ? op[1] : void 0, done: true };
162 }
163 }
164 function __createBinding(o, m, k, k2) {
165 if (k2 === undefined)
166 k2 = k;
167 o[k2] = m[k];
168 }
169 function __exportStar(m, exports) {
170 for (var p in m)
171 if (p !== "default" && !exports.hasOwnProperty(p))
172 exports[p] = m[p];
173 }
174 function __values(o) {
175 var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
176 if (m)
177 return m.call(o);
178 if (o && typeof o.length === "number")
179 return {
180 next: function () {
181 if (o && i >= o.length)
182 o = void 0;
183 return { value: o && o[i++], done: !o };
184 }
185 };
186 throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
187 }
188 function __read(o, n) {
189 var m = typeof Symbol === "function" && o[Symbol.iterator];
190 if (!m)
191 return o;
192 var i = m.call(o), r, ar = [], e;
193 try {
194 while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
195 ar.push(r.value);
196 }
197 catch (error) {
198 e = { error: error };
199 }
200 finally {
201 try {
202 if (r && !r.done && (m = i["return"]))
203 m.call(i);
204 }
205 finally {
206 if (e)
207 throw e.error;
208 }
209 }
210 return ar;
211 }
212 function __spread() {
213 for (var ar = [], i = 0; i < arguments.length; i++)
214 ar = ar.concat(__read(arguments[i]));
215 return ar;
216 }
217 function __spreadArrays() {
218 for (var s = 0, i = 0, il = arguments.length; i < il; i++)
219 s += arguments[i].length;
220 for (var r = Array(s), k = 0, i = 0; i < il; i++)
221 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
222 r[k] = a[j];
223 return r;
224 }
225 ;
226 function __await(v) {
227 return this instanceof __await ? (this.v = v, this) : new __await(v);
228 }
229 function __asyncGenerator(thisArg, _arguments, generator) {
230 if (!Symbol.asyncIterator)
231 throw new TypeError("Symbol.asyncIterator is not defined.");
232 var g = generator.apply(thisArg, _arguments || []), i, q = [];
233 return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
234 function verb(n) { if (g[n])
235 i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
236 function resume(n, v) { try {
237 step(g[n](v));
238 }
239 catch (e) {
240 settle(q[0][3], e);
241 } }
242 function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
243 function fulfill(value) { resume("next", value); }
244 function reject(value) { resume("throw", value); }
245 function settle(f, v) { if (f(v), q.shift(), q.length)
246 resume(q[0][0], q[0][1]); }
247 }
248 function __asyncDelegator(o) {
249 var i, p;
250 return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
251 function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
252 }
253 function __asyncValues(o) {
254 if (!Symbol.asyncIterator)
255 throw new TypeError("Symbol.asyncIterator is not defined.");
256 var m = o[Symbol.asyncIterator], i;
257 return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
258 function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
259 function settle(resolve, reject, d, v) { Promise.resolve(v).then(function (v) { resolve({ value: v, done: d }); }, reject); }
260 }
261 function __makeTemplateObject(cooked, raw) {
262 if (Object.defineProperty) {
263 Object.defineProperty(cooked, "raw", { value: raw });
264 }
265 else {
266 cooked.raw = raw;
267 }
268 return cooked;
269 }
270 ;
271 function __importStar(mod) {
272 if (mod && mod.__esModule)
273 return mod;
274 var result = {};
275 if (mod != null)
276 for (var k in mod)
277 if (Object.hasOwnProperty.call(mod, k))
278 result[k] = mod[k];
279 result.default = mod;
280 return result;
281 }
282 function __importDefault(mod) {
283 return (mod && mod.__esModule) ? mod : { default: mod };
284 }
285 function __classPrivateFieldGet(receiver, privateMap) {
286 if (!privateMap.has(receiver)) {
287 throw new TypeError("attempted to get private field on non-instance");
288 }
289 return privateMap.get(receiver);
290 }
291 function __classPrivateFieldSet(receiver, privateMap, value) {
292 if (!privateMap.has(receiver)) {
293 throw new TypeError("attempted to set private field on non-instance");
294 }
295 privateMap.set(receiver, value);
296 return value;
297 }
298
299 // Copyright (C) 2016-2020 Sergey Akopkokhyants
300 // This project is licensed under the terms of the MIT license.
301 // https://github.com/akserg/ng2-dnd
302 /**
303 * Check and return true if an object is type of string
304 */
305 function isString(obj) {
306 return typeof obj === "string";
307 }
308 /**
309 * Check and return true if an object not undefined or null
310 */
311 function isPresent(obj) {
312 return obj !== undefined && obj !== null;
313 }
314 /**
315 * Check and return true if an object is type of Function
316 */
317 function isFunction(obj) {
318 return typeof obj === "function";
319 }
320 /**
321 * Create Image element with specified url string
322 */
323 function createImage(src) {
324 var img = new HTMLImageElement();
325 img.src = src;
326 return img;
327 }
328 /**
329 * Call the function
330 */
331 function callFun(fun) {
332 return fun();
333 }
334
335 // Copyright (C) 2016-2020 Sergey Akopkokhyants
336 var DataTransferEffect = /** @class */ (function () {
337 function DataTransferEffect(name) {
338 this.name = name;
339 }
340 return DataTransferEffect;
341 }());
342 DataTransferEffect.COPY = new DataTransferEffect('copy');
343 DataTransferEffect.LINK = new DataTransferEffect('link');
344 DataTransferEffect.MOVE = new DataTransferEffect('move');
345 DataTransferEffect.NONE = new DataTransferEffect('none');
346 var DragImage = /** @class */ (function () {
347 function DragImage(imageElement, x_offset, y_offset) {
348 if (x_offset === void 0) { x_offset = 0; }
349 if (y_offset === void 0) { y_offset = 0; }
350 this.imageElement = imageElement;
351 this.x_offset = x_offset;
352 this.y_offset = y_offset;
353 if (isString(this.imageElement)) {
354 // Create real image from string source
355 var imgScr = this.imageElement;
356 this.imageElement = new HTMLImageElement();
357 this.imageElement.src = imgScr;
358 }
359 }
360 return DragImage;
361 }());
362 var DragDropConfig = /** @class */ (function () {
363 function DragDropConfig() {
364 this.onDragStartClass = "dnd-drag-start";
365 this.onDragEnterClass = "dnd-drag-enter";
366 this.onDragOverClass = "dnd-drag-over";
367 this.onSortableDragClass = "dnd-sortable-drag";
368 this.dragEffect = DataTransferEffect.MOVE;
369 this.dropEffect = DataTransferEffect.MOVE;
370 this.dragCursor = "move";
371 this.defaultCursor = "pointer";
372 }
373 return DragDropConfig;
374 }());
375
376 // Copyright (C) 2016-2020 Sergey Akopkokhyants
377 var DragDropData = /** @class */ (function () {
378 function DragDropData() {
379 }
380 return DragDropData;
381 }());
382 function dragDropServiceFactory() {
383 return new exports.DragDropService();
384 }
385 exports.DragDropService = /** @class */ (function () {
386 function DragDropService() {
387 this.allowedDropZones = [];
388 }
389 return DragDropService;
390 }());
391 exports.DragDropService = __decorate([
392 core.Injectable()
393 ], exports.DragDropService);
394 function dragDropSortableServiceFactory(config) {
395 return new exports.DragDropSortableService(config);
396 }
397 exports.DragDropSortableService = /** @class */ (function () {
398 function DragDropSortableService(_config) {
399 this._config = _config;
400 }
401 Object.defineProperty(DragDropSortableService.prototype, "elem", {
402 get: function () {
403 return this._elem;
404 },
405 enumerable: true,
406 configurable: true
407 });
408 DragDropSortableService.prototype.markSortable = function (elem) {
409 if (isPresent(this._elem)) {
410 this._elem.classList.remove(this._config.onSortableDragClass);
411 }
412 if (isPresent(elem)) {
413 this._elem = elem;
414 this._elem.classList.add(this._config.onSortableDragClass);
415 }
416 };
417 return DragDropSortableService;
418 }());
419 exports.DragDropSortableService = __decorate([
420 core.Injectable()
421 ], exports.DragDropSortableService);
422
423 // Copyright (C) 2016-2020 Sergey Akopkokhyants
424 exports.AbstractComponent = /** @class */ (function () {
425 function AbstractComponent(elemRef, _dragDropService, _config, _cdr) {
426 var _this = this;
427 this._dragDropService = _dragDropService;
428 this._config = _config;
429 this._cdr = _cdr;
430 /**
431 * Whether the object is draggable. Default is true.
432 */
433 this._dragEnabled = false;
434 /**
435 * Allows drop on this element
436 */
437 this.dropEnabled = false;
438 this.dropZones = [];
439 this.cloneItem = false;
440 // Assign default cursor unless overridden
441 this._defaultCursor = _config.defaultCursor;
442 this._elem = elemRef.nativeElement;
443 this._elem.style.cursor = this._defaultCursor; // set default cursor on our element
444 //
445 // DROP events
446 //
447 this._elem.ondragenter = function (event) {
448 _this._onDragEnter(event);
449 };
450 this._elem.ondragover = function (event) {
451 _this._onDragOver(event);
452 //
453 if (event.dataTransfer != null) {
454 event.dataTransfer.dropEffect = _this._config.dropEffect.name;
455 }
456 return false;
457 };
458 this._elem.ondragleave = function (event) {
459 _this._onDragLeave(event);
460 };
461 this._elem.ondrop = function (event) {
462 _this._onDrop(event);
463 };
464 //
465 // Drag events
466 //
467 this._elem.onmousedown = function (event) {
468 _this._target = event.target;
469 };
470 this._elem.ondragstart = function (event) {
471 if (_this._dragHandle) {
472 if (!_this._dragHandle.contains(_this._target)) {
473 event.preventDefault();
474 return;
475 }
476 }
477 _this._onDragStart(event);
478 //
479 if (event.dataTransfer != null) {
480 event.dataTransfer.setData('text', '');
481 // Change drag effect
482 event.dataTransfer.effectAllowed = _this.effectAllowed || _this._config.dragEffect.name;
483 // Change drag image
484 if (isPresent(_this.dragImage)) {
485 if (isString(_this.dragImage)) {
486 event.dataTransfer.setDragImage(createImage(_this.dragImage));
487 }
488 else if (isFunction(_this.dragImage)) {
489 event.dataTransfer.setDragImage(callFun(_this.dragImage));
490 }
491 else {
492 var img = _this.dragImage;
493 event.dataTransfer.setDragImage(img.imageElement, img.x_offset, img.y_offset);
494 }
495 }
496 else if (isPresent(_this._config.dragImage)) {
497 var dragImage = _this._config.dragImage;
498 event.dataTransfer.setDragImage(dragImage.imageElement, dragImage.x_offset, dragImage.y_offset);
499 }
500 else if (_this.cloneItem) {
501 _this._dragHelper = _this._elem.cloneNode(true);
502 _this._dragHelper.classList.add('dnd-drag-item');
503 _this._dragHelper.style.position = "absolute";
504 _this._dragHelper.style.top = "0px";
505 _this._dragHelper.style.left = "-1000px";
506 _this._elem.parentElement.appendChild(_this._dragHelper);
507 event.dataTransfer.setDragImage(_this._dragHelper, event.offsetX, event.offsetY);
508 }
509 // Change drag cursor
510 var cursorelem = (_this._dragHandle) ? _this._dragHandle : _this._elem;
511 if (_this._dragEnabled) {
512 cursorelem.style.cursor = _this.effectCursor ? _this.effectCursor : _this._config.dragCursor;
513 }
514 else {
515 cursorelem.style.cursor = _this._defaultCursor;
516 }
517 }
518 };
519 this._elem.ondragend = function (event) {
520 if (_this._elem.parentElement && _this._dragHelper) {
521 _this._elem.parentElement.removeChild(_this._dragHelper);
522 }
523 // console.log('ondragend', event.target);
524 _this._onDragEnd(event);
525 // Restore style of dragged element
526 var cursorelem = (_this._dragHandle) ? _this._dragHandle : _this._elem;
527 cursorelem.style.cursor = _this._defaultCursor;
528 };
529 }
530 Object.defineProperty(AbstractComponent.prototype, "dragEnabled", {
531 get: function () {
532 return this._dragEnabled;
533 },
534 set: function (enabled) {
535 this._dragEnabled = !!enabled;
536 this._elem.draggable = this._dragEnabled;
537 },
538 enumerable: true,
539 configurable: true
540 });
541 AbstractComponent.prototype.setDragHandle = function (elem) {
542 this._dragHandle = elem;
543 };
544 /******* Change detection ******/
545 AbstractComponent.prototype.detectChanges = function () {
546 var _this = this;
547 // Programmatically run change detection to fix issue in Safari
548 setTimeout(function () {
549 if (_this._cdr && !_this._cdr.destroyed) {
550 _this._cdr.detectChanges();
551 }
552 }, 250);
553 };
554 //****** Droppable *******//
555 AbstractComponent.prototype._onDragEnter = function (event) {
556 // console.log('ondragenter._isDropAllowed', this._isDropAllowed);
557 if (this._isDropAllowed(event)) {
558 // event.preventDefault();
559 this._onDragEnterCallback(event);
560 }
561 };
562 AbstractComponent.prototype._onDragOver = function (event) {
563 // // console.log('ondragover._isDropAllowed', this._isDropAllowed);
564 if (this._isDropAllowed(event)) {
565 // The element is over the same source element - do nothing
566 if (event.preventDefault) {
567 // Necessary. Allows us to drop.
568 event.preventDefault();
569 }
570 this._onDragOverCallback(event);
571 }
572 };
573 AbstractComponent.prototype._onDragLeave = function (event) {
574 // console.log('ondragleave._isDropAllowed', this._isDropAllowed);
575 if (this._isDropAllowed(event)) {
576 // event.preventDefault();
577 this._onDragLeaveCallback(event);
578 }
579 };
580 AbstractComponent.prototype._onDrop = function (event) {
581 // console.log('ondrop._isDropAllowed', this._isDropAllowed);
582 if (this._isDropAllowed(event)) {
583 // Necessary. Allows us to drop.
584 this._preventAndStop(event);
585 this._onDropCallback(event);
586 this.detectChanges();
587 }
588 };
589 AbstractComponent.prototype._isDropAllowed = function (event) {
590 if ((this._dragDropService.isDragged || (event.dataTransfer && event.dataTransfer.files)) && this.dropEnabled) {
591 // First, if `allowDrop` is set, call it to determine whether the
592 // dragged element can be dropped here.
593 if (this.allowDrop) {
594 return this.allowDrop(this._dragDropService.dragData);
595 }
596 // Otherwise, use dropZones if they are set.
597 if (this.dropZones.length === 0 && this._dragDropService.allowedDropZones.length === 0) {
598 return true;
599 }
600 for (var i = 0; i < this._dragDropService.allowedDropZones.length; i++) {
601 var dragZone = this._dragDropService.allowedDropZones[i];
602 if (this.dropZones.indexOf(dragZone) !== -1) {
603 return true;
604 }
605 }
606 }
607 return false;
608 };
609 AbstractComponent.prototype._preventAndStop = function (event) {
610 if (event.preventDefault) {
611 event.preventDefault();
612 }
613 if (event.stopPropagation) {
614 event.stopPropagation();
615 }
616 };
617 //*********** Draggable **********//
618 AbstractComponent.prototype._onDragStart = function (event) {
619 //console.log('ondragstart.dragEnabled', this._dragEnabled);
620 if (this._dragEnabled) {
621 this._dragDropService.allowedDropZones = this.dropZones;
622 // console.log('ondragstart.allowedDropZones', this._dragDropService.allowedDropZones);
623 this._onDragStartCallback(event);
624 }
625 };
626 AbstractComponent.prototype._onDragEnd = function (event) {
627 this._dragDropService.allowedDropZones = [];
628 // console.log('ondragend.allowedDropZones', this._dragDropService.allowedDropZones);
629 this._onDragEndCallback(event);
630 };
631 //**** Drop Callbacks ****//
632 AbstractComponent.prototype._onDragEnterCallback = function (event) { };
633 AbstractComponent.prototype._onDragOverCallback = function (event) { };
634 AbstractComponent.prototype._onDragLeaveCallback = function (event) { };
635 AbstractComponent.prototype._onDropCallback = function (event) { };
636 //**** Drag Callbacks ****//
637 AbstractComponent.prototype._onDragStartCallback = function (event) { };
638 AbstractComponent.prototype._onDragEndCallback = function (event) { };
639 return AbstractComponent;
640 }());
641 exports.AbstractComponent = __decorate([
642 core.Injectable()
643 ], exports.AbstractComponent);
644 var AbstractHandleComponent = /** @class */ (function () {
645 function AbstractHandleComponent(elemRef, _dragDropService, _config, _Component, _cdr) {
646 this._dragDropService = _dragDropService;
647 this._config = _config;
648 this._Component = _Component;
649 this._cdr = _cdr;
650 this._elem = elemRef.nativeElement;
651 this._Component.setDragHandle(this._elem);
652 }
653 return AbstractHandleComponent;
654 }());
655
656 exports.DraggableComponent = /** @class */ (function (_super) {
657 __extends(DraggableComponent, _super);
658 function DraggableComponent(elemRef, dragDropService, config, cdr) {
659 var _this = _super.call(this, elemRef, dragDropService, config, cdr) || this;
660 /**
661 * Callback function called when the drag actions happened.
662 */
663 _this.onDragStart = new core.EventEmitter();
664 _this.onDragEnd = new core.EventEmitter();
665 /**
666 * Callback function called when the drag action ends with a valid drop action.
667 * It is activated after the on-drop-success callback
668 */
669 _this.onDragSuccessCallback = new core.EventEmitter();
670 _this._defaultCursor = _this._elem.style.cursor;
671 _this.dragEnabled = true;
672 return _this;
673 }
674 Object.defineProperty(DraggableComponent.prototype, "draggable", {
675 set: function (value) {
676 this.dragEnabled = !!value;
677 },
678 enumerable: true,
679 configurable: true
680 });
681 Object.defineProperty(DraggableComponent.prototype, "dropzones", {
682 set: function (value) {
683 this.dropZones = value;
684 },
685 enumerable: true,
686 configurable: true
687 });
688 Object.defineProperty(DraggableComponent.prototype, "effectallowed", {
689 /**
690 * Drag allowed effect
691 */
692 set: function (value) {
693 this.effectAllowed = value;
694 },
695 enumerable: true,
696 configurable: true
697 });
698 Object.defineProperty(DraggableComponent.prototype, "effectcursor", {
699 /**
700 * Drag effect cursor
701 */
702 set: function (value) {
703 this.effectCursor = value;
704 },
705 enumerable: true,
706 configurable: true
707 });
708 DraggableComponent.prototype._onDragStartCallback = function (event) {
709 this._dragDropService.isDragged = true;
710 this._dragDropService.dragData = this.dragData;
711 this._dragDropService.onDragSuccessCallback = this.onDragSuccessCallback;
712 this._elem.classList.add(this._config.onDragStartClass);
713 //
714 this.onDragStart.emit({ dragData: this.dragData, mouseEvent: event });
715 };
716 DraggableComponent.prototype._onDragEndCallback = function (event) {
717 this._dragDropService.isDragged = false;
718 this._dragDropService.dragData = null;
719 this._dragDropService.onDragSuccessCallback = null;
720 this._elem.classList.remove(this._config.onDragStartClass);
721 //
722 this.onDragEnd.emit({ dragData: this.dragData, mouseEvent: event });
723 };
724 return DraggableComponent;
725 }(exports.AbstractComponent));
726 __decorate([
727 core.Input("dragEnabled")
728 ], exports.DraggableComponent.prototype, "draggable", null);
729 __decorate([
730 core.Output()
731 ], exports.DraggableComponent.prototype, "onDragStart", void 0);
732 __decorate([
733 core.Output()
734 ], exports.DraggableComponent.prototype, "onDragEnd", void 0);
735 __decorate([
736 core.Input()
737 ], exports.DraggableComponent.prototype, "dragData", void 0);
738 __decorate([
739 core.Output("onDragSuccess")
740 ], exports.DraggableComponent.prototype, "onDragSuccessCallback", void 0);
741 __decorate([
742 core.Input("dropZones")
743 ], exports.DraggableComponent.prototype, "dropzones", null);
744 __decorate([
745 core.Input("effectAllowed")
746 ], exports.DraggableComponent.prototype, "effectallowed", null);
747 __decorate([
748 core.Input("effectCursor")
749 ], exports.DraggableComponent.prototype, "effectcursor", null);
750 __decorate([
751 core.Input()
752 ], exports.DraggableComponent.prototype, "dragImage", void 0);
753 __decorate([
754 core.Input()
755 ], exports.DraggableComponent.prototype, "cloneItem", void 0);
756 exports.DraggableComponent = __decorate([
757 core.Directive({ selector: '[dnd-draggable]' })
758 ], exports.DraggableComponent);
759 exports.DraggableHandleComponent = /** @class */ (function (_super) {
760 __extends(DraggableHandleComponent, _super);
761 function DraggableHandleComponent(elemRef, dragDropService, config, _Component, cdr) {
762 return _super.call(this, elemRef, dragDropService, config, _Component, cdr) || this;
763 }
764 return DraggableHandleComponent;
765 }(AbstractHandleComponent));
766 exports.DraggableHandleComponent = __decorate([
767 core.Directive({ selector: '[dnd-draggable-handle]' })
768 ], exports.DraggableHandleComponent);
769
770 exports.DroppableComponent = /** @class */ (function (_super) {
771 __extends(DroppableComponent, _super);
772 function DroppableComponent(elemRef, dragDropService, config, cdr) {
773 var _this = _super.call(this, elemRef, dragDropService, config, cdr) || this;
774 /**
775 * Callback function called when the drop action completes correctly.
776 * It is activated before the on-drag-success callback.
777 */
778 _this.onDropSuccess = new core.EventEmitter();
779 _this.onDragEnter = new core.EventEmitter();
780 _this.onDragOver = new core.EventEmitter();
781 _this.onDragLeave = new core.EventEmitter();
782 _this.dropEnabled = true;
783 return _this;
784 }
785 Object.defineProperty(DroppableComponent.prototype, "droppable", {
786 set: function (value) {
787 this.dropEnabled = !!value;
788 },
789 enumerable: true,
790 configurable: true
791 });
792 Object.defineProperty(DroppableComponent.prototype, "allowdrop", {
793 set: function (value) {
794 this.allowDrop = value;
795 },
796 enumerable: true,
797 configurable: true
798 });
799 Object.defineProperty(DroppableComponent.prototype, "dropzones", {
800 set: function (value) {
801 this.dropZones = value;
802 },
803 enumerable: true,
804 configurable: true
805 });
806 Object.defineProperty(DroppableComponent.prototype, "effectallowed", {
807 /**
808 * Drag allowed effect
809 */
810 set: function (value) {
811 this.effectAllowed = value;
812 },
813 enumerable: true,
814 configurable: true
815 });
816 Object.defineProperty(DroppableComponent.prototype, "effectcursor", {
817 /**
818 * Drag effect cursor
819 */
820 set: function (value) {
821 this.effectCursor = value;
822 },
823 enumerable: true,
824 configurable: true
825 });
826 DroppableComponent.prototype._onDragEnterCallback = function (event) {
827 if (this._dragDropService.isDragged) {
828 this._elem.classList.add(this._config.onDragEnterClass);
829 this.onDragEnter.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });
830 }
831 };
832 DroppableComponent.prototype._onDragOverCallback = function (event) {
833 if (this._dragDropService.isDragged) {
834 this._elem.classList.add(this._config.onDragOverClass);
835 this.onDragOver.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });
836 }
837 };
838 ;
839 DroppableComponent.prototype._onDragLeaveCallback = function (event) {
840 if (this._dragDropService.isDragged) {
841 this._elem.classList.remove(this._config.onDragOverClass);
842 this._elem.classList.remove(this._config.onDragEnterClass);
843 this.onDragLeave.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });
844 }
845 };
846 ;
847 DroppableComponent.prototype._onDropCallback = function (event) {
848 var dataTransfer = event.dataTransfer;
849 if (this._dragDropService.isDragged || (dataTransfer && dataTransfer.files)) {
850 this.onDropSuccess.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });
851 if (this._dragDropService.onDragSuccessCallback) {
852 this._dragDropService.onDragSuccessCallback.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });
853 }
854 this._elem.classList.remove(this._config.onDragOverClass);
855 this._elem.classList.remove(this._config.onDragEnterClass);
856 }
857 };
858 return DroppableComponent;
859 }(exports.AbstractComponent));
860 __decorate([
861 core.Input("dropEnabled")
862 ], exports.DroppableComponent.prototype, "droppable", null);
863 __decorate([
864 core.Output()
865 ], exports.DroppableComponent.prototype, "onDropSuccess", void 0);
866 __decorate([
867 core.Output()
868 ], exports.DroppableComponent.prototype, "onDragEnter", void 0);
869 __decorate([
870 core.Output()
871 ], exports.DroppableComponent.prototype, "onDragOver", void 0);
872 __decorate([
873 core.Output()
874 ], exports.DroppableComponent.prototype, "onDragLeave", void 0);
875 __decorate([
876 core.Input("allowDrop")
877 ], exports.DroppableComponent.prototype, "allowdrop", null);
878 __decorate([
879 core.Input("dropZones")
880 ], exports.DroppableComponent.prototype, "dropzones", null);
881 __decorate([
882 core.Input("effectAllowed")
883 ], exports.DroppableComponent.prototype, "effectallowed", null);
884 __decorate([
885 core.Input("effectCursor")
886 ], exports.DroppableComponent.prototype, "effectcursor", null);
887 exports.DroppableComponent = __decorate([
888 core.Directive({ selector: '[dnd-droppable]' })
889 ], exports.DroppableComponent);
890
891 exports.SortableContainer = /** @class */ (function (_super) {
892 __extends(SortableContainer, _super);
893 function SortableContainer(elemRef, dragDropService, config, cdr, _sortableDataService) {
894 var _this = _super.call(this, elemRef, dragDropService, config, cdr) || this;
895 _this._sortableDataService = _sortableDataService;
896 _this._sortableData = [];
897 _this.dragEnabled = false;
898 return _this;
899 }
900 Object.defineProperty(SortableContainer.prototype, "draggable", {
901 set: function (value) {
902 this.dragEnabled = !!value;
903 },
904 enumerable: true,
905 configurable: true
906 });
907 Object.defineProperty(SortableContainer.prototype, "sortableData", {
908 get: function () {
909 return this._sortableData;
910 },
911 set: function (sortableData) {
912 this._sortableData = sortableData;
913 if (sortableData instanceof forms.FormArray) {
914 this.sortableHandler = new SortableFormArrayHandler();
915 }
916 else {
917 this.sortableHandler = new SortableArrayHandler();
918 }
919 //
920 this.dropEnabled = !!this._sortableData;
921 // console.log("collection is changed, drop enabled: " + this.dropEnabled);
922 },
923 enumerable: true,
924 configurable: true
925 });
926 Object.defineProperty(SortableContainer.prototype, "dropzones", {
927 set: function (value) {
928 this.dropZones = value;
929 },
930 enumerable: true,
931 configurable: true
932 });
933 SortableContainer.prototype._onDragEnterCallback = function (event) {
934 if (this._sortableDataService.isDragged) {
935 var item = this._sortableDataService.sortableContainer.getItemAt(this._sortableDataService.index);
936 // Check does element exist in sortableData of this Container
937 if (this.indexOf(item) === -1) {
938 // Let's add it
939 // console.log('Container._onDragEnterCallback. drag node [' + this._sortableDataService.index.toString() + '] over parent node');
940 // Remove item from previouse list
941 this._sortableDataService.sortableContainer.removeItemAt(this._sortableDataService.index);
942 if (this._sortableDataService.sortableContainer._sortableData.length === 0) {
943 this._sortableDataService.sortableContainer.dropEnabled = true;
944 }
945 // Add item to new list
946 this.insertItemAt(item, 0);
947 this._sortableDataService.sortableContainer = this;
948 this._sortableDataService.index = 0;
949 }
950 // Refresh changes in properties of container component
951 this.detectChanges();
952 }
953 };
954 SortableContainer.prototype.getItemAt = function (index) {
955 return this.sortableHandler.getItemAt(this._sortableData, index);
956 };
957 SortableContainer.prototype.indexOf = function (item) {
958 return this.sortableHandler.indexOf(this._sortableData, item);
959 };
960 SortableContainer.prototype.removeItemAt = function (index) {
961 this.sortableHandler.removeItemAt(this._sortableData, index);
962 };
963 SortableContainer.prototype.insertItemAt = function (item, index) {
964 this.sortableHandler.insertItemAt(this._sortableData, item, index);
965 };
966 return SortableContainer;
967 }(exports.AbstractComponent));
968 __decorate([
969 core.Input("dragEnabled")
970 ], exports.SortableContainer.prototype, "draggable", null);
971 __decorate([
972 core.Input()
973 ], exports.SortableContainer.prototype, "sortableData", null);
974 __decorate([
975 core.Input("dropZones")
976 ], exports.SortableContainer.prototype, "dropzones", null);
977 exports.SortableContainer = __decorate([
978 core.Directive({ selector: '[dnd-sortable-container]' })
979 ], exports.SortableContainer);
980 var SortableArrayHandler = /** @class */ (function () {
981 function SortableArrayHandler() {
982 }
983 SortableArrayHandler.prototype.getItemAt = function (sortableData, index) {
984 return sortableData[index];
985 };
986 SortableArrayHandler.prototype.indexOf = function (sortableData, item) {
987 return sortableData.indexOf(item);
988 };
989 SortableArrayHandler.prototype.removeItemAt = function (sortableData, index) {
990 sortableData.splice(index, 1);
991 };
992 SortableArrayHandler.prototype.insertItemAt = function (sortableData, item, index) {
993 sortableData.splice(index, 0, item);
994 };
995 return SortableArrayHandler;
996 }());
997 var SortableFormArrayHandler = /** @class */ (function () {
998 function SortableFormArrayHandler() {
999 }
1000 SortableFormArrayHandler.prototype.getItemAt = function (sortableData, index) {
1001 return sortableData.at(index);
1002 };
1003 SortableFormArrayHandler.prototype.indexOf = function (sortableData, item) {
1004 return sortableData.controls.indexOf(item);
1005 };
1006 SortableFormArrayHandler.prototype.removeItemAt = function (sortableData, index) {
1007 sortableData.removeAt(index);
1008 };
1009 SortableFormArrayHandler.prototype.insertItemAt = function (sortableData, item, index) {
1010 sortableData.insert(index, item);
1011 };
1012 return SortableFormArrayHandler;
1013 }());
1014 exports.SortableComponent = /** @class */ (function (_super) {
1015 __extends(SortableComponent, _super);
1016 function SortableComponent(elemRef, dragDropService, config, _sortableContainer, _sortableDataService, cdr) {
1017 var _this = _super.call(this, elemRef, dragDropService, config, cdr) || this;
1018 _this._sortableContainer = _sortableContainer;
1019 _this._sortableDataService = _sortableDataService;
1020 /**
1021 * Callback function called when the drag action ends with a valid drop action.
1022 * It is activated after the on-drop-success callback
1023 */
1024 _this.onDragSuccessCallback = new core.EventEmitter();
1025 _this.onDragStartCallback = new core.EventEmitter();
1026 _this.onDragOverCallback = new core.EventEmitter();
1027 _this.onDragEndCallback = new core.EventEmitter();
1028 _this.onDropSuccessCallback = new core.EventEmitter();
1029 _this.dropZones = _this._sortableContainer.dropZones;
1030 _this.dragEnabled = true;
1031 _this.dropEnabled = true;
1032 return _this;
1033 }
1034 Object.defineProperty(SortableComponent.prototype, "draggable", {
1035 set: function (value) {
1036 this.dragEnabled = !!value;
1037 },
1038 enumerable: true,
1039 configurable: true
1040 });
1041 Object.defineProperty(SortableComponent.prototype, "droppable", {
1042 set: function (value) {
1043 this.dropEnabled = !!value;
1044 },
1045 enumerable: true,
1046 configurable: true
1047 });
1048 Object.defineProperty(SortableComponent.prototype, "effectallowed", {
1049 /**
1050 * Drag allowed effect
1051 */
1052 set: function (value) {
1053 this.effectAllowed = value;
1054 },
1055 enumerable: true,
1056 configurable: true
1057 });
1058 Object.defineProperty(SortableComponent.prototype, "effectcursor", {
1059 /**
1060 * Drag effect cursor
1061 */
1062 set: function (value) {
1063 this.effectCursor = value;
1064 },
1065 enumerable: true,
1066 configurable: true
1067 });
1068 SortableComponent.prototype._onDragStartCallback = function (event) {
1069 // console.log('_onDragStartCallback. dragging elem with index ' + this.index);
1070 this._sortableDataService.isDragged = true;
1071 this._sortableDataService.sortableContainer = this._sortableContainer;
1072 this._sortableDataService.index = this.index;
1073 this._sortableDataService.markSortable(this._elem);
1074 // Add dragData
1075 this._dragDropService.isDragged = true;
1076 this._dragDropService.dragData = this.dragData;
1077 this._dragDropService.onDragSuccessCallback = this.onDragSuccessCallback;
1078 //
1079 this.onDragStartCallback.emit(this._dragDropService.dragData);
1080 };
1081 SortableComponent.prototype._onDragOverCallback = function (event) {
1082 if (this._sortableDataService.isDragged && this._elem !== this._sortableDataService.elem) {
1083 // console.log('_onDragOverCallback. dragging elem with index ' + this.index);
1084 this._sortableDataService.sortableContainer = this._sortableContainer;
1085 this._sortableDataService.index = this.index;
1086 this._sortableDataService.markSortable(this._elem);
1087 this.onDragOverCallback.emit(this._dragDropService.dragData);
1088 }
1089 };
1090 SortableComponent.prototype._onDragEndCallback = function (event) {
1091 // console.log('_onDragEndCallback. end dragging elem with index ' + this.index);
1092 this._sortableDataService.isDragged = false;
1093 this._sortableDataService.sortableContainer = null;
1094 this._sortableDataService.index = null;
1095 this._sortableDataService.markSortable(null);
1096 // Add dragGata
1097 this._dragDropService.isDragged = false;
1098 this._dragDropService.dragData = null;
1099 this._dragDropService.onDragSuccessCallback = null;
1100 //
1101 this.onDragEndCallback.emit(this._dragDropService.dragData);
1102 };
1103 SortableComponent.prototype._onDragEnterCallback = function (event) {
1104 if (this._sortableDataService.isDragged) {
1105 this._sortableDataService.markSortable(this._elem);
1106 if ((this.index !== this._sortableDataService.index) ||
1107 (this._sortableDataService.sortableContainer.sortableData !== this._sortableContainer.sortableData)) {
1108 // console.log('Component._onDragEnterCallback. drag node [' + this.index + '] over node [' + this._sortableDataService.index + ']');
1109 // Get item
1110 var item = this._sortableDataService.sortableContainer.getItemAt(this._sortableDataService.index);
1111 // Remove item from previouse list
1112 this._sortableDataService.sortableContainer.removeItemAt(this._sortableDataService.index);
1113 if (this._sortableDataService.sortableContainer.sortableData.length === 0) {
1114 this._sortableDataService.sortableContainer.dropEnabled = true;
1115 }
1116 // Add item to new list
1117 this._sortableContainer.insertItemAt(item, this.index);
1118 if (this._sortableContainer.dropEnabled) {
1119 this._sortableContainer.dropEnabled = false;
1120 }
1121 this._sortableDataService.sortableContainer = this._sortableContainer;
1122 this._sortableDataService.index = this.index;
1123 this.detectChanges();
1124 }
1125 }
1126 };
1127 SortableComponent.prototype._onDropCallback = function (event) {
1128 if (this._sortableDataService.isDragged) {
1129 // console.log('onDropCallback.onDropSuccessCallback.dragData', this._dragDropService.dragData);
1130 this.onDropSuccessCallback.emit(this._dragDropService.dragData);
1131 if (this._dragDropService.onDragSuccessCallback) {
1132 // console.log('onDropCallback.onDragSuccessCallback.dragData', this._dragDropService.dragData);
1133 this._dragDropService.onDragSuccessCallback.emit(this._dragDropService.dragData);
1134 }
1135 // Refresh changes in properties of container component
1136 this._sortableContainer.detectChanges();
1137 }
1138 };
1139 return SortableComponent;
1140 }(exports.AbstractComponent));
1141 __decorate([
1142 core.Input('sortableIndex')
1143 ], exports.SortableComponent.prototype, "index", void 0);
1144 __decorate([
1145 core.Input("dragEnabled")
1146 ], exports.SortableComponent.prototype, "draggable", null);
1147 __decorate([
1148 core.Input("dropEnabled")
1149 ], exports.SortableComponent.prototype, "droppable", null);
1150 __decorate([
1151 core.Input()
1152 ], exports.SortableComponent.prototype, "dragData", void 0);
1153 __decorate([
1154 core.Input("effectAllowed")
1155 ], exports.SortableComponent.prototype, "effectallowed", null);
1156 __decorate([
1157 core.Input("effectCursor")
1158 ], exports.SortableComponent.prototype, "effectcursor", null);
1159 __decorate([
1160 core.Output("onDragSuccess")
1161 ], exports.SortableComponent.prototype, "onDragSuccessCallback", void 0);
1162 __decorate([
1163 core.Output("onDragStart")
1164 ], exports.SortableComponent.prototype, "onDragStartCallback", void 0);
1165 __decorate([
1166 core.Output("onDragOver")
1167 ], exports.SortableComponent.prototype, "onDragOverCallback", void 0);
1168 __decorate([
1169 core.Output("onDragEnd")
1170 ], exports.SortableComponent.prototype, "onDragEndCallback", void 0);
1171 __decorate([
1172 core.Output("onDropSuccess")
1173 ], exports.SortableComponent.prototype, "onDropSuccessCallback", void 0);
1174 exports.SortableComponent = __decorate([
1175 core.Directive({ selector: '[dnd-sortable]' })
1176 ], exports.SortableComponent);
1177 exports.SortableHandleComponent = /** @class */ (function (_super) {
1178 __extends(SortableHandleComponent, _super);
1179 function SortableHandleComponent(elemRef, dragDropService, config, _Component, cdr) {
1180 return _super.call(this, elemRef, dragDropService, config, _Component, cdr) || this;
1181 }
1182 return SortableHandleComponent;
1183 }(AbstractHandleComponent));
1184 exports.SortableHandleComponent = __decorate([
1185 core.Directive({ selector: '[dnd-sortable-handle]' })
1186 ], exports.SortableHandleComponent);
1187
1188 // Copyright (C) 2016-2020 Sergey Akopkokhyants
1189 // This project is licensed under the terms of the MIT license.
1190 // https://github.com/akserg/ng2-dnd
1191 var DndModule_1;
1192 var ɵ0 = dragDropServiceFactory, ɵ1 = dragDropSortableServiceFactory;
1193 var providers = [
1194 DragDropConfig,
1195 { provide: exports.DragDropService, useFactory: ɵ0 },
1196 { provide: exports.DragDropSortableService, useFactory: ɵ1, deps: [DragDropConfig] }
1197 ];
1198 exports.DndModule = DndModule_1 = /** @class */ (function () {
1199 function DndModule() {
1200 }
1201 DndModule.forRoot = function () {
1202 return {
1203 ngModule: DndModule_1,
1204 providers: providers
1205 };
1206 };
1207 return DndModule;
1208 }());
1209 exports.DndModule = DndModule_1 = __decorate([
1210 core.NgModule({
1211 declarations: [exports.DraggableComponent, exports.DraggableHandleComponent, exports.DroppableComponent, exports.SortableContainer, exports.SortableComponent, exports.SortableHandleComponent],
1212 exports: [exports.DraggableComponent, exports.DraggableHandleComponent, exports.DroppableComponent, exports.SortableContainer, exports.SortableComponent, exports.SortableHandleComponent],
1213 })
1214 ], exports.DndModule);
1215
1216 // Copyright (C) 2016-2020 Sergey Akopkokhyants
1217
1218 /**
1219 * Generated bundle index. Do not edit.
1220 */
1221
1222 exports.AbstractHandleComponent = AbstractHandleComponent;
1223 exports.DataTransferEffect = DataTransferEffect;
1224 exports.DragDropConfig = DragDropConfig;
1225 exports.DragDropData = DragDropData;
1226 exports.DragImage = DragImage;
1227 exports.dragDropServiceFactory = dragDropServiceFactory;
1228 exports.dragDropSortableServiceFactory = dragDropSortableServiceFactory;
1229 exports.providers = providers;
1230 exports.ɵ0 = ɵ0;
1231 exports.ɵ1 = ɵ1;
1232
1233 Object.defineProperty(exports, '__esModule', { value: true });
1234
1235})));
1236//# sourceMappingURL=ng2-dnd.umd.js.map