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) [![Discord](https://img.shields.io/discord/557940238991753

169 lines (165 loc) 6.27 kB
import { Directive, ElementRef, Input, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, ContentChildren, Output, NgModule } from '@angular/core'; import { DomHandler } from 'primeng/dom'; import { CommonModule } from '@angular/common'; import { RippleModule } from 'primeng/ripple'; import { PrimeTemplate } from 'primeng/api'; class ButtonDirective { constructor(el) { this.el = el; this.iconPos = 'left'; } ngAfterViewInit() { this._initialStyleClass = this.el.nativeElement.className; DomHandler.addMultipleClasses(this.el.nativeElement, this.getStyleClass()); if (this.icon) { let iconElement = document.createElement("span"); iconElement.className = 'p-button-icon'; iconElement.setAttribute("aria-hidden", "true"); let iconPosClass = this.label ? 'p-button-icon-' + this.iconPos : null; if (iconPosClass) { DomHandler.addClass(iconElement, iconPosClass); } DomHandler.addMultipleClasses(iconElement, this.icon); this.el.nativeElement.appendChild(iconElement); } let labelElement = document.createElement("span"); if (this.icon && !this.label) { labelElement.setAttribute('aria-hidden', 'true'); } labelElement.className = 'p-button-label'; labelElement.appendChild(document.createTextNode(this.label || '&nbsp;')); this.el.nativeElement.appendChild(labelElement); this.initialized = true; } getStyleClass() { let styleClass = 'p-button p-component'; if (this.icon && !this.label) { styleClass = styleClass + ' p-button-icon-only'; } return styleClass; } setStyleClass() { let styleClass = this.getStyleClass(); this.el.nativeElement.className = styleClass + ' ' + this._initialStyleClass; } get label() { return this._label; } set label(val) { this._label = val; if (this.initialized) { DomHandler.findSingle(this.el.nativeElement, '.p-button-label').textContent = this._label || '&nbsp;'; this.setStyleClass(); } } get icon() { return this._icon; } set icon(val) { this._icon = val; if (this.initialized) { if (this.iconPos) DomHandler.findSingle(this.el.nativeElement, '.p-button-icon').className = 'p-button-icon p-button-icon-' + this.iconPos + ' ' + this._icon; else DomHandler.findSingle(this.el.nativeElement, '.p-button-icon').className = 'p-button-icon ' + this._icon; this.setStyleClass(); } } ngOnDestroy() { this.initialized = false; } } ButtonDirective.decorators = [ { type: Directive, args: [{ selector: '[pButton]' },] } ]; ButtonDirective.ctorParameters = () => [ { type: ElementRef } ]; ButtonDirective.propDecorators = { iconPos: [{ type: Input }], label: [{ type: Input }], icon: [{ type: Input }] }; class Button { constructor() { this.type = "button"; this.iconPos = 'left'; this.onClick = new EventEmitter(); this.onFocus = new EventEmitter(); this.onBlur = new EventEmitter(); } ngAfterContentInit() { this.templates.forEach((item) => { switch (item.getType()) { case 'content': this.contentTemplate = item.template; break; default: this.contentTemplate = item.template; break; } }); } badgeStyleClass() { return { 'p-badge p-component': true, 'p-badge-no-gutter': this.badge && String(this.badge).length === 1 }; } } Button.decorators = [ { type: Component, args: [{ selector: 'p-button', template: ` <button [attr.type]="type" [class]="styleClass" [ngStyle]="style" [disabled]="disabled" [ngClass]="{'p-button p-component':true, 'p-button-icon-only': (icon && !label), 'p-button-vertical': (iconPos === 'top' || iconPos === 'bottom') && label}" (click)="onClick.emit($event)" (focus)="onFocus.emit($event)" (blur)="onBlur.emit($event)" pRipple> <ng-content></ng-content> <ng-container *ngTemplateOutlet="contentTemplate"></ng-container> <span [ngClass]="{'p-button-icon': true, 'p-button-icon-left': iconPos === 'left' && label, 'p-button-icon-right': iconPos === 'right' && label, 'p-button-icon-top': iconPos === 'top' && label, 'p-button-icon-bottom': iconPos === 'bottom' && label}" [class]="icon" *ngIf="icon" [attr.aria-hidden]="true"></span> <span class="p-button-label" [attr.aria-hidden]="icon && !label">{{label||'&nbsp;'}}</span> <span [ngClass]="badgeStyleClass()" *ngIf="badge" [class]="badgeClass">{{badge}}</span> </button> `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None },] } ]; Button.propDecorators = { type: [{ type: Input }], iconPos: [{ type: Input }], icon: [{ type: Input }], badge: [{ type: Input }], label: [{ type: Input }], disabled: [{ type: Input }], style: [{ type: Input }], styleClass: [{ type: Input }], badgeClass: [{ type: Input }], templates: [{ type: ContentChildren, args: [PrimeTemplate,] }], onClick: [{ type: Output }], onFocus: [{ type: Output }], onBlur: [{ type: Output }] }; class ButtonModule { } ButtonModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule, RippleModule], exports: [ButtonDirective, Button], declarations: [ButtonDirective, Button] },] } ]; /** * Generated bundle index. Do not edit. */ export { Button, ButtonDirective, ButtonModule }; //# sourceMappingURL=primeng-button.js.map