UNPKG

5.84 kBJavaScriptView Raw
1import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, ElementRef, Input, Output, ContentChildren, NgModule } from '@angular/core';
2import { trigger, state, style, transition, animate } from '@angular/animations';
3import { CommonModule } from '@angular/common';
4import { PrimeTemplate, SharedModule } from 'primeng/api';
5import { RippleModule } from 'primeng/ripple';
6
7let idx = 0;
8class Fieldset {
9 constructor(el) {
10 this.el = el;
11 this.collapsed = false;
12 this.collapsedChange = new EventEmitter();
13 this.onBeforeToggle = new EventEmitter();
14 this.onAfterToggle = new EventEmitter();
15 this.transitionOptions = '400ms cubic-bezier(0.86, 0, 0.07, 1)';
16 this.id = `p-fieldset-${idx++}`;
17 }
18 ngAfterContentInit() {
19 this.templates.forEach((item) => {
20 switch (item.getType()) {
21 case 'header':
22 this.headerTemplate = item.template;
23 break;
24 case 'content':
25 this.contentTemplate = item.template;
26 break;
27 }
28 });
29 }
30 toggle(event) {
31 if (this.animating) {
32 return false;
33 }
34 this.animating = true;
35 this.onBeforeToggle.emit({ originalEvent: event, collapsed: this.collapsed });
36 if (this.collapsed)
37 this.expand(event);
38 else
39 this.collapse(event);
40 this.onAfterToggle.emit({ originalEvent: event, collapsed: this.collapsed });
41 event.preventDefault();
42 }
43 expand(event) {
44 this.collapsed = false;
45 this.collapsedChange.emit(this.collapsed);
46 }
47 collapse(event) {
48 this.collapsed = true;
49 this.collapsedChange.emit(this.collapsed);
50 }
51 getBlockableElement() {
52 return this.el.nativeElement.children[0];
53 }
54 onToggleDone(event) {
55 this.animating = false;
56 }
57}
58Fieldset.decorators = [
59 { type: Component, args: [{
60 selector: 'p-fieldset',
61 template: `
62 <fieldset [attr.id]="id" [ngClass]="{'p-fieldset p-component': true, 'p-fieldset-toggleable': toggleable}" [ngStyle]="style" [class]="styleClass">
63 <legend class="p-fieldset-legend">
64 <ng-container *ngIf="toggleable; else legendContent">
65 <a tabindex="0" (click)="toggle($event)" (keydown.enter)="toggle($event)" [attr.aria-controls]="id + '-content'" [attr.aria-expanded]="!collapsed" pRipple>
66 <span class="p-fieldset-toggler pi" *ngIf="toggleable" [ngClass]="{'pi-minus': !collapsed,'pi-plus':collapsed}"></span>
67 <ng-container *ngTemplateOutlet="legendContent"></ng-container>
68 </a>
69 </ng-container>
70 <ng-template #legendContent>
71 <span class="p-fieldset-legend-text">{{legend}}</span>
72 <ng-content select="p-header"></ng-content>
73 <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
74 </ng-template>
75 </legend>
76 <div [attr.id]="id + '-content'" class="p-toggleable-content" [@fieldsetContent]="collapsed ? {value: 'hidden', params: {transitionParams: transitionOptions, height: '0'}} : {value: 'visible', params: {transitionParams: animating ? transitionOptions : '0ms', height: '*'}}"
77 [attr.aria-labelledby]="id" [attr.aria-hidden]="collapsed"
78 (@fieldsetContent.done)="onToggleDone($event)" role="region">
79 <div class="p-fieldset-content">
80 <ng-content></ng-content>
81 <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
82 </div>
83 </div>
84 </fieldset>
85 `,
86 animations: [
87 trigger('fieldsetContent', [
88 state('hidden', style({
89 height: '0',
90 overflow: 'hidden'
91 })),
92 state('visible', style({
93 height: '*'
94 })),
95 transition('visible <=> hidden', [style({ overflow: 'hidden' }), animate('{{transitionParams}}')]),
96 transition('void => *', animate(0))
97 ])
98 ],
99 changeDetection: ChangeDetectionStrategy.OnPush,
100 encapsulation: ViewEncapsulation.None,
101 styles: [".p-fieldset-legend>a,.p-fieldset-legend>span{-ms-flex-align:center;-ms-flex-pack:center;align-items:center;display:-ms-flexbox;display:flex;justify-content:center}.p-fieldset-toggleable .p-fieldset-legend a{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:pointer;overflow:hidden;position:relative;user-select:none}.p-fieldset-legend-text{line-height:1}"]
102 },] }
103];
104Fieldset.ctorParameters = () => [
105 { type: ElementRef }
106];
107Fieldset.propDecorators = {
108 legend: [{ type: Input }],
109 toggleable: [{ type: Input }],
110 collapsed: [{ type: Input }],
111 collapsedChange: [{ type: Output }],
112 onBeforeToggle: [{ type: Output }],
113 onAfterToggle: [{ type: Output }],
114 style: [{ type: Input }],
115 styleClass: [{ type: Input }],
116 transitionOptions: [{ type: Input }],
117 templates: [{ type: ContentChildren, args: [PrimeTemplate,] }]
118};
119class FieldsetModule {
120}
121FieldsetModule.decorators = [
122 { type: NgModule, args: [{
123 imports: [CommonModule, RippleModule],
124 exports: [Fieldset, SharedModule],
125 declarations: [Fieldset]
126 },] }
127];
128
129/**
130 * Generated bundle index. Do not edit.
131 */
132
133export { Fieldset, FieldsetModule };
134//# sourceMappingURL=primeng-fieldset.js.map