@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
185 lines • 17.4 kB
JavaScript
/**
* @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