UNPKG

primeng

Version:

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![npm version](https://badge.fury.io/js/primeng.svg)](https://badge.fury.io/js/primeng) [![Build Status](https://travis-ci.org/primefaces/primeng.

397 lines (393 loc) 15.9 kB
import { EventEmitter, ElementRef, Input, Output, ViewChild, ContentChildren, Component, ChangeDetectionStrategy, NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { ButtonModule } from 'primeng/button'; import { PrimeTemplate, SharedModule } from 'primeng/api'; import { DomHandler } from 'primeng/dom'; import { ObjectUtils, FilterUtils } from 'primeng/utils'; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; let OrderList = class OrderList { constructor(el) { this.el = el; this.metaKeySelection = true; this.controlsPosition = 'left'; this.filterMatchMode = "contains"; this.selectionChange = new EventEmitter(); this.trackBy = (index, item) => item; this.onReorder = new EventEmitter(); this.onSelectionChange = new EventEmitter(); this.onFilterEvent = new EventEmitter(); } get selection() { return this._selection; } set selection(val) { this._selection = val; } ngAfterContentInit() { this.templates.forEach((item) => { switch (item.getType()) { case 'item': this.itemTemplate = item.template; break; default: this.itemTemplate = item.template; break; } }); } ngAfterViewChecked() { if (this.movedUp || this.movedDown) { let listItems = DomHandler.find(this.listViewChild.nativeElement, 'li.ui-state-highlight'); let listItem; if (listItems.length > 0) { if (this.movedUp) listItem = listItems[0]; else listItem = listItems[listItems.length - 1]; DomHandler.scrollInView(this.listViewChild.nativeElement, listItem); } this.movedUp = false; this.movedDown = false; } } get value() { return this._value; } set value(val) { this._value = val; if (this.filterValue) { this.filter(); } } onItemClick(event, item, index) { this.itemTouched = false; let selectedIndex = ObjectUtils.findIndexInList(item, this.selection); let selected = (selectedIndex != -1); let metaSelection = this.itemTouched ? false : this.metaKeySelection; if (metaSelection) { let metaKey = (event.metaKey || event.ctrlKey || event.shiftKey); if (selected && metaKey) { this._selection = this._selection.filter((val, index) => index !== selectedIndex); } else { this._selection = (metaKey) ? this._selection ? [...this._selection] : [] : []; ObjectUtils.insertIntoOrderedArray(item, index, this._selection, this.value); } } else { if (selected) { this._selection = this._selection.filter((val, index) => index !== selectedIndex); } else { this._selection = this._selection ? [...this._selection] : []; ObjectUtils.insertIntoOrderedArray(item, index, this._selection, this.value); } } //binding this.selectionChange.emit(this._selection); //event this.onSelectionChange.emit({ originalEvent: event, value: this._selection }); } onFilterKeyup(event) { this.filterValue = event.target.value.trim().toLowerCase(); this.filter(); this.onFilterEvent.emit({ originalEvent: event, value: this.visibleOptions }); } filter() { let searchFields = this.filterBy.split(','); this.visibleOptions = FilterUtils.filter(this.value, searchFields, this.filterValue, this.filterMatchMode); } isItemVisible(item) { if (this.filterValue && this.filterValue.trim().length) { for (let i = 0; i < this.visibleOptions.length; i++) { if (item == this.visibleOptions[i]) { return true; } } } else { return true; } } onItemTouchEnd(event) { this.itemTouched = true; } isSelected(item) { return ObjectUtils.findIndexInList(item, this.selection) != -1; } moveUp(event) { if (this.selection) { for (let i = 0; i < this.selection.length; i++) { let selectedItem = this.selection[i]; let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, this.value); if (selectedItemIndex != 0) { let movedItem = this.value[selectedItemIndex]; let temp = this.value[selectedItemIndex - 1]; this.value[selectedItemIndex - 1] = movedItem; this.value[selectedItemIndex] = temp; } else { break; } } this.movedUp = true; this.onReorder.emit(event); } } moveTop(event) { if (this.selection) { for (let i = this.selection.length - 1; i >= 0; i--) { let selectedItem = this.selection[i]; let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, this.value); if (selectedItemIndex != 0) { let movedItem = this.value.splice(selectedItemIndex, 1)[0]; this.value.unshift(movedItem); } else { break; } } this.onReorder.emit(event); this.listViewChild.nativeElement.scrollTop = 0; } } moveDown(event) { if (this.selection) { for (let i = this.selection.length - 1; i >= 0; i--) { let selectedItem = this.selection[i]; let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, this.value); if (selectedItemIndex != (this.value.length - 1)) { let movedItem = this.value[selectedItemIndex]; let temp = this.value[selectedItemIndex + 1]; this.value[selectedItemIndex + 1] = movedItem; this.value[selectedItemIndex] = temp; } else { break; } } this.movedDown = true; this.onReorder.emit(event); } } moveBottom(event) { if (this.selection) { for (let i = 0; i < this.selection.length; i++) { let selectedItem = this.selection[i]; let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, this.value); if (selectedItemIndex != (this.value.length - 1)) { let movedItem = this.value.splice(selectedItemIndex, 1)[0]; this.value.push(movedItem); } else { break; } } this.onReorder.emit(event); this.listViewChild.nativeElement.scrollTop = this.listViewChild.nativeElement.scrollHeight; } } onDragStart(event, index) { event.dataTransfer.setData('text', 'b'); // For firefox event.target.blur(); this.dragging = true; this.draggedItemIndex = index; } onDragOver(event, index) { if (this.dragging && this.draggedItemIndex !== index && this.draggedItemIndex + 1 !== index) { this.dragOverItemIndex = index; event.preventDefault(); } } onDragLeave(event) { this.dragOverItemIndex = null; } onDrop(event, index) { let dropIndex = (this.draggedItemIndex > index) ? index : (index === 0) ? 0 : index - 1; ObjectUtils.reorderArray(this.value, this.draggedItemIndex, dropIndex); this.dragOverItemIndex = null; this.onReorder.emit(event); event.preventDefault(); } onDragEnd(event) { this.dragging = false; } onListMouseMove(event) { if (this.dragging) { let offsetY = this.listViewChild.nativeElement.getBoundingClientRect().top + document.body.scrollTop; let bottomDiff = (offsetY + this.listViewChild.nativeElement.clientHeight) - event.pageY; let topDiff = (event.pageY - offsetY); if (bottomDiff < 25 && bottomDiff > 0) this.listViewChild.nativeElement.scrollTop += 15; else if (topDiff < 25 && topDiff > 0) this.listViewChild.nativeElement.scrollTop -= 15; } } onItemKeydown(event, item, index) { let listItem = event.currentTarget; switch (event.which) { //down case 40: var nextItem = this.findNextItem(listItem); if (nextItem) { nextItem.focus(); } event.preventDefault(); break; //up case 38: var prevItem = this.findPrevItem(listItem); if (prevItem) { prevItem.focus(); } event.preventDefault(); break; //enter case 13: this.onItemClick(event, item, index); event.preventDefault(); break; } } findNextItem(item) { let nextItem = item.nextElementSibling; if (nextItem) return !DomHandler.hasClass(nextItem, 'ui-orderlist-item') || DomHandler.isHidden(nextItem) ? this.findNextItem(nextItem) : nextItem; else return null; } findPrevItem(item) { let prevItem = item.previousElementSibling; if (prevItem) return !DomHandler.hasClass(prevItem, 'ui-orderlist-item') || DomHandler.isHidden(prevItem) ? this.findPrevItem(prevItem) : prevItem; else return null; } }; OrderList.ctorParameters = () => [ { type: ElementRef } ]; __decorate([ Input() ], OrderList.prototype, "header", void 0); __decorate([ Input() ], OrderList.prototype, "style", void 0); __decorate([ Input() ], OrderList.prototype, "styleClass", void 0); __decorate([ Input() ], OrderList.prototype, "listStyle", void 0); __decorate([ Input() ], OrderList.prototype, "responsive", void 0); __decorate([ Input() ], OrderList.prototype, "filterBy", void 0); __decorate([ Input() ], OrderList.prototype, "filterPlaceholder", void 0); __decorate([ Input() ], OrderList.prototype, "metaKeySelection", void 0); __decorate([ Input() ], OrderList.prototype, "dragdrop", void 0); __decorate([ Input() ], OrderList.prototype, "controlsPosition", void 0); __decorate([ Input() ], OrderList.prototype, "ariaFilterLabel", void 0); __decorate([ Input() ], OrderList.prototype, "filterMatchMode", void 0); __decorate([ Output() ], OrderList.prototype, "selectionChange", void 0); __decorate([ Input() ], OrderList.prototype, "trackBy", void 0); __decorate([ Output() ], OrderList.prototype, "onReorder", void 0); __decorate([ Output() ], OrderList.prototype, "onSelectionChange", void 0); __decorate([ Output() ], OrderList.prototype, "onFilterEvent", void 0); __decorate([ ViewChild('listelement') ], OrderList.prototype, "listViewChild", void 0); __decorate([ ContentChildren(PrimeTemplate) ], OrderList.prototype, "templates", void 0); __decorate([ Input() ], OrderList.prototype, "selection", null); __decorate([ Input() ], OrderList.prototype, "value", null); OrderList = __decorate([ Component({ selector: 'p-orderList', template: ` <div [ngClass]="{'ui-orderlist ui-widget': true, 'ui-orderlist-controls-left': controlsPosition === 'left', 'ui-orderlist-controls-right': controlsPosition === 'right'}" [ngStyle]="style" [class]="styleClass"> <div class="ui-orderlist-controls"> <button type="button" pButton icon="pi pi-angle-up" (click)="moveUp($event)"></button> <button type="button" pButton icon="pi pi-angle-double-up" (click)="moveTop($event)"></button> <button type="button" pButton icon="pi pi-angle-down" (click)="moveDown($event)"></button> <button type="button" pButton icon="pi pi-angle-double-down" (click)="moveBottom($event)"></button> </div> <div class="ui-orderlist-list-container"> <div class="ui-orderlist-caption ui-widget-header ui-corner-top" *ngIf="header">{{header}}</div> <div class="ui-orderlist-filter-container ui-widget-content" *ngIf="filterBy"> <input type="text" role="textbox" (keyup)="onFilterKeyup($event)" class="ui-inputtext ui-widget ui-state-default ui-corner-all" [attr.placeholder]="filterPlaceholder" [attr.aria-label]="ariaFilterLabel"> <span class="ui-orderlist-filter-icon pi pi-search"></span> </div> <ul #listelement class="ui-widget-content ui-orderlist-list ui-corner-bottom" [ngStyle]="listStyle" (dragover)="onListMouseMove($event)"> <ng-template ngFor [ngForTrackBy]="trackBy" let-item [ngForOf]="value" let-i="index" let-l="last"> <li class="ui-orderlist-droppoint" *ngIf="dragdrop && isItemVisible(item)" (dragover)="onDragOver($event, i)" (drop)="onDrop($event, i)" (dragleave)="onDragLeave($event)" [ngClass]="{'ui-orderlist-droppoint-highlight': (i === dragOverItemIndex)}"></li> <li class="ui-orderlist-item" tabindex="0" [ngClass]="{'ui-state-highlight':isSelected(item)}" (click)="onItemClick($event,item,i)" (touchend)="onItemTouchEnd($event)" (keydown)="onItemKeydown($event,item,i)" [style.display]="isItemVisible(item) ? 'block' : 'none'" role="option" [attr.aria-selected]="isSelected(item)" [draggable]="dragdrop" (dragstart)="onDragStart($event, i)" (dragend)="onDragEnd($event)"> <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item, index: i}"></ng-container> </li> <li class="ui-orderlist-droppoint" *ngIf="dragdrop && l" (dragover)="onDragOver($event, i + 1)" (drop)="onDrop($event, i + 1)" (dragleave)="onDragLeave($event)" [ngClass]="{'ui-orderlist-droppoint-highlight': (i + 1 === dragOverItemIndex)}"></li> </ng-template> </ul> </div> </div> `, changeDetection: ChangeDetectionStrategy.Default }) ], OrderList); let OrderListModule = class OrderListModule { }; OrderListModule = __decorate([ NgModule({ imports: [CommonModule, ButtonModule, SharedModule], exports: [OrderList, SharedModule], declarations: [OrderList] }) ], OrderListModule); /** * Generated bundle index. Do not edit. */ export { OrderList, OrderListModule }; //# sourceMappingURL=primeng-orderlist.js.map