UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

185 lines 17.4 kB
/** * @fileoverview added by tsickle * Generated from: directives/drop-sort-sync.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, Input, ElementRef, Optional, Self } from '@angular/core'; import { Subscription } from 'rxjs'; import { DroppableDirective } from './droppable.directive'; import { DragDropSyncService } from '../services/drag-drop-sync.service'; import { Utils } from '../shared/utils'; export class DropSortSyncDirective { /** * @param {?} el * @param {?} droppable * @param {?} dragDropSyncService */ constructor(el, droppable, dragDropSyncService) { this.el = el; this.droppable = droppable; this.dragDropSyncService = dragDropSyncService; this.dropSyncGroup = ''; this.direction = 'v'; // 与sortContainer正交的方向 // 与sortContainer正交的方向 this.subscription = new Subscription(); this.subRenderEvent = (/** * @param {?} nativeStyle * @return {?} */ (nativeStyle) => { this.syncGroupDirectives = this.dragDropSyncService.getDropSyncByGroup(this.dropSyncGroup).filter((/** * @param {?} directive * @return {?} */ directive => directive !== this)); this.syncGroupDirectives.forEach((/** * @param {?} dir * @return {?} */ dir => { dir.renderPlaceholder(nativeStyle, this.droppable); })); }); this.subInsertionEvent = (/** * @param {?} cmd * @return {?} */ (cmd) => { this.syncGroupDirectives = this.dragDropSyncService.getDropSyncByGroup(this.dropSyncGroup).filter((/** * @param {?} directive * @return {?} */ directive => directive !== this)); this.syncGroupDirectives.forEach((/** * @param {?} dir * @return {?} */ dir => { dir.insertPlaceholderCommand({ command: cmd.command, container: dir.sortContainer, relatedEl: dir.getChildrenElByIndex(dir.sortContainer, cmd.index) }); })); }); } /** * @return {?} */ ngOnInit() { this.sortContainer = this.el.nativeElement; if (this.droppable) { this.sortContainer = this.droppable.getSortContainer(); this.subscription.add(this.droppable.placeholderInsertionEvent.subscribe(this.subInsertionEvent)).add(this.droppable.placeholderRenderEvent.subscribe(this.subRenderEvent)); } } /** * @return {?} */ ngOnDestroy() { if (this.subscription) { this.subscription.unsubscribe(); } } /** * @param {?} target * @param {?=} index * @return {?} */ getChildrenElByIndex(target, index) { if (index === undefined || target && target.children && target.children.length < index || index < 0) { return null; } return this.sortContainer.children.item(index); } /** * @param {?} nativeStyle * @param {?} droppable * @return {?} */ renderPlaceholder(nativeStyle, droppable) { if (!this.placeholder) { this.placeholder = document.createElement(droppable.placeholderTag); this.placeholder.className = 'drag-placeholder'; this.placeholder.classList.add('drag-sync-placeholder'); this.placeholder.innerText = droppable.placeholderText; } const { width, height } = nativeStyle; if (this.direction === 'v') { this.placeholder.style.width = width + 'px'; this.placeholder.style.height = this.sortContainer.getBoundingClientRect().height + 'px'; } else { this.placeholder.style.height = height + 'px'; this.placeholder.style.width = this.sortContainer.getBoundingClientRect().width + 'px'; } Utils.addElStyles(this.placeholder, droppable.placeholderStyle); } /** * @param {?} cmd * @return {?} */ insertPlaceholderCommand(cmd) { if (cmd.command === 'insertBefore' && cmd.container) { cmd.container.insertBefore(this.placeholder, cmd.relatedEl); return; } if (cmd.command === 'append' && cmd.container) { cmd.container.appendChild(this.placeholder); return; } if (cmd.command === 'remove' && cmd.container) { if (cmd.container.contains(this.placeholder)) { cmd.container.removeChild(this.placeholder); } return; } } } DropSortSyncDirective.decorators = [ { type: Directive, args: [{ selector: '[dDropSortSync]', exportAs: 'dDropSortSync' },] } ]; /** @nocollapse */ DropSortSyncDirective.ctorParameters = () => [ { type: ElementRef }, { type: DroppableDirective, decorators: [{ type: Optional }, { type: Self }] }, { type: DragDropSyncService } ]; DropSortSyncDirective.propDecorators = { dropSyncGroup: [{ type: Input, args: ['dDropSortSync',] }], direction: [{ type: Input, args: ['dropSyncDirection',] }] }; if (false) { /** @type {?} */ DropSortSyncDirective.prototype.dropSyncGroup; /** @type {?} */ DropSortSyncDirective.prototype.direction; /** @type {?} */ DropSortSyncDirective.prototype.subscription; /** @type {?} */ DropSortSyncDirective.prototype.syncGroupDirectives; /** @type {?} */ DropSortSyncDirective.prototype.placeholder; /** @type {?} */ DropSortSyncDirective.prototype.sortContainer; /** @type {?} */ DropSortSyncDirective.prototype.subRenderEvent; /** @type {?} */ DropSortSyncDirective.prototype.subInsertionEvent; /** @type {?} */ DropSortSyncDirective.prototype.el; /** * @type {?} * @private */ DropSortSyncDirective.prototype.droppable; /** * @type {?} * @private */ DropSortSyncDirective.prototype.dragDropSyncService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1zb3J0LXN5bmMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZGV2dWkvZHJhZ2Ryb3AvIiwic291cmNlcyI6WyJkaXJlY3RpdmVzL2Ryb3Atc29ydC1zeW5jLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVF4QyxNQUFNLE9BQU8scUJBQXFCOzs7Ozs7SUFRaEMsWUFBbUIsRUFBYyxFQUErQixTQUE2QixFQUNuRixtQkFBd0M7UUFEL0IsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUErQixjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQUNuRix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBUjFCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ2YsY0FBUyxHQUFhLEdBQUcsQ0FBQyxDQUFDLHNCQUFzQjs7UUFDN0UsaUJBQVksR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQXlCaEQsbUJBQWM7Ozs7UUFBRyxDQUFDLFdBQTRDLEVBQUUsRUFBRTtZQUNoRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNOzs7O1lBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFDLENBQUM7WUFDbkksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9B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U0FDUjtJQUNILENBQUM7OztZQTNGRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsUUFBUSxFQUFFLGVBQWU7YUFDMUI7Ozs7WUFWMEIsVUFBVTtZQUU1QixrQkFBa0IsdUJBa0JZLFFBQVEsWUFBSSxJQUFJO1lBakI5QyxtQkFBbUI7Ozs0QkFVekIsS0FBSyxTQUFDLGVBQWU7d0JBQ3JCLEtBQUssU0FBQyxtQkFBbUI7Ozs7SUFEMUIsOENBQTJDOztJQUMzQywwQ0FBc0Q7O0lBQ3RELDZDQUFnRDs7SUFDaEQsb0RBQWtEOztJQUNsRCw0Q0FBeUI7O0lBQ3pCLDhDQUEyQjs7SUFzQjNCLCtDQUtDOztJQUVELGtEQVNDOztJQXBDVyxtQ0FBcUI7Ozs7O0lBQUcsMENBQXlEOzs7OztJQUMzRixvREFBZ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBFbGVtZW50UmVmLCBPcHRpb25hbCwgU2VsZiwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERyb3BwYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4vZHJvcHBhYmxlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IERyYWdEcm9wU3luY1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kcmFnLWRyb3Atc3luYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMnO1xyXG5pbXBvcnQgeyBEcmFnUGxhY2Vob2xkZXJJbnNlcnRpb25FdmVudCwgRHJhZ1BsYWNlaG9sZGVySW5zZXJ0aW9uSW5kZXhFdmVudCB9IGZyb20gJy4vcGxhY2Vob2xkZXItaW5zZXJ0aW9uLWV2ZW50LnR5cGUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZERyb3BTb3J0U3luY10nLFxyXG4gIGV4cG9ydEFzOiAnZERyb3BTb3J0U3luYydcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBEcm9wU29ydFN5bmNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCdkRHJvcFNvcnRTeW5jJykgZHJvcFN5bmNHcm91cCA9ICcnO1xyXG4gIEBJbnB1dCgnZHJvcFN5bmNEaXJlY3Rpb24nKSBkaXJlY3Rpb246ICd2J3wgJ2gnID0gJ3YnOyAvLyDkuI5zb3J0Q29udGFpbmVy5q2j5Lqk55qE5pa55ZCRXHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgc3luY0dyb3VwRGlyZWN0aXZlczogQXJyYXk8RHJvcFNvcnRTeW5jRGlyZWN0aXZlPjtcclxuICBwbGFjZWhvbGRlcjogSFRNTEVsZW1lbnQ7XHJcbiAgc29ydENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbDogRWxlbWVudFJlZiAsIEBPcHRpb25hbCgpIEBTZWxmKCkgcHJpdmF0ZSBkcm9wcGFibGU6IERyb3BwYWJsZURpcmVjdGl2ZSxcclxuICAgIHByaXZhdGUgZHJhZ0Ryb3BTeW5jU2VydmljZTogRHJhZ0Ryb3BTeW5jU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNvcnRDb250YWluZXIgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAodGhpcy5kcm9wcGFibGUpIHtcclxuICAgICAgdGhpcy5zb3J0Q29udGFpbmVyID0gdGhpcy5kcm9wcGFibGUuZ2V0U29ydENvbnRhaW5lcigpO1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgICAgdGhpcy5kcm9wcGFibGUucGxhY2Vob2xkZXJJbnNlcnRpb25FdmVudC5zdWJzY3JpYmUodGhpcy5zdWJJbnNlcnRpb25FdmVudClcclxuICAgICAgKS5hZGQoXHJcbiAgICAgICAgdGhpcy5kcm9wcGFibGUucGxhY2Vob2xkZXJSZW5kZXJFdmVudC5zdWJzY3JpYmUodGhpcy5zdWJSZW5kZXJFdmVudClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN1YlJlbmRlckV2ZW50ID0gKG5hdGl2ZVN0eWxlOiB7d2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXJ9KSA9PiB7XHJcbiAgICB0aGlzLnN5bmNHcm91cERpcmVjdGl2ZXMgPSB0aGlzLmRyYWdEcm9wU3luY1NlcnZpY2UuZ2V0RHJvcFN5bmNCeUdyb3VwKHRoaXMuZHJvcFN5bmNHcm91cCkuZmlsdGVyKGRpcmVjdGl2ZSA9PiBkaXJlY3RpdmUgIT09IHRoaXMpO1xyXG4gICAgdGhpcy5zeW5jR3JvdXBEaXJlY3RpdmVzLmZvckVhY2goZGlyID0+IHtcclxuICAgICAgZGlyLnJlbmRlclBsYWNlaG9sZGVyKG5hdGl2ZVN0eWxlLCB0aGlzLmRyb3BwYWJsZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN1Ykluc2VydGlvbkV2ZW50ID0gKGNtZDogRHJhZ1BsYWNlaG9sZGVySW5zZXJ0aW9uSW5kZXhFdmVudCkgPT4ge1xyXG4gICAgdGhpcy5zeW5jR3JvdXBEaXJlY3RpdmVzID0gdGhpcy5kcmFnRHJvcFN5bmNTZXJ2aWNlLmdldERyb3BTeW5jQnlHcm91cCh0aGlzLmRyb3BTeW5jR3JvdXApLmZpbHRlcihkaXJlY3RpdmUgPT4gZGlyZWN0aXZlICE9PSB0aGlzKTtcclxuICAgIHRoaXMuc3luY0dyb3VwRGlyZWN0aXZlcy5mb3JFYWNoKGRpciA9PiB7XHJcbiAgICAgIGRpci5pbnNlcnRQbGFjZWhvbGRlckNvbW1hbmQoe1xyXG4gICAgICAgIGNvbW1hbmQ6IGNtZC5jb21tYW5kLFxyXG4gICAgICAgIGNvbnRhaW5lcjogZGlyLnNvcnRDb250YWluZXIsXHJcbiAgICAgICAgcmVsYXRlZEVsOiBkaXIuZ2V0Q2hpbGRyZW5FbEJ5SW5kZXgoZGlyLnNvcnRDb250YWluZXIsIGNtZC5pbmRleClcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0Q2hpbGRyZW5FbEJ5SW5kZXgodGFyZ2V0LCBpbmRleD8pIHtcclxuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkIHx8IHRhcmdldCAmJiB0YXJnZXQuY2hpbGRyZW4gJiYgdGFyZ2V0LmNoaWxkcmVuLmxlbmd0aCA8IGluZGV4IHx8IGluZGV4IDwgMCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnNvcnRDb250YWluZXIuY2hpbGRyZW4uaXRlbShpbmRleCk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJQbGFjZWhvbGRlcihuYXRpdmVTdHlsZToge3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyfSwgZHJvcHBhYmxlKSB7XHJcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZHJvcHBhYmxlLnBsYWNlaG9sZGVyVGFnKTtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlci5jbGFzc05hbWUgPSAnZHJhZy1wbGFjZWhvbGRlcic7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIuY2xhc3NMaXN0LmFkZCgnZHJhZy1zeW5jLXBsYWNlaG9sZGVyJyk7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIuaW5uZXJUZXh0ID0gZHJvcHBhYmxlLnBsYWNlaG9sZGVyVGV4dDtcclxuICAgIH1cclxuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IG5hdGl2ZVN0eWxlO1xyXG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAndicpIHtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlci5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNvcnRDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICsgJ3B4JztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlci5zdHlsZS53aWR0aCA9IHRoaXMuc29ydENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArICdweCc7XHJcbiAgICB9XHJcbiAgICBVdGlscy5hZGRFbFN0eWxlcyh0aGlzLnBsYWNlaG9sZGVyLCBkcm9wcGFibGUucGxhY2Vob2xkZXJTdHlsZSk7XHJcblxyXG4gIH1cclxuXHJcbiAgaW5zZXJ0UGxhY2Vob2xkZXJDb21tYW5kKGNtZDogRHJhZ1BsYWNlaG9sZGVySW5zZXJ0aW9uRXZlbnQpIHtcclxuICAgIGlmIChjbWQuY29tbWFuZCA9PT0gJ2luc2VydEJlZm9yZScgJiYgY21kLmNvbnRhaW5lcikge1xyXG4gICAgICBjbWQuY29udGFpbmVyLmluc2VydEJlZm9yZSh0aGlzLnBsYWNlaG9sZGVyLCBjbWQucmVsYXRlZEVsKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGNtZC5jb21tYW5kID09PSAnYXBwZW5kJyAmJiBjbWQuY29udGFpbmVyKSB7XHJcbiAgICAgIGNtZC5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5wbGFjZWhvbGRlcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChjbWQuY29tbWFuZCA9PT0gJ3JlbW92ZScgJiYgY21kLmNvbnRhaW5lcikge1xyXG4gICAgICBpZiAoY21kLmNvbnRhaW5lci5jb250YWlucyh0aGlzLnBsYWNlaG9sZGVyKSkge1xyXG4gICAgICAgIGNtZC5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlcik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19