refactoring autocomplete fields form in order to use the material 2 autocomplete (#2358)

This commit is contained in:
Eugenio Romano
2017-09-21 10:10:47 +01:00
committed by Popovics András
parent c8743dacc6
commit 4f84079a19
26 changed files with 663 additions and 1458 deletions
@@ -8,19 +8,19 @@
type="text" type="text"
[id]="field.id" [id]="field.id"
[(ngModel)]="value" [(ngModel)]="value"
(ngModelChange)="checkVisibility(field)"
(keyup)="onKeyUp($event)" (keyup)="onKeyUp($event)"
(blur)="onBlur()"
[disabled]="field.readOnly" [disabled]="field.readOnly"
placeholder="{{field.placeholder}}"> placeholder="{{field.placeholder}}"
[mdAutocomplete]="auto">
<md-autocomplete #auto="mdAutocomplete" (optionSelected)="onItemSelect($event.option.value)">
<md-option *ngFor="let item of groups"
[id]="field.id +'-'+item.id"
(click)="onItemClick(item, $event)" [value]="item">
<span>{{item.name}}</span>
</md-option>
</md-autocomplete>
</md-input-container> </md-input-container>
<error-widget [error]="field.validationSummary"></error-widget> <error-widget [error]="field.validationSummary"></error-widget>
<error-widget *ngIf="isInvalidFieldRequired()" required="{{ 'FORM.FIELD.REQUIRED' | translate }}"></error-widget> <error-widget *ngIf="isInvalidFieldRequired()" required="{{ 'FORM.FIELD.REQUIRED' | translate }}"></error-widget>
</div> </div>
<div class="adf-group-autocomplete mat-elevation-z2" *ngIf="popupVisible">
<md-option *ngFor="let item of groups"
[id]="field.id +'-'+item.id"
(click)="onItemClick(item, $event)">
<span>{{item.name}}</span>
</md-option>
</div>
@@ -6,29 +6,4 @@
&-group-widget { &-group-widget {
width: 100%; width: 100%;
} }
&-group-autocomplete {
background-color: #fff;
position: inherit;
max-height: 200px;
overflow-y: auto;
z-index: 5;
width: 100%;
color: #555;
margin: -15px 0 0 0;
> md-option {
list-style-type: none;
position: static;
height: auto;
width: auto;
min-width: 124px;
padding: 8px 0;
margin: 0;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
border-radius: 2px;
> span {
opacity: 1;
}
}
}
} }
@@ -74,16 +74,6 @@ describe('FunctionalGroupWidgetComponent', () => {
expect(widget.groupId).toBe('<id>'); expect(widget.groupId).toBe('<id>');
}); });
it('should flush value on blur', (done) => {
spyOn(widget, 'flushValue').and.stub();
widget.onBlur();
setTimeout(() => {
expect(widget.flushValue).toHaveBeenCalled();
done();
}, 200);
});
it('should prevent default behaviour on option item click', () => { it('should prevent default behaviour on option item click', () => {
let event = jasmine.createSpyObj('event', ['preventDefault']); let event = jasmine.createSpyObj('event', ['preventDefault']);
widget.onItemClick(null, event); widget.onItemClick(null, event);
@@ -98,12 +88,6 @@ describe('FunctionalGroupWidgetComponent', () => {
expect(widget.value).toBe(item.name); expect(widget.value).toBe(item.name);
}); });
it('should hide popup on flush', () => {
widget.popupVisible = true;
widget.flushValue();
expect(widget.popupVisible).toBeFalsy();
});
it('should update form on value flush', () => { it('should update form on value flush', () => {
spyOn(widget.field, 'updateForm').and.callThrough(); spyOn(widget.field, 'updateForm').and.callThrough();
widget.flushValue(); widget.flushValue();
@@ -138,12 +122,6 @@ describe('FunctionalGroupWidgetComponent', () => {
expect(widget.field.value).toBe(groups[1]); expect(widget.field.value).toBe(groups[1]);
}); });
it('should hide popup on key up', () => {
widget.popupVisible = true;
widget.onKeyUp(null);
expect(widget.popupVisible).toBeFalsy();
});
it('should fetch groups and show popup on key up', () => { it('should fetch groups and show popup on key up', () => {
let groups: GroupModel[] = [ let groups: GroupModel[] = [
new GroupModel(), new GroupModel(),
@@ -156,12 +134,12 @@ describe('FunctionalGroupWidgetComponent', () => {
}) })
); );
let keyboardEvent = new KeyboardEvent('keypress');
widget.value = 'group'; widget.value = 'group';
widget.onKeyUp(null); widget.onKeyUp(keyboardEvent);
expect(formService.getWorkflowGroups).toHaveBeenCalledWith('group', undefined); expect(formService.getWorkflowGroups).toHaveBeenCalledWith('group', undefined);
expect(widget.groups).toBe(groups); expect(widget.groups).toBe(groups);
expect(widget.popupVisible).toBeTruthy();
}); });
it('should fetch groups with a group filter', () => { it('should fetch groups with a group filter', () => {
@@ -176,13 +154,13 @@ describe('FunctionalGroupWidgetComponent', () => {
}) })
); );
let keyboardEvent = new KeyboardEvent('keypress');
widget.groupId = 'parentGroup'; widget.groupId = 'parentGroup';
widget.value = 'group'; widget.value = 'group';
widget.onKeyUp(null); widget.onKeyUp(keyboardEvent);
expect(formService.getWorkflowGroups).toHaveBeenCalledWith('group', 'parentGroup'); expect(formService.getWorkflowGroups).toHaveBeenCalledWith('group', 'parentGroup');
expect(widget.groups).toBe(groups); expect(widget.groups).toBe(groups);
expect(widget.popupVisible).toBeTruthy();
}); });
it('should hide popup when fetching empty group list', () => { it('should hide popup when fetching empty group list', () => {
@@ -193,32 +171,32 @@ describe('FunctionalGroupWidgetComponent', () => {
}) })
); );
let keyboardEvent = new KeyboardEvent('keypress');
widget.value = 'group'; widget.value = 'group';
widget.onKeyUp(null); widget.onKeyUp(keyboardEvent);
expect(formService.getWorkflowGroups).toHaveBeenCalledWith('group', undefined); expect(formService.getWorkflowGroups).toHaveBeenCalledWith('group', undefined);
expect(widget.groups.length).toBe(0); expect(widget.groups.length).toBe(0);
expect(widget.popupVisible).toBeFalsy();
}); });
it('should not fetch groups when value is missing', () => { it('should not fetch groups when value is missing', () => {
spyOn(formService, 'getWorkflowGroups').and.stub(); spyOn(formService, 'getWorkflowGroups').and.stub();
let keyboardEvent = new KeyboardEvent('keypress');
widget.value = null; widget.value = null;
widget.onKeyUp(null); widget.onKeyUp(keyboardEvent);
expect(formService.getWorkflowGroups).not.toHaveBeenCalled(); expect(formService.getWorkflowGroups).not.toHaveBeenCalled();
expect(widget.popupVisible).toBeFalsy();
}); });
it('should not fetch groups when value violates constraints', () => { it('should not fetch groups when value violates constraints', () => {
spyOn(formService, 'getWorkflowGroups').and.stub(); spyOn(formService, 'getWorkflowGroups').and.stub();
let keyboardEvent = new KeyboardEvent('keypress');
widget.minTermLength = 4; widget.minTermLength = 4;
widget.value = '123'; widget.value = '123';
widget.onKeyUp(null); widget.onKeyUp(keyboardEvent);
expect(formService.getWorkflowGroups).not.toHaveBeenCalled(); expect(formService.getWorkflowGroups).not.toHaveBeenCalled();
expect(widget.popupVisible).toBeFalsy();
}); });
}); });
@@ -17,6 +17,7 @@
/* tslint:disable:component-selector */ /* tslint:disable:component-selector */
import { ENTER, ESCAPE } from '@angular/cdk/keycodes';
import { Component, ElementRef, OnInit, ViewEncapsulation } from '@angular/core'; import { Component, ElementRef, OnInit, ViewEncapsulation } from '@angular/core';
import { FormService } from '../../../services/form.service'; import { FormService } from '../../../services/form.service';
import { GroupModel } from './../core/group.model'; import { GroupModel } from './../core/group.model';
@@ -32,7 +33,7 @@ import { baseHost , WidgetComponent } from './../widget.component';
export class FunctionalGroupWidgetComponent extends WidgetComponent implements OnInit { export class FunctionalGroupWidgetComponent extends WidgetComponent implements OnInit {
value: string; value: string;
popupVisible: boolean = false; oldValue: string;
groups: GroupModel[] = []; groups: GroupModel[] = [];
minTermLength: number = 1; minTermLength: number = 1;
groupId: string; groupId: string;
@@ -42,8 +43,6 @@ export class FunctionalGroupWidgetComponent extends WidgetComponent implements O
super(formService); super(formService);
} }
// TODO: investigate, called 2 times
// https://github.com/angular/angular/issues/6782
ngOnInit() { ngOnInit() {
if (this.field) { if (this.field) {
let group = this.field.value; let group = this.field.value;
@@ -67,26 +66,18 @@ export class FunctionalGroupWidgetComponent extends WidgetComponent implements O
} }
onKeyUp(event: KeyboardEvent) { onKeyUp(event: KeyboardEvent) {
if (this.value && this.value.length >= this.minTermLength) { if (this.value && this.value.length >= this.minTermLength && this.oldValue !== this.value) {
this.formService.getWorkflowGroups(this.value, this.groupId) if (event.keyCode !== ESCAPE && event.keyCode !== ENTER) {
.subscribe((result: GroupModel[]) => { this.oldValue = this.value;
this.groups = result || []; this.formService.getWorkflowGroups(this.value, this.groupId)
this.popupVisible = this.groups.length > 0; .subscribe((result: GroupModel[]) => {
}); this.groups = result || [];
} else { });
this.popupVisible = false; }
} }
} }
onBlur() {
setTimeout(() => {
this.flushValue();
}, 200);
}
flushValue() { flushValue() {
this.popupVisible = false;
let option = this.groups.find(item => item.name.toLocaleLowerCase() === this.value.toLocaleLowerCase()); let option = this.groups.find(item => item.name.toLocaleLowerCase() === this.value.toLocaleLowerCase());
if (option) { if (option) {
@@ -100,7 +91,6 @@ export class FunctionalGroupWidgetComponent extends WidgetComponent implements O
this.field.updateForm(); this.field.updateForm();
} }
// TODO: still causes onBlur execution
onItemClick(item: GroupModel, event: Event) { onItemClick(item: GroupModel, event: Event) {
if (item) { if (item) {
this.field.value = item; this.field.value = item;
@@ -110,4 +100,11 @@ export class FunctionalGroupWidgetComponent extends WidgetComponent implements O
event.preventDefault(); event.preventDefault();
} }
} }
onItemSelect(item: GroupModel) {
if (item) {
this.field.value = item;
this.value = item.name;
}
}
} }
@@ -12,28 +12,27 @@
type="text" type="text"
[id]="field.id" [id]="field.id"
[(ngModel)]="value" [(ngModel)]="value"
(ngModelChange)="checkVisibility(field)"
(keyup)="onKeyUp($event)" (keyup)="onKeyUp($event)"
[disabled]="field.readOnly" [disabled]="field.readOnly"
placeholder="{{field.placeholder}}"> placeholder="{{field.placeholder}}"
[mdAutocomplete]="auto">
<md-autocomplete #auto="mdAutocomplete" (optionSelected)="onItemSelect($event.option.value)">
<md-option *ngFor="let user of users; let i = index"
(click)="onItemClick(user, $event)" [value]="user">
<div class="adf-people-widget-row" id="adf-people-widget-user-{{i}}">
<div class="adf-people-widget-pic">
{{getInitialUserName(user.firstName, user.lastName)}}
</div>
<div *ngIf="user.userImage" class="adf-people-widget-image-row">
<img id="adf-people-widget-pic-{{i}}" class="adf-people-widget-image"
[src]="user.userImage"
(error)="onErrorImageLoad(user)"/>
</div>
<span class="adf-people-label-name">{{getDisplayName(user)}}</span>
</div>
</md-option>
</md-autocomplete>
</md-input-container> </md-input-container>
<error-widget [error]="field.validationSummary"></error-widget> <error-widget [error]="field.validationSummary"></error-widget>
<error-widget *ngIf="isInvalidFieldRequired()" required="{{ 'FORM.FIELD.REQUIRED' | translate }}"></error-widget> <error-widget *ngIf="isInvalidFieldRequired()" required="{{ 'FORM.FIELD.REQUIRED' | translate }}"></error-widget>
</div> </div>
<div class="adf-people-autocomplete mat-elevation-z2" [hidden]="!popupVisible || users.length === 0">
<md-option *ngFor="let user of users; let i = index"
[id]="field.id +'-'+user.id"
(click)="onItemClick(user, $event)">
<div class="adf-people-widget-row">
<div id="adf-people-widget-initial-{{i}}" *ngIf="!user.userImage" class="adf-people-widget-pic">
{{getInitialUserName(user.firstName, user.lastName)}}
</div>
<div *ngIf="user.userImage" class="adf-people-widget-image-row">
<img id="adf-people-widget-pic-{{i}}" class="adf-people-widget-image"
[src]="user.userImage"
(error)="onErrorImageLoad(user)"/>
</div>
<span class="adf-people-label-name">{{getDisplayName(user)}}</span>
</div>
</md-option>
</div>
@@ -1,69 +1,52 @@
@import '~ng2-alfresco-core/styles/theming'; @import '~@angular/material/theming';
@import '../form';
.adf { @mixin mat-people-widget-theme($theme) {
$primary: map-get($theme, primary);
$background: map-get($theme, background);
$foreground: map-get($theme, foreground);
&-people-widget { .adf {
width: 100%;
}
&-people-autocomplete { &-people-widget {
background-color: #fff; width: 100%;
position:inherit; }
max-height: 200px;
width: 100%; &-people-widget-pic {
overflow-y: auto; background: mat-color($primary);
z-index: 5; display: inline-block;
border-radius: 3%; width: 40px;
color: #555; height: 40px;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); border-radius: 100px;
> md-option { color: mat-color($foreground, text);
list-style-type: none; text-align: center;
position: static; font-weight: bolder;
height: auto; font-size: 18px;
width: auto; text-transform: uppercase;
min-width: 124px; vertical-align: middle;
padding: 8px 0 0 20px; }
margin: 0;
border-radius: 2px; &-people-widget-row {
> span { padding-bottom: 10px;
opacity: 1; }
}
&-people-widget-image {
margin-left: -45px;
left: 21px;
background: mat-color($background, dialog);
border-radius: 100px;
width: 40px;
height: 40px;
vertical-align: middle;
display: inline-block;
padding: 0;
}
&-people-widget-image-row {
display: inline-block;
}
&-people-label-name {
padding-left: 10px;
} }
} }
&-people-widget-pic {
background: #ff9800;
display: inline-block;
width: 30px;
padding: 0 9px;
border-radius: 100px;
color: #fff;
text-align: center;
font-weight: bolder;
font-size: 18px;
text-transform: uppercase;
vertical-align: middle;
}
&-people-widget-row {
padding-bottom: 10px;
}
&-people-widget-image {
border-radius: 100px;
width: 50px;
height: 50px;
vertical-align: middle;
display: inline-block;
padding: 0 0;
}
&-people-widget-image-row {
display: inline-block;
}
&-people-label-name {
padding-left: 10px;
}
} }
@@ -142,12 +142,12 @@ describe('PeopleWidgetComponent', () => {
}) })
); );
let keyboardEvent = new KeyboardEvent('keypress');
widget.value = 'user1'; widget.value = 'user1';
widget.onKeyUp(null); widget.onKeyUp(keyboardEvent);
expect(formService.getWorkflowUsers).toHaveBeenCalledWith(widget.value, widget.groupId); expect(formService.getWorkflowUsers).toHaveBeenCalledWith(widget.value, widget.groupId);
expect(widget.users).toBe(users); expect(widget.users).toBe(users);
expect(widget.popupVisible).toBeTruthy();
}); });
it('should fetch users by search term and group id', () => { it('should fetch users by search term and group id', () => {
@@ -159,13 +159,13 @@ describe('PeopleWidgetComponent', () => {
}) })
); );
let keyboardEvent = new KeyboardEvent('keypress');
widget.value = 'user1'; widget.value = 'user1';
widget.groupId = '1001'; widget.groupId = '1001';
widget.onKeyUp(null); widget.onKeyUp(keyboardEvent);
expect(formService.getWorkflowUsers).toHaveBeenCalledWith(widget.value, widget.groupId); expect(formService.getWorkflowUsers).toHaveBeenCalledWith(widget.value, widget.groupId);
expect(widget.users).toBe(users); expect(widget.users).toBe(users);
expect(widget.popupVisible).toBeTruthy();
}); });
it('should fetch users and show no popup', () => { it('should fetch users and show no popup', () => {
@@ -176,19 +176,20 @@ describe('PeopleWidgetComponent', () => {
}) })
); );
let keyboardEvent = new KeyboardEvent('keypress');
widget.value = 'user1'; widget.value = 'user1';
widget.onKeyUp(null); widget.onKeyUp(keyboardEvent);
expect(formService.getWorkflowUsers).toHaveBeenCalledWith(widget.value, widget.groupId); expect(formService.getWorkflowUsers).toHaveBeenCalledWith(widget.value, widget.groupId);
expect(widget.users).toEqual([]); expect(widget.users).toEqual([]);
expect(widget.popupVisible).toBeFalsy();
}); });
it('should require search term to fetch users', () => { it('should require search term to fetch users', () => {
spyOn(formService, 'getWorkflowUsers').and.stub(); spyOn(formService, 'getWorkflowUsers').and.stub();
let keyboardEvent = new KeyboardEvent('keypress');
widget.value = null; widget.value = null;
widget.onKeyUp(null); widget.onKeyUp(keyboardEvent);
expect(formService.getWorkflowUsers).not.toHaveBeenCalled(); expect(formService.getWorkflowUsers).not.toHaveBeenCalled();
}); });
@@ -196,19 +197,14 @@ describe('PeopleWidgetComponent', () => {
it('should not fetch users due to constraint violation', () => { it('should not fetch users due to constraint violation', () => {
spyOn(formService, 'getWorkflowUsers').and.stub(); spyOn(formService, 'getWorkflowUsers').and.stub();
let keyboardEvent = new KeyboardEvent('keypress');
widget.value = '123'; widget.value = '123';
widget.minTermLength = 4; widget.minTermLength = 4;
widget.onKeyUp(null); widget.onKeyUp(keyboardEvent);
expect(formService.getWorkflowUsers).not.toHaveBeenCalled(); expect(formService.getWorkflowUsers).not.toHaveBeenCalled();
}); });
it('should hide popup on value flush', () => {
widget.popupVisible = true;
widget.flushValue();
expect(widget.popupVisible).toBeFalsy();
});
it('should update form on value flush', () => { it('should update form on value flush', () => {
spyOn(widget.field, 'updateForm').and.callThrough(); spyOn(widget.field, 'updateForm').and.callThrough();
widget.flushValue(); widget.flushValue();
@@ -247,31 +243,4 @@ describe('PeopleWidgetComponent', () => {
expect(widget.value).toBeNull(); expect(widget.value).toBeNull();
expect(widget.field.value).toBeNull(); expect(widget.field.value).toBeNull();
}); });
describe('Image', () => {
it('should show the initial in the image', () => {
widget.users = [
new GroupUserModel({firstName: 'Tony', lastName: 'Stark'}),
new GroupUserModel({firstName: 'John', lastName: 'Doe'})
];
fixture.detectChanges();
expect(element.querySelector('#adf-people-widget-initial-0').innerHTML.trim()).toBe('TS');
expect(element.querySelector('#adf-people-widget-initial-1').innerHTML.trim()).toBe('JD');
});
it('should show the the image if user has an image', () => {
widget.users = [
new GroupUserModel({firstName: 'Tony', lastName: 'Stark', userImage: 'testUrl0'}),
new GroupUserModel({firstName: 'John', lastName: 'Doe', userImage: 'testUrl1'})
];
fixture.detectChanges();
expect((element.querySelector('#adf-people-widget-pic-0') as any).src).toContain('testUrl0');
expect((element.querySelector('#adf-people-widget-pic-1') as any).src).toContain('testUrl1');
});
});
}); });
@@ -15,10 +15,11 @@
* limitations under the License. * limitations under the License.
*/ */
/* tslint:disable:component-selector */ /* tslint:disable:component-selector */
import { AfterViewInit, Component, ElementRef, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; import { ENTER, ESCAPE } from '@angular/cdk/keycodes';
import { Observable } from 'rxjs/Observable'; import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
import { MdAutocompleteTrigger } from '@angular/material';
import { FormService } from '../../../services/form.service'; import { FormService } from '../../../services/form.service';
import { GroupUserModel } from '../core/group-user.model'; import { GroupUserModel } from '../core/group-user.model';
import { GroupModel } from '../core/group.model'; import { GroupModel } from '../core/group.model';
@@ -31,24 +32,21 @@ import { baseHost , WidgetComponent } from './../widget.component';
host: baseHost, host: baseHost,
encapsulation: ViewEncapsulation.None encapsulation: ViewEncapsulation.None
}) })
export class PeopleWidgetComponent extends WidgetComponent implements OnInit, AfterViewInit { export class PeopleWidgetComponent extends WidgetComponent implements OnInit {
@ViewChild('inputValue') @ViewChild(MdAutocompleteTrigger)
input: ElementRef; input: MdAutocompleteTrigger;
popupVisible: boolean = false;
minTermLength: number = 1; minTermLength: number = 1;
value: string; value: string;
oldValue: string;
users: GroupUserModel[] = []; users: GroupUserModel[] = [];
groupId: string; groupId: string;
constructor(public formService: FormService, constructor(public formService: FormService) {
public elementRef: ElementRef) { super(formService);
super(formService);
} }
// TODO: investigate, called 2 times
// https://github.com/angular/angular/issues/6782
ngOnInit() { ngOnInit() {
if (this.field) { if (this.field) {
let user: GroupUserModel = this.field.value; let user: GroupUserModel = this.field.value;
@@ -61,37 +59,27 @@ export class PeopleWidgetComponent extends WidgetComponent implements OnInit, Af
let restrictWithGroup = <GroupModel> params['restrictWithGroup']; let restrictWithGroup = <GroupModel> params['restrictWithGroup'];
this.groupId = restrictWithGroup.id; this.groupId = restrictWithGroup.id;
} }
// Load auto-completion for previously saved value
if (this.value) {
this.formService
.getWorkflowUsers(this.value, this.groupId)
.subscribe((result: GroupUserModel[]) => this.users = result || []);
}
}
}
ngAfterViewInit() {
if (this.input) {
let onBlurInputEvent = Observable.fromEvent(this.input.nativeElement, 'blur');
onBlurInputEvent.debounceTime(200).subscribe((event) => {
this.flushValue();
});
} }
} }
onKeyUp(event: KeyboardEvent) { onKeyUp(event: KeyboardEvent) {
if (this.value && this.value.length >= this.minTermLength) { if (this.value && this.value.length >= this.minTermLength && this.oldValue !== this.value) {
this.formService.getWorkflowUsers(this.value, this.groupId) if (event.keyCode !== ESCAPE && event.keyCode !== ENTER) {
.subscribe((result: GroupUserModel[]) => { if (this.value.length >= this.minTermLength) {
this.users = result || []; this.oldValue = this.value;
this.popupVisible = this.users.length > 0; this.searchUsers();
}); }
} else { }
this.popupVisible = false;
} }
} }
searchUsers() {
this.formService.getWorkflowUsers(this.value, this.groupId)
.subscribe((result: GroupUserModel[]) => {
this.users = result || [];
});
}
onErrorImageLoad(user) { onErrorImageLoad(user) {
if (user.userImage) { if (user.userImage) {
user.userImage = null; user.userImage = null;
@@ -99,8 +87,6 @@ export class PeopleWidgetComponent extends WidgetComponent implements OnInit, Af
} }
flushValue() { flushValue() {
this.popupVisible = false;
let option = this.users.find(item => { let option = this.users.find(item => {
let fullName = this.getDisplayName(item).toLocaleLowerCase(); let fullName = this.getDisplayName(item).toLocaleLowerCase();
return (this.value && fullName === this.value.toLocaleLowerCase()); return (this.value && fullName === this.value.toLocaleLowerCase());
@@ -136,6 +122,13 @@ export class PeopleWidgetComponent extends WidgetComponent implements OnInit, Af
} }
} }
onItemSelect(item: GroupUserModel) {
if (item) {
this.field.value = item;
this.value = this.getDisplayName(item);
}
}
getInitialUserName(firstName: string, lastName: string) { getInitialUserName(firstName: string, lastName: string) {
firstName = (firstName !== null && firstName !== '' ? firstName[0] : ''); firstName = (firstName !== null && firstName !== '' ? firstName[0] : '');
lastName = (lastName !== null && lastName !== '' ? lastName[0] : ''); lastName = (lastName !== null && lastName !== '' ? lastName[0] : '');
@@ -11,16 +11,19 @@
[id]="field.id" [id]="field.id"
[(ngModel)]="value" [(ngModel)]="value"
(keyup)="onKeyUp($event)" (keyup)="onKeyUp($event)"
(blur)="onBlur()"
[disabled]="field.readOnly" [disabled]="field.readOnly"
placeholder="{{field.placeholder}}"> placeholder="{{field.placeholder}}"
[mdAutocomplete]="auto">
<md-autocomplete #auto="mdAutocomplete" (optionSelected)="onItemSelect($event.option.value)">
<md-option *ngFor="let item of options" (click)="onItemClick(item, $event)" [value]="item">
<span>{{item.name}}</span>
</md-option>
</md-autocomplete>
</md-input-container> </md-input-container>
<error-widget [error]="field.validationSummary"></error-widget> <error-widget [error]="field.validationSummary"></error-widget>
<error-widget *ngIf="isInvalidFieldRequired()" required="{{ 'FORM.FIELD.REQUIRED' | translate }}"></error-widget> <error-widget *ngIf="isInvalidFieldRequired()" required="{{ 'FORM.FIELD.REQUIRED' | translate }}"></error-widget>
</div> </div>
<div class="adf-typeahead-autocomplete mat-elevation-z2" [hidden]="options.length <= 0 || !popupVisible">
<md-option *ngFor="let item of options" (click)="onItemClick(item, $event)">
<span>{{item.name}}</span>
</md-option>
</div>
</div> </div>
@@ -11,30 +11,4 @@
&-typeahead-widget { &-typeahead-widget {
width: 100%; width: 100%;
} }
&-typeahead-autocomplete {
background-color: #fff;
position:absolute;
max-height: 200px;
width: 100%;
overflow-y: auto;
z-index: 5;
color: #555;
margin: -10px 0 0 0;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
> md-option {
list-style-type: none;
position: static;
height: auto;
width: auto;
min-width: 124px;
padding: 8px 0;
margin: 0;
border-radius: 2px;
> span {
opacity: 1;
padding-left: 23px;
}
}
}
} }
@@ -108,68 +108,6 @@ describe('TypeaheadWidgetComponent', () => {
expect(widget.handleError).toHaveBeenCalledWith(err); expect(widget.handleError).toHaveBeenCalledWith(err);
}); });
it('should show popup on key up', () => {
spyOn(widget, 'getOptions').and.returnValue([{}, {}]);
widget.minTermLength = 1;
widget.value = 'some value';
widget.popupVisible = false;
widget.onKeyUp(null);
expect(widget.popupVisible).toBeTruthy();
});
it('should require items to show popup', () => {
widget.minTermLength = 1;
widget.value = 'some value';
widget.popupVisible = false;
widget.onKeyUp(null);
expect(widget.popupVisible).toBeFalsy();
});
it('should require value to show popup', () => {
widget.minTermLength = 1;
widget.value = '';
widget.popupVisible = false;
widget.onKeyUp(null);
expect(widget.popupVisible).toBeFalsy();
});
it('should require value to be of min length to show popup', () => {
spyOn(widget, 'getOptions').and.returnValue([{}, {}]);
widget.minTermLength = 3;
widget.value = 'v';
// value less than constraint
widget.popupVisible = false;
widget.onKeyUp(null);
expect(widget.popupVisible).toBeFalsy();
// value satisfies constraint
widget.value = 'value';
widget.onKeyUp(null);
expect(widget.popupVisible).toBeTruthy();
// value gets less than allowed again
widget.value = 'va';
widget.onKeyUp(null);
expect(widget.popupVisible).toBeFalsy();
});
it('should flush value on blur', (done) => {
spyOn(widget, 'flushValue').and.stub();
widget.onBlur();
setTimeout(() => {
expect(widget.flushValue).toHaveBeenCalled();
done();
}, 200);
});
it('should prevent default behaviour on option item click', () => { it('should prevent default behaviour on option item click', () => {
let event = jasmine.createSpyObj('event', ['preventDefault']); let event = jasmine.createSpyObj('event', ['preventDefault']);
widget.onItemClick(null, event); widget.onItemClick(null, event);
@@ -270,12 +208,6 @@ describe('TypeaheadWidgetComponent', () => {
expect(filtered[0]).toEqual(options[1]); expect(filtered[0]).toEqual(options[1]);
}); });
it('should hide popup on flush', () => {
widget.popupVisible = true;
widget.flushValue();
expect(widget.popupVisible).toBeFalsy();
});
it('should update form on value flush', () => { it('should update form on value flush', () => {
spyOn(widget.field, 'updateForm').and.callThrough(); spyOn(widget.field, 'updateForm').and.callThrough();
widget.flushValue(); widget.flushValue();
@@ -359,22 +291,6 @@ describe('TypeaheadWidgetComponent', () => {
}); });
}); });
it('should emit field change event on blur', (done) => {
spyOn(widget, 'flushValue').and.stub();
let fakeField = new FormFieldModel(new FormModel(), { id: 'fakeField', value: 'fakeValue' });
widget.field = fakeField;
widget.onBlur();
setTimeout(() => {
widget.fieldChanged.subscribe((field) => {
expect(field).toBeDefined();
expect(field.id).toEqual('field-id');
expect(field.value).toEqual('field-value');
});
done();
}, 200);
});
describe('when template is ready', () => { describe('when template is ready', () => {
let typeaheadWidgetComponent: TypeaheadWidgetComponent; let typeaheadWidgetComponent: TypeaheadWidgetComponent;
let fixture: ComponentFixture<TypeaheadWidgetComponent>; let fixture: ComponentFixture<TypeaheadWidgetComponent>;
@@ -428,8 +344,9 @@ describe('TypeaheadWidgetComponent', () => {
})); }));
it('should show typeahead options', async(() => { it('should show typeahead options', async(() => {
let keyboardEvent = new KeyboardEvent('keypress');
typeaheadWidgetComponent.value = 'F'; typeaheadWidgetComponent.value = 'F';
typeaheadWidgetComponent.onKeyUp(null); typeaheadWidgetComponent.onKeyUp(keyboardEvent);
fixture.detectChanges(); fixture.detectChanges();
fixture.whenStable().then(() => { fixture.whenStable().then(() => {
expect(fixture.debugElement.queryAll(By.css('[id="md-option-1"]'))).toBeDefined(); expect(fixture.debugElement.queryAll(By.css('[id="md-option-1"]'))).toBeDefined();
@@ -472,8 +389,9 @@ describe('TypeaheadWidgetComponent', () => {
})); }));
it('should show typeahead options', async(() => { it('should show typeahead options', async(() => {
let keyboardEvent = new KeyboardEvent('keypress');
typeaheadWidgetComponent.value = 'F'; typeaheadWidgetComponent.value = 'F';
typeaheadWidgetComponent.onKeyUp(null); typeaheadWidgetComponent.onKeyUp(keyboardEvent);
fixture.detectChanges(); fixture.detectChanges();
fixture.whenStable().then(() => { fixture.whenStable().then(() => {
expect(fixture.debugElement.queryAll(By.css('[id="md-option-1"]'))).toBeDefined(); expect(fixture.debugElement.queryAll(By.css('[id="md-option-1"]'))).toBeDefined();
@@ -17,6 +17,7 @@
/* tslint:disable:component-selector */ /* tslint:disable:component-selector */
import { ENTER, ESCAPE } from '@angular/cdk/keycodes';
import { Component, OnInit, ViewEncapsulation } from '@angular/core'; import { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { LogService } from 'ng2-alfresco-core'; import { LogService } from 'ng2-alfresco-core';
import { WidgetVisibilityService } from '../../../services/widget-visibility.service'; import { WidgetVisibilityService } from '../../../services/widget-visibility.service';
@@ -33,9 +34,9 @@ import { baseHost , WidgetComponent } from './../widget.component';
}) })
export class TypeaheadWidgetComponent extends WidgetComponent implements OnInit { export class TypeaheadWidgetComponent extends WidgetComponent implements OnInit {
popupVisible: boolean = false;
minTermLength: number = 1; minTermLength: number = 1;
value: string; value: string;
oldValue: string;
options: FormFieldOption[] = []; options: FormFieldOption[] = [];
constructor(public formService: FormService, constructor(public formService: FormService,
@@ -111,24 +112,17 @@ export class TypeaheadWidgetComponent extends WidgetComponent implements OnInit
} }
onKeyUp(event: KeyboardEvent) { onKeyUp(event: KeyboardEvent) {
if (this.value && this.value.length >= this.minTermLength) { if (this.value && this.value.length >= this.minTermLength && this.oldValue !== this.value) {
this.options = this.getOptions(); if (event.keyCode !== ESCAPE && event.keyCode !== ENTER) {
this.popupVisible = this.options.length > 0; if (this.value.length >= this.minTermLength) {
} else { this.options = this.getOptions();
this.popupVisible = false; this.oldValue = this.value;
}
}
} }
} }
onBlur() {
setTimeout(() => {
this.flushValue();
this.checkVisibility();
}, 200);
}
flushValue() { flushValue() {
this.popupVisible = false;
let options = this.field.options || []; let options = this.field.options || [];
let lValue = this.value ? this.value.toLocaleLowerCase() : null; let lValue = this.value ? this.value.toLocaleLowerCase() : null;
@@ -141,11 +135,9 @@ export class TypeaheadWidgetComponent extends WidgetComponent implements OnInit
this.value = null; this.value = null;
} }
// TODO: seems to be not needed as field.value setter calls it
this.field.updateForm(); this.field.updateForm();
} }
// TODO: still causes onBlur execution
onItemClick(item: FormFieldOption, event: Event) { onItemClick(item: FormFieldOption, event: Event) {
if (item) { if (item) {
this.field.value = item.id; this.field.value = item.id;
@@ -157,6 +149,14 @@ export class TypeaheadWidgetComponent extends WidgetComponent implements OnInit
} }
} }
onItemSelect(item: FormFieldOption) {
if (item) {
this.field.value = item.id;
this.value = item.name;
this.checkVisibility();
}
}
handleError(error: any) { handleError(error: any) {
this.logService.error(error); this.logService.error(error);
} }
@@ -122,7 +122,6 @@ export class WidgetComponent implements AfterViewInit {
} }
protected event(event: Event): void { protected event(event: Event): void {
console.log(event);
this.formService.formEvents.next(event); this.formService.formEvents.next(event);
} }
} }
@@ -1,9 +1,10 @@
@import '../src/components/widgets/form'; @import '../src/components/widgets/form';
@import '../src/components/widgets/container/container.widget'; @import '../src/components/widgets/container/container.widget';
@import '../src/components/widgets/dynamic-table/dynamic-table.widget'; @import '../src/components/widgets/people/people.widget';
@mixin alfresco-activity-form-theme($theme) { @mixin alfresco-activity-form-theme($theme) {
@include mat-form-theme($theme); @include mat-form-theme($theme);
@include mat-container-widget-theme($theme); @include mat-container-widget-theme($theme);
@include mat-dynamic-table-theme($theme); @include mat-people-widget-theme($theme);
} }
@@ -28,7 +28,7 @@ export class User {
email: string; email: string;
firstName: string; firstName: string;
lastName: string; lastName: string;
userImage: string; userImage: string = null;
constructor(obj?: any) { constructor(obj?: any) {
if (obj) { if (obj) {
@@ -17,7 +17,23 @@
* This mixin contains shared option styles between the select and * This mixin contains shared option styles between the select and
* autocomplete components. * autocomplete components.
*/ */
/* ANIMATION */ /**
* Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
* attribute, however Chrome handles high contrast differently.
*/
/* Theme for the ripple elements.*/
/** The mixins below are shared between md-menu and md-select */
/**
* This mixin adds the correct panel transform styles based
* on the direction that the menu panel opens.
*/
/* stylelint-disable material/no-prefixes */
/* stylelint-enable */
/**
* This mixin contains shared option styles between the select and
* autocomplete components.
*/
/** /**
* Applies styles for users in high contrast mode. Note that this only applies * Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]` * to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
@@ -2207,122 +2223,41 @@ container-widget .mat-focused .mat-input-prefix {
container-widget .mat-grid-tile { container-widget .mat-grid-tile {
overflow: visible; } overflow: visible; }
.adf-dynamic-table { .adf-people-widget {
width: 100%; width: 100%; }
position: relative;
border: 1px solid rgba(0, 0, 0, 0.07); .adf-people-widget-pic {
white-space: nowrap; background: #2196f3;
font-size: 14px; display: inline-block;
/* Firefox fixes */ width: 40px;
border-collapse: unset; height: 40px;
border-spacing: 0; } border-radius: 100px;
.adf-dynamic-table thead { color: rgba(0, 0, 0, 0.87);
padding-bottom: 3px; } text-align: center;
.adf-dynamic-table tbody tr { font-weight: bolder;
position: relative; font-size: 18px;
height: 56px; text-transform: uppercase;
transition-duration: 0.28s; vertical-align: middle; }
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-property: background-color; } .adf-people-widget-row {
.adf-dynamic-table tbody tr:hover { padding-bottom: 10px; }
background-color: #eeeeee; }
.adf-dynamic-table tbody tr.is-selected, .adf-dynamic-table tbody tr.is-selected:hover { .adf-people-widget-image {
background-color: #e0f7fa; } margin-left: -45px;
.adf-dynamic-table tbody tr:focus { left: 21px;
outline-offset: -1px; background: white;
outline-width: 1px; border-radius: 100px;
outline-color: #448aff; width: 40px;
outline-style: solid; } height: 40px;
.adf-dynamic-table td, .adf-dynamic-table th { vertical-align: middle;
padding: 0 18px 12px 18px; display: inline-block;
text-align: center; } padding: 0; }
.adf-dynamic-table td:first-of-type, .adf-dynamic-table th:first-of-type {
padding-left: 24px; } .adf-people-widget-image-row {
.adf-dynamic-table td:last-of-type, .adf-dynamic-table th:last-of-type { display: inline-block; }
padding-right: 24px; }
.adf-dynamic-table td { .adf-people-label-name {
color: rgba(0, 0, 0, 0.87); padding-left: 10px; }
position: relative;
vertical-align: middle;
height: 56px;
border-top: 1px solid rgba(0, 0, 0, 0.07);
border-bottom: 1px solid rgba(0, 0, 0, 0.07);
padding-top: 12px;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: default; }
.adf-dynamic-table th {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: pointer;
position: relative;
vertical-align: bottom;
text-overflow: ellipsis;
font-weight: bold;
line-height: 24px;
letter-spacing: 0;
height: 56px;
font-size: 12px;
color: rgba(0, 0, 0, 0.87);
padding-bottom: 8px;
box-sizing: border-box; }
.adf-dynamic-table th.sortable {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.adf-dynamic-table th.sortable:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc {
color: rgba(0, 0, 0, 0.87); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
word-wrap: normal;
font-feature-settings: 'liga';
-webkit-font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
font-size: 16px;
content: "\e5d8";
margin-right: 5px;
vertical-align: sub; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover:before {
color: rgba(0, 0, 0, 0.38); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
content: "\e5db"; }
.adf-dynamic-table .adf-dynamic-table-cell {
text-align: left;
cursor: default; }
.adf-dynamic-table .adf-dynamic-table-cell--text {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--number {
text-align: right; }
.adf-dynamic-table .adf-dynamic-table-cell--image {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--image img {
width: 24px;
height: 24px; }
.adf-dynamic-table .full-width {
width: 100%; }
.adf-filters__entry { .adf-filters__entry {
cursor: pointer; cursor: pointer;
@@ -17,7 +17,23 @@
* This mixin contains shared option styles between the select and * This mixin contains shared option styles between the select and
* autocomplete components. * autocomplete components.
*/ */
/* ANIMATION */ /**
* Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
* attribute, however Chrome handles high contrast differently.
*/
/* Theme for the ripple elements.*/
/** The mixins below are shared between md-menu and md-select */
/**
* This mixin adds the correct panel transform styles based
* on the direction that the menu panel opens.
*/
/* stylelint-disable material/no-prefixes */
/* stylelint-enable */
/**
* This mixin contains shared option styles between the select and
* autocomplete components.
*/
/** /**
* Applies styles for users in high contrast mode. Note that this only applies * Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]` * to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
@@ -2207,122 +2223,41 @@ container-widget .mat-focused .mat-input-prefix {
container-widget .mat-grid-tile { container-widget .mat-grid-tile {
overflow: visible; } overflow: visible; }
.adf-dynamic-table { .adf-people-widget {
width: 100%; width: 100%; }
position: relative;
border: 1px solid rgba(0, 0, 0, 0.07); .adf-people-widget-pic {
white-space: nowrap; background: #2196f3;
font-size: 14px; display: inline-block;
/* Firefox fixes */ width: 40px;
border-collapse: unset; height: 40px;
border-spacing: 0; } border-radius: 100px;
.adf-dynamic-table thead { color: rgba(0, 0, 0, 0.87);
padding-bottom: 3px; } text-align: center;
.adf-dynamic-table tbody tr { font-weight: bolder;
position: relative; font-size: 18px;
height: 56px; text-transform: uppercase;
transition-duration: 0.28s; vertical-align: middle; }
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-property: background-color; } .adf-people-widget-row {
.adf-dynamic-table tbody tr:hover { padding-bottom: 10px; }
background-color: #eeeeee; }
.adf-dynamic-table tbody tr.is-selected, .adf-dynamic-table tbody tr.is-selected:hover { .adf-people-widget-image {
background-color: #e0f7fa; } margin-left: -45px;
.adf-dynamic-table tbody tr:focus { left: 21px;
outline-offset: -1px; background: white;
outline-width: 1px; border-radius: 100px;
outline-color: #448aff; width: 40px;
outline-style: solid; } height: 40px;
.adf-dynamic-table td, .adf-dynamic-table th { vertical-align: middle;
padding: 0 18px 12px 18px; display: inline-block;
text-align: center; } padding: 0; }
.adf-dynamic-table td:first-of-type, .adf-dynamic-table th:first-of-type {
padding-left: 24px; } .adf-people-widget-image-row {
.adf-dynamic-table td:last-of-type, .adf-dynamic-table th:last-of-type { display: inline-block; }
padding-right: 24px; }
.adf-dynamic-table td { .adf-people-label-name {
color: rgba(0, 0, 0, 0.87); padding-left: 10px; }
position: relative;
vertical-align: middle;
height: 56px;
border-top: 1px solid rgba(0, 0, 0, 0.07);
border-bottom: 1px solid rgba(0, 0, 0, 0.07);
padding-top: 12px;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: default; }
.adf-dynamic-table th {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: pointer;
position: relative;
vertical-align: bottom;
text-overflow: ellipsis;
font-weight: bold;
line-height: 24px;
letter-spacing: 0;
height: 56px;
font-size: 12px;
color: rgba(0, 0, 0, 0.87);
padding-bottom: 8px;
box-sizing: border-box; }
.adf-dynamic-table th.sortable {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.adf-dynamic-table th.sortable:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc {
color: rgba(0, 0, 0, 0.87); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
word-wrap: normal;
font-feature-settings: 'liga';
-webkit-font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
font-size: 16px;
content: "\e5d8";
margin-right: 5px;
vertical-align: sub; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover:before {
color: rgba(0, 0, 0, 0.38); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
content: "\e5db"; }
.adf-dynamic-table .adf-dynamic-table-cell {
text-align: left;
cursor: default; }
.adf-dynamic-table .adf-dynamic-table-cell--text {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--number {
text-align: right; }
.adf-dynamic-table .adf-dynamic-table-cell--image {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--image img {
width: 24px;
height: 24px; }
.adf-dynamic-table .full-width {
width: 100%; }
.adf-filters__entry { .adf-filters__entry {
cursor: pointer; cursor: pointer;
@@ -17,7 +17,23 @@
* This mixin contains shared option styles between the select and * This mixin contains shared option styles between the select and
* autocomplete components. * autocomplete components.
*/ */
/* ANIMATION */ /**
* Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
* attribute, however Chrome handles high contrast differently.
*/
/* Theme for the ripple elements.*/
/** The mixins below are shared between md-menu and md-select */
/**
* This mixin adds the correct panel transform styles based
* on the direction that the menu panel opens.
*/
/* stylelint-disable material/no-prefixes */
/* stylelint-enable */
/**
* This mixin contains shared option styles between the select and
* autocomplete components.
*/
/** /**
* Applies styles for users in high contrast mode. Note that this only applies * Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]` * to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
@@ -2207,122 +2223,41 @@ container-widget .mat-focused .mat-input-prefix {
container-widget .mat-grid-tile { container-widget .mat-grid-tile {
overflow: visible; } overflow: visible; }
.adf-dynamic-table { .adf-people-widget {
width: 100%; width: 100%; }
position: relative;
border: 1px solid rgba(0, 0, 0, 0.07); .adf-people-widget-pic {
white-space: nowrap; background: #00bcd4;
font-size: 14px; display: inline-block;
/* Firefox fixes */ width: 40px;
border-collapse: unset; height: 40px;
border-spacing: 0; } border-radius: 100px;
.adf-dynamic-table thead { color: rgba(0, 0, 0, 0.87);
padding-bottom: 3px; } text-align: center;
.adf-dynamic-table tbody tr { font-weight: bolder;
position: relative; font-size: 18px;
height: 56px; text-transform: uppercase;
transition-duration: 0.28s; vertical-align: middle; }
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-property: background-color; } .adf-people-widget-row {
.adf-dynamic-table tbody tr:hover { padding-bottom: 10px; }
background-color: #eeeeee; }
.adf-dynamic-table tbody tr.is-selected, .adf-dynamic-table tbody tr.is-selected:hover { .adf-people-widget-image {
background-color: #e0f7fa; } margin-left: -45px;
.adf-dynamic-table tbody tr:focus { left: 21px;
outline-offset: -1px; background: white;
outline-width: 1px; border-radius: 100px;
outline-color: #448aff; width: 40px;
outline-style: solid; } height: 40px;
.adf-dynamic-table td, .adf-dynamic-table th { vertical-align: middle;
padding: 0 18px 12px 18px; display: inline-block;
text-align: center; } padding: 0; }
.adf-dynamic-table td:first-of-type, .adf-dynamic-table th:first-of-type {
padding-left: 24px; } .adf-people-widget-image-row {
.adf-dynamic-table td:last-of-type, .adf-dynamic-table th:last-of-type { display: inline-block; }
padding-right: 24px; }
.adf-dynamic-table td { .adf-people-label-name {
color: rgba(0, 0, 0, 0.87); padding-left: 10px; }
position: relative;
vertical-align: middle;
height: 56px;
border-top: 1px solid rgba(0, 0, 0, 0.07);
border-bottom: 1px solid rgba(0, 0, 0, 0.07);
padding-top: 12px;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: default; }
.adf-dynamic-table th {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: pointer;
position: relative;
vertical-align: bottom;
text-overflow: ellipsis;
font-weight: bold;
line-height: 24px;
letter-spacing: 0;
height: 56px;
font-size: 12px;
color: rgba(0, 0, 0, 0.87);
padding-bottom: 8px;
box-sizing: border-box; }
.adf-dynamic-table th.sortable {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.adf-dynamic-table th.sortable:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc {
color: rgba(0, 0, 0, 0.87); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
word-wrap: normal;
font-feature-settings: 'liga';
-webkit-font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
font-size: 16px;
content: "\e5d8";
margin-right: 5px;
vertical-align: sub; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover:before {
color: rgba(0, 0, 0, 0.38); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
content: "\e5db"; }
.adf-dynamic-table .adf-dynamic-table-cell {
text-align: left;
cursor: default; }
.adf-dynamic-table .adf-dynamic-table-cell--text {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--number {
text-align: right; }
.adf-dynamic-table .adf-dynamic-table-cell--image {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--image img {
width: 24px;
height: 24px; }
.adf-dynamic-table .full-width {
width: 100%; }
.adf-filters__entry { .adf-filters__entry {
cursor: pointer; cursor: pointer;
@@ -17,7 +17,23 @@
* This mixin contains shared option styles between the select and * This mixin contains shared option styles between the select and
* autocomplete components. * autocomplete components.
*/ */
/* ANIMATION */ /**
* Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
* attribute, however Chrome handles high contrast differently.
*/
/* Theme for the ripple elements.*/
/** The mixins below are shared between md-menu and md-select */
/**
* This mixin adds the correct panel transform styles based
* on the direction that the menu panel opens.
*/
/* stylelint-disable material/no-prefixes */
/* stylelint-enable */
/**
* This mixin contains shared option styles between the select and
* autocomplete components.
*/
/** /**
* Applies styles for users in high contrast mode. Note that this only applies * Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]` * to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
@@ -2207,122 +2223,41 @@ container-widget .mat-focused .mat-input-prefix {
container-widget .mat-grid-tile { container-widget .mat-grid-tile {
overflow: visible; } overflow: visible; }
.adf-dynamic-table { .adf-people-widget {
width: 100%; width: 100%; }
position: relative;
border: 1px solid rgba(0, 0, 0, 0.07); .adf-people-widget-pic {
white-space: nowrap; background: #00bcd4;
font-size: 14px; display: inline-block;
/* Firefox fixes */ width: 40px;
border-collapse: unset; height: 40px;
border-spacing: 0; } border-radius: 100px;
.adf-dynamic-table thead { color: rgba(0, 0, 0, 0.87);
padding-bottom: 3px; } text-align: center;
.adf-dynamic-table tbody tr { font-weight: bolder;
position: relative; font-size: 18px;
height: 56px; text-transform: uppercase;
transition-duration: 0.28s; vertical-align: middle; }
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-property: background-color; } .adf-people-widget-row {
.adf-dynamic-table tbody tr:hover { padding-bottom: 10px; }
background-color: #eeeeee; }
.adf-dynamic-table tbody tr.is-selected, .adf-dynamic-table tbody tr.is-selected:hover { .adf-people-widget-image {
background-color: #e0f7fa; } margin-left: -45px;
.adf-dynamic-table tbody tr:focus { left: 21px;
outline-offset: -1px; background: white;
outline-width: 1px; border-radius: 100px;
outline-color: #448aff; width: 40px;
outline-style: solid; } height: 40px;
.adf-dynamic-table td, .adf-dynamic-table th { vertical-align: middle;
padding: 0 18px 12px 18px; display: inline-block;
text-align: center; } padding: 0; }
.adf-dynamic-table td:first-of-type, .adf-dynamic-table th:first-of-type {
padding-left: 24px; } .adf-people-widget-image-row {
.adf-dynamic-table td:last-of-type, .adf-dynamic-table th:last-of-type { display: inline-block; }
padding-right: 24px; }
.adf-dynamic-table td { .adf-people-label-name {
color: rgba(0, 0, 0, 0.87); padding-left: 10px; }
position: relative;
vertical-align: middle;
height: 56px;
border-top: 1px solid rgba(0, 0, 0, 0.07);
border-bottom: 1px solid rgba(0, 0, 0, 0.07);
padding-top: 12px;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: default; }
.adf-dynamic-table th {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: pointer;
position: relative;
vertical-align: bottom;
text-overflow: ellipsis;
font-weight: bold;
line-height: 24px;
letter-spacing: 0;
height: 56px;
font-size: 12px;
color: rgba(0, 0, 0, 0.87);
padding-bottom: 8px;
box-sizing: border-box; }
.adf-dynamic-table th.sortable {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.adf-dynamic-table th.sortable:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc {
color: rgba(0, 0, 0, 0.87); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
word-wrap: normal;
font-feature-settings: 'liga';
-webkit-font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
font-size: 16px;
content: "\e5d8";
margin-right: 5px;
vertical-align: sub; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover:before {
color: rgba(0, 0, 0, 0.38); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
content: "\e5db"; }
.adf-dynamic-table .adf-dynamic-table-cell {
text-align: left;
cursor: default; }
.adf-dynamic-table .adf-dynamic-table-cell--text {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--number {
text-align: right; }
.adf-dynamic-table .adf-dynamic-table-cell--image {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--image img {
width: 24px;
height: 24px; }
.adf-dynamic-table .full-width {
width: 100%; }
.adf-filters__entry { .adf-filters__entry {
cursor: pointer; cursor: pointer;
@@ -17,7 +17,23 @@
* This mixin contains shared option styles between the select and * This mixin contains shared option styles between the select and
* autocomplete components. * autocomplete components.
*/ */
/* ANIMATION */ /**
* Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
* attribute, however Chrome handles high contrast differently.
*/
/* Theme for the ripple elements.*/
/** The mixins below are shared between md-menu and md-select */
/**
* This mixin adds the correct panel transform styles based
* on the direction that the menu panel opens.
*/
/* stylelint-disable material/no-prefixes */
/* stylelint-enable */
/**
* This mixin contains shared option styles between the select and
* autocomplete components.
*/
/** /**
* Applies styles for users in high contrast mode. Note that this only applies * Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]` * to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
@@ -2207,122 +2223,41 @@ container-widget .mat-focused .mat-input-prefix {
container-widget .mat-grid-tile { container-widget .mat-grid-tile {
overflow: visible; } overflow: visible; }
.adf-dynamic-table { .adf-people-widget {
width: 100%; width: 100%; }
position: relative;
border: 1px solid rgba(0, 0, 0, 0.07); .adf-people-widget-pic {
white-space: nowrap; background: #8bc34a;
font-size: 14px; display: inline-block;
/* Firefox fixes */ width: 40px;
border-collapse: unset; height: 40px;
border-spacing: 0; } border-radius: 100px;
.adf-dynamic-table thead { color: rgba(0, 0, 0, 0.87);
padding-bottom: 3px; } text-align: center;
.adf-dynamic-table tbody tr { font-weight: bolder;
position: relative; font-size: 18px;
height: 56px; text-transform: uppercase;
transition-duration: 0.28s; vertical-align: middle; }
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-property: background-color; } .adf-people-widget-row {
.adf-dynamic-table tbody tr:hover { padding-bottom: 10px; }
background-color: #eeeeee; }
.adf-dynamic-table tbody tr.is-selected, .adf-dynamic-table tbody tr.is-selected:hover { .adf-people-widget-image {
background-color: #e0f7fa; } margin-left: -45px;
.adf-dynamic-table tbody tr:focus { left: 21px;
outline-offset: -1px; background: white;
outline-width: 1px; border-radius: 100px;
outline-color: #448aff; width: 40px;
outline-style: solid; } height: 40px;
.adf-dynamic-table td, .adf-dynamic-table th { vertical-align: middle;
padding: 0 18px 12px 18px; display: inline-block;
text-align: center; } padding: 0; }
.adf-dynamic-table td:first-of-type, .adf-dynamic-table th:first-of-type {
padding-left: 24px; } .adf-people-widget-image-row {
.adf-dynamic-table td:last-of-type, .adf-dynamic-table th:last-of-type { display: inline-block; }
padding-right: 24px; }
.adf-dynamic-table td { .adf-people-label-name {
color: rgba(0, 0, 0, 0.87); padding-left: 10px; }
position: relative;
vertical-align: middle;
height: 56px;
border-top: 1px solid rgba(0, 0, 0, 0.07);
border-bottom: 1px solid rgba(0, 0, 0, 0.07);
padding-top: 12px;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: default; }
.adf-dynamic-table th {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: pointer;
position: relative;
vertical-align: bottom;
text-overflow: ellipsis;
font-weight: bold;
line-height: 24px;
letter-spacing: 0;
height: 56px;
font-size: 12px;
color: rgba(0, 0, 0, 0.87);
padding-bottom: 8px;
box-sizing: border-box; }
.adf-dynamic-table th.sortable {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.adf-dynamic-table th.sortable:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc {
color: rgba(0, 0, 0, 0.87); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
word-wrap: normal;
font-feature-settings: 'liga';
-webkit-font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
font-size: 16px;
content: "\e5d8";
margin-right: 5px;
vertical-align: sub; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover:before {
color: rgba(0, 0, 0, 0.38); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
content: "\e5db"; }
.adf-dynamic-table .adf-dynamic-table-cell {
text-align: left;
cursor: default; }
.adf-dynamic-table .adf-dynamic-table-cell--text {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--number {
text-align: right; }
.adf-dynamic-table .adf-dynamic-table-cell--image {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--image img {
width: 24px;
height: 24px; }
.adf-dynamic-table .full-width {
width: 100%; }
.adf-filters__entry { .adf-filters__entry {
cursor: pointer; cursor: pointer;
@@ -17,7 +17,23 @@
* This mixin contains shared option styles between the select and * This mixin contains shared option styles between the select and
* autocomplete components. * autocomplete components.
*/ */
/* ANIMATION */ /**
* Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
* attribute, however Chrome handles high contrast differently.
*/
/* Theme for the ripple elements.*/
/** The mixins below are shared between md-menu and md-select */
/**
* This mixin adds the correct panel transform styles based
* on the direction that the menu panel opens.
*/
/* stylelint-disable material/no-prefixes */
/* stylelint-enable */
/**
* This mixin contains shared option styles between the select and
* autocomplete components.
*/
/** /**
* Applies styles for users in high contrast mode. Note that this only applies * Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]` * to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
@@ -2207,122 +2223,41 @@ container-widget .mat-focused .mat-input-prefix {
container-widget .mat-grid-tile { container-widget .mat-grid-tile {
overflow: visible; } overflow: visible; }
.adf-dynamic-table { .adf-people-widget {
width: 100%; width: 100%; }
position: relative;
border: 1px solid rgba(0, 0, 0, 0.07); .adf-people-widget-pic {
white-space: nowrap; background: #8bc34a;
font-size: 14px; display: inline-block;
/* Firefox fixes */ width: 40px;
border-collapse: unset; height: 40px;
border-spacing: 0; } border-radius: 100px;
.adf-dynamic-table thead { color: rgba(0, 0, 0, 0.87);
padding-bottom: 3px; } text-align: center;
.adf-dynamic-table tbody tr { font-weight: bolder;
position: relative; font-size: 18px;
height: 56px; text-transform: uppercase;
transition-duration: 0.28s; vertical-align: middle; }
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-property: background-color; } .adf-people-widget-row {
.adf-dynamic-table tbody tr:hover { padding-bottom: 10px; }
background-color: #eeeeee; }
.adf-dynamic-table tbody tr.is-selected, .adf-dynamic-table tbody tr.is-selected:hover { .adf-people-widget-image {
background-color: #e0f7fa; } margin-left: -45px;
.adf-dynamic-table tbody tr:focus { left: 21px;
outline-offset: -1px; background: white;
outline-width: 1px; border-radius: 100px;
outline-color: #448aff; width: 40px;
outline-style: solid; } height: 40px;
.adf-dynamic-table td, .adf-dynamic-table th { vertical-align: middle;
padding: 0 18px 12px 18px; display: inline-block;
text-align: center; } padding: 0; }
.adf-dynamic-table td:first-of-type, .adf-dynamic-table th:first-of-type {
padding-left: 24px; } .adf-people-widget-image-row {
.adf-dynamic-table td:last-of-type, .adf-dynamic-table th:last-of-type { display: inline-block; }
padding-right: 24px; }
.adf-dynamic-table td { .adf-people-label-name {
color: rgba(0, 0, 0, 0.87); padding-left: 10px; }
position: relative;
vertical-align: middle;
height: 56px;
border-top: 1px solid rgba(0, 0, 0, 0.07);
border-bottom: 1px solid rgba(0, 0, 0, 0.07);
padding-top: 12px;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: default; }
.adf-dynamic-table th {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: pointer;
position: relative;
vertical-align: bottom;
text-overflow: ellipsis;
font-weight: bold;
line-height: 24px;
letter-spacing: 0;
height: 56px;
font-size: 12px;
color: rgba(0, 0, 0, 0.87);
padding-bottom: 8px;
box-sizing: border-box; }
.adf-dynamic-table th.sortable {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.adf-dynamic-table th.sortable:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc {
color: rgba(0, 0, 0, 0.87); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
word-wrap: normal;
font-feature-settings: 'liga';
-webkit-font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
font-size: 16px;
content: "\e5d8";
margin-right: 5px;
vertical-align: sub; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover:before {
color: rgba(0, 0, 0, 0.38); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
content: "\e5db"; }
.adf-dynamic-table .adf-dynamic-table-cell {
text-align: left;
cursor: default; }
.adf-dynamic-table .adf-dynamic-table-cell--text {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--number {
text-align: right; }
.adf-dynamic-table .adf-dynamic-table-cell--image {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--image img {
width: 24px;
height: 24px; }
.adf-dynamic-table .full-width {
width: 100%; }
.adf-filters__entry { .adf-filters__entry {
cursor: pointer; cursor: pointer;
@@ -17,7 +17,23 @@
* This mixin contains shared option styles between the select and * This mixin contains shared option styles between the select and
* autocomplete components. * autocomplete components.
*/ */
/* ANIMATION */ /**
* Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
* attribute, however Chrome handles high contrast differently.
*/
/* Theme for the ripple elements.*/
/** The mixins below are shared between md-menu and md-select */
/**
* This mixin adds the correct panel transform styles based
* on the direction that the menu panel opens.
*/
/* stylelint-disable material/no-prefixes */
/* stylelint-enable */
/**
* This mixin contains shared option styles between the select and
* autocomplete components.
*/
/** /**
* Applies styles for users in high contrast mode. Note that this only applies * Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]` * to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
@@ -2207,122 +2223,41 @@ container-widget .mat-focused .mat-input-prefix {
container-widget .mat-grid-tile { container-widget .mat-grid-tile {
overflow: visible; } overflow: visible; }
.adf-dynamic-table { .adf-people-widget {
width: 100%; width: 100%; }
position: relative;
border: 1px solid rgba(0, 0, 0, 0.07); .adf-people-widget-pic {
white-space: nowrap; background: #3f51b5;
font-size: 14px; display: inline-block;
/* Firefox fixes */ width: 40px;
border-collapse: unset; height: 40px;
border-spacing: 0; } border-radius: 100px;
.adf-dynamic-table thead { color: rgba(0, 0, 0, 0.87);
padding-bottom: 3px; } text-align: center;
.adf-dynamic-table tbody tr { font-weight: bolder;
position: relative; font-size: 18px;
height: 56px; text-transform: uppercase;
transition-duration: 0.28s; vertical-align: middle; }
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-property: background-color; } .adf-people-widget-row {
.adf-dynamic-table tbody tr:hover { padding-bottom: 10px; }
background-color: #eeeeee; }
.adf-dynamic-table tbody tr.is-selected, .adf-dynamic-table tbody tr.is-selected:hover { .adf-people-widget-image {
background-color: #e0f7fa; } margin-left: -45px;
.adf-dynamic-table tbody tr:focus { left: 21px;
outline-offset: -1px; background: white;
outline-width: 1px; border-radius: 100px;
outline-color: #448aff; width: 40px;
outline-style: solid; } height: 40px;
.adf-dynamic-table td, .adf-dynamic-table th { vertical-align: middle;
padding: 0 18px 12px 18px; display: inline-block;
text-align: center; } padding: 0; }
.adf-dynamic-table td:first-of-type, .adf-dynamic-table th:first-of-type {
padding-left: 24px; } .adf-people-widget-image-row {
.adf-dynamic-table td:last-of-type, .adf-dynamic-table th:last-of-type { display: inline-block; }
padding-right: 24px; }
.adf-dynamic-table td { .adf-people-label-name {
color: rgba(0, 0, 0, 0.87); padding-left: 10px; }
position: relative;
vertical-align: middle;
height: 56px;
border-top: 1px solid rgba(0, 0, 0, 0.07);
border-bottom: 1px solid rgba(0, 0, 0, 0.07);
padding-top: 12px;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: default; }
.adf-dynamic-table th {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: pointer;
position: relative;
vertical-align: bottom;
text-overflow: ellipsis;
font-weight: bold;
line-height: 24px;
letter-spacing: 0;
height: 56px;
font-size: 12px;
color: rgba(0, 0, 0, 0.87);
padding-bottom: 8px;
box-sizing: border-box; }
.adf-dynamic-table th.sortable {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.adf-dynamic-table th.sortable:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc {
color: rgba(0, 0, 0, 0.87); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
word-wrap: normal;
font-feature-settings: 'liga';
-webkit-font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
font-size: 16px;
content: "\e5d8";
margin-right: 5px;
vertical-align: sub; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover:before {
color: rgba(0, 0, 0, 0.38); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
content: "\e5db"; }
.adf-dynamic-table .adf-dynamic-table-cell {
text-align: left;
cursor: default; }
.adf-dynamic-table .adf-dynamic-table-cell--text {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--number {
text-align: right; }
.adf-dynamic-table .adf-dynamic-table-cell--image {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--image img {
width: 24px;
height: 24px; }
.adf-dynamic-table .full-width {
width: 100%; }
.adf-filters__entry { .adf-filters__entry {
cursor: pointer; cursor: pointer;
@@ -17,7 +17,23 @@
* This mixin contains shared option styles between the select and * This mixin contains shared option styles between the select and
* autocomplete components. * autocomplete components.
*/ */
/* ANIMATION */ /**
* Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
* attribute, however Chrome handles high contrast differently.
*/
/* Theme for the ripple elements.*/
/** The mixins below are shared between md-menu and md-select */
/**
* This mixin adds the correct panel transform styles based
* on the direction that the menu panel opens.
*/
/* stylelint-disable material/no-prefixes */
/* stylelint-enable */
/**
* This mixin contains shared option styles between the select and
* autocomplete components.
*/
/** /**
* Applies styles for users in high contrast mode. Note that this only applies * Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]` * to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
@@ -2207,122 +2223,41 @@ container-widget .mat-focused .mat-input-prefix {
container-widget .mat-grid-tile { container-widget .mat-grid-tile {
overflow: visible; } overflow: visible; }
.adf-dynamic-table { .adf-people-widget {
width: 100%; width: 100%; }
position: relative;
border: 1px solid rgba(255, 255, 255, 0.07); .adf-people-widget-pic {
white-space: nowrap; background: #c2185b;
font-size: 14px; display: inline-block;
/* Firefox fixes */ width: 40px;
border-collapse: unset; height: 40px;
border-spacing: 0; } border-radius: 100px;
.adf-dynamic-table thead { color: white;
padding-bottom: 3px; } text-align: center;
.adf-dynamic-table tbody tr { font-weight: bolder;
position: relative; font-size: 18px;
height: 56px; text-transform: uppercase;
transition-duration: 0.28s; vertical-align: middle; }
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-property: background-color; } .adf-people-widget-row {
.adf-dynamic-table tbody tr:hover { padding-bottom: 10px; }
background-color: #eeeeee; }
.adf-dynamic-table tbody tr.is-selected, .adf-dynamic-table tbody tr.is-selected:hover { .adf-people-widget-image {
background-color: #e0f7fa; } margin-left: -45px;
.adf-dynamic-table tbody tr:focus { left: 21px;
outline-offset: -1px; background: #424242;
outline-width: 1px; border-radius: 100px;
outline-color: #448aff; width: 40px;
outline-style: solid; } height: 40px;
.adf-dynamic-table td, .adf-dynamic-table th { vertical-align: middle;
padding: 0 18px 12px 18px; display: inline-block;
text-align: center; } padding: 0; }
.adf-dynamic-table td:first-of-type, .adf-dynamic-table th:first-of-type {
padding-left: 24px; } .adf-people-widget-image-row {
.adf-dynamic-table td:last-of-type, .adf-dynamic-table th:last-of-type { display: inline-block; }
padding-right: 24px; }
.adf-dynamic-table td { .adf-people-label-name {
color: white; padding-left: 10px; }
position: relative;
vertical-align: middle;
height: 56px;
border-top: 1px solid rgba(255, 255, 255, 0.07);
border-bottom: 1px solid rgba(255, 255, 255, 0.07);
padding-top: 12px;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: default; }
.adf-dynamic-table th {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: pointer;
position: relative;
vertical-align: bottom;
text-overflow: ellipsis;
font-weight: bold;
line-height: 24px;
letter-spacing: 0;
height: 56px;
font-size: 12px;
color: white;
padding-bottom: 8px;
box-sizing: border-box; }
.adf-dynamic-table th.sortable {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.adf-dynamic-table th.sortable:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc {
color: white; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
word-wrap: normal;
font-feature-settings: 'liga';
-webkit-font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
font-size: 16px;
content: "\e5d8";
margin-right: 5px;
vertical-align: sub; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover:before {
color: rgba(255, 255, 255, 0.3); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
content: "\e5db"; }
.adf-dynamic-table .adf-dynamic-table-cell {
text-align: left;
cursor: default; }
.adf-dynamic-table .adf-dynamic-table-cell--text {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--number {
text-align: right; }
.adf-dynamic-table .adf-dynamic-table-cell--image {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--image img {
width: 24px;
height: 24px; }
.adf-dynamic-table .full-width {
width: 100%; }
.adf-filters__entry { .adf-filters__entry {
cursor: pointer; cursor: pointer;
@@ -17,7 +17,23 @@
* This mixin contains shared option styles between the select and * This mixin contains shared option styles between the select and
* autocomplete components. * autocomplete components.
*/ */
/* ANIMATION */ /**
* Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
* attribute, however Chrome handles high contrast differently.
*/
/* Theme for the ripple elements.*/
/** The mixins below are shared between md-menu and md-select */
/**
* This mixin adds the correct panel transform styles based
* on the direction that the menu panel opens.
*/
/* stylelint-disable material/no-prefixes */
/* stylelint-enable */
/**
* This mixin contains shared option styles between the select and
* autocomplete components.
*/
/** /**
* Applies styles for users in high contrast mode. Note that this only applies * Applies styles for users in high contrast mode. Note that this only applies
* to Microsoft browsers. Chrome can be included by checking for the `html[hc]` * to Microsoft browsers. Chrome can be included by checking for the `html[hc]`
@@ -2207,122 +2223,41 @@ container-widget .mat-focused .mat-input-prefix {
container-widget .mat-grid-tile { container-widget .mat-grid-tile {
overflow: visible; } overflow: visible; }
.adf-dynamic-table { .adf-people-widget {
width: 100%; width: 100%; }
position: relative;
border: 1px solid rgba(255, 255, 255, 0.07); .adf-people-widget-pic {
white-space: nowrap; background: #7b1fa2;
font-size: 14px; display: inline-block;
/* Firefox fixes */ width: 40px;
border-collapse: unset; height: 40px;
border-spacing: 0; } border-radius: 100px;
.adf-dynamic-table thead { color: white;
padding-bottom: 3px; } text-align: center;
.adf-dynamic-table tbody tr { font-weight: bolder;
position: relative; font-size: 18px;
height: 56px; text-transform: uppercase;
transition-duration: 0.28s; vertical-align: middle; }
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-property: background-color; } .adf-people-widget-row {
.adf-dynamic-table tbody tr:hover { padding-bottom: 10px; }
background-color: #eeeeee; }
.adf-dynamic-table tbody tr.is-selected, .adf-dynamic-table tbody tr.is-selected:hover { .adf-people-widget-image {
background-color: #e0f7fa; } margin-left: -45px;
.adf-dynamic-table tbody tr:focus { left: 21px;
outline-offset: -1px; background: #424242;
outline-width: 1px; border-radius: 100px;
outline-color: #448aff; width: 40px;
outline-style: solid; } height: 40px;
.adf-dynamic-table td, .adf-dynamic-table th { vertical-align: middle;
padding: 0 18px 12px 18px; display: inline-block;
text-align: center; } padding: 0; }
.adf-dynamic-table td:first-of-type, .adf-dynamic-table th:first-of-type {
padding-left: 24px; } .adf-people-widget-image-row {
.adf-dynamic-table td:last-of-type, .adf-dynamic-table th:last-of-type { display: inline-block; }
padding-right: 24px; }
.adf-dynamic-table td { .adf-people-label-name {
color: white; padding-left: 10px; }
position: relative;
vertical-align: middle;
height: 56px;
border-top: 1px solid rgba(255, 255, 255, 0.07);
border-bottom: 1px solid rgba(255, 255, 255, 0.07);
padding-top: 12px;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: default; }
.adf-dynamic-table th {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: pointer;
position: relative;
vertical-align: bottom;
text-overflow: ellipsis;
font-weight: bold;
line-height: 24px;
letter-spacing: 0;
height: 56px;
font-size: 12px;
color: white;
padding-bottom: 8px;
box-sizing: border-box; }
.adf-dynamic-table th.sortable {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.adf-dynamic-table th.sortable:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc {
color: white; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
word-wrap: normal;
font-feature-settings: 'liga';
-webkit-font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
font-size: 16px;
content: "\e5d8";
margin-right: 5px;
vertical-align: sub; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover {
cursor: pointer; }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-asc:hover:before, .adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:hover:before {
color: rgba(255, 255, 255, 0.3); }
.adf-dynamic-table th.adf-dynamic-table__header--sorted-desc:before {
content: "\e5db"; }
.adf-dynamic-table .adf-dynamic-table-cell {
text-align: left;
cursor: default; }
.adf-dynamic-table .adf-dynamic-table-cell--text {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--number {
text-align: right; }
.adf-dynamic-table .adf-dynamic-table-cell--image {
text-align: left; }
.adf-dynamic-table .adf-dynamic-table-cell--image img {
width: 24px;
height: 24px; }
.adf-dynamic-table .full-width {
width: 100%; }
.adf-filters__entry { .adf-filters__entry {
cursor: pointer; cursor: pointer;
+2 -1
View File
@@ -6,7 +6,7 @@
"scripts": { "scripts": {
"clean": "rimraf node_modules", "clean": "rimraf node_modules",
"clean-lock": "rimraf package-lock.json", "clean-lock": "rimraf package-lock.json",
"build": "npm run toc && npm run markdownlint && npm run webpack -- --config config/webpack.build.js --progress --profile --bail && npm run build-style", "build": "npm run pkg-build && npm run toc && npm run markdownlint && npm run webpack -- --config config/webpack.build.js --progress --profile --bail && npm run build-style",
"build-style": "npm run webpack -- --config config/webpack.style.js --progress --profile --bail", "build-style": "npm run webpack -- --config config/webpack.style.js --progress --profile --bail",
"pkg-build": "package-json-merge ng2-alfresco-core/package.json ng2-alfresco-datatable/package.json ng2-activiti-diagrams/package.json ng2-activiti-analytics/package.json ng2-activiti-form/package.json ng2-activiti-tasklist/package.json ng2-activiti-processlist/package.json ng2-alfresco-documentlist/package.json ng2-alfresco-login/package.json ng2-alfresco-search/package.json ng2-alfresco-tag/package.json ng2-alfresco-upload/package.json ng2-alfresco-viewer/package.json ng2-alfresco-webscript/package.json ng2-alfresco-webscript/package.json ng2-alfresco-userinfo/package.json ng2-alfresco-social/package.json package-base.json > package.json", "pkg-build": "package-json-merge ng2-alfresco-core/package.json ng2-alfresco-datatable/package.json ng2-activiti-diagrams/package.json ng2-activiti-analytics/package.json ng2-activiti-form/package.json ng2-activiti-tasklist/package.json ng2-activiti-processlist/package.json ng2-alfresco-documentlist/package.json ng2-alfresco-login/package.json ng2-alfresco-search/package.json ng2-alfresco-tag/package.json ng2-alfresco-upload/package.json ng2-alfresco-viewer/package.json ng2-alfresco-webscript/package.json ng2-alfresco-webscript/package.json ng2-alfresco-userinfo/package.json ng2-alfresco-social/package.json package-base.json > package.json",
"test": "node node_modules/karma/bin/karma start --reporters mocha,coverage --single-run --component .", "test": "node node_modules/karma/bin/karma start --reporters mocha,coverage --single-run --component .",
@@ -14,6 +14,7 @@
"toc": "markdown-toc -i ng2-alfresco-core/README.md && markdown-toc -i ng2-alfresco-datatable/README.md && markdown-toc -i ng2-activiti-diagrams/README.md && markdown-toc -i ng2-activiti-analytics/README.md && markdown-toc -i ng2-activiti-form/README.md && markdown-toc -i ng2-activiti-tasklist/README.md && markdown-toc -i ng2-activiti-processlist/README.md && markdown-toc -i ng2-alfresco-documentlist/README.md && markdown-toc -i ng2-alfresco-login/README.md && markdown-toc -i ng2-alfresco-search/README.md && markdown-toc -i ng2-alfresco-tag/README.md && markdown-toc -i ng2-alfresco-upload/README.md && markdown-toc -i ng2-alfresco-viewer/README.md && markdown-toc -i ng2-alfresco-webscript/README.md && markdown-toc -i ng2-alfresco-webscript/README.md && markdown-toc -i ng2-alfresco-userinfo/README.md && markdown-toc -i ng2-alfresco-social/README.md && markdown-toc -i README.md", "toc": "markdown-toc -i ng2-alfresco-core/README.md && markdown-toc -i ng2-alfresco-datatable/README.md && markdown-toc -i ng2-activiti-diagrams/README.md && markdown-toc -i ng2-activiti-analytics/README.md && markdown-toc -i ng2-activiti-form/README.md && markdown-toc -i ng2-activiti-tasklist/README.md && markdown-toc -i ng2-activiti-processlist/README.md && markdown-toc -i ng2-alfresco-documentlist/README.md && markdown-toc -i ng2-alfresco-login/README.md && markdown-toc -i ng2-alfresco-search/README.md && markdown-toc -i ng2-alfresco-tag/README.md && markdown-toc -i ng2-alfresco-upload/README.md && markdown-toc -i ng2-alfresco-viewer/README.md && markdown-toc -i ng2-alfresco-webscript/README.md && markdown-toc -i ng2-alfresco-webscript/README.md && markdown-toc -i ng2-alfresco-userinfo/README.md && markdown-toc -i ng2-alfresco-social/README.md && markdown-toc -i README.md",
"markdownlint": "markdownlint ng2-alfresco-core/README.md && markdownlint ng2-alfresco-datatable/README.md && markdownlint ng2-activiti-diagrams/README.md && markdownlint ng2-activiti-analytics/README.md && markdownlint ng2-activiti-form/README.md && markdownlint ng2-activiti-tasklist/README.md && markdownlint ng2-activiti-processlist/README.md && markdownlint ng2-alfresco-documentlist/README.md && markdownlint ng2-alfresco-login/README.md && markdownlint ng2-alfresco-search/README.md && markdownlint ng2-alfresco-tag/README.md && markdownlint ng2-alfresco-upload/README.md && markdownlint ng2-alfresco-viewer/README.md && markdownlint ng2-alfresco-webscript/README.md && markdownlint ng2-alfresco-webscript/README.md && markdownlint ng2-alfresco-userinfo/README.md && markdownlint ng2-alfresco-social/README.md && markdownlint README.md", "markdownlint": "markdownlint ng2-alfresco-core/README.md && markdownlint ng2-alfresco-datatable/README.md && markdownlint ng2-activiti-diagrams/README.md && markdownlint ng2-activiti-analytics/README.md && markdownlint ng2-activiti-form/README.md && markdownlint ng2-activiti-tasklist/README.md && markdownlint ng2-activiti-processlist/README.md && markdownlint ng2-alfresco-documentlist/README.md && markdownlint ng2-alfresco-login/README.md && markdownlint ng2-alfresco-search/README.md && markdownlint ng2-alfresco-tag/README.md && markdownlint ng2-alfresco-upload/README.md && markdownlint ng2-alfresco-viewer/README.md && markdownlint ng2-alfresco-webscript/README.md && markdownlint ng2-alfresco-webscript/README.md && markdownlint ng2-alfresco-userinfo/README.md && markdownlint ng2-alfresco-social/README.md && markdownlint README.md",
"doc": "npm run toc && npm run markdownlint && npm run webpack -- --config config/webpack.doc.js --progress --profile --bail", "doc": "npm run toc && npm run markdownlint && npm run webpack -- --config config/webpack.doc.js --progress --profile --bail",
"docindex": "node config/buildFullDocIndex.js",
"tslint": "", "tslint": "",
"prepublish": "", "prepublish": "",
"tsc": "", "tsc": "",
+16 -16
View File
@@ -17,7 +17,6 @@
"toc": "markdown-toc -i ng2-alfresco-core/README.md && markdown-toc -i ng2-alfresco-datatable/README.md && markdown-toc -i ng2-activiti-diagrams/README.md && markdown-toc -i ng2-activiti-analytics/README.md && markdown-toc -i ng2-activiti-form/README.md && markdown-toc -i ng2-activiti-tasklist/README.md && markdown-toc -i ng2-activiti-processlist/README.md && markdown-toc -i ng2-alfresco-documentlist/README.md && markdown-toc -i ng2-alfresco-login/README.md && markdown-toc -i ng2-alfresco-search/README.md && markdown-toc -i ng2-alfresco-tag/README.md && markdown-toc -i ng2-alfresco-upload/README.md && markdown-toc -i ng2-alfresco-viewer/README.md && markdown-toc -i ng2-alfresco-webscript/README.md && markdown-toc -i ng2-alfresco-webscript/README.md && markdown-toc -i ng2-alfresco-userinfo/README.md && markdown-toc -i ng2-alfresco-social/README.md && markdown-toc -i README.md", "toc": "markdown-toc -i ng2-alfresco-core/README.md && markdown-toc -i ng2-alfresco-datatable/README.md && markdown-toc -i ng2-activiti-diagrams/README.md && markdown-toc -i ng2-activiti-analytics/README.md && markdown-toc -i ng2-activiti-form/README.md && markdown-toc -i ng2-activiti-tasklist/README.md && markdown-toc -i ng2-activiti-processlist/README.md && markdown-toc -i ng2-alfresco-documentlist/README.md && markdown-toc -i ng2-alfresco-login/README.md && markdown-toc -i ng2-alfresco-search/README.md && markdown-toc -i ng2-alfresco-tag/README.md && markdown-toc -i ng2-alfresco-upload/README.md && markdown-toc -i ng2-alfresco-viewer/README.md && markdown-toc -i ng2-alfresco-webscript/README.md && markdown-toc -i ng2-alfresco-webscript/README.md && markdown-toc -i ng2-alfresco-userinfo/README.md && markdown-toc -i ng2-alfresco-social/README.md && markdown-toc -i README.md",
"markdownlint": "markdownlint ng2-alfresco-core/README.md && markdownlint ng2-alfresco-datatable/README.md && markdownlint ng2-activiti-diagrams/README.md && markdownlint ng2-activiti-analytics/README.md && markdownlint ng2-activiti-form/README.md && markdownlint ng2-activiti-tasklist/README.md && markdownlint ng2-activiti-processlist/README.md && markdownlint ng2-alfresco-documentlist/README.md && markdownlint ng2-alfresco-login/README.md && markdownlint ng2-alfresco-search/README.md && markdownlint ng2-alfresco-tag/README.md && markdownlint ng2-alfresco-upload/README.md && markdownlint ng2-alfresco-viewer/README.md && markdownlint ng2-alfresco-webscript/README.md && markdownlint ng2-alfresco-webscript/README.md && markdownlint ng2-alfresco-userinfo/README.md && markdownlint ng2-alfresco-social/README.md && markdownlint README.md", "markdownlint": "markdownlint ng2-alfresco-core/README.md && markdownlint ng2-alfresco-datatable/README.md && markdownlint ng2-activiti-diagrams/README.md && markdownlint ng2-activiti-analytics/README.md && markdownlint ng2-activiti-form/README.md && markdownlint ng2-activiti-tasklist/README.md && markdownlint ng2-activiti-processlist/README.md && markdownlint ng2-alfresco-documentlist/README.md && markdownlint ng2-alfresco-login/README.md && markdownlint ng2-alfresco-search/README.md && markdownlint ng2-alfresco-tag/README.md && markdownlint ng2-alfresco-upload/README.md && markdownlint ng2-alfresco-viewer/README.md && markdownlint ng2-alfresco-webscript/README.md && markdownlint ng2-alfresco-webscript/README.md && markdownlint ng2-alfresco-userinfo/README.md && markdownlint ng2-alfresco-social/README.md && markdownlint README.md",
"doc": "npm run toc && npm run markdownlint && npm run webpack -- --config config/webpack.doc.js --progress --profile --bail", "doc": "npm run toc && npm run markdownlint && npm run webpack -- --config config/webpack.doc.js --progress --profile --bail",
"docindex": "node config/buildFullDocIndex.js",
"tslint": "", "tslint": "",
"prepublish": "", "prepublish": "",
"tsc": "", "tsc": "",
@@ -76,25 +75,26 @@
"@angular/router": "4.3.6", "@angular/router": "4.3.6",
"@ngx-translate/core": "7.0.0", "@ngx-translate/core": "7.0.0",
"alfresco-js-api": "1.8.0", "alfresco-js-api": "1.8.0",
"chart.js": "2.5.0",
"core-js": "2.4.1", "core-js": "2.4.1",
"hammerjs": "2.0.8", "hammerjs": "2.0.8",
"material-design-lite": "1.2.1", "material-design-lite": "1.2.1",
"minimatch": "3.0.4",
"moment": "2.15.1", "moment": "2.15.1",
"ng2-activiti-diagrams": "1.8.0",
"ng2-activiti-form": "1.8.0",
"ng2-activiti-tasklist": "1.8.0",
"ng2-alfresco-core": "1.8.0",
"ng2-alfresco-datatable": "1.8.0",
"ng2-alfresco-documentlist": "1.8.0",
"ng2-charts": "1.6.0",
"pdfjs-dist": "1.5.404",
"raphael": "2.2.7",
"reflect-metadata": "0.1.10", "reflect-metadata": "0.1.10",
"rxjs": "5.1.0", "rxjs": "5.1.0",
"systemjs": "0.19.27", "systemjs": "0.19.27",
"zone.js": "0.8.12" "zone.js": "0.8.12",
"ng2-alfresco-core": "1.8.0",
"raphael": "2.2.7",
"chart.js": "2.5.0",
"ng2-activiti-diagrams": "1.8.0",
"ng2-charts": "1.6.0",
"@angular/flex-layout": "2.0.0-beta.9",
"ng2-activiti-form": "1.8.0",
"ng2-alfresco-datatable": "1.8.0",
"ng2-activiti-tasklist": "1.8.0",
"ng2-alfresco-documentlist": "1.8.0",
"minimatch": "3.0.4",
"pdfjs-dist": "1.5.404"
}, },
"devDependencies": { "devDependencies": {
"@types/hammerjs": "2.0.34", "@types/hammerjs": "2.0.34",
@@ -129,8 +129,6 @@
"karma-systemjs": "0.16.0", "karma-systemjs": "0.16.0",
"karma-webpack": "2.0.3", "karma-webpack": "2.0.3",
"loader-utils": "1.1.0", "loader-utils": "1.1.0",
"markdown-toc": "1.1.0",
"markdownlint-cli": "^0.3.1",
"merge-stream": "1.0.1", "merge-stream": "1.0.1",
"node-sass": "4.5.3", "node-sass": "4.5.3",
"null-loader": "0.1.1", "null-loader": "0.1.1",
@@ -154,7 +152,9 @@
"webpack": "2.2.1", "webpack": "2.2.1",
"webpack-dev-server": "2.3.0", "webpack-dev-server": "2.3.0",
"webpack-merge": "2.6.1", "webpack-merge": "2.6.1",
"wsrv": "0.1.7" "wsrv": "0.1.7",
"markdown-toc": "1.1.0",
"markdownlint-cli": "^0.3.1"
}, },
"license": "Apache-2.0", "license": "Apache-2.0",
"module": "./index.js", "module": "./index.js",