UNPKG

ngx-bootstrap-fix-datepicker

Version:
508 lines (500 loc) 13.7 kB
import { Injectable, EventEmitter, Component, forwardRef, Input, Output, NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { Subject } from 'rxjs'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class DraggableItemService { constructor() { this.onCapture = new Subject(); } /** * @param {?} item * @return {?} */ dragStart(item) { this.draggableItem = item; } /** * @return {?} */ getItem() { return this.draggableItem; } /** * @param {?} overZoneIndex * @param {?} newIndex * @return {?} */ captureItem(overZoneIndex, newIndex) { if (this.draggableItem.overZoneIndex !== overZoneIndex) { this.draggableItem.lastZoneIndex = this.draggableItem.overZoneIndex; this.draggableItem.overZoneIndex = overZoneIndex; this.onCapture.next(this.draggableItem); this.draggableItem = Object.assign({}, this.draggableItem, { overZoneIndex, i: newIndex }); } return this.draggableItem; } /** * @return {?} */ onCaptureItem() { return this.onCapture; } } DraggableItemService.decorators = [ { type: Injectable } ]; if (false) { /** * @type {?} * @private */ DraggableItemService.prototype.draggableItem; /** * @type {?} * @private */ DraggableItemService.prototype.onCapture; } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /* tslint:disable */ /* tslint:enable */ class SortableComponent { /** * @param {?} transfer */ constructor(transfer) { /** * class name for items wrapper */ this.wrapperClass = ''; /** * style object for items wrapper */ this.wrapperStyle = {}; /** * class name for item */ this.itemClass = ''; /** * style object for item */ this.itemStyle = {}; /** * class name for active item */ this.itemActiveClass = ''; /** * style object for active item */ this.itemActiveStyle = {}; /** * class name for placeholder */ this.placeholderClass = ''; /** * style object for placeholder */ this.placeholderStyle = {}; /** * placeholder item which will be shown if collection is empty */ this.placeholderItem = ''; /** * fired on array change (reordering, insert, remove), same as <code>ngModelChange</code>. * Returns new items collection as a payload. */ /* tslint:disable-next-line: no-any */ this.onChange = new EventEmitter(); this.showPlaceholder = false; this.activeItem = -1; /* tslint:disable-next-line: no-any */ this.onTouched = Function.prototype; /* tslint:disable-next-line: no-any */ this.onChanged = Function.prototype; this.transfer = transfer; this.currentZoneIndex = SortableComponent.globalZoneIndex++; this.transfer .onCaptureItem() .subscribe((/** * @param {?} item * @return {?} */ (item) => this.onDrop(item))); } /** * @return {?} */ get items() { return this._items; } /** * @param {?} value * @return {?} */ set items(value) { this._items = value; /** @type {?} */ const out = this.items.map((/** * @param {?} x * @return {?} */ (x) => x.initData)); this.onChanged(out); this.onChange.emit(out); } /** * @param {?} event * @param {?} item * @param {?} i * @return {?} */ onItemDragstart(event, item, i) { this.initDragstartEvent(event); this.onTouched(); this.transfer.dragStart({ event, item, i, initialIndex: i, lastZoneIndex: this.currentZoneIndex, overZoneIndex: this.currentZoneIndex }); } /** * @param {?} event * @param {?} i * @return {?} */ onItemDragover(event, i) { if (!this.transfer.getItem()) { return; } event.preventDefault(); /** @type {?} */ const dragItem = this.transfer.captureItem(this.currentZoneIndex, this.items.length); /* tslint:disable-next-line: no-any */ /** @type {?} */ let newArray = []; if (!this.items.length) { newArray = [dragItem.item]; } else if (dragItem.i > i) { newArray = [ ...this.items.slice(0, i), dragItem.item, ...this.items.slice(i, dragItem.i), ...this.items.slice(dragItem.i + 1) ]; } else { // this.draggedItem.i < i newArray = [ ...this.items.slice(0, dragItem.i), ...this.items.slice(dragItem.i + 1, i + 1), dragItem.item, ...this.items.slice(i + 1) ]; } this.items = newArray; dragItem.i = i; this.activeItem = i; this.updatePlaceholderState(); } /** * @param {?} event * @return {?} */ cancelEvent(event) { if (!this.transfer.getItem() || !event) { return; } event.preventDefault(); } /** * @param {?} item * @return {?} */ onDrop(item) { if (item && item.overZoneIndex !== this.currentZoneIndex && item.lastZoneIndex === this.currentZoneIndex) { this.items = this.items.filter((/** * @param {?} x * @param {?} i * @return {?} */ (x, i) => i !== item.i)); this.updatePlaceholderState(); } this.resetActiveItem(undefined); } /** * @param {?} event * @return {?} */ resetActiveItem(event) { this.cancelEvent(event); this.activeItem = -1; } /** * @param {?} callback * @return {?} */ registerOnChange(callback) { this.onChanged = callback; } /** * @param {?} callback * @return {?} */ registerOnTouched(callback) { this.onTouched = callback; } /* tslint:disable-next-line: no-any */ /** * @param {?} value * @return {?} */ writeValue(value) { if (value) { /* tslint:disable-next-line: no-any */ this.items = value.map((/** * @param {?} x * @param {?} i * @return {?} */ (x, i) => ({ id: i, initData: x, value: this.fieldName ? x[this.fieldName] : x }))); } else { this.items = []; } this.updatePlaceholderState(); } /** * @return {?} */ updatePlaceholderState() { this.showPlaceholder = !this._items.length; } /** * @param {?} isActive * @return {?} */ getItemStyle(isActive) { return isActive ? Object.assign({}, this.itemStyle, this.itemActiveStyle) : this.itemStyle; } // tslint:disable-next-line /** * @private * @param {?} event * @return {?} */ initDragstartEvent(event) { // it is necessary for mozilla // data type should be 'Text' instead of 'text/plain' to keep compatibility // with IE event.dataTransfer.setData('Text', 'placeholder'); } } SortableComponent.globalZoneIndex = 0; SortableComponent.decorators = [ { type: Component, args: [{ selector: 'bs-sortable', exportAs: 'bs-sortable', template: ` <div [ngClass]="wrapperClass" [ngStyle]="wrapperStyle" (dragover)="cancelEvent($event)" (dragenter)="cancelEvent($event)" (drop)="resetActiveItem($event)" (mouseleave)="resetActiveItem($event)"> <div *ngIf="showPlaceholder" [ngClass]="placeholderClass" [ngStyle]="placeholderStyle" (dragover)="onItemDragover($event, 0)" (dragenter)="cancelEvent($event)" >{{placeholderItem}}</div> <div *ngFor="let item of items; let i=index;" [ngClass]="[ itemClass, i === activeItem ? itemActiveClass : '' ]" [ngStyle]="getItemStyle(i === activeItem)" draggable="true" (dragstart)="onItemDragstart($event, item, i)" (dragend)="resetActiveItem($event)" (dragover)="onItemDragover($event, i)" (dragenter)="cancelEvent($event)" aria-dropeffect="move" [attr.aria-grabbed]="i === activeItem" ><ng-template [ngTemplateOutlet]="itemTemplate || defItemTemplate" [ngTemplateOutletContext]="{item:item, index: i}"></ng-template></div> </div> <ng-template #defItemTemplate let-item="item">{{item.value}}</ng-template> `, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ () => SortableComponent)), multi: true } ] }] } ]; /** @nocollapse */ SortableComponent.ctorParameters = () => [ { type: DraggableItemService } ]; SortableComponent.propDecorators = { fieldName: [{ type: Input }], wrapperClass: [{ type: Input }], wrapperStyle: [{ type: Input }], itemClass: [{ type: Input }], itemStyle: [{ type: Input }], itemActiveClass: [{ type: Input }], itemActiveStyle: [{ type: Input }], placeholderClass: [{ type: Input }], placeholderStyle: [{ type: Input }], placeholderItem: [{ type: Input }], itemTemplate: [{ type: Input }], onChange: [{ type: Output }] }; if (false) { /** * @type {?} * @private */ SortableComponent.globalZoneIndex; /** * field name if input array consists of objects * @type {?} */ SortableComponent.prototype.fieldName; /** * class name for items wrapper * @type {?} */ SortableComponent.prototype.wrapperClass; /** * style object for items wrapper * @type {?} */ SortableComponent.prototype.wrapperStyle; /** * class name for item * @type {?} */ SortableComponent.prototype.itemClass; /** * style object for item * @type {?} */ SortableComponent.prototype.itemStyle; /** * class name for active item * @type {?} */ SortableComponent.prototype.itemActiveClass; /** * style object for active item * @type {?} */ SortableComponent.prototype.itemActiveStyle; /** * class name for placeholder * @type {?} */ SortableComponent.prototype.placeholderClass; /** * style object for placeholder * @type {?} */ SortableComponent.prototype.placeholderStyle; /** * placeholder item which will be shown if collection is empty * @type {?} */ SortableComponent.prototype.placeholderItem; /** * used to specify a custom item template. Template variables: item and index; * @type {?} */ SortableComponent.prototype.itemTemplate; /** * fired on array change (reordering, insert, remove), same as <code>ngModelChange</code>. * Returns new items collection as a payload. * @type {?} */ SortableComponent.prototype.onChange; /** @type {?} */ SortableComponent.prototype.showPlaceholder; /** @type {?} */ SortableComponent.prototype.activeItem; /** @type {?} */ SortableComponent.prototype.onTouched; /** @type {?} */ SortableComponent.prototype.onChanged; /** * @type {?} * @private */ SortableComponent.prototype.transfer; /** * @type {?} * @private */ SortableComponent.prototype.currentZoneIndex; /** * @type {?} * @private */ SortableComponent.prototype._items; } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class SortableModule { /** * @return {?} */ static forRoot() { return { ngModule: SortableModule, providers: [DraggableItemService] }; } } SortableModule.decorators = [ { type: NgModule, args: [{ declarations: [SortableComponent], imports: [CommonModule], exports: [SortableComponent] },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ export { DraggableItemService, SortableComponent, SortableModule }; //# sourceMappingURL=ngx-bootstrap-sortable.js.map