[ADF-1220] Extra data sources for Document List (#2224)

* initial trashcan support and demo page

* use testbed for unit tests

* support for restricting navigation for special data sources

* shared links mode, thumbnail fixes

* update unit tests

* improve Trashcan/SharedLinks columns

* Sites view for document list

* Favorites support for DL, upgrade to latest js-api (alpha)

* recent files support for document list

* support default presets

* readme updates and code fixes

* code fixes

* breadcrumb fixes

- show custom root node for certain scenarios
- fix css issues
- fix crash related to missing "path" property for certain scenarios

* toolbar style fixes

- addresses the shrinking issues with components embedded into toolbar (i.e. breadcrumb)

* i18n support for column presets

* unit tests
This commit is contained in:
Denys Vuika
2017-08-17 14:31:00 +01:00
committed by Eugenio Romano
parent f19bd0ba93
commit 13360186f4
36 changed files with 1806 additions and 4215 deletions

View File

@@ -28,6 +28,26 @@
<md-icon>more_vert</md-icon>
</button>
<md-menu #appMenu="mdMenu">
<a md-menu-item href="" routerLink="/trashcan">
<md-icon>extension</md-icon>
<span>DL: Trashcan</span>
</a>
<a md-menu-item href="" routerLink="/shared-links">
<md-icon>extension</md-icon>
<span>DL: Shared Links</span>
</a>
<a md-menu-item href="" routerLink="/sites">
<md-icon>extension</md-icon>
<span>DL: Sites</span>
</a>
<a md-menu-item href="" routerLink="/favorites">
<md-icon>extension</md-icon>
<span>DL: Favorites</span>
</a>
<a md-menu-item href="" routerLink="/recent">
<md-icon>extension</md-icon>
<span>DL: Recent</span>
</a>
<a md-menu-item href="" routerLink="/datatable">
<md-icon>view_module</md-icon>
<span>DataTable</span>

View File

@@ -43,6 +43,11 @@ import { CustomEditorsModule } from './components/activiti/custom-editor/custom-
import { MaterialModule } from './material.module';
import { DebugAppConfigService } from './services/debug-app-config.service';
import { FavoritesComponent } from './components/files/favorites.component';
import { RecentComponent } from './components/files/recent.component';
import { SharedLinksComponent } from './components/files/shared-links.component';
import { SitesComponent } from './components/files/sites.component';
import { TrashcanComponent } from './components/files/trashcan.component';
import { FormListDemoComponent } from './components/form/form-list-demo.component';
import {
@@ -120,7 +125,12 @@ if (process.env.ENV === 'production') {
FormNodeViewerComponent,
SettingsComponent,
FormDemoComponent,
FormListDemoComponent
FormListDemoComponent,
TrashcanComponent,
SharedLinksComponent,
SitesComponent,
FavoritesComponent,
RecentComponent
],
providers: [
{ provide: AppConfigService, useClass: DebugAppConfigService },

View File

@@ -39,6 +39,11 @@ import {
} from './components/index';
import { UploadButtonComponent } from 'ng2-alfresco-upload';
import { FavoritesComponent } from './components/files/favorites.component';
import { RecentComponent } from './components/files/recent.component';
import { SharedLinksComponent } from './components/files/shared-links.component';
import { SitesComponent } from './components/files/sites.component';
import { TrashcanComponent } from './components/files/trashcan.component';
import { FormListDemoComponent } from './components/form/form-list-demo.component';
export const appRoutes: Routes = [
@@ -63,6 +68,31 @@ export const appRoutes: Routes = [
component: FilesComponent,
canActivate: [AuthGuardEcm]
},
{
path: 'trashcan',
component: TrashcanComponent,
canActivate: [AuthGuardEcm]
},
{
path: 'shared-links',
component: SharedLinksComponent,
canActivate: [AuthGuardEcm]
},
{
path: 'sites',
component: SitesComponent,
canActivate: [AuthGuardEcm]
},
{
path: 'favorites',
component: FavoritesComponent,
canActivate: [AuthGuardEcm]
},
{
path: 'recent',
component: RecentComponent,
canActivate: [AuthGuardEcm]
},
{
path: 'datatable',
component: DataTableDemoComponent,

View File

@@ -0,0 +1,4 @@
<adf-document-list
currentFolderId="-favorites-"
locationFormat="/files">
</adf-document-list>

View File

@@ -0,0 +1,25 @@
/*!
* @license
* Copyright 2016 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component } from '@angular/core';
@Component({
selector: 'adf-favorites-demo',
templateUrl: 'favorites.component.html'
})
export class FavoritesComponent {
}

View File

@@ -0,0 +1,4 @@
<adf-document-list
currentFolderId="-recent-"
locationFormat="/files">
</adf-document-list>

View File

@@ -0,0 +1,25 @@
/*!
* @license
* Copyright 2016 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component } from '@angular/core';
@Component({
selector: 'adf-recent-demo',
templateUrl: 'recent.component.html'
})
export class RecentComponent {
}

View File

@@ -0,0 +1,4 @@
<adf-document-list
currentFolderId="-sharedlinks-"
locationFormat="/files">
</adf-document-list>

View File

@@ -0,0 +1,25 @@
/*!
* @license
* Copyright 2016 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component } from '@angular/core';
@Component({
selector: 'adf-shared-links-demo',
templateUrl: 'shared-links.component.html'
})
export class SharedLinksComponent {
}

View File

@@ -0,0 +1,3 @@
<adf-document-list
currentFolderId="-sites-">
</adf-document-list>

View File

@@ -0,0 +1,25 @@
/*!
* @license
* Copyright 2016 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component } from '@angular/core';
@Component({
selector: 'adf-sites-demo',
templateUrl: 'sites.component.html'
})
export class SitesComponent {
}

View File

@@ -0,0 +1,4 @@
<adf-document-list
currentFolderId="-trashcan-"
locationFormat="/files">
</adf-document-list>

View File

@@ -0,0 +1,25 @@
/*!
* @license
* Copyright 2016 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component } from '@angular/core';
@Component({
selector: 'adf-trashcan-demo',
templateUrl: 'trashcan.component.html'
})
export class TrashcanComponent {
}

File diff suppressed because it is too large Load Diff

View File

@@ -68,7 +68,7 @@
"@angular/platform-browser-dynamic": "4.2.5",
"@angular/router": "4.2.5",
"@ngx-translate/core": "7.0.0",
"alfresco-js-api": "1.7.0",
"alfresco-js-api": "1.8.0-9feb5d0164d6c5f994df8758e41ed126a8f69db2",
"chart.js": "2.5.0",
"core-js": "2.4.1",
"dialog-polyfill": "0.4.7",

View File

@@ -17,5 +17,6 @@ $adf-toolbar-font-size: 14px;
.mat-toolbar-row {
height: $adf-toolbar-height;
font-size: $adf-toolbar-font-size;
white-space: normal;
}
}

View File

@@ -198,6 +198,7 @@ export class ObjectDataColumn implements DataColumn {
key: string;
type: string; // text|image
format: string;
sortable: boolean;
title: string;
srTitle: string;
@@ -207,6 +208,7 @@ export class ObjectDataColumn implements DataColumn {
constructor(obj: any) {
this.key = obj.key;
this.type = obj.type || 'text';
this.format = obj.format;
this.sortable = obj.sortable;
this.title = obj.title;
this.srTitle = obj.srTitle;

View File

@@ -93,7 +93,7 @@ The properties currentFolderId, folderNode and node are the entry initialization
| selection | Array<MinimalNodeEntity> | [] | Contains selected nodes |
| rowStyle | string | | The inline style to apply to every row, see [NgStyle](https://angular.io/docs/ts/latest/api/common/index/NgStyle-directive.html) docs for more details and usage examples |
| rowStyleClass | string | | The CSS class to apply to every row |
| currentFolderId | string | null | Initial node ID of displayed folder. Can be `-root-`, `-shared-`, `-my-`, or a fixed node ID |
| currentFolderId | string | null | The ID of the folder node to display or a reserved string alias for special sources (see **Data Sources**) |
| folderNode | [MinimalNodeEntryEntity](https://github.com/Alfresco/alfresco-js-api/blob/master/src/alfresco-core-rest-api/docs/NodeMinimalEntry.md) | null | Currently displayed folder node |
| permissionsStyle | [PermissionStyleModel[]](https://github.com/Alfresco/alfresco-ng2-components/blob/master/ng2-components/ng2-alfresco-documentlist/src/models/permissions-style.model.ts) | null | with this array you can define different styles depending on the permission of the user on that node. The PermissionStyleModel allows you to select also if you want to apply the style only on the file or folder nodes. PermissionStyleModel.permission accepts the following values [Permissions](https://github.com/Alfresco/alfresco-ng2-components/blob/master/ng2-components/ng2-alfresco-core/src/models/permissions.enum.ts) [see more](#custom-row-permissions-style). |
| node | [NodePaging](https://github.com/Alfresco/alfresco-js-api/blob/master/src/alfresco-core-rest-api/docs/NodePaging.md) | null | Document list will show all the nodes contained in the NodePaging entity |
@@ -110,6 +110,7 @@ The properties currentFolderId, folderNode and node are the entry initialization
| imageResolver | `ImageResolver` | | Custom image resolver, [see more](#custom-image-resolver). |
| allowDropFiles | boolean | false | Toggle file drop support for rows (see **ng2-alfresco-core/UploadDirective** for more details) |
| sorting | string[] | | Defines default sorting. The format is an array of 2 strings `[key, direction]` i.e. `['name', 'desc']` or `['name', 'asc']`. Set this value only if you want to override default sorting detected by the component based on columns. |
| locationFormat | string | '/' | The default route for all the location-based columns (if declared). |
### Events
@@ -164,6 +165,135 @@ Here's a basic example on handling DOM events in the parent elements:
</div>
```
### Data Sources
For the Document List data sources you can use one of the following options:
#### Node ID
The unique identifier of the Node. Gets automatically updated when you perform navigation to other folders.
#### Repository aliases
You can use one of the well-known reserved aliases:
- `-root-`
- `-shared-`
- `-my-`
#### DocumentList aliases
The DocumentList component also provides support for the following reserved aliases you can use:
- `-trashcan-`,
- `-sharedlinks-`
- `-sites-`
- `-favorites-`
- `-recent-`
Note that due to specific origin of the data the sources above do not support navigation.
You may want handling single and double clicks yourself to perform navigation to other sources.
DocumentList component supports default presets for all the custom sources mentioned earlier.
If you don't provide any custom column definition utilizing "data-columns" component,
then a default preset will be automatically used at runtime.
Some of the presets use the Location columns that allow you to navigate to the parent folder of the node,
for instance navigating from the "Favorite" node to the folder containing it.
There's a possibility to set the default location format using "locationFormat" property, to avoid re-defining entire columns layout.
The default column layout for non-reserved views is:
- Icon
- Name
- Size
- Modified (date)
- Modified by
### Trashcan
```html
<adf-document-list
currentFolderId="-trashcan-"
locationFormat="/files">
</adf-document-list>
```
Default layout:
- Icon
- Name
- Location
- Size
- Deleted
- Deleted by
### Shared Links
```html
<adf-document-list
currentFolderId="-sharedlinks-"
locationFormat="/files">
</adf-document-list>
```
Default layout:
- Icon
- Name
- Location
- Size
- Modified
- Modified by
- Shared by
### Sites
```html
<adf-document-list
currentFolderId="-sites-">
</adf-document-list>
```
Default layout:
- Icon
- Title
- Status
### Favorites
```html
<adf-document-list
currentFolderId="-favorites-"
locationFormat="/files">
</adf-document-list>
```
Default layout:
- Icon
- Name
- Location
- Size
- Modified
- Modified by
### Recent Files
```html
<adf-document-list
currentFolderId="-recent-"
locationFormat="/files">
</adf-document-list>
```
Default layout:
- Icon
- Name
- Location
### Setting default folder
You can set current folder path by assigning a value for `currentFolderId` property.

View File

@@ -1,14 +1,18 @@
<div *ngIf="folderNode" data-automation-id="breadcrumb" class="adf-breadcrumb-container">
<li *ngFor="let item of route; let last = last" [class.active]="last" [ngSwitch]="last" title="{{ item.name }}" class="adf-breadcrumb-item">
<li *ngFor="let item of route; let last = last"
[class.active]="last"
[ngSwitch]="last"
title="{{ item.name }}"
class="adf-breadcrumb-item">
<a *ngSwitchDefault href="#" [attr.data-automation-id]="'breadcrumb_' + item.name"
class="adf-breadcrumb-item-anchor"
(click)="onRoutePathClick(item, $event)">
{{item.name}}
{{ item.name }}
</a>
<div *ngSwitchCase="true" class="adf-breadcrumb-item-current">
{{item.name}}
{{ item.name }}
</div>
<i class="material-icons adf-breadcrumb-item-chevron" *ngIf="!last">
@@ -16,3 +20,10 @@
</i>
</li>
</div>
<div *ngIf="!folderNode && root">
<li class="adf-breadcrumb-item">
<div class="adf-breadcrumb-item-current">
{{ root }}
</div>
</li>
</div>

View File

@@ -3,8 +3,13 @@
$breadcrumb-chevron-spacer: 2px;
.adf-breadcrumb {
font-family: Muli, Roboto, "Helvetica Neue", sans-serif;
display: flex;
flex: 1;
line-height: 24px;
font-size: 14px;
font-weight: 600;
letter-spacing: -0.2px;
&-container {
margin: 0;
@@ -13,19 +18,12 @@ $breadcrumb-chevron-spacer: 2px;
cursor: default;
display: flex;
overflow: hidden;
height: 25px;
}
&-item {
padding-right: $breadcrumb-chevron-spacer;
overflow: hidden;
display: flex;
line-height: 24px;
font-family: Muli, Roboto, "Helvetica Neue", sans-serif;
font-size: 14px;
font-weight: 600;
letter-spacing: -0.2px;
text-align: left;
opacity: 0.6;
@@ -34,6 +32,10 @@ $breadcrumb-chevron-spacer: 2px;
opacity: 1;
}
&.active {
flex: 1 0 auto;
}
&-chevron {
opacity: 1;
}

View File

@@ -15,11 +15,14 @@
* limitations under the License.
*/
import { SimpleChange } from '@angular/core';
import { CUSTOM_ELEMENTS_SCHEMA, SimpleChange } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { PathElementEntity } from 'alfresco-js-api';
import { CoreModule } from 'ng2-alfresco-core';
import { DataTableModule } from 'ng2-alfresco-datatable';
import { fakeNodeWithCreatePermission } from '../../assets/document-list.component.mock';
import { MaterialModule } from '../../material.module';
import { DocumentListService } from '../../services/document-list.service';
import { DocumentListComponent } from '../document-list.component';
import { BreadcrumbComponent } from './breadcrumb.component';
@@ -30,14 +33,24 @@ describe('Breadcrumb', () => {
let component: BreadcrumbComponent;
let fixture: ComponentFixture<BreadcrumbComponent>;
let element: HTMLElement;
let documentList: DocumentListComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
CoreModule.forRoot()
CoreModule,
DataTableModule,
MaterialModule
],
declarations: [
DocumentListComponent,
BreadcrumbComponent
],
providers: [
DocumentListService
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
}).compileComponents();
}));
@@ -47,6 +60,8 @@ describe('Breadcrumb', () => {
element = fixture.nativeElement;
component = fixture.componentInstance;
documentList = TestBed.createComponent(DocumentListComponent).componentInstance;
});
it('should prevent default click behavior', () => {
@@ -75,7 +90,6 @@ describe('Breadcrumb', () => {
});
it('should update document list on click', (done) => {
let documentList = new DocumentListComponent(null, null, null);
spyOn(documentList, 'loadFolderByNodeId').and.stub();
let node = <PathElementEntity> {id: '-id-', name: 'name'};

View File

@@ -47,10 +47,10 @@ export class BreadcrumbComponent implements OnChanges {
ngOnChanges(changes: SimpleChanges): void {
if (changes.folderNode) {
let node: MinimalNodeEntryEntity = changes.folderNode.currentValue;
const node: MinimalNodeEntryEntity = changes.folderNode.currentValue;
if (node) {
let route = <PathElementEntity[]> (node.path.elements || []).slice();
if (node && node.path) {
const route = <PathElementEntity[]> (node.path.elements || []).slice();
route.push(<PathElementEntity> {
id: node.id,

View File

@@ -32,12 +32,14 @@
* limitations under the License.
*/
import { SimpleChange } from '@angular/core';
import { CUSTOM_ELEMENTS_SCHEMA, SimpleChange } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MdOptionModule, MdSelectModule } from '@angular/material';
import { By } from '@angular/platform-browser';
import { CoreModule } from 'ng2-alfresco-core';
import { DataTableModule } from 'ng2-alfresco-datatable';
import { fakeNodeWithCreatePermission } from '../../assets/document-list.component.mock';
import { MaterialModule } from '../../material.module';
import { DocumentListService } from '../../services/document-list.service';
import { DocumentListComponent } from '../document-list.component';
import { DropdownBreadcrumbComponent } from './dropdown-breadcrumb.component';
@@ -46,16 +48,24 @@ describe('DropdownBreadcrumb', () => {
let component: DropdownBreadcrumbComponent;
let fixture: ComponentFixture<DropdownBreadcrumbComponent>;
let element: HTMLElement;
let documentList: DocumentListComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
CoreModule.forRoot(),
MdSelectModule,
MdOptionModule
CoreModule,
DataTableModule,
MaterialModule
],
declarations: [
DocumentListComponent,
DropdownBreadcrumbComponent
],
providers: [
DocumentListService
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
}).compileComponents();
}));
@@ -64,6 +74,8 @@ describe('DropdownBreadcrumb', () => {
fixture = TestBed.createComponent(DropdownBreadcrumbComponent);
element = fixture.nativeElement;
component = fixture.componentInstance;
documentList = TestBed.createComponent(DocumentListComponent).componentInstance;
});
function openSelect() {
@@ -144,7 +156,6 @@ describe('DropdownBreadcrumb', () => {
});
it('should update document list when clicking on an option', () => {
let documentList = new DocumentListComponent(null, null, null);
spyOn(documentList, 'loadFolderByNodeId').and.stub();
component.target = documentList;
fakeNodeWithCreatePermission.path.elements = [{ id: '1', name: 'Stark Industries' }];

View File

@@ -15,7 +15,12 @@
* limitations under the License.
*/
import { DocumentListServiceMock } from './../../assets/document-list.service.mock';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, TestBed } from '@angular/core/testing';
import { CoreModule } from 'ng2-alfresco-core';
import { DataTableModule } from 'ng2-alfresco-datatable';
import { MaterialModule } from '../../material.module';
import { DocumentListService } from '../../services/document-list.service';
import { ContentActionModel } from './../../models/content-action.model';
import { DocumentListComponent } from './../document-list.component';
import { ContentActionListComponent } from './content-action-list.component';
@@ -25,9 +30,27 @@ describe('ContentColumnList', () => {
let documentList: DocumentListComponent;
let actionList: ContentActionListComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
CoreModule,
DataTableModule,
MaterialModule
],
declarations: [
DocumentListComponent
],
providers: [
DocumentListService
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
}).compileComponents();
}));
beforeEach(() => {
let documentListService = new DocumentListServiceMock();
documentList = new DocumentListComponent(documentListService, null, null);
documentList = TestBed.createComponent(DocumentListComponent).componentInstance;
actionList = new ContentActionListComponent(documentList);
});

View File

@@ -15,11 +15,15 @@
* limitations under the License.
*/
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { EventEmitter } from '@angular/core';
import { async, TestBed } from '@angular/core/testing';
import { AlfrescoContentService, AlfrescoTranslationService, CoreModule, NotificationService } from 'ng2-alfresco-core';
import { DataTableModule } from 'ng2-alfresco-datatable';
import { MaterialModule } from '../../material.module';
import { DocumentListService } from '../../services/document-list.service';
import { FileNode } from './../../assets/document-library.model.mock';
import { DocumentListServiceMock } from './../../assets/document-list.service.mock';
import { ContentActionHandler } from './../../models/content-action.model';
import { DocumentActionsService } from './../../services/document-actions.service';
import { FolderActionsService } from './../../services/folder-actions.service';
@@ -43,10 +47,18 @@ describe('ContentAction', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
CoreModule.forRoot()
CoreModule,
DataTableModule,
MaterialModule
],
providers: [
AlfrescoContentService
DocumentListService
],
declarations: [
DocumentListComponent
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
}).compileComponents();
}));
@@ -56,11 +68,10 @@ describe('ContentAction', () => {
translateService = <AlfrescoTranslationService> { addTranslationFolder: () => {}};
nodeActionsService = new NodeActionsService(null, null, null);
notificationService = new NotificationService(null);
let documentServiceMock = new DocumentListServiceMock();
documentActions = new DocumentActionsService(nodeActionsService);
folderActions = new FolderActionsService(nodeActionsService, null, contentService);
documentList = new DocumentListComponent(documentServiceMock, null, null);
documentList = TestBed.createComponent(DocumentListComponent).componentInstance;
actionList = new ContentActionListComponent(documentList);
});

View File

@@ -15,9 +15,13 @@
* limitations under the License.
*/
import { DataColumn } from 'ng2-alfresco-datatable';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, TestBed } from '@angular/core/testing';
import { CoreModule } from 'ng2-alfresco-core';
import { DataColumn, DataTableModule } from 'ng2-alfresco-datatable';
import { MaterialModule } from '../../material.module';
import { DocumentListServiceMock } from './../../assets/document-list.service.mock';
import { DocumentListService } from '../../services/document-list.service';
import { DocumentListComponent } from './../document-list.component';
import { ContentColumnListComponent } from './content-column-list.component';
@@ -26,9 +30,27 @@ describe('ContentColumnList', () => {
let documentList: DocumentListComponent;
let columnList: ContentColumnListComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
CoreModule,
DataTableModule,
MaterialModule
],
declarations: [
DocumentListComponent
],
providers: [
DocumentListService
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
}).compileComponents();
}));
beforeEach(() => {
let service = new DocumentListServiceMock();
documentList = new DocumentListComponent(service, null, null);
documentList = TestBed.createComponent(DocumentListComponent).componentInstance;
columnList = new ContentColumnListComponent(documentList);
documentList.ngOnInit();

View File

@@ -15,7 +15,12 @@
* limitations under the License.
*/
import { DocumentListServiceMock } from './../../assets/document-list.service.mock';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, TestBed } from '@angular/core/testing';
import { CoreModule } from 'ng2-alfresco-core';
import { DataTableModule } from 'ng2-alfresco-datatable';
import { MaterialModule } from '../../material.module';
import { DocumentListService } from '../../services/document-list.service';
import { DocumentListComponent } from './../document-list.component';
import { ContentColumnListComponent } from './content-column-list.component';
import { ContentColumnComponent } from './content-column.component';
@@ -25,9 +30,27 @@ describe('ContentColumn', () => {
let documentList: DocumentListComponent;
let columnList: ContentColumnListComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
CoreModule,
DataTableModule,
MaterialModule
],
declarations: [
DocumentListComponent
],
providers: [
DocumentListService
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
}).compileComponents();
}));
beforeEach(() => {
let service = new DocumentListServiceMock();
documentList = new DocumentListComponent(service, null, null);
documentList = TestBed.createComponent(DocumentListComponent).componentInstance;
columnList = new ContentColumnListComponent(documentList);
documentList.ngOnInit();

View File

@@ -17,7 +17,7 @@
import { CUSTOM_ELEMENTS_SCHEMA, NgZone, SimpleChange, TemplateRef } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AlfrescoTranslationService, CoreModule } from 'ng2-alfresco-core';
import { AlfrescoApiService, AlfrescoTranslationService, CoreModule } from 'ng2-alfresco-core';
import { DataColumn, DataTableComponent } from 'ng2-alfresco-datatable';
import { DataTableModule } from 'ng2-alfresco-datatable';
import { Observable, Subject } from 'rxjs/Rx';
@@ -41,10 +41,10 @@ describe('DocumentList', () => {
let documentList: DocumentListComponent;
let documentListService: DocumentListService;
let apiService: AlfrescoApiService;
let fixture: ComponentFixture<DocumentListComponent>;
let element: HTMLElement;
let eventMock: any;
let componentHandler;
beforeEach(async(() => {
let zone = new NgZone({enableLongStackTrace: false});
@@ -73,15 +73,10 @@ describe('DocumentList', () => {
}
};
componentHandler = jasmine.createSpyObj('componentHandler', [
'upgradeAllRegistered', 'upgradeElement'
]);
window['componentHandler'] = componentHandler;
fixture = TestBed.createComponent(DocumentListComponent);
let translateService = TestBed.get(AlfrescoTranslationService);
spyOn(translateService, 'addTranslationFolder').and.stub();
// spyOn(translateService, 'addTranslationFolder').and.stub();
spyOn(translateService, 'get').and.callFake((key) => {
return Observable.of(key);
});
@@ -89,6 +84,7 @@ describe('DocumentList', () => {
element = fixture.nativeElement;
documentList = fixture.componentInstance;
documentListService = TestBed.get(DocumentListService);
apiService = TestBed.get(AlfrescoApiService);
fixture.detectChanges();
});
@@ -120,8 +116,8 @@ describe('DocumentList', () => {
columns.push(column);
documentList.ngAfterContentInit();
expect(columns.length).toBe(3);
expect(columns[2]).toBe(column);
expect(columns.length).toBe(6);
expect(columns[5]).toBe(column);
});
it('should call action\'s handler with node', () => {
@@ -873,4 +869,67 @@ describe('DocumentList', () => {
done();
});
});
it('should not perform navigation for virtual sources', () => {
const sources = ['-trashcan-', '-sharedlinks-', '-sites-', '-favorites-', '-recent-'];
const node = new FolderNode('folder');
documentList.currentFolderId = 'node-id';
expect(documentList.canNavigateFolder(node)).toBeTruthy();
sources.forEach(source => {
documentList.currentFolderId = source;
expect(documentList.canNavigateFolder(node)).toBeFalsy();
});
});
it('should fetch trashcan', () => {
const nodesApi = apiService.getInstance().core.nodesApi;
spyOn(nodesApi, 'getDeletedNodes').and.returnValue(Promise.resolve(null));
documentList.loadFolderByNodeId('-trashcan-');
expect(nodesApi.getDeletedNodes).toHaveBeenCalled();
});
it('should fetch shared links', () => {
const sharedlinksApi = apiService.getInstance().core.sharedlinksApi;
spyOn(sharedlinksApi, 'findSharedLinks').and.returnValue(Promise.resolve(null));
documentList.loadFolderByNodeId('-sharedlinks-');
expect(sharedlinksApi.findSharedLinks).toHaveBeenCalled();
});
it('should fetch sites', () => {
const sitesApi = apiService.getInstance().core.sitesApi;
spyOn(sitesApi, 'getSites').and.returnValue(Promise.resolve(null));
documentList.loadFolderByNodeId('-sites-');
expect(sitesApi.getSites).toHaveBeenCalled();
});
it('should fetch favorites', () => {
const favoritesApi = apiService.getInstance().core.favoritesApi;
spyOn(favoritesApi, 'getFavorites').and.returnValue(Promise.resolve(null));
documentList.loadFolderByNodeId('-favorites-');
expect(favoritesApi.getFavorites).toHaveBeenCalled();
});
it('should fetch recent', (done) => {
const person = { entry: { id: 'person '} };
const peopleApi = apiService.getInstance().core.peopleApi;
const searchApi = apiService.getInstance().search.searchApi;
spyOn(peopleApi, 'getPerson').and.returnValue(Promise.resolve(person));
spyOn(searchApi, 'search').and.returnValue(Promise.resolve(null));
documentList.loadFolderByNodeId('-recent-');
setTimeout(function() {
expect(peopleApi.getPerson).toHaveBeenCalledWith('-me-');
expect(searchApi.search).toHaveBeenCalled();
done();
}, 100);
});
});

View File

@@ -19,8 +19,8 @@ import {
AfterContentInit, Component, ContentChild, ElementRef, EventEmitter, HostListener, Input, NgZone,
OnChanges, OnInit, Output, SimpleChanges, TemplateRef, ViewChild
} from '@angular/core';
import { MinimalNodeEntity, MinimalNodeEntryEntity, NodePaging, Pagination } from 'alfresco-js-api';
import { DataColumnListComponent } from 'ng2-alfresco-core';
import { MinimalNodeEntity, MinimalNodeEntryEntity, NodePaging, Pagination, PersonEntry } from 'alfresco-js-api';
import { AlfrescoApiService, DataColumnListComponent } from 'ng2-alfresco-core';
import { DataCellEvent, DataColumn, DataRowActionEvent, DataSorting, DataTableComponent, ObjectDataColumn } from 'ng2-alfresco-datatable';
import { Observable, Subject } from 'rxjs/Rx';
import { ImageResolver, RowFilter, ShareDataRow, ShareDataTableAdapter } from './../data/share-datatable-adapter';
@@ -47,6 +47,9 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
@Input()
permissionsStyle: PermissionStyleModel[] = [];
@Input()
locationFormat: string = '/';
@Input()
navigate: boolean = true;
@@ -147,7 +150,32 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
constructor(private documentListService: DocumentListService,
private ngZone: NgZone,
private elementRef: ElementRef) {
private elementRef: ElementRef,
private apiService: AlfrescoApiService) {
}
private get nodesApi() {
return this.apiService.getInstance().core.nodesApi;
}
private get sharedLinksApi() {
return this.apiService.getInstance().core.sharedlinksApi;
}
private get sitesApi() {
return this.apiService.getInstance().core.sitesApi;
}
private get favoritesApi() {
return this.apiService.getInstance().core.favoritesApi;
}
private get peopleApi() {
return this.apiService.getInstance().core.peopleApi;
}
private get searchApi() {
return this.apiService.getInstance().search.searchApi;
}
getContextActions(node: MinimalNodeEntity) {
@@ -205,7 +233,7 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
let columns = this.data.getColumns();
if (!columns || columns.length === 0) {
this.setupDefaultColumns();
this.setupDefaultColumns(this.currentFolderId);
}
}
@@ -316,7 +344,7 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
}
performNavigation(node: MinimalNodeEntity): boolean {
if (node && node.entry && node.entry.isFolder) {
if (this.canNavigateFolder(node)) {
this.currentFolderId = node.entry.id;
this.folderNode = node.entry;
this.skipCount = 0;
@@ -360,14 +388,28 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
// gets folder node and its content
loadFolderByNodeId(nodeId: string) {
this.loading = true;
this.documentListService.getFolderNode(nodeId).then(node => {
this.folderNode = node;
this.currentFolderId = node.id;
this.skipCount = 0;
this.currentNodeAllowableOperations = node['allowableOperations'] ? node['allowableOperations'] : [];
this.loadFolderNodesByFolderNodeId(node.id, this.pageSize, this.skipCount).catch(err => this.error.emit(err));
})
.catch(err => this.error.emit(err));
if (nodeId === '-trashcan-') {
this.loadTrashcan();
} else if (nodeId === '-sharedlinks-') {
this.loadSharedLinks();
} else if (nodeId === '-sites-') {
this.loadSites();
} else if (nodeId === '-favorites-') {
this.loadFavorites();
} else if (nodeId === '-recent-') {
this.loadRecent();
} else {
this.documentListService
.getFolderNode(nodeId).then(node => {
this.folderNode = node;
this.currentFolderId = node.id;
this.skipCount = 0;
this.currentNodeAllowableOperations = node['allowableOperations'] ? node['allowableOperations'] : [];
this.loadFolderNodesByFolderNodeId(node.id, this.pageSize, this.skipCount).catch(err => this.error.emit(err));
})
.catch(err => this.error.emit(err));
}
}
loadFolderNodesByFolderNodeId(id: string, maxItems: number, skipCount: number): Promise<any> {
@@ -401,6 +443,107 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
}
private loadTrashcan(): void {
const options = {
include: [ 'path', 'properties' ],
maxItems: this.pageSize,
skipCount: this.skipCount
};
this.nodesApi.getDeletedNodes(options).then((page: NodePaging) => {
this.onPageLoaded(page);
});
}
private loadSharedLinks(): void {
const options = {
include: [ 'properties', 'allowableOperations', 'path' ],
maxItems: this.pageSize,
skipCount: this.skipCount
};
this.sharedLinksApi.findSharedLinks(options).then((page: NodePaging) => {
this.onPageLoaded(page);
});
}
private loadSites(): void {
const options = {
include: [ 'properties' ],
maxItems: this.pageSize,
skipCount: this.skipCount
};
this.sitesApi.getSites(options).then((page: NodePaging) => {
this.onPageLoaded(page);
});
}
private loadFavorites(): void {
const options = {
maxItems: this.pageSize,
skipCount: this.skipCount,
where: '(EXISTS(target/file) OR EXISTS(target/folder))',
include: [ 'properties', 'allowableOperations', 'path' ]
};
this.favoritesApi.getFavorites('-me-', options).then((result: NodePaging) => {
let page: NodePaging = {
list: {
entries: result.list.entries
.map(({ entry: { target }}: any) => ({
entry: target.file || target.folder
}))
.map(({ entry }: any) => {
entry.properties = {
'cm:title': entry.title,
'cm:description': entry.description
};
return { entry };
}),
pagination: result.list.pagination
}
};
this.onPageLoaded(page);
});
}
private loadRecent(): void {
this.peopleApi.getPerson('-me-').then((person: PersonEntry) => {
const username = person.entry.id;
const query = {
query: {
query: '*',
language: 'afts'
},
filterQueries: [
{ query: `cm:modified:[NOW/DAY-30DAYS TO NOW/DAY+1DAY]` },
{ query: `cm:modifier:${username} OR cm:creator:${username}` },
{ query: `TYPE:"content" AND -TYPE:"app:filelink" AND -TYPE:"fm:post"` }
],
include: [ 'path', 'properties', 'allowableOperations' ],
sort: [{
type: 'FIELD',
field: 'cm:modified',
ascending: false
}],
paging: {
maxItems: this.pageSize,
skipCount: this.skipCount
}
};
this.searchApi.search(query).then(page => this.onPageLoaded(page));
});
}
private onPageLoaded(page: NodePaging) {
if (page) {
this.data.loadPage(page);
this.pagination = page.list.pagination;
this.loading = false;
this.ready.emit();
}
}
private isCurrentPageEmpty(node, skipCount): boolean {
return !this.hasNodeEntries(node) && this.hasPages(skipCount);
}
@@ -416,23 +559,9 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
/**
* Creates a set of predefined columns.
*/
setupDefaultColumns(): void {
let colThumbnail = new ObjectDataColumn({
type: 'image',
key: '$thumbnail',
title: '',
srTitle: 'Thumbnail'
});
let colName = new ObjectDataColumn({
type: 'text',
key: 'name',
title: 'Name',
cssClass: 'full-width',
sortable: true
});
this.data.setColumns([colThumbnail, colName]);
setupDefaultColumns(preset: string = 'default'): void {
const columns = this.getLayoutPreset(preset);
this.data.setColumns(columns);
}
onPreviewFile(node: MinimalNodeEntity) {
@@ -580,6 +709,20 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
return defaultSorting;
}
canNavigateFolder(node: MinimalNodeEntity): boolean {
const restricted = ['-trashcan-', '-sharedlinks-', '-sites-', '-favorites-', '-recent-'];
if (restricted.indexOf(this.currentFolderId) > -1) {
return false;
}
if (node && node.entry && node.entry.isFolder) {
return true;
}
return false;
}
updateSkipCount(newSkipCount) {
this.skipCount = newSkipCount;
}
@@ -597,4 +740,231 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
return this.hasCurrentNodePermission(this.CREATE_PERMISSION);
}
private getLayoutPreset(name: string = 'default'): DataColumn[] {
const presets = {
'-trashcan-': [
{
key: '$thumbnail',
type: 'image',
srTitle: 'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL',
sortable: false
},
{
key: 'name',
type: 'text',
title: 'ADF-DOCUMENT-LIST.LAYOUT.NAME',
cssClass: 'full-width ellipsis-cell',
sortable: true
},
{
key: 'path',
type: 'location',
title: 'ADF-DOCUMENT-LIST.LAYOUT.LOCATION',
format: this.locationFormat,
sortable: true
},
{
key: 'content.sizeInBytes',
type: 'fileSize',
title: 'ADF-DOCUMENT-LIST.LAYOUT.SIZE',
sortable: true
},
{
key: 'archivedAt',
type: 'date',
title: 'ADF-DOCUMENT-LIST.LAYOUT.DELETED_ON',
format: 'timeAgo',
sortable: true
},
{
key: 'archivedByUser.displayName',
type: 'text',
title: 'ADF-DOCUMENT-LIST.LAYOUT.DELETED_BY',
sortable: true
}
],
'-sites-': [
{
key: '$thumbnail',
type: 'image',
srTitle: 'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL',
sortable: false
},
{
key: 'title',
type: 'text',
title: 'ADF-DOCUMENT-LIST.LAYOUT.NAME',
cssClass: 'full-width ellipsis-cell',
sortable: true
},
{
key: 'visibility',
type: 'text',
title: 'ADF-DOCUMENT-LIST.LAYOUT.STATUS',
sortable: true
}
],
'-favorites-': [
{
key: '$thumbnail',
type: 'image',
srTitle: 'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL',
sortable: false
},
{
key: 'name',
type: 'text',
title: 'ADF-DOCUMENT-LIST.LAYOUT.NAME',
cssClass: 'full-width ellipsis-cell',
sortable: true
},
{
key: 'path',
type: 'location',
title: 'ADF-DOCUMENT-LIST.LAYOUT.LOCATION',
format: this.locationFormat,
sortable: true
},
{
key: 'content.sizeInBytes',
type: 'fileSize',
title: 'ADF-DOCUMENT-LIST.LAYOUT.SIZE',
sortable: true
},
{
key: 'modifiedAt',
type: 'date',
title: 'ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_ON',
format: 'timeAgo',
sortable: true
},
{
key: 'modifiedByUser.displayName',
type: 'text',
title: 'ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_BY',
sortable: true
}
],
'-recent-': [
{
key: '$thumbnail',
type: 'image',
srTitle: 'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL',
sortable: false
},
{
key: 'name',
type: 'text',
title: 'ADF-DOCUMENT-LIST.LAYOUT.NAME',
cssClass: 'full-width ellipsis-cell',
sortable: true
},
{
key: 'path',
type: 'location',
title: 'ADF-DOCUMENT-LIST.LAYOUT.LOCATION',
cssClass: 'ellipsis-cell',
format: this.locationFormat,
sortable: true
},
{
key: 'content.sizeInBytes',
type: 'fileSize',
title: 'ADF-DOCUMENT-LIST.LAYOUT.SIZE',
sortable: true
},
{
key: 'modifiedAt',
type: 'date',
title: 'ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_ON',
format: 'timeAgo',
sortable: true
}
],
'-sharedlinks-': [
{
key: '$thumbnail',
type: 'image',
srTitle: 'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL',
sortable: false
},
{
key: 'name',
type: 'text',
title: 'ADF-DOCUMENT-LIST.LAYOUT.NAME',
cssClass: 'full-width ellipsis-cell',
sortable: true
},
{
key: 'path',
type: 'location',
title: 'ADF-DOCUMENT-LIST.LAYOUT.LOCATION',
cssClass: 'ellipsis-cell',
format: this.locationFormat,
sortable: true
},
{
key: 'content.sizeInBytes',
type: 'fileSize',
title: 'ADF-DOCUMENT-LIST.LAYOUT.SIZE',
sortable: true
},
{
key: 'modifiedAt',
type: 'date',
title: 'ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_ON',
format: 'timeAgo',
sortable: true
},
{
key: 'modifiedByUser.displayName',
type: 'text',
title: 'ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_BY',
sortable: true
},
{
key: 'sharedByUser.displayName',
type: 'text',
title: 'ADF-DOCUMENT-LIST.LAYOUT.SHARED_BY',
sortable: true
}
],
'default': [
{
key: '$thumbnail',
type: 'image',
srTitle: 'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL',
sortable: false
},
{
key: 'name',
type: 'text',
title: 'ADF-DOCUMENT-LIST.LAYOUT.NAME',
cssClass: 'full-width ellipsis-cell',
sortable: true
},
{
key: 'content.sizeInBytes',
type: 'fileSize',
title: 'ADF-DOCUMENT-LIST.LAYOUT.SIZE',
sortable: true
},
{
key: 'modifiedAt',
type: 'date',
title: 'ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_ON',
format: 'timeAgo',
sortable: true
},
{
key: 'modifiedByUser.displayName',
type: 'text',
title: 'ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_BY',
sortable: true
}
]
};
return (presets[name] || presets['default']).map(col => new ObjectDataColumn(col));
}
}

View File

@@ -15,9 +15,13 @@
* limitations under the License.
*/
import { DataTableComponent } from 'ng2-alfresco-datatable';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, TestBed } from '@angular/core/testing';
import { CoreModule } from 'ng2-alfresco-core';
import { DataTableComponent, DataTableModule } from 'ng2-alfresco-datatable';
import { MaterialModule } from '../../material.module';
import { DocumentListService } from '../../services/document-list.service';
import { DocumentListServiceMock } from './../../assets/document-list.service.mock';
import { DocumentListComponent } from './../document-list.component';
import { EmptyFolderContentDirective } from './empty-folder-content.directive';
@@ -26,9 +30,27 @@ describe('EmptyFolderContent', () => {
let emptyFolderContent: EmptyFolderContentDirective;
let documentList: DocumentListComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
CoreModule,
DataTableModule,
MaterialModule
],
declarations: [
DocumentListComponent
],
providers: [
DocumentListService
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
}).compileComponents();
}));
beforeEach(() => {
let documentListService = new DocumentListServiceMock();
documentList = new DocumentListComponent(documentListService, null, null);
documentList = TestBed.createComponent(DocumentListComponent).componentInstance;
documentList.dataTable = new DataTableComponent(null, null);
emptyFolderContent = new EmptyFolderContentDirective(documentList);
});

View File

@@ -270,6 +270,7 @@ describe('ShareDataTableAdapter', () => {
let file = new FileNode();
file.entry.isFile = false;
file.entry.isFolder = false;
file.entry.content = null;
let row = new ShareDataRow(file, documentListService, null);
let col = <DataColumn> {type: 'image', key: '$thumbnail'};
@@ -279,6 +280,22 @@ describe('ShareDataTableAdapter', () => {
expect(value).toContain(`svg`);
});
it('should resolve file icon for content type', () => {
let adapter = new ShareDataTableAdapter(documentListService, null);
let file = new FileNode();
file.entry.isFile = false;
file.entry.isFolder = false;
file.entry.content.mimeType = 'image/png';
let row = new ShareDataRow(file, documentListService, null);
let col = <DataColumn> {type: 'image', key: '$thumbnail'};
let value = adapter.getValue(row, col);
expect(value).toContain(`assets/images/ft_ic_raster_image`);
expect(value).toContain(`svg`);
});
it('should put folders on top upon sort', () => {
let file1 = new FileNode('file1');
let file2 = new FileNode('file2');

View File

@@ -98,7 +98,7 @@ export class ShareDataTableAdapter implements DataTableAdapter {
}
if (col.key === '$thumbnail') {
let node = (<ShareDataRow> row).node;
const node = (<ShareDataRow> row).node;
if (node.entry.isFolder) {
return this.documentListService.getMimeTypeIcon('folder');
@@ -108,12 +108,12 @@ export class ShareDataTableAdapter implements DataTableAdapter {
if (this.thumbnails) {
return this.documentListService.getDocumentThumbnailUrl(node);
}
}
if (node.entry.content) {
let mimeType = node.entry.content.mimeType;
if (mimeType) {
return this.documentListService.getMimeTypeIcon(mimeType);
}
if (node.entry.content) {
const mimeType = node.entry.content.mimeType;
if (mimeType) {
return this.documentListService.getMimeTypeIcon(mimeType);
}
}

View File

@@ -1,4 +1,21 @@
{
"ADF-DOCUMENT-LIST": {
"EMPTY": {
"HEADER": "This folder is empty"
},
"LAYOUT": {
"THUMBNAIL": "Thumbnail",
"NAME": "Name",
"LOCATION": "Location",
"SIZE": "Size",
"DELETED_ON": "Deleted",
"DELETED_BY": "Deleted by",
"STATUS": "Status",
"MODIFIED_ON": "Modified",
"MODIFIED_BY": "Modified by",
"SHARED_BY": "Shared by"
}
},
"ALFRESCO_DOCUMENT_LIST": {
"BUTTON": {
"ACTION_CREATE": "Create...",
@@ -7,11 +24,6 @@
"CANCEL": "Cancel"
}
},
"ADF-DOCUMENT-LIST": {
"EMPTY": {
"HEADER": "This folder is empty"
}
},
"DROPDOWN": {
"PLACEHOLDER_LABEL": "Site List",
"DEFAULT_OPTION": "Default"

View File

@@ -1,10 +0,0 @@
{
"ALFRESCO_DOCUMENT_LIST": {
"BUTTON": {
"ACTION_CREATE": "Создать...",
"ACTION_NEW_FOLDER": "Новая папка",
"CREATE": "Создать",
"CANCEL": "Отмена"
}
}
}

View File

@@ -140,9 +140,9 @@
"dev": true
},
"alfresco-js-api": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/alfresco-js-api/-/alfresco-js-api-1.7.0.tgz",
"integrity": "sha512-CyN1W1QxlKkE9X/WQv68pZr7nzPcR6LoV/hjgOCBz6QEkj8eBowzYB2PF3EL8d6g80LmgXBF733Dv0ur/kJqLQ=="
"version": "1.8.0-9feb5d0164d6c5f994df8758e41ed126a8f69db2",
"resolved": "https://registry.npmjs.org/alfresco-js-api/-/alfresco-js-api-1.8.0-9feb5d0164d6c5f994df8758e41ed126a8f69db2.tgz",
"integrity": "sha512-x47sy7uJOSCHkYxm0VBDnRt8/xc0nZ4M/OxEU/Z7ta14/A0HjAnz1dLz6aYEA+Kb/lXZiZesnLnHdQuSmR4jDw=="
},
"align-text": {
"version": "0.1.4",
@@ -512,9 +512,9 @@
"dev": true
},
"babylon": {
"version": "6.17.4",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz",
"integrity": "sha512-kChlV+0SXkjE0vUn9OZ7pBMWRFd8uq3mZe8x1K6jhuNcAFAtEnjchFAqB+dYEXKyd+JpT6eppRR78QAr5gTsUw==",
"version": "6.18.0",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
"integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
"dev": true
},
"backo2": {
@@ -578,9 +578,9 @@
"dev": true
},
"binary-extensions": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.9.0.tgz",
"integrity": "sha1-ZlBsFs5vTWkopbPNajPKQelB43s=",
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz",
"integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=",
"dev": true
},
"blob": {
@@ -602,9 +602,9 @@
"dev": true
},
"bn.js": {
"version": "4.11.7",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.7.tgz",
"integrity": "sha512-LxFiV5mefv0ley0SzqkOPR1bC4EbpPx8LkOz5vMe/Yi15t5hzwgO/G+tc7wOtL4PZTYjwHu8JnEiSLumuSjSfA==",
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
"integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
"dev": true
},
"body": {
@@ -793,9 +793,9 @@
"dev": true
},
"caniuse-db": {
"version": "1.0.30000709",
"resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000709.tgz",
"integrity": "sha1-C2AAcrfNu/YzaodYtxua0DJo7eI=",
"version": "1.0.30000715",
"resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000715.tgz",
"integrity": "sha1-C5tceVlQ37rzAaiAa6/ofxJtqMo=",
"dev": true
},
"caseless": {
@@ -1041,18 +1041,10 @@
"dev": true
},
"connect": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/connect/-/connect-3.6.2.tgz",
"integrity": "sha1-aU6NIGgb/kkCgsiriGvpjwn0L+c=",
"dev": true,
"dependencies": {
"debug": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
"integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
"dev": true
}
}
"version": "3.6.3",
"resolved": "https://registry.npmjs.org/connect/-/connect-3.6.3.tgz",
"integrity": "sha512-GLSZqgjVxPvGYVD/2vz//gS201MEXk4b7t3nHV6OVnTdDNWi/Gm7Rpxs/ybvljPWvULys/wrzIV3jB3YvEc3nQ==",
"dev": true
},
"connect-history-api-fallback": {
"version": "1.3.0",
@@ -1446,12 +1438,6 @@
}
}
},
"dom-walk": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
"integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=",
"dev": true
},
"domain-browser": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
@@ -1508,9 +1494,9 @@
}
},
"duplexify": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz",
"integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=",
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz",
"integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==",
"dev": true
},
"ecc-jsbn": {
@@ -1527,9 +1513,9 @@
"dev": true
},
"electron-to-chromium": {
"version": "1.3.16",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.16.tgz",
"integrity": "sha1-0OAmc1dUdwkBrjAaIWZMukXZL30=",
"version": "1.3.18",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.18.tgz",
"integrity": "sha1-PcyZ2j5rZl9qu8ccKK1Ros1zGpw=",
"dev": true
},
"elliptic": {
@@ -1551,18 +1537,10 @@
"dev": true
},
"end-of-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz",
"integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=",
"dev": true,
"dependencies": {
"once": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
"integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
"dev": true
}
}
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
"integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
"dev": true
},
"engine.io": {
"version": "1.8.4",
@@ -1653,9 +1631,9 @@
"dev": true
},
"es5-ext": {
"version": "0.10.24",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.24.tgz",
"integrity": "sha1-pVh3yZJLwMjZvTwsvhdJWsFwmxQ="
"version": "0.10.27",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.27.tgz",
"integrity": "sha512-3KXJRYzKXTd7xfFy5uZsJCXue55fAYQ035PRjyYk2PicllxIwcW9l3AbM/eGaw3vgVAUW4tl4xg9AXDEI6yw0w=="
},
"es6-iterator": {
"version": "2.0.1",
@@ -1763,6 +1741,11 @@
"resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-1.0.3.tgz",
"integrity": "sha1-7l73S27SjZEbMt3L/JeGf1gJN7w="
},
"eve": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/eve/-/eve-0.5.0.tgz",
"integrity": "sha1-dQSA4M9Pj9W1PE2EBfAEBTLg7r4="
},
"eve-raphael": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/eve-raphael/-/eve-raphael-0.5.0.tgz",
@@ -1842,24 +1825,10 @@
"dev": true
},
"express": {
"version": "4.15.3",
"resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz",
"integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=",
"dev": true,
"dependencies": {
"debug": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
"integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
"dev": true
},
"qs": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
"integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
"dev": true
}
}
"version": "4.15.4",
"resolved": "https://registry.npmjs.org/express/-/express-4.15.4.tgz",
"integrity": "sha1-Ay4iU0ic+PzgJma+yj0R7XotrtE=",
"dev": true
},
"extend": {
"version": "3.0.1",
@@ -1901,9 +1870,9 @@
}
},
"extsprintf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
"integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
"dev": true
},
"fancy-log": {
@@ -1975,18 +1944,10 @@
"dev": true
},
"finalhandler": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz",
"integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=",
"dev": true,
"dependencies": {
"debug": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
"integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
"dev": true
}
}
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.4.tgz",
"integrity": "sha512-16l/r8RgzlXKmFOhZpHBztvye+lAhC5SU7hXavnerC9UfZqZxxXl3BzL8MhffPT3kF61lj9Oav2LKEzh0ei7tg==",
"dev": true
},
"find-up": {
"version": "1.1.2",
@@ -2822,20 +2783,6 @@
}
}
},
"global": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz",
"integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
"dev": true,
"dependencies": {
"process": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
"integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=",
"dev": true
}
}
},
"globals": {
"version": "9.18.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
@@ -3400,18 +3347,10 @@
"dev": true
},
"http-errors": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz",
"integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=",
"dev": true,
"dependencies": {
"depd": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz",
"integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=",
"dev": true
}
}
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
"integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
"dev": true
},
"http-proxy": {
"version": "1.16.2",
@@ -3855,9 +3794,9 @@
"dev": true
},
"jsprim": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz",
"integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=",
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"dev": true,
"dependencies": {
"assert-plus": {
@@ -4337,9 +4276,9 @@
"dev": true
},
"markdown-it": {
"version": "8.3.1",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.3.1.tgz",
"integrity": "sha1-L0tiKUjM3Bk9ZvPKLUMSWsSscyM=",
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.3.2.tgz",
"integrity": "sha512-4J92IhJq1kGoyXddwzzfjr9cEKGexBfFsZooKYMhMLLlWa4+dlSPDUUP7y+xQOCebIj61aLmKlowg//YcdPP1w==",
"dev": true
},
"markdown-link": {
@@ -4491,12 +4430,6 @@
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz",
"integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM="
},
"min-document": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
"integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
"dev": true
},
"minimalistic-assert": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
@@ -4590,17 +4523,15 @@
"resolved": "https://registry.npmjs.org/ng2-activiti-diagrams/-/ng2-activiti-diagrams-1.7.0.tgz",
"integrity": "sha512-2wU26EGrDpWUuhNjo4IGceEM76vpVOBr53T8L3nsPeyiR8QI9Da7jDDTx2stk3aX45tbflvsiLOG0RGC8iYJsg==",
"dependencies": {
"alfresco-js-api": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/alfresco-js-api/-/alfresco-js-api-1.7.0.tgz",
"integrity": "sha512-CyN1W1QxlKkE9X/WQv68pZr7nzPcR6LoV/hjgOCBz6QEkj8eBowzYB2PF3EL8d6g80LmgXBF733Dv0ur/kJqLQ=="
},
"raphael": {
"version": "2.2.6",
"resolved": "https://registry.npmjs.org/raphael/-/raphael-2.2.6.tgz",
"integrity": "sha1-beJockeUdlQ0T3CWduoMfvXl04g=",
"dependencies": {
"eve": {
"version": "0.5.0",
"resolved": "http://npmdev.lab.alfresco.me:4873/eve/-/eve-0.5.0.tgz",
"integrity": "sha1-dQSA4M9Pj9W1PE2EBfAEBTLg7r4="
}
}
"integrity": "sha1-beJockeUdlQ0T3CWduoMfvXl04g="
},
"zone.js": {
"version": "0.8.4",
@@ -4614,6 +4545,11 @@
"resolved": "https://registry.npmjs.org/ng2-activiti-form/-/ng2-activiti-form-1.7.0.tgz",
"integrity": "sha512-7wZdzA9JNt6b7b6pXtHQB43XmkVNE6dJI8l5X/FW2Ru3AnaG3HF14+eFUM6oLSNbXWv+JQOhYlb6tMvVfxHX8w==",
"dependencies": {
"alfresco-js-api": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/alfresco-js-api/-/alfresco-js-api-1.7.0.tgz",
"integrity": "sha512-CyN1W1QxlKkE9X/WQv68pZr7nzPcR6LoV/hjgOCBz6QEkj8eBowzYB2PF3EL8d6g80LmgXBF733Dv0ur/kJqLQ=="
},
"zone.js": {
"version": "0.8.4",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.4.tgz",
@@ -4626,6 +4562,11 @@
"resolved": "https://registry.npmjs.org/ng2-activiti-tasklist/-/ng2-activiti-tasklist-1.7.0.tgz",
"integrity": "sha512-R5Oq5wYW65QAspYH+4eR7Tyg/fqarc3crYi/CLHb/u6cAyA0Y8brvz10IBgqThbmUqfLb+8ba4hTSgiNSLadoQ==",
"dependencies": {
"alfresco-js-api": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/alfresco-js-api/-/alfresco-js-api-1.7.0.tgz",
"integrity": "sha512-CyN1W1QxlKkE9X/WQv68pZr7nzPcR6LoV/hjgOCBz6QEkj8eBowzYB2PF3EL8d6g80LmgXBF733Dv0ur/kJqLQ=="
},
"zone.js": {
"version": "0.7.6",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.7.6.tgz",
@@ -4638,6 +4579,11 @@
"resolved": "https://registry.npmjs.org/ng2-alfresco-core/-/ng2-alfresco-core-1.7.0.tgz",
"integrity": "sha512-dXKstITLFv3snsJDPdNr9EVzgeLCSefHfWuGKmNB8KWZeP4ZMT0KCMLcAK+e+8H40/4WJnkuANltAafZ898e7w==",
"dependencies": {
"alfresco-js-api": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/alfresco-js-api/-/alfresco-js-api-1.7.0.tgz",
"integrity": "sha512-CyN1W1QxlKkE9X/WQv68pZr7nzPcR6LoV/hjgOCBz6QEkj8eBowzYB2PF3EL8d6g80LmgXBF733Dv0ur/kJqLQ=="
},
"zone.js": {
"version": "0.7.6",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.7.6.tgz",
@@ -4650,6 +4596,11 @@
"resolved": "https://registry.npmjs.org/ng2-alfresco-datatable/-/ng2-alfresco-datatable-1.7.0.tgz",
"integrity": "sha512-fLceBX0x9rsYqgJbig0raLFZb2O4zhpRX0bjOt1k5IvEeYwU39Ax851HMKbs7XjGXNf3C4uo4r0ra84SsWX7tg==",
"dependencies": {
"alfresco-js-api": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/alfresco-js-api/-/alfresco-js-api-1.7.0.tgz",
"integrity": "sha512-CyN1W1QxlKkE9X/WQv68pZr7nzPcR6LoV/hjgOCBz6QEkj8eBowzYB2PF3EL8d6g80LmgXBF733Dv0ur/kJqLQ=="
},
"zone.js": {
"version": "0.7.6",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.7.6.tgz",
@@ -4662,6 +4613,11 @@
"resolved": "https://registry.npmjs.org/ng2-alfresco-documentlist/-/ng2-alfresco-documentlist-1.7.0.tgz",
"integrity": "sha512-PmCK45W8FH7Y29TAEYwExNR7sY8urje5mvattuPJWWIT4HGzrRvJcmVFpXGehTWpE9iT7yJs4cmV+5plZA2ySQ==",
"dependencies": {
"alfresco-js-api": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/alfresco-js-api/-/alfresco-js-api-1.7.0.tgz",
"integrity": "sha512-CyN1W1QxlKkE9X/WQv68pZr7nzPcR6LoV/hjgOCBz6QEkj8eBowzYB2PF3EL8d6g80LmgXBF733Dv0ur/kJqLQ=="
},
"zone.js": {
"version": "0.7.6",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.7.6.tgz",
@@ -5081,9 +5037,9 @@
"dev": true
},
"pbkdf2": {
"version": "3.0.12",
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz",
"integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=",
"version": "3.0.13",
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.13.tgz",
"integrity": "sha512-+dCHxDH+djNtjgWmvVC/my3SYBAKpKNqKSjLkp+GtWWYe4XPE+e/PSD2aCanlEZZnqPk2uekTKNC/ccbwd2X2Q==",
"dev": true
},
"pdfjs-dist": {
@@ -5258,9 +5214,9 @@
"dev": true
},
"chalk": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
"integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
"integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
"dev": true
},
"color-convert": {
@@ -5276,9 +5232,9 @@
"dev": true
},
"postcss": {
"version": "6.0.8",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz",
"integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==",
"version": "6.0.9",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz",
"integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==",
"dev": true
},
"supports-color": {
@@ -5302,9 +5258,9 @@
"dev": true
},
"chalk": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
"integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
"integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
"dev": true
},
"color-convert": {
@@ -5320,9 +5276,9 @@
"dev": true
},
"postcss": {
"version": "6.0.8",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz",
"integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==",
"version": "6.0.9",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz",
"integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==",
"dev": true
},
"supports-color": {
@@ -5346,9 +5302,9 @@
"dev": true
},
"chalk": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
"integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
"integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
"dev": true
},
"color-convert": {
@@ -5364,9 +5320,9 @@
"dev": true
},
"postcss": {
"version": "6.0.8",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz",
"integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==",
"version": "6.0.9",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz",
"integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==",
"dev": true
},
"supports-color": {
@@ -5390,9 +5346,9 @@
"dev": true
},
"chalk": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
"integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
"integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
"dev": true
},
"color-convert": {
@@ -5408,9 +5364,9 @@
"dev": true
},
"postcss": {
"version": "6.0.8",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz",
"integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==",
"version": "6.0.9",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz",
"integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==",
"dev": true
},
"supports-color": {
@@ -5556,15 +5512,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz",
"integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=",
"dev": true,
"dependencies": {
"end-of-stream": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
"integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
"dev": true
}
}
"dev": true
},
"pumpify": {
"version": "1.3.5",
@@ -5841,9 +5789,9 @@
}
},
"remove-trailing-separator": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz",
"integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=",
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
"integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
"dev": true
},
"renderkid": {
@@ -6071,17 +6019,11 @@
"dev": true
},
"send": {
"version": "0.15.3",
"resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz",
"integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=",
"version": "0.15.4",
"resolved": "https://registry.npmjs.org/send/-/send-0.15.4.tgz",
"integrity": "sha1-mF+qPihLAnPHkzZKNcZze9k5Bbk=",
"dev": true,
"dependencies": {
"debug": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
"integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
"dev": true
},
"mime": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
@@ -6105,9 +6047,9 @@
}
},
"serve-static": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz",
"integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=",
"version": "1.12.4",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.4.tgz",
"integrity": "sha1-m2qpjutyU8Tu3Ewfb9vKYJkBqWE=",
"dev": true
},
"set-blocking": {
@@ -6617,9 +6559,9 @@
}
},
"tapable": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.7.tgz",
"integrity": "sha1-5GwNqsuyuKmLmwzqD0BSEFgX7Vw=",
"version": "0.2.8",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz",
"integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=",
"dev": true
},
"tar": {
@@ -6661,9 +6603,9 @@
"dev": true
},
"timers-browserify": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.3.tgz",
"integrity": "sha512-+JAqyNgg+M8+gXIrq2EeUr4kZqRz47Ysco7X5QKRGScRE9HIHckyHD1asozSFGeqx2nmPCgA8T5tIGVO0ML7/w==",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz",
"integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==",
"dev": true
},
"tiny-lr": {
@@ -6687,9 +6629,9 @@
}
},
"tmp": {
"version": "0.0.31",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",
"integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
"dev": true
},
"to-array": {
@@ -7100,10 +7042,18 @@
"dev": true
},
"verror": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
"integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=",
"dev": true
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"dev": true,
"dependencies": {
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
}
}
},
"vinyl": {
"version": "0.5.3",

View File

@@ -73,7 +73,7 @@
"@angular/platform-browser-dynamic": "4.2.5",
"@angular/router": "4.2.5",
"@ngx-translate/core": "7.0.0",
"alfresco-js-api": "1.7.0",
"alfresco-js-api": "1.8.0-9feb5d0164d6c5f994df8758e41ed126a8f69db2",
"core-js": "2.4.1",
"hammerjs": "2.0.8",
"material-design-icons": "2.2.3",