@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
203 lines • 18.3 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';
var DropSortSyncDirective = /** @class */ (function () {
function DropSortSyncDirective(el, droppable, dragDropSyncService) {
var _this = this;
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 {?}
*/
function (nativeStyle) {
_this.syncGroupDirectives = _this.dragDropSyncService.getDropSyncByGroup(_this.dropSyncGroup).filter((/**
* @param {?} directive
* @return {?}
*/
function (directive) { return directive !== _this; }));
_this.syncGroupDirectives.forEach((/**
* @param {?} dir
* @return {?}
*/
function (dir) {
dir.renderPlaceholder(nativeStyle, _this.droppable);
}));
});
this.subInsertionEvent = (/**
* @param {?} cmd
* @return {?}
*/
function (cmd) {
_this.syncGroupDirectives = _this.dragDropSyncService.getDropSyncByGroup(_this.dropSyncGroup).filter((/**
* @param {?} directive
* @return {?}
*/
function (directive) { return directive !== _this; }));
_this.syncGroupDirectives.forEach((/**
* @param {?} dir
* @return {?}
*/
function (dir) {
dir.insertPlaceholderCommand({
command: cmd.command,
container: dir.sortContainer,
relatedEl: dir.getChildrenElByIndex(dir.sortContainer, cmd.index)
});
}));
});
}
/**
* @return {?}
*/
DropSortSyncDirective.prototype.ngOnInit = /**
* @return {?}
*/
function () {
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 {?}
*/
DropSortSyncDirective.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this.subscription) {
this.subscription.unsubscribe();
}
};
/**
* @param {?} target
* @param {?=} index
* @return {?}
*/
DropSortSyncDirective.prototype.getChildrenElByIndex = /**
* @param {?} target
* @param {?=} index
* @return {?}
*/
function (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 {?}
*/
DropSortSyncDirective.prototype.renderPlaceholder = /**
* @param {?} nativeStyle
* @param {?} droppable
* @return {?}
*/
function (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;
}
var width = nativeStyle.width, height = nativeStyle.height;
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 {?}
*/
DropSortSyncDirective.prototype.insertPlaceholderCommand = /**
* @param {?} cmd
* @return {?}
*/
function (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 = function () { return [
{ type: ElementRef },
{ type: DroppableDirective, decorators: [{ type: Optional }, { type: Self }] },
{ type: DragDropSyncService }
]; };
DropSortSyncDirective.propDecorators = {
dropSyncGroup: [{ type: Input, args: ['dDropSortSync',] }],
direction: [{ type: Input, args: ['dropSyncDirection',] }]
};
return DropSortSyncDirective;
}());
export { DropSortSyncDirective };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1zb3J0LXN5bmMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZGV2dWkvZHJhZ2Ryb3AvIiwic291cmNlcyI6WyJkaXJlY3RpdmVzL2Ryb3Atc29ydC1zeW5jLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUd4QztJQWFFLCtCQUFtQixFQUFjLEVBQStCLFNBQTZCLEVBQ25GLG1CQUF3QztRQURsRCxpQkFDc0Q7UUFEbkMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUErQixjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQUNuRix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBUjFCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ2YsY0FBUyxHQUFhLEdBQUcsQ0FBQyxDQUFDLHNCQUFzQjs7UUFDN0UsaUJBQVksR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQXlCaEQsbUJBQWM7Ozs7UUFBRyxVQUFDLFdBQTRDO1lBQzVELEtBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsS0FBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU07Ozs7WUFBQyxVQUFBLFNBQVMsSUFBSSxPQUFBLFNBQVMsS0FBSyxLQUFJLEVBQWxCLENBQWtCLEVBQUMsQ0FBQztZQUNuSSxLQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTzs7OztZ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QUFDO2FBQzdDO1lBQ0QsT0FBTztTQUNSO0lBQ0gsQ0FBQzs7Z0JBM0ZGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUUsZUFBZTtpQkFDMUI7Ozs7Z0JBVjBCLFVBQVU7Z0JBRTVCLGtCQUFrQix1QkFrQlksUUFBUSxZQUFJLElBQUk7Z0JBakI5QyxtQkFBbUI7OztnQ0FVekIsS0FBSyxTQUFDLGVBQWU7NEJBQ3JCLEtBQUssU0FBQyxtQkFBbUI7O0lBc0Y1Qiw0QkFBQztDQUFBLEFBN0ZELElBNkZDO1NBeEZZLHFCQUFxQjs7O0lBQ2hDLDhDQUEyQzs7SUFDM0MsMENBQXNEOztJQUN0RCw2Q0FBZ0Q7O0lBQ2hELG9EQUFrRDs7SUFDbEQsNENBQXlCOztJQUN6Qiw4Q0FBMkI7O0lBc0IzQiwrQ0FLQzs7SUFFRCxrREFTQzs7SUFwQ1csbUNBQXFCOzs7OztJQUFHLDBDQUF5RDs7Ozs7SUFDM0Ysb0RBQWdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgRWxlbWVudFJlZiwgT3B0aW9uYWwsIFNlbGYsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEcm9wcGFibGVEaXJlY3RpdmUgfSBmcm9tICcuL2Ryb3BwYWJsZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBEcmFnRHJvcFN5bmNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZHJhZy1kcm9wLXN5bmMuc2VydmljZSc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzJztcclxuaW1wb3J0IHsgRHJhZ1BsYWNlaG9sZGVySW5zZXJ0aW9uRXZlbnQsIERyYWdQbGFjZWhvbGRlckluc2VydGlvbkluZGV4RXZlbnQgfSBmcm9tICcuL3BsYWNlaG9sZGVyLWluc2VydGlvbi1ldmVudC50eXBlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2REcm9wU29ydFN5bmNdJyxcclxuICBleHBvcnRBczogJ2REcm9wU29ydFN5bmMnXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRHJvcFNvcnRTeW5jRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgnZERyb3BTb3J0U3luYycpIGRyb3BTeW5jR3JvdXAgPSAnJztcclxuICBASW5wdXQoJ2Ryb3BTeW5jRGlyZWN0aW9uJykgZGlyZWN0aW9uOiAndid8ICdoJyA9ICd2JzsgLy8g5LiOc29ydENvbnRhaW5lcuato+S6pOeahOaWueWQkVxyXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIHN5bmNHcm91cERpcmVjdGl2ZXM6IEFycmF5PERyb3BTb3J0U3luY0RpcmVjdGl2ZT47XHJcbiAgcGxhY2Vob2xkZXI6IEhUTUxFbGVtZW50O1xyXG4gIHNvcnRDb250YWluZXI6IEhUTUxFbGVtZW50O1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWw6IEVsZW1lbnRSZWYgLCBAT3B0aW9uYWwoKSBAU2VsZigpIHByaXZhdGUgZHJvcHBhYmxlOiBEcm9wcGFibGVEaXJlY3RpdmUsXHJcbiAgICBwcml2YXRlIGRyYWdEcm9wU3luY1NlcnZpY2U6IERyYWdEcm9wU3luY1NlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zb3J0Q29udGFpbmVyID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKHRoaXMuZHJvcHBhYmxlKSB7XHJcbiAgICAgIHRoaXMuc29ydENvbnRhaW5lciA9IHRoaXMuZHJvcHBhYmxlLmdldFNvcnRDb250YWluZXIoKTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICAgIHRoaXMuZHJvcHBhYmxlLnBsYWNlaG9sZGVySW5zZXJ0aW9uRXZlbnQuc3Vic2NyaWJlKHRoaXMuc3ViSW5zZXJ0aW9uRXZlbnQpXHJcbiAgICAgICkuYWRkKFxyXG4gICAgICAgIHRoaXMuZHJvcHBhYmxlLnBsYWNlaG9sZGVyUmVuZGVyRXZlbnQuc3Vic2NyaWJlKHRoaXMuc3ViUmVuZGVyRXZlbnQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzdWJSZW5kZXJFdmVudCA9IChuYXRpdmVTdHlsZToge3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyfSkgPT4ge1xyXG4gICAgdGhpcy5zeW5jR3JvdXBEaXJlY3RpdmVzID0gdGhpcy5kcmFnRHJvcFN5bmNTZXJ2aWNlLmdldERyb3BTeW5jQnlHcm91cCh0aGlzLmRyb3BTeW5jR3JvdXApLmZpbHRlcihkaXJlY3RpdmUgPT4gZGlyZWN0aXZlICE9PSB0aGlzKTtcclxuICAgIHRoaXMuc3luY0dyb3VwRGlyZWN0aXZlcy5mb3JFYWNoKGRpciA9PiB7XHJcbiAgICAgIGRpci5yZW5kZXJQbGFjZWhvbGRlcihuYXRpdmVTdHlsZSwgdGhpcy5kcm9wcGFibGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdWJJbnNlcnRpb25FdmVudCA9IChjbWQ6IERyYWdQbGFjZWhvbGRlckluc2VydGlvbkluZGV4RXZlbnQpID0+IHtcclxuICAgIHRoaXMuc3luY0dyb3VwRGlyZWN0aXZlcyA9IHRoaXMuZHJhZ0Ryb3BTeW5jU2VydmljZS5nZXREcm9wU3luY0J5R3JvdXAodGhpcy5kcm9wU3luY0dyb3VwKS5maWx0ZXIoZGlyZWN0aXZlID0+IGRpcmVjdGl2ZSAhPT0gdGhpcyk7XHJcbiAgICB0aGlzLnN5bmNHcm91cERpcmVjdGl2ZXMuZm9yRWFjaChkaXIgPT4ge1xyXG4gICAgICBkaXIuaW5zZXJ0UGxhY2Vob2xkZXJDb21tYW5kKHtcclxuICAgICAgICBjb21tYW5kOiBjbWQuY29tbWFuZCxcclxuICAgICAgICBjb250YWluZXI6IGRpci5zb3J0Q29udGFpbmVyLFxyXG4gICAgICAgIHJlbGF0ZWRFbDogZGlyLmdldENoaWxkcmVuRWxCeUluZGV4KGRpci5zb3J0Q29udGFpbmVyLCBjbWQuaW5kZXgpXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldENoaWxkcmVuRWxCeUluZGV4KHRhcmdldCwgaW5kZXg/KSB7XHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCB8fCB0YXJnZXQgJiYgdGFyZ2V0LmNoaWxkcmVuICYmIHRhcmdldC5jaGlsZHJlbi5sZW5ndGggPCBpbmRleCB8fCBpbmRleCA8IDApIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zb3J0Q29udGFpbmVyLmNoaWxkcmVuLml0ZW0oaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyUGxhY2Vob2xkZXIobmF0aXZlU3R5bGU6IHt3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcn0sIGRyb3BwYWJsZSkge1xyXG4gICAgaWYgKCF0aGlzLnBsYWNlaG9sZGVyKSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGRyb3BwYWJsZS5wbGFjZWhvbGRlclRhZyk7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIuY2xhc3NOYW1lID0gJ2RyYWctcGxhY2Vob2xkZXInO1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyLmNsYXNzTGlzdC5hZGQoJ2RyYWctc3luYy1wbGFjZWhvbGRlcicpO1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyLmlubmVyVGV4dCA9IGRyb3BwYWJsZS5wbGFjZWhvbGRlclRleHQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBuYXRpdmVTdHlsZTtcclxuICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ3YnKSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zb3J0Q29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCArICdweCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIuc3R5bGUud2lkdGggPSB0aGlzLnNvcnRDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKyAncHgnO1xyXG4gICAgfVxyXG4gICAgVXRpbHMuYWRkRWxTdHlsZXModGhpcy5wbGFjZWhvbGRlciwgZHJvcHBhYmxlLnBsYWNlaG9sZGVyU3R5bGUpO1xyXG5cclxuICB9XHJcblxyXG4gIGluc2VydFBsYWNlaG9sZGVyQ29tbWFuZChjbWQ6IERyYWdQbGFjZWhvbGRlckluc2VydGlvbkV2ZW50KSB7XHJcbiAgICBpZiAoY21kLmNvbW1hbmQgPT09ICdpbnNlcnRCZWZvcmUnICYmIGNtZC5jb250YWluZXIpIHtcclxuICAgICAgY21kLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGhpcy5wbGFjZWhvbGRlciwgY21kLnJlbGF0ZWRFbCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChjbWQuY29tbWFuZCA9PT0gJ2FwcGVuZCcgJiYgY21kLmNvbnRhaW5lcikge1xyXG4gICAgICBjbWQuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMucGxhY2Vob2xkZXIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoY21kLmNvbW1hbmQgPT09ICdyZW1vdmUnICYmIGNtZC5jb250YWluZXIpIHtcclxuICAgICAgaWYgKGNtZC5jb250YWluZXIuY29udGFpbnModGhpcy5wbGFjZWhvbGRlcikpIHtcclxuICAgICAgICBjbWQuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==