diff --git a/.angular-cli.json b/.angular-cli.json new file mode 100644 index 0000000..f12fe8b --- /dev/null +++ b/.angular-cli.json @@ -0,0 +1,69 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "project": { + "name": "admin-portal" + }, + "apps": [ + { + "root": "src", + "outDir": "dist", + "assets": [ + "assets", + "robots.txt" + ], + "index": "index.html", + "main": "main.ts", + "polyfills": "polyfills.ts", + "test": "test.ts", + "tsconfig": "tsconfig.app.json", + "testTsconfig": "tsconfig.spec.json", + "prefix": "app", + "styles": [ + "styles.css", + "../node_modules/datatables.net-dt/css/jquery.dataTables.css", + "../node_modules/interactiveminingv3/assets/css/interactive-mining.css", + "../node_modules/interactiveminingv3/assets/css/animations.css" + + ], + "scripts": [ + "../node_modules/jquery/dist/jquery.js", + "../node_modules/datatables.net/js/jquery.dataTables.js", + "../node_modules/interactiveminingv3/assets/js/ResizeSensor.js", + "../node_modules/interactiveminingv3/assets/js/jquery.sticky-sidebar.js" + ], + "environmentSource": "environments/environment.ts", + "environments": { + "dev": "environments/environment.ts", + "prod": "environments/environment.prod.ts" + } + } + ], + "e2e": { + "protractor": { + "config": "./protractor.conf.js" + } + }, + "lint": [ + { + "project": "src/tsconfig.app.json", + "exclude": "**/node_modules/**" + }, + { + "project": "src/tsconfig.spec.json", + "exclude": "**/node_modules/**" + }, + { + "project": "e2e/tsconfig.e2e.json", + "exclude": "**/node_modules/**" + } + ], + "test": { + "karma": { + "config": "./karma.conf.js" + } + }, + "defaults": { + "styleExt": "css", + "component": {} + } +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..07f98ff --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# AdminPortal + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.3.0. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). +Before running the tests make sure you are serving the app via `ng serve`. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). diff --git a/app/app.component.html b/app/app.component.html deleted file mode 100644 index 1da7aa4..0000000 --- a/app/app.component.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - -
-
- -
- -
-
-
- - diff --git a/app/app.component.ts b/app/app.component.ts deleted file mode 100644 index 5626953..0000000 --- a/app/app.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -/** - * Created by stefania on 3/21/16. - */ - -import { Component } from '@angular/core'; -import {Properties} from './utils/properties'; -import{MenuItem, RootMenuItem} from './openaireLibrary/sharedComponents/menu'; -import {ActivatedRoute} from '@angular/router'; - -@Component({ - selector: 'metadata-registry-service', - templateUrl: './app.component.html', -}) - -export class AppComponent { - title = 'Metadata Registry Service'; - isClient:boolean = false; - - - userMenuItems:MenuItem[] = [ new MenuItem("","My profile","","",false,[],[],{})]; - - menuItems:RootMenuItem [] = []; - -// menuItems:RootMenuItem [] = [ -// {rootItem: new MenuItem("search","Search","","/search/find",false,[],["/search/find"],{}), -// items: [new MenuItem("","Publications","","/search/find/publications",false,["publication"],["/search/find/publications"],{}), -// new MenuItem("","Research Data","","/search/find/datasets",false,["dataset"],["/search/find/datasets"],{}), -// new MenuItem("","Software","","/search/find/software",false,["software"],["/search/find/software"],{}), -// new MenuItem("","Projects","","/search/find/projects/",false,["project"],["/search/find/projects"],{}), -// new MenuItem("","Content Providers","","/search/find/dataproviders",false,["datasource"],["/search/find/dataproviders"],{}), -// new MenuItem("","Organizations","","/search/find/organizations/",false,["organization"],["/search/find/organizations"],{}) -// ]} -// -// ]; -logInUrl = null; -logOutUrl = null; -community: {id:string, name:string, logoUrl:string}; - - constructor( private route: ActivatedRoute) {} - - ngOnInit() { - this.route.queryParams.subscribe(data => { - - if(data['community'] && data['community']!=""){ - this.community = {id: data['community'], name: "Egi Federation", logoUrl:"https:\/\/egi.eu/wp-content/uploads/2016/05/cropped-logo_site-1-300x300.png"}; - - - }else{ - this.community = null; - - } - - }); - this.logInUrl = Properties.getLoginURL(); - this.logOutUrl = Properties.getLogoutURL(); - console.log("login url "+this.logInUrl) - if (typeof document !== 'undefined') { - try{ - this.isClient = true; - }catch (e) { - } - } - } -} diff --git a/app/app.routing.ts b/app/app.routing.ts deleted file mode 100644 index 6ec7cfe..0000000 --- a/app/app.routing.ts +++ /dev/null @@ -1,122 +0,0 @@ -/** - * Created by stefania on 9/16/16. - */ -import { ModuleWithProviders } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; - -import { DashboardComponent } from "./dashboard.component"; -import { CommunitiesComponent } from './pages/community/communities.component'; -import { CommunityEditFormComponent } from "./pages/community/community-edit-form/community-edit-form.component"; -import { EntitiesComponent } from "./pages/entity/entities.component"; -import { PagesComponent } from "./pages/page/pages.component"; -import { PageHelpContentsComponent } from "./pages/helpcontent/page-help-contents.component"; -import { NewPageHelpContentComponent } from "./pages/helpcontent/new-page-help-content.component"; -import { EditPageHelpContentComponent } from "./pages/helpcontent/edit-page-help-content.component"; -import { DivIdsComponent } from "./pages/divId/divIds.component"; -import { DivHelpContentsComponent } from "./pages/divhelpcontent/div-help-contents.component"; -import { NewDivHelpContentComponent } from "./pages/divhelpcontent/new-div-help-content.component"; -import { EditDivHelpContentComponent } from "./pages/divhelpcontent/edit-div-help-content.component"; -import {ClaimsComponent} from './pages/claims/claims.component'; -import {FreeGuard} from './openaireLibrary/login/freeGuard.guard'; - -import { AdminLoginGuard} from './openaireLibrary/login/adminLoginGuard.guard'; -import { ConnectAdminLoginGuard} from './openaireLibrary/login/connectAdminLoginGuard.guard'; - -import { EnvironmentSpecificResolver} from './openaireLibrary/utils/properties/environmentSpecificResolver'; -import { EnvironmentSpecificService} from './openaireLibrary/utils/properties/environment-specific.service'; -import{ClaimsAdminComponent} from './openaireLibrary/claims/claimsAdmin/claimsAdmin.component'; - -import {StatsComponent} from "./pages/stats/stats.component"; - -//TODO replace FreeGuard with ConnectAdminLoginGuard - -const appRoutes: Routes = [ - { - path: '', - redirectTo: 'dashboard', - pathMatch: 'full' - }, - { - path: 'dashboard', - component: DashboardComponent, - canActivate: [FreeGuard],resolve: { envSpecific: EnvironmentSpecificResolver } - }, - - { - path: 'communities', - component: CommunitiesComponent, - canActivate: [FreeGuard],resolve: { envSpecific: EnvironmentSpecificResolver } - }, - { - path: 'community-edit-form', - component: CommunityEditFormComponent, - canActivate: [FreeGuard],resolve: { envSpecific: EnvironmentSpecificResolver } - }, - { - path: 'entities', - component: EntitiesComponent, - canActivate: [FreeGuard],resolve: { envSpecific: EnvironmentSpecificResolver } - }, - { - path: 'classes', - component: DivIdsComponent,canActivate: [FreeGuard],resolve: { envSpecific: EnvironmentSpecificResolver } - }, - { - path: 'pages', - component: PagesComponent, - canActivate: [FreeGuard],resolve: { envSpecific: EnvironmentSpecificResolver } - }, - { - path: 'pageContents', - component: PageHelpContentsComponent, - canActivate: [FreeGuard],resolve: { envSpecific: EnvironmentSpecificResolver } - }, - { - path: 'pageContents/new', - component: NewPageHelpContentComponent, - canActivate: [FreeGuard],resolve: { envSpecific: EnvironmentSpecificResolver } - }, - { - //path: 'pageContents/edit/:id', - path: 'pageContents/edit', - component: EditPageHelpContentComponent, - canActivate: [FreeGuard],resolve: { envSpecific: EnvironmentSpecificResolver } - }, - - { - path: 'classContents', - component: DivHelpContentsComponent,canActivate: [FreeGuard],resolve: { envSpecific: EnvironmentSpecificResolver } - }, - { - path: 'classContents/new', - component: NewDivHelpContentComponent,canActivate: [FreeGuard],resolve: { envSpecific: EnvironmentSpecificResolver } - }, - { - path: 'classContents/edit', - component: EditDivHelpContentComponent,canActivate: [FreeGuard],resolve: { envSpecific: EnvironmentSpecificResolver } - }, - { - path: 'claims', - component: ClaimsComponent,canActivate: [FreeGuard],resolve: { envSpecific: EnvironmentSpecificResolver } - }, - { path: 'reload', loadChildren: './reload/libReload.module#LibReloadModule', resolve: { envSpecific: EnvironmentSpecificResolver }}, - { path: 'user-info', loadChildren: './login/libUser.module#LibUserModule', resolve: { envSpecific: EnvironmentSpecificResolver }}, - - { - path: 'stats', - component: StatsComponent, - canActivate: [FreeGuard], - resolve: { envSpecific: EnvironmentSpecificResolver } - }, - { path: '**',pathMatch: 'full',component: DashboardComponent } - - ]; - // @NgModule({ - // imports: [RouterModule.forRoot(appRoutes)], - // exports: [RouterModule], - // providers: [EnvironmentSpecificResolver, EnvironmentSpecificService] - // }) -export const appRoutingProviders: any[] = [ -]; - -export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes); diff --git a/app/dashboard.component.html b/app/dashboard.component.html deleted file mode 100644 index 378db39..0000000 --- a/app/dashboard.component.html +++ /dev/null @@ -1,120 +0,0 @@ -
-
- - -
-

- A list of tools to help the administrator of the OpenAIRE-Connect to manage FAQs, help texts, etc... - -

-
-
-

- - Community Profile -

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -

Edit Community Profile

-
-
-

- - Help texts -

- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -

- Add help texts in pages -

-
-
-

- - Designated Entities -

- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -

Activate entities
- Manage projects
- Manage content providers
- Manage organizations -

-
-
- -
-
-

- - Statistics & Charts -

- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -

- Select statistics & charts
- New statistics page-under construction -

-
- -
-

- - Claims -

- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -

- Manage -

-
- -
-

- - Mining rules -

- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -

- Manage mining rules -

-
-
- -
-
-

- - Users -

- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -

- Manage users -

-
-
- - - - - -
-
-
diff --git a/app/dashboard.component.ts b/app/dashboard.component.ts deleted file mode 100644 index 324c08a..0000000 --- a/app/dashboard.component.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Created by stefania on 3/21/16. - */ - -import { Component } from '@angular/core'; - -@Component({ - selector: 'dashboard', - templateUrl: 'dashboard.component.html', -}) - -export class DashboardComponent { - -} \ No newline at end of file diff --git a/app/domain/statistics-classes.ts b/app/domain/statistics-classes.ts deleted file mode 100644 index eb15965..0000000 --- a/app/domain/statistics-classes.ts +++ /dev/null @@ -1,9 +0,0 @@ -export class StatTableOptions { - show: boolean; - showInDashboard: boolean; -} - -export class CommunityStatistics { - pid: string; - statistics: Map; -} \ No newline at end of file diff --git a/app/pages/claims/claims.component.ts b/app/pages/claims/claims.component.ts deleted file mode 100644 index 667a3e2..0000000 --- a/app/pages/claims/claims.component.ts +++ /dev/null @@ -1,26 +0,0 @@ - -import { Component, ViewChild, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -@Component({ - selector: 'claims', - template: ` - `, -}) - -export class ClaimsComponent implements OnInit { - - communityPid:string; - ngOnInit() { - - this.route.queryParams.subscribe(params => { - this.communityPid = params['community']; - - }); - - } - - constructor(private route: ActivatedRoute) {} - - - -} diff --git a/app/pages/community/communities.component.ts b/app/pages/community/communities.component.ts deleted file mode 100644 index 24b97c4..0000000 --- a/app/pages/community/communities.component.ts +++ /dev/null @@ -1,166 +0,0 @@ -/** - * Created by stefania on 7/13/17. - */ -import { Component, ViewChild, OnInit } from '@angular/core'; -import { ActivatedRoute } from "@angular/router"; -import { HelpContentService } from "../../services/help-content.service"; -import { FormGroup } from "@angular/forms"; -import { ModalFormComponent } from "../modal-form.component"; -import { DeleteConfirmationDialogComponent } from "../delete-confirmation-dialog.component"; -import { CommunityFormComponent } from "./community-form.component"; -import { CheckCommunity, Community } from "../../domain/community"; -import { EnvProperties } from '../../openaireLibrary/utils/properties/env-properties'; - -@Component({ - selector: 'communities', - templateUrl: './communities.component.html', -}) - -export class CommunitiesComponent implements OnInit { - - @ViewChild(ModalFormComponent) - @ViewChild('saveModal') - public modal:ModalFormComponent; - - @ViewChild('updateModal') - public updateModal:ModalFormComponent; - - @ViewChild('deleteConfirmationModal') - public deleteConfirmationModal : DeleteConfirmationDialogComponent; - - @ViewChild(CommunityFormComponent) - public formComponent : CommunityFormComponent; - - public checkboxes : CheckCommunity[] = []; - - public communities : Community[] = []; - - public errorMessage: string; - - public formGroup : FormGroup; - - private searchText : RegExp = new RegExp(''); - public properties:EnvProperties = null; - ngOnInit() { - this.formGroup = this.formComponent.form; - - this.route.data - .subscribe((data: { envSpecific: EnvProperties }) => { - this.properties = data.envSpecific; - this.route.queryParams.subscribe(params => { - if(params['community']) { - this.getCommunity(params['community']); - } else { - this.getCommunities(); - } - }); - }); - } - - constructor(private route: ActivatedRoute, private _helpContentService: HelpContentService) {} - - getCommunity(community_pid: string) { - let self = this; - this._helpContentService.getCommunityFull(community_pid, this.properties.adminToolsAPIURL).subscribe( - community => { - self.communities = [community]; - this.checkboxes.push({community : community, checked : false}); - }, - error => this.handleError('System error retrieving communities', error)); - } - - getCommunities() { - let self = this; - this._helpContentService.getCommunitiesFull(this.properties.adminToolsAPIURL).subscribe( - communities => { - self.communities = communities; - - communities.forEach(_ => { - this.checkboxes.push({community : _, checked : false}); - }); - }, - error => this.handleError('System error retrieving communities', error)); - } - - public showModal():void { - this.modal.showModal(); - } - - public toggleCheckBoxes(event) { - this.checkboxes.forEach(_ => _.checked = event.target.checked); - } - - public applyCheck(flag : boolean) { - console.info("applyCheck "+flag); - this.checkboxes.forEach(_ => _.checked = flag); - } - - public getSelectedCommunities() : string[] { - return this.checkboxes.filter(community => community.checked == true).map(checkedCommunity => checkedCommunity.community).map(res => res._id); - } - - private deleteCommunitiesFromArray(ids : string[]) : void { - for(let id of ids) { - let i = this.checkboxes.findIndex(_ => _.community._id == id); - this.checkboxes.splice(i, 1); - } - } - - public confirmDeleteCommunity(id : string) { - this.deleteConfirmationModal.ids = [id]; - this.deleteConfirmationModal.showModal(); - } - - public confirmDeleteSelectedCommunities() { - this.deleteConfirmationModal.ids = this.getSelectedCommunities(); - this.deleteConfirmationModal.showModal(); - } - - public confirmedDeleteCommunities(ids : string[]) { - this._helpContentService.deleteCommunities(ids, this.properties.adminToolsAPIURL).subscribe( - _ => this.deleteCommunitiesFromArray(ids), - error => this.handleError('System error deleting the selected communities', error) - ); - } - - public editCommunity(i : number) { - let community : Community = this.checkboxes[i].community; - this.formGroup.patchValue(community); - this.updateModal.showModal(); - } - - public communitySavedSuccessfully(community: Community) { - this.checkboxes.push({community : community, checked : false}); - console.info("checkboxes length: "+this.checkboxes.length); - this.applyCheck(false); - } - - public communityUpdatedSuccessfully(community : Community) { - this.checkboxes.find(checkItem => checkItem.community._id==community._id).community = community; - this.applyCheck(false); - } - - public filterBySearch(text : string) { - this.searchText = new RegExp(text,'i'); - this.applyFilter(); - } - - public applyFilter() { - this.checkboxes = []; - this.communities.filter(item => this.filterCommunities(item)).forEach( - _ => this.checkboxes.push({community: _, checked: false}) - ); - } - - public filterCommunities(community : Community) : boolean { - let textFlag = this.searchText.toString() == '' || (/*community.route + ' ' +*/community.name).match(this.searchText) != null; - return textFlag; - } - - handleError(message: string, error) { - if(error == null) { - this.formComponent.reset(); - } - this.errorMessage = message + ' (Server responded: ' + error + ')'; - } -} diff --git a/app/pages/community/community-edit-form/community-edit-form.component.html b/app/pages/community/community-edit-form/community-edit-form.component.html deleted file mode 100644 index ee5dd30..0000000 --- a/app/pages/community/community-edit-form/community-edit-form.component.html +++ /dev/null @@ -1,12 +0,0 @@ -
-
Edit your community
-
-
-

Name:

-

Short Name:

-

Description:

-

Logo Url:

-
- -
-
diff --git a/app/pages/community/community-edit-form/community-edit-form.component.ts b/app/pages/community/community-edit-form/community-edit-form.component.ts deleted file mode 100644 index f34221e..0000000 --- a/app/pages/community/community-edit-form/community-edit-form.component.ts +++ /dev/null @@ -1,74 +0,0 @@ -import {Component, OnInit, Input} from '@angular/core'; -import {FormGroup, FormArray, FormBuilder, Validators} from "@angular/forms"; -import {ActivatedRoute, Router} from '@angular/router'; - -import {HelpContentService} from "../../../services/help-content.service"; -import {CommunityService} from "../../../openaireLibrary/connect/community/community.service"; -import {EnvProperties} from '../../../openaireLibrary/utils/properties/env-properties'; - -@Component({ - selector: 'community-edit-form', - templateUrl: './community-edit-form.component.html', -}) - -export class CommunityEditFormComponent implements OnInit{ - - @Input('group') - myForm: FormGroup; - - public errorMessage: string; - - public res=[]; - - params: any; - - public communityId = null; - public community = null; - public properties:EnvProperties = null; - - constructor (private route: ActivatedRoute, - private _router: Router, - public _fb: FormBuilder, - private _helpContentService: HelpContentService, - private _communityService: CommunityService){ } - - - ngOnInit() { - this.route.data .subscribe((data: { envSpecific: EnvProperties }) => { - this.properties = data.envSpecific; - this.route.queryParams.subscribe( - communityId => { - this.communityId = communityId['communityId']; - if (this.communityId != null) { - this._communityService.getCommunity(this.properties.communityAPI+this.communityId).subscribe ( - community => { - this.community = community; - this.params = {community: encodeURIComponent('"'+community.queryId+'"')}; - console.log(community); - }); - } - }); - }); - } - - public get form() { - return this._fb.group({ - _id : '', - name : ['', Validators.required] - }); - } - - public reset() { - this.myForm.patchValue({ - name : '', - _id : '' - }); - } - - handleError(message: string, error) { - if(error == null) { - this.reset(); - } - this.errorMessage = message + ' (Server responded: ' + error + ')'; - } -} diff --git a/app/pages/divId/divId-form.component.html b/app/pages/divId/divId-form.component.html deleted file mode 100644 index 2bc5f52..0000000 --- a/app/pages/divId/divId-form.component.html +++ /dev/null @@ -1,36 +0,0 @@ -
- - -
- -
-
{{page.name}}, 
- - -
- - - - - - - - {{page.name}} - -
-
- -
-
- -
- - -
- -
diff --git a/app/pages/divId/divId-form.component.ts b/app/pages/divId/divId-form.component.ts deleted file mode 100644 index df99c51..0000000 --- a/app/pages/divId/divId-form.component.ts +++ /dev/null @@ -1,181 +0,0 @@ -import {Component, OnInit, Input} from '@angular/core'; -import {FormGroup, FormArray, FormBuilder, Validators} from "@angular/forms"; -import { HelpContentService } from "../../services/help-content.service"; -import { Page } from "../../domain/page"; - -@Component({ - selector: 'divId-form', - templateUrl: './divId-form.component.html', -}) - -export class DivIdFormComponent implements OnInit{ - @Input('group') - myForm: FormGroup; - @Input('communityPid') - communityPid: string; - @Input('pageId') - pageId: string; - @Input('availablePages') - availablePages : Page[] = []; - @Input('formPages') - formPages: Page[] = []; - - private gotPages: boolean = false; - - public errorMessage: string; - - constructor(public _fb: FormBuilder, private _helpContentService: HelpContentService){} - - ngOnInit(): void { - - } -/* - public get form() { - return this._fb.group({ - _id : '', - name : ['', Validators.required], - page : [this.pageId,Validators.required], - community : this.communityPid, - }); - } - - public reset() { - this.myForm.patchValue({ - _id : '', - name : '', - page: '', - community: this.communityPid - }); - } -*/ - - - -public toggle() { - this.myForm.value.isCollapsed = !this.myForm.value.isCollapsed; -/* - if(!this.myForm.value.isCollapsed) { - let includedPages: Set = new Set(); - for(let pageName of this.myForm.value.pages) { - includedPages.add(pageName._id); - } - - let allPages = this.availablePages; - - let self = this; - allPages.forEach(function (status, page, map) { - if(includedPages.has(page._id)) { - self.allPages.set(page, true); - } else { - self.allEntities.set(page, false); - } community: this.communityPid - - }); - - - if(!this.gotPages && this.myForm.value.pages.length > 0) { - this.gotPages = true; - this.getPages(); - } - } -*/ -} -/* -public getPages() { - let self = this; - this._helpContentService.getPages().subscribe( - pages => { - for(let page of pages) { - let index = self.myForm.value.pages.indexOf(page._id); - if(index >= 0) { - self.formPages[index] = page; - } - } - }, - error => this.handleError('System error retrieving pages', error)); -} -*/ - -public getKeys( map) { - return Array.from(map.keys()); -} - -public get form() { - return this._fb.group({ - _id: '', - name : ['', Validators.required], - pages: this._fb.array([]), - //pages: [[], Validators.required], - community: this.communityPid, - isCollapsed: [true] - }); -} - -public reset() { - console.info("reset"); - this.myForm.patchValue({ - _id : '', - name : '', - community: this.communityPid, - isCollapsed: [true] - }); - - this.setPages([]); - //this.initPages(); - this.formPages = []; -} - -public get pages(): FormArray { - return this.myForm.get('pages') as FormArray; -}; - -setPages(pages: string[]) { - console.info(pages); - //const pageFGs = pages.map(page => this._fb.group(page)); - //const pageFormArray = this._fb.array(pageFGs); - const pageFormArray = this._fb.array(pages); - //const pageFormArray = this.myForm.pages.patchValue([]); - this.myForm.setControl('pages', pageFormArray); -} -/* -initPages() { - let ctrl = this.form.controls.pages; - ctrl.push(this._fb.group({ - page: ['', Validators.required] - })) -} -*/ -indexOfPageInForm(pageId: string): number { - let index: number = -1; - for(let i=0; i= 0) { - this.formPages.splice(index, 1); - //this.myForm.value.pages.splice(index, 1); - } - } -} - -handleError(message: string, error) { - if(error == null) { - this.reset(); - } - this.errorMessage = message + ' (Server responded: ' + error + ')'; -} -} diff --git a/app/pages/divId/divIds.component.ts b/app/pages/divId/divIds.component.ts deleted file mode 100644 index 60db594..0000000 --- a/app/pages/divId/divIds.component.ts +++ /dev/null @@ -1,222 +0,0 @@ -import { Component, ViewChild, OnInit } from '@angular/core'; -import { ActivatedRoute } from "@angular/router"; -import { HelpContentService } from "../../services/help-content.service"; -import { FormGroup } from "@angular/forms"; -import { ModalFormComponent } from "../modal-form.component"; -import { DeleteConfirmationDialogComponent } from "../delete-confirmation-dialog.component"; -import { DivIdFormComponent } from "./divId-form.component"; -import { CheckDivId, DivId } from "../../domain/divId"; -import { Community } from "../../domain/community"; -import { Page } from "../../domain/page"; -import { EnvProperties } from '../../openaireLibrary/utils/properties/env-properties'; - -@Component({ - selector: 'divIds', - templateUrl: './divIds.component.html', -}) - -export class DivIdsComponent implements OnInit { - - @ViewChild(ModalFormComponent) - @ViewChild('saveModal') - public modal:ModalFormComponent; - - @ViewChild('updateModal') - public updateModal:ModalFormComponent; - - @ViewChild('deleteConfirmationModal') - public deleteConfirmationModal : DeleteConfirmationDialogComponent; - - @ViewChild(DivIdFormComponent) - public formComponent : DivIdFormComponent; - - public checkboxes : CheckDivId[] = []; - - public divIds : DivId[] = []; - - public errorMessage: string; - - public formGroup : FormGroup; - - private searchText : RegExp = new RegExp(''); - - public selectedCommunityPid: string; - public communities: Community[] = []; - public pages: Page[] = []; - public properties:EnvProperties = null; - public formPages: Page[] = []; - - ngOnInit() { - this.route.data - .subscribe((data: { envSpecific: EnvProperties }) => { - this.properties = data.envSpecific; - this.formGroup = this.formComponent.form; - this.route.queryParams.subscribe(params => { - // if(params['community']) { - // this.getCommunity(params['community']); - // } else { - this.getCommunities(); - //} - }); - }); - } - - constructor(private route: ActivatedRoute, private _helpContentService: HelpContentService) {} -/* - getCommunity(community_pid: string) { - let self = this; - this._helpContentService.getCommunityFull(community_pid).subscribe( - community => { - self.communities = [community]; - this.checkboxes.push({community : community, checked : false}); - }, - error => this.handleError('System error retrieving communities', error)); - } -*/ - getCommunities() { - let self = this; - this._helpContentService.getCommunities(this.properties.adminToolsAPIURL).subscribe( - communities => { - self.communities = communities; - self.selectedCommunityPid = self.communities[0].pid; - self.getPages(self.selectedCommunityPid); - self.getDivIds(self.selectedCommunityPid); - self.formGroup.patchValue({ - community: self.selectedCommunityPid - }); - }, - error => this.handleError('System error retrieving communities', error)); - } - - getPages(community_pid: string) { - this._helpContentService.getCommunityPages(community_pid, this.properties.adminToolsAPIURL).subscribe( - pages => this.pages = pages, - error => this.handleError('System error retrieving pages', error)); - } - - getDivIds(community_pid: string) { - let self = this; - this._helpContentService.getDivIdsFull(community_pid, null, this.properties.adminToolsAPIURL).subscribe( - divIds => { - self.divIds = divIds; - - self.checkboxes = []; - divIds.forEach(_ => { - self.checkboxes.push({divId : _, checked : false}); - }); - }, - error => this.handleError('System error retrieving classes', error)); - } - - public showModal():void { - this.modal.showModal(); - } - - public toggleCheckBoxes(event) { - this.checkboxes.forEach(_ => _.checked = event.target.checked); - } - - public applyCheck(flag : boolean) { - console.info("applyCheck "+flag); - this.checkboxes.forEach(_ => _.checked = flag); - } - - public getSelectedDivIds() : string[] { - return this.checkboxes.filter(divId => divId.checked == true).map(checkedDivId => checkedDivId.divId).map(res => res._id); - } - - private deleteDivIdsFromArray(ids : string[]) : void { - for(let id of ids) { - let i = this.checkboxes.findIndex(_ => _.divId._id == id); - this.checkboxes.splice(i, 1); - } - } - - public confirmDeleteDivId(id : string) { - this.deleteConfirmationModal.ids = [id]; - this.deleteConfirmationModal.showModal(); - } - - public confirmDeleteSelectedDivIds() { - this.deleteConfirmationModal.ids = this.getSelectedDivIds(); - this.deleteConfirmationModal.showModal(); - } - - public confirmedDeleteDivIds(ids : string[]) { - this._helpContentService.deleteDivIds(ids, this.properties.adminToolsAPIURL).subscribe( - _ => this.deleteDivIdsFromArray(ids), - error => this.handleError('System error deleting the selected classes', error) - ); - } - - public editDivId(i : number) { - let divId : DivId = this.checkboxes[i].divId; - this.formPages = divId.pages; - - let pageIds: string[] = []; - let index = 0; - for(let page of divId.pages) { - pageIds[index] = page._id; - index++; - } - //divId.pages = pageIds; - - let community: Community = divId.community; - this.formGroup.patchValue(divId); - this.formGroup.patchValue({ - community: community._id - }); - this.formComponent.setPages(pageIds); - - this.updateModal.showModal(); - } - - public divIdSavedSuccessfully(divId: DivId) { - this.checkboxes.push({divId : divId, checked : false}); - console.info("checkboxes length: "+this.checkboxes.length); - this.applyCheck(false); - } - - public divIdUpdatedSuccessfully(divId : DivId) { - this.checkboxes.find(checkItem => checkItem.divId._id==divId._id).divId = divId; - this.applyCheck(false); - } - - public filterBySearch(text : string) { - this.searchText = new RegExp(text,'i'); - this.applyFilter(); - } - - public applyFilter() { - this.checkboxes = []; - this.divIds.filter(item => this.filterDivIds(item)).forEach( - _ => this.checkboxes.push({divId: _, checked: false}) - ); - } - - public filterDivIds(divId : DivId) : boolean { - let textFlag = this.searchText.toString() == '' || (/*community.route + ' ' +*/divId.name).match(this.searchText) != null; - return textFlag; - } - - public filterByCommunity(event: any) { - this.selectedCommunityPid = event.target.value; - this.formGroup.patchValue({ - community: this.selectedCommunityPid - }); - this.applyCommunityFilter(this.selectedCommunityPid); - } - - public applyCommunityFilter(community_pid: string) { - this.getDivIds(community_pid); - this.getPages(community_pid); - } - - handleError(message: string, error) { - if(error == null) { - console.info("handleError"); - this.formComponent.reset(); - } - this.errorMessage = message + ' (Server responded: ' + error + ')'; - } -} diff --git a/app/pages/divhelpcontent/div-help-content-form.component.html b/app/pages/divhelpcontent/div-help-content-form.component.html deleted file mode 100644 index e34e435..0000000 --- a/app/pages/divhelpcontent/div-help-content-form.component.html +++ /dev/null @@ -1,49 +0,0 @@ -
{{errorMessage}}
-
-
- - - - - - - -
-
- -
- - - - - - - - -
- - -
-
- - -
- -
- - - - diff --git a/app/pages/divhelpcontent/edit-div-help-content.component.html b/app/pages/divhelpcontent/edit-div-help-content.component.html deleted file mode 100644 index 04fb1b3..0000000 --- a/app/pages/divhelpcontent/edit-div-help-content.component.html +++ /dev/null @@ -1,21 +0,0 @@ -
-
- - -
- -
-
{{errorMessage}}
- - - -
-
-
-
diff --git a/app/pages/divhelpcontent/new-div-help-content.component.html b/app/pages/divhelpcontent/new-div-help-content.component.html deleted file mode 100644 index 83a5a9b..0000000 --- a/app/pages/divhelpcontent/new-div-help-content.component.html +++ /dev/null @@ -1,21 +0,0 @@ -
-
- - -
- -
-
{{errorMessage}}
- - - -
-
-
-
diff --git a/app/pages/entity/entities.component.html b/app/pages/entity/entities.component.html deleted file mode 100644 index 2a20327..0000000 --- a/app/pages/entity/entities.component.html +++ /dev/null @@ -1,121 +0,0 @@ -
- - - -
-
-
- - - - -
-
-
- - - -
-
-
- -
-
-
-
- -
- -
- - - - - - - - - - - - - - - - - -
NameStateActions
- -
{{check.entity.name}}
-
-
- -
-
- -
-
-
- - -
-
- -
-
No entities found
-
-
-
-
-
-
-
-
-
- - - - - - - - - This action will affect all search pages related to this entity! - Pages' status will change to entity's status! - Do you want to continue? - - - Are you sure you want to delete the selected entity(-ies)? - diff --git a/app/pages/entity/entities.component.ts b/app/pages/entity/entities.component.ts deleted file mode 100644 index 734947a..0000000 --- a/app/pages/entity/entities.component.ts +++ /dev/null @@ -1,199 +0,0 @@ -import { Component, ViewChild, OnInit } from '@angular/core'; -import { ActivatedRoute } from "@angular/router"; -import { HelpContentService } from "../../services/help-content.service"; -import { FormGroup } from "@angular/forms"; -import { ModalFormComponent } from "../modal-form.component"; -import { DeleteConfirmationDialogComponent } from "../delete-confirmation-dialog.component"; -import { EntityFormComponent } from "./entity-form.component"; -import { CheckEntity, Entity } from "../../domain/entity"; -import { Community } from "../../domain/community"; -import { EnvProperties } from '../../openaireLibrary/utils/properties/env-properties'; - -@Component({ - selector: 'entities', - templateUrl: './entities.component.html', -}) - -export class EntitiesComponent implements OnInit { - - // @ViewChild(ModalFormComponent) - @ViewChild('saveModal') - public modal:ModalFormComponent; - - @ViewChild('updateModal') - public updateModal:ModalFormComponent; - - @ViewChild('deleteConfirmationModal') - public deleteConfirmationModal : DeleteConfirmationDialogComponent; - - @ViewChild(EntityFormComponent) - public formComponent : EntityFormComponent; - - public checkboxes : CheckEntity[] = []; - - public entities : Entity[] = []; - - public errorMessage: string; - - public formGroup : FormGroup; - - private searchText : RegExp = new RegExp(''); - - public communities: Community[] = []; - - public selectedCommunityPid: string; - @ViewChild('okModal') - public okModal:ModalFormComponent; -public toggleIds: string[]; -public toggleStatus: boolean; -public properties:EnvProperties = null; - - ngOnInit() { - this.formGroup = this.formComponent.form; - this.route.data - .subscribe((data: { envSpecific: EnvProperties }) => { - this.properties = data.envSpecific; - this.getCommunities(); - }); - - } - - constructor(private route: ActivatedRoute, private _helpContentService: HelpContentService) {} - - getCommunities() { - let self = this; - this._helpContentService.getCommunities(this.properties.adminToolsAPIURL).subscribe( - communities => { - self.communities = communities; - self.selectedCommunityPid = self.communities[0].pid; - self.getEntities(self.selectedCommunityPid); - }, - error => this.handleError('System error retrieving communities', error)); - } - - getEntities(community_pid: string) { - let self = this; - this._helpContentService.getCommunityEntities(community_pid, this.properties.adminToolsAPIURL).subscribe( - entities => { - self.entities = entities; - self.checkboxes = []; - - entities.forEach(_ => { - self.checkboxes.push({entity : _, checked : false}); - }); - }, - error => this.handleError('System error retrieving entities', error)); - } - - public showModal():void { - this.modal.showModal(); - } - - public toggleCheckBoxes(event) { - this.checkboxes.forEach(_ => _.checked = event.target.checked); - } - - public applyCheck(flag : boolean) { - console.info("applyCheck "+flag); - this.checkboxes.forEach(_ => _.checked = flag); - } - - public getSelectedEntities() : string[] { - return this.checkboxes.filter(entity => entity.checked == true).map(checkedEntity => checkedEntity.entity).map(res => res._id); - } - - private deleteEntitiesFromArray(ids : string[]) : void { - for(let id of ids) { - let i = this.checkboxes.findIndex(_ => _.entity._id == id); - this.checkboxes.splice(i, 1); - } - } - - public confirmDeleteEntity(id : string) { - this.deleteConfirmationModal.ids = [id]; - this.deleteConfirmationModal.showModal(); - } - - public confirmDeleteSelectedEntities() { - this.deleteConfirmationModal.ids = this.getSelectedEntities(); - this.deleteConfirmationModal.showModal(); - } - - public confirmedDeleteEntities(ids : string[]) { - this._helpContentService.deleteEntities(ids, this.properties.adminToolsAPIURL).subscribe( - _ => this.deleteEntitiesFromArray(ids), - error => this.handleError('System error deleting the selected entities', error) - ); - } - - public editEntity(i : number) { - let entity : Entity = this.checkboxes[i].entity; - this.formGroup.patchValue(entity); - this.updateModal.showModal(); - } - - public entitySavedSuccessfully(entity: Entity) { - this.checkboxes.push({entity : entity, checked : false}); - this.applyCheck(false); - } - - public entityUpdatedSuccessfully(entity : Entity) { - this.checkboxes.find(checkItem => checkItem.entity._id==entity._id).entity = entity; - this.applyCheck(false); - } - - public filterBySearch(text : string) { - this.searchText = new RegExp(text,'i'); - this.applyFilter(); - } - - public applyFilter() { - this.checkboxes = []; - this.entities.filter(item => this.filterEntities(item)).forEach( - _ => this.checkboxes.push({entity: _, checked: false}) - ); - } - - public filterEntities(entity : Entity) : boolean { - let textFlag = this.searchText.toString() == '' || (entity.name).match(this.searchText) != null; - return textFlag; - } - - handleError(message: string, error) { - if(error == null) { - this.formComponent.reset(); - } - this.errorMessage = message + ' (Server responded: ' + error + ')'; - } - - - - public filterByCommunity(event: any) { - this.selectedCommunityPid = event.target.value; - this.applyCommunityFilter(this.selectedCommunityPid); - } - - public applyCommunityFilter(community_pid: string) { - this.getEntities(community_pid); - } - - public toggleEntities(status : boolean, ids : string[]) { - this.okModal.showModal(); - this.toggleIds = ids; - this.toggleStatus = status; - } - - public continueToggling(event: any) { - this._helpContentService.toggleEntities(this.selectedCommunityPid,this.toggleIds,this.toggleStatus, this.properties.adminToolsAPIURL).subscribe( - () => { - for(let id of this.toggleIds) { - let i = this.checkboxes.findIndex(_ => _.entity._id == id); - this.checkboxes[i].entity.isEnabled=this.toggleStatus; - } - this.applyCheck(false); - }, - error => this.handleError('System error changing the status of the selected entity(-ies)', error) - ); - } - - } diff --git a/app/pages/entity/entity-form.component.html b/app/pages/entity/entity-form.component.html deleted file mode 100644 index b0073df..0000000 --- a/app/pages/entity/entity-form.component.html +++ /dev/null @@ -1,35 +0,0 @@ -
-
- - -
-
- - -
- - - - - - - -
- - - diff --git a/app/pages/helpcontent/edit-page-help-content.component.html b/app/pages/helpcontent/edit-page-help-content.component.html deleted file mode 100644 index 3b329de..0000000 --- a/app/pages/helpcontent/edit-page-help-content.component.html +++ /dev/null @@ -1,21 +0,0 @@ -
-
- - -
- -
-
{{errorMessage}}
- - - -
-
-
-
diff --git a/app/pages/helpcontent/new-page-help-content.component.html b/app/pages/helpcontent/new-page-help-content.component.html deleted file mode 100644 index 7e8e639..0000000 --- a/app/pages/helpcontent/new-page-help-content.component.html +++ /dev/null @@ -1,21 +0,0 @@ -
-
- - -
- -
-
{{errorMessage}}
- - - -
-
-
-
diff --git a/app/pages/helpcontent/page-help-contents.component.html b/app/pages/helpcontent/page-help-contents.component.html deleted file mode 100644 index 3431674..0000000 --- a/app/pages/helpcontent/page-help-contents.component.html +++ /dev/null @@ -1,289 +0,0 @@ - - - -
- - - -
-
-
- - - - -
-
-
- - -
-
-
- -
-
-
-
- -
- -
-
- -
- - Filter page contents: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PageCommunityContentPlacementOrderBeforeActiveActions
- -
{{check.pageHelpContent.page.name}}
-
-
{{check.pageHelpContent.community.name}}
-
-
-
-
{{check.pageHelpContent.placement}}
-
-
{{check.pageHelpContent.order}} -
-
-
{{check.pageHelpContent.isPriorTo}} -
-
-
- -
-
- -
-
-
- - -
-
- -
-
No page contents found
-
-
-
-
- Go back to {{page.type}} pages -
-
-
-
-
- - - Are you sure you want to delete the selected page content(s)? - diff --git a/app/pages/page/page-form.component.html b/app/pages/page/page-form.component.html deleted file mode 100644 index 35a37d4..0000000 --- a/app/pages/page/page-form.component.html +++ /dev/null @@ -1,43 +0,0 @@ -
-
- - -
-
- - -
-
- - -
- -
- -
-
{{entity.name}}, 
- - - -
- - - - - - - - {{entity.name}} - -
-
- -
-
- - -
diff --git a/app/pages/page/pages.component.html b/app/pages/page/pages.component.html deleted file mode 100644 index afe4fe4..0000000 --- a/app/pages/page/pages.component.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - - - - - - -
- - - -
-
-
- - - - -
-
-
- - -
-
-
- -
-
-
-
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameStateTypeRelated EntitiesRouteActionsPage Help ContentsClass Help Contents
- -
{{check.page.name}}
-
-
- -
-
- -
-
-
{{check.page.type}}
-
-
- {{entity.name}}, -
-
-
{{check.page.route}}
-
-
- - -
-
- add page contents - - add class contents - - -
- -
-
No pages found
-
-
-
-
-
-
-
-
-
- - - - - - - - - - Are you sure you want to delete the selected page(s)? - diff --git a/app/pages/page/pages.component.ts b/app/pages/page/pages.component.ts deleted file mode 100644 index 22b09f6..0000000 --- a/app/pages/page/pages.component.ts +++ /dev/null @@ -1,239 +0,0 @@ -/** - * Created by stefania on 7/13/17. - */ -import { Component, ViewChild, OnInit } from '@angular/core'; -import { ActivatedRoute } from "@angular/router"; -import { HelpContentService } from "../../services/help-content.service"; -import { FormGroup } from "@angular/forms"; -import { ModalFormComponent } from "../modal-form.component"; -import { DeleteConfirmationDialogComponent } from "../delete-confirmation-dialog.component"; -import { PageFormComponent } from "./page-form.component"; -import { CheckPage, Page } from "../../domain/page"; -import { Community } from "../../domain/community"; -import { Entity } from "../../domain/entity"; -import { EnvProperties } from '../../openaireLibrary/utils/properties/env-properties'; - -@Component({ - selector: 'pages', - templateUrl: './pages.component.html', -}) - -export class PagesComponent implements OnInit { - - // @ViewChild(ModalFormComponent) - @ViewChild('saveModal') - public modal:ModalFormComponent; - - @ViewChild('updateModal') - public updateModal:ModalFormComponent; - - @ViewChild('deleteConfirmationModal') - public deleteConfirmationModal : DeleteConfirmationDialogComponent; - - @ViewChild(PageFormComponent) - public formComponent : PageFormComponent; - - public checkboxes : CheckPage[] = []; - - public pages : Page[] = []; - public pageWithDivIds: string[] = []; - - public errorMessage: string; - - public formGroup : FormGroup; - - private searchText : RegExp = new RegExp(''); - - public communities: Community[] = []; - - public selectedCommunityPid: string; - - public pagesType: string; - public properties:EnvProperties = null; - - ngOnInit() { - this.formGroup = this.formComponent.form; - this.route.data - .subscribe((data: { envSpecific: EnvProperties }) => { - this.properties = data.envSpecific; - // this.getCommunities(); - - this.route.queryParams.subscribe(params => { - this.pagesType = ""; - if(params['type']) { - this.pagesType = params['type']; - } - this.getCommunities(); - }); - }); - } - - constructor(private route: ActivatedRoute, private _helpContentService: HelpContentService) {} - - getPages(community_pid: string) { - let self = this; - - if(this.pagesType) { - this._helpContentService.getCommunityPagesByType(community_pid, "?page_type="+this.pagesType, this.properties.adminToolsAPIURL).subscribe( - pages => { - self.pagesReturned(pages); - }, - error => this.handleError('System error retrieving pages', error)); - } else { - this._helpContentService.getCommunityPages(community_pid, this.properties.adminToolsAPIURL).subscribe( - pages => { - self.pagesReturned(pages); - }, - error => this.handleError('System error retrieving pages', error)); - } - } - - getPagesWithDivIds(community_pid: string) { - let self = this; - this._helpContentService.getPagesWithDivIds(community_pid, this.properties.adminToolsAPIURL).subscribe( - pages => { - self.pageWithDivIds = pages[community_pid]; - }, - error => this.handleError('System error retrieving pages', error)); - } - - pagesReturned(pages: Page[]) { - this.pages = pages; - this.checkboxes = []; - - pages.forEach(_ => { - this.checkboxes.push({page : _, checked : false}); - }); - } - - getCommunities() { - let self = this; - this._helpContentService.getCommunities(this.properties.adminToolsAPIURL).subscribe( - communities => { - self.communities = communities; - self.selectedCommunityPid = self.communities[0].pid; - self.getPages(self.selectedCommunityPid); - self.getPagesWithDivIds(self.selectedCommunityPid); - }, - error => this.handleError('System error retrieving communities', error)); - } - - public showModal():void { - this.modal.showModal(); - } - - public toggleCheckBoxes(event) { - this.checkboxes.forEach(_ => _.checked = event.target.checked); - } - - public applyCheck(flag : boolean) { - console.info("applyCheck "+flag); - this.checkboxes.forEach(_ => _.checked = flag); - } - - public getSelectedPages() : string[] { - return this.checkboxes.filter(page => page.checked == true).map(checkedPage => checkedPage.page).map(res => res._id); - } - - private deletePagesFromArray(ids : string[]) : void { - for(let id of ids) { - let i = this.checkboxes.findIndex(_ => _.page._id == id); - this.checkboxes.splice(i, 1); - } - } - - public confirmDeletePage(id : string) { - this.deleteConfirmationModal.ids = [id]; - this.deleteConfirmationModal.showModal(); - } - - public confirmDeleteSelectedPages() { - this.deleteConfirmationModal.ids = this.getSelectedPages(); - this.deleteConfirmationModal.showModal(); - } - - public confirmedDeletePages(ids : string[]) { - this._helpContentService.deletePages(ids, this.properties.adminToolsAPIURL).subscribe( - _ => this.deletePagesFromArray(ids), - error => this.handleError('System error deleting the selected pages', error) - ); - } - - public editPage(i : number) { - let page : Page = this.checkboxes[i].page; - this.formGroup.patchValue(page); - const entityFGs = (page.entities as Entity[]).map(entity => this.formComponent._fb.group(entity)); - const entityFormArray = this.formComponent._fb.array(entityFGs); - this.formGroup.setControl('entities', entityFormArray); - console.info(this.formGroup.value); - this.updateModal.showModal(); - } - - public pageSavedSuccessfully(page: Page) { - this.checkboxes.push({page : page, checked : false}); - console.info("checkboxes length: "+this.checkboxes.length); - this.applyCheck(false); - } - - public pageUpdatedSuccessfully(page : Page) { - console.info(page._id); - console.info(this.checkboxes.find(checkItem => (checkItem.page._id == page._id))); - console.info(page.entities); - this.checkboxes.find(checkItem => checkItem.page._id==page._id).page = page; - this.applyCheck(false); - } - - public filterBySearch(text : string) { - this.searchText = new RegExp(text,'i'); - this.applyFilter(); - } - - public applyFilter() { - this.checkboxes = []; - this.pages.filter(item => this.filterPages(item)).forEach( - _ => this.checkboxes.push({page: _, checked: false}) - ); - } - - public filterPages(page : Page) : boolean { - let textFlag = this.searchText.toString() == '' || (page.route + ' ' +page.name).match(this.searchText) != null; - return textFlag; - } - - handleError(message: string, error) { - if(error == null) { - this.formComponent.reset(); - } - this.errorMessage = message + ' (Server responded: ' + error + ')'; - } - - - - public filterByCommunity(event: any) { - this.selectedCommunityPid = event.target.value; - this.applyCommunityFilter(this.selectedCommunityPid); - } - - public applyCommunityFilter(community_pid: string) { - this.getPages(community_pid); - this.getPagesWithDivIds(community_pid); - } - - public togglePages(status : boolean, ids : string[]) { - this._helpContentService.togglePages(this.selectedCommunityPid,ids,status, this.properties.adminToolsAPIURL).subscribe( - () => { - for(let id of ids) { - // let i = this.checkboxes.findIndex(_ => _.page._id == id); - // this.checkboxes[i].page.isEnabled=status; - // } - let i = this.checkboxes.findIndex(_ => _.page._id == id); - this.checkboxes[i].page.isEnabled=status; - } - this.applyCheck(false); - }, - error => this.handleError('System error changing the status of the selected page(s)', error) - ); - } - - -} diff --git a/app/pages/stats/stats.component.html b/app/pages/stats/stats.component.html deleted file mode 100644 index cc585f6..0000000 --- a/app/pages/stats/stats.component.html +++ /dev/null @@ -1,88 +0,0 @@ -
- - -
-
-
-
{{ errorMessage }}
-
-
{{ loadingMessage }}
-
-
- -
-
-
- - -
-
-
- -
-
-
-
-
- -
- - - - - - - - - - - - - - - - - -
NameShow in statistics pageShow in dashboard
-
{{ name }}
-
-
- -
-
- -
-
-
- -
-
- -
-
- -
-
-
-
-
-
-
-
diff --git a/app/pages/stats/stats.component.ts b/app/pages/stats/stats.component.ts deleted file mode 100644 index f435e9c..0000000 --- a/app/pages/stats/stats.component.ts +++ /dev/null @@ -1,93 +0,0 @@ -import {Component, OnInit} from "@angular/core"; -import {HelpContentService} from "../../services/help-content.service"; -import {CommunityStatistics} from "../../domain/statistics-classes"; -import {ActivatedRoute} from "@angular/router"; -import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties"; -import { Community } from '../../domain/community'; - -@Component({ - selector: 'stats', - templateUrl: 'stats.component.html' -}) - -export class StatsComponent implements OnInit { - errorMessage: string; - loadingMessage: string; - - communities: Community[] = []; - selectedCommunityPid: string; - - stats: CommunityStatistics = null; - tableNames: string[] = []; - - public properties: EnvProperties = null; - - constructor(private contentService: HelpContentService, - private route: ActivatedRoute) {} - - ngOnInit() { - this.route.data - .subscribe((data: { envSpecific: EnvProperties }) => { - this.properties = data.envSpecific; - this.getCommunities(); - }, - error => console.log(`E R R O R!!`) - ); - } - - getCommunities() { - this.loadingMessage = 'Retrieving communities'; - this.contentService.getCommunities(this.properties.adminToolsAPIURL).subscribe( - /* this.contentService.getCommunities('http://duffy.di.uoa.gr:8080/uoa-admin-tools/').subscribe(*/ - comms => { - this.communities = comms; - }, - error => { - this.loadingMessage = ''; - this.errorMessage = 'Failed to retrieve information on your communities!'; - console.log(error); - }, - () => { - console.log(`I have communities`); - this.loadingMessage = ''; - this.selectedCommunityPid = this.communities[0].pid; - this.getStatistics(); - } - ); - } - - getStatistics() { - this.loadingMessage = 'Retrieving statistics tables'; - this.errorMessage = ''; - this.stats = null; - this.tableNames = []; - this.contentService.getStatistics(this.selectedCommunityPid,this.properties.adminToolsAPIURL).subscribe( - stats => this.stats = stats, - error => { - this.loadingMessage = ''; - this.errorMessage = 'Failed to retrieve statistics tables for the chosen community!'; - console.log(error); - }, - () => { - console.log(`I have statistics!`); - this.loadingMessage = ''; - for (let key in this.stats.statistics){ - this.tableNames.push(key); - } - } - ); - } - - getStatsOfCommunity(pid: string) { - this.selectedCommunityPid = pid; - this.getStatistics(); - } - - toggleShow(name: string) { - this.stats.statistics[name].show = !this.stats.statistics[name].show; - } - - toggleShowInDashboard(name: string) { - this.stats.statistics[name].showInDashboard = !this.stats.statistics[name].showInDashboard; - } -} diff --git a/app/utils/properties.ts b/app/utils/properties.ts deleted file mode 100644 index 7b17ac0..0000000 --- a/app/utils/properties.ts +++ /dev/null @@ -1,22 +0,0 @@ -export class Properties { - private static productionMode=false; - private static loginUrl ="http://mpagasas.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/openid_connect_login"; - private static loginUrl_pm ="https://beta.services.openaire.eu/uoa-user-management/openid_connect_login"; - - private static logoutUrl ="https://aai.openminted.eu/proxy/saml2/idp/SingleLogoutService.php?ReturnTo="; - private static logoutUrl_pm ="https://aai.openminted.eu/proxy/saml2/idp/SingleLogoutService.php?ReturnTo="; - public static getLoginURL():string{ - if(this.productionMode){ - return this.loginUrl_pm; - }else{ - return this.loginUrl; - } - } - public static getLogoutURL():string{ - if(this.productionMode){ - return this.logoutUrl_pm; - }else{ - return this.logoutUrl; - } - } - } diff --git a/assets/env-properties.json b/connect-admin-beta-properties.json similarity index 71% rename from assets/env-properties.json rename to connect-admin-beta-properties.json index a9f2966..8cd3c5e 100644 --- a/assets/env-properties.json +++ b/connect-admin-beta-properties.json @@ -1,29 +1,23 @@ { "enablePiwikTrack" : false, - "enableHelper" : false, + "enableHelper" : true, "useCache" : true, "metricsAPIURL" : "https://beta.services.openaire.eu/usagestats/", "framesAPIURL" : "https://beta.openaire.eu/stats3/", - "claimsAPIURL" : "http://scoobydoo.di.uoa.gr:8080/dnet-claims-service-2.0.0-SNAPSHOT/rest/claimsService/", - + "statisticsAPIURL" : "https://beta.services.openaire.eu/stats-api/", + "statisticsFrameAPIURL":"https://beta.openaire.eu/stats/", + "claimsAPIURL" : "https://beta.services.openaire.eu/claims/rest/claimsService/", "searchAPIURLLAst" : "https://beta.services.openaire.eu/search/v2/api/", - "searchResourcesAPIURL" : "https://beta.services.openaire.eu/search/v2/api/resources", - - - "csvAPIURL" : "http://rudie.di.uoa.gr:8080/dnet-functionality-services-2.0.0-SNAPSHOT/rest/v2/reports", - + "csvAPIURL" : "https://beta.services.openaire.eu/search/v2/api/reports", "searchCrossrefAPIURL" : "https://api.crossref.org/works", "searchDataciteAPIURL" : "https://api.datacite.org/works", - "searchOrcidURL" : "https://pub.orcid.org/", - "pmidURL" : "http://www.ncbi.nlm.nih.gov/pubmed/", "doiURL" : "https://dx.doi.org/", "cordisURL" : "http://cordis.europa.eu/projects/", "pmcURL" : "http://europepmc.org/articles/", "handleURL" : "http://hdl.handle.net/", - "zenodo" : "https://zenodo.org/", "openAccess" : "https://www.openaire.eu/support/faq#article-id-234", "openAccessRepo" : "https://www.openaire.eu/support/faq#article-id-310", @@ -31,45 +25,46 @@ "h2020Guidlines" : "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020", "ercGuidlines" : "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf", "helpdesk" : "https://www.openaire.eu/support/helpdesk", - - "uploadService" : "http://scoobydoo.di.uoa.gr:8000/upload", + "uploadService" : "https://demo.openaire.eu/upload", "vocabulariesAPI" :"https://beta.services.openaire.eu/provision/mvc/vocabularies/", - "piwikBaseUrl" :" https://analytics.openaire.eu/piwik.php?idsite:6", + "piwikBaseUrl" :" https://analytics.openaire.eu/piwik.php?idsite=6", + "loginUrl" :"https://beta.services.openaire.eu/admin-user-management/openid_connect_login", - - "loginUrl" :"http://mpagasas.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/openid_connect_login", - - "logoutUrl" :"https://aai.openminted.eu/proxy/saml2/idp/SingleLogoutService.php?ReturnTo:", + "logoutUrl" :"https://aai.openaire.eu/proxy/saml2/idp/SingleLogoutService.php?ReturnTo=", "logoutOpenaireUrl" :"http://dl067.madgik.di.uoa.gr/idp/profile/Logout", - "cookieDomain" :".di.uoa.gr", + "cookieDomain" :".openaire.eu", "feedbackmail" :"openaire.test@gmail.com", + "feedbackmailForMissingEntities": "feedback@openaire.eu", "helperPageUrl" :"http://scoobydoo.di.uoa.gr:16000/api/page/route", - "cacheUrl" :"http://scoobydoo.di.uoa.gr:3000/get?url=", + "cacheUrl" :"https://demo.openaire.eu/cache/get?url=", - "adminToolsAPIURL" :"http://duffy.di.uoa.gr:8080/uoa-admin-tools/", + "adminToolsAPIURL" :"https://beta.services.openaire.eu/uoa-admin-tools/", "adminToolsCommunity" :"openaire", - "communityAPI": "https://dev-openaire.d4science.org/openaire/community/", + + "communityAPI": "https://beta.services.openaire.eu/openaire/community/", + + "miningBackendURL": "https://beta.services.openaire.eu/interactive-mining", + "csvLimit": 2000, "pagingLimit": 20, "resultsPerPage": 10, - "statisticsAPIURL" : "http://vatopedi.di.uoa.gr:8080/stats-api", + "baseLink" : "https://beta.admin.connect.openaire.eu/", + "baseOpenaireLink" : "https://beta.explore.openaire.eu", - "baseLink" : "https://demo.openaire.eu", - - "searchLinkToPublication" : "/search/publication?articleId:", - "searchLinkToProject" : "/search/project?projectId:", - "searchLinkToDataProvider" : "/search/dataprovider?datasourceId:", - "searchLinkToDataset" : "/search/dataset?datasetId:", - "searchLinkToOrganization" : "/search/organization?organizationId:", + "searchLinkToPublication" : "/search/publication?articleId=", + "searchLinkToProject" : "/search/project?projectId=", + "searchLinkToDataProvider" : "/search/dataprovider?datasourceId=", + "searchLinkToDataset" : "/search/dataset?datasetId=", + "searchLinkToOrganization" : "/search/organization?organizationId=", "searchLinkToPublications" : "/search/find/publications", "searchLinkToDataProviders" : "/search/find/dataproviders", diff --git a/connect-admin-production-properties.json b/connect-admin-production-properties.json new file mode 100644 index 0000000..4ec0dfa --- /dev/null +++ b/connect-admin-production-properties.json @@ -0,0 +1,89 @@ +{ + "enablePiwikTrack" : false, + "enableHelper" : true, + "useCache" : true, + "metricsAPIURL" : "https://services.openaire.eu/usagestats/", + "framesAPIURL" : "https://www.openaire.eu/stats3/", + "statisticsAPIURL" : "https://beta.services.openaire.eu/stats-api/", + "statisticsFrameAPIURL":"https://www.openaire.eu/stats/", + "claimsAPIURL" : "https://services.openaire.eu/claims/rest/claimsService/", + "searchAPIURLLAst" : "https://services.openaire.eu/search/v2/api/", + "searchResourcesAPIURL" : "https://services.openaire.eu/search/v2/api/resources", + "csvAPIURL" : "https://services.openaire.eu/search/v2/api/reports", + "searchCrossrefAPIURL" : "https://api.crossref.org/works", + "searchDataciteAPIURL" : "https://api.datacite.org/works", + "searchOrcidURL" : "https://pub.orcid.org/", + "pmidURL" : "http://www.ncbi.nlm.nih.gov/pubmed/", + "doiURL" : "https://dx.doi.org/", + "cordisURL" : "http://cordis.europa.eu/projects/", + "pmcURL" : "http://europepmc.org/articles/", + "handleURL" : "http://hdl.handle.net/", + "zenodo" : "https://zenodo.org/", + "openAccess" : "https://www.openaire.eu/support/faq#article-id-234", + "openAccessRepo" : "https://www.openaire.eu/support/faq#article-id-310", + "fp7Guidlines" : "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme", + "h2020Guidlines" : "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020", + "ercGuidlines" : "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf", + "helpdesk" : "https://www.openaire.eu/support/helpdesk", + "uploadService" : "https://explore.openaire.eu/upload", + + "vocabulariesAPI" :"https://services.openaire.eu/provision/mvc/vocabularies/", + + "piwikBaseUrl" :" https://analytics.openaire.eu/piwik.php?idsite=6", + "loginUrl" :"https://services.openaire.eu/admin-user-management/openid_connect_login", + + "logoutUrl" :"https://aai.openaire.eu/proxy/saml2/idp/SingleLogoutService.php?ReturnTo=", + + "logoutOpenaireUrl" :"http://dl067.madgik.di.uoa.gr/idp/profile/Logout", + + "cookieDomain" :".openaire.eu", + + "feedbackmail" :"openaire.test@gmail.com", + "feedbackmailForMissingEntities": "feedback@openaire.eu", + + "helperPageUrl" :"http://scoobydoo.di.uoa.gr:16000/api/page/route", + + "cacheUrl" :"https://explore.openaire.eu/cache/get?url=", + + "adminToolsAPIURL" :"https://services.openaire.eu/uoa-admin-tools/", + + "adminToolsCommunity" :"openaire", + + "communityAPI": "https://services.openaire.eu/openaire/community/", + + "miningBackendURL": "https://beta.services.openaire.eu/interactive-mining", + + "csvLimit": 2000, + "pagingLimit": 20, + "resultsPerPage": 10, + + "baseLink" : "https://admin.explore.openaire.eu/", + "baseOpenaireLink" : "https://explore.openaire.eu", + + "searchLinkToPublication" : "/search/publication?articleId=", + "searchLinkToProject" : "/search/project?projectId=", + "searchLinkToDataProvider" : "/search/dataprovider?datasourceId=", + "searchLinkToDataset" : "/search/dataset?datasetId=", + "searchLinkToOrganization" : "/search/organization?organizationId=", + + "searchLinkToPublications" : "/search/find/publications", + "searchLinkToDataProviders" : "/search/find/dataproviders", + "searchLinkToProjects" : "/search/find/projects", + "searchLinkToDatasets" : "/search/find/datasets", + "searchLinkToSoftware" : "/search/find/software", + "searchLinkToOrganizations" : "/search/find/organizations", + "searchLinkToCompatibleDataProviders" : "/search/content-providers", + "searchLinkToCompatibleDataProvidersTable" : "/search/content-providers-table", + "searchLinkToEntityRegistriesDataProviders" : "/search/entity-registries", + "searchLinkToEntityRegistriesDataProvidersTable" : "/search/entity-registries-table", + "searchLinkToJournals" : "/search/journals", + "searchLinkToJournalsTable" : "/search/journals-table", + + "searchLinkToAdvancedPublications" : "/search/advanced/publications", + "searchLinkToAdvancedProjects" : "/search/advanced/projects", + "searchLinkToAdvancedDatasets" : "/search/advanced/datasets", + "searchLinkToAdvancedSoftware" : "/search/advanced/software", + "searchLinkToAdvancedDataProviders" : "/search/advanced/dataproviders", + "searchLinkToAdvancedOrganizations" : "/search/advanced/organizations", + "searchLinkToAdvancedPeople" : "/search/advanced/people" +} diff --git a/css/connect-custom.css b/css/connect-custom.css deleted file mode 100644 index 160c4ee..0000000 --- a/css/connect-custom.css +++ /dev/null @@ -1,21 +0,0 @@ -.tm-toolbar .uk-subnav-line .custom-connect-li { - display: block; - background:#DEAF50 !important; color:#fff !important; - -} -.custom-connect-toolbar ul.uk-subnav.uk-subnav-line{ - background-color: #FFC700 !important; - } - - .custom-connect-toolbar .inner { - background-color: #FFC700 !important; - } - - .custom-connect-toolbar{ - border-top-color:#FFC700 !important; - } -.custom-footer{ - position:relative; - bottom:0; - left:0; -} diff --git a/css/custom.css b/css/custom.css deleted file mode 100644 index eff11b7..0000000 --- a/css/custom.css +++ /dev/null @@ -1,1314 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Josefin+Sans|Raleway|Roboto|Roboto:900|Roboto+Condensed|Roboto+Mono|Roboto+Slab'); -@import url('https://fonts.googleapis.com/css?family=Open+Sans:300,400'); -@import url('https://fonts.googleapis.com/css?family=Merriweather|Merriweather+Sans'); -@import url('https://fonts.googleapis.com/css?family=Roboto+Slab'); -@import url('https://fonts.googleapis.com/css?family=Lora'); -@import url('https://fonts.googleapis.com/css?family=Raleway|Raleway+Dots'); -@import url('https://fonts.googleapis.com/css?family=Raleway:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i&subset=latin-ext'); -@import url('https://fonts.googleapis.com/css?family=Montserrat:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i&subset=latin-ext'); -@import url('https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i,800,800i&subset=cyrillic-ext,greek-ext,latin-ext'); - - -body { -font-family: 'Open Sans', sans-serif!important; -font-family: Raleway, sans-serif!important; -/*font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif!important;*/ -font-size: 14px; -font-weight:normal!important; -} - -h1, .uk-h1, .wk-h1, h2, .uk-h2, .wk-h2, h3, .uk-h3, .wk-h2 { - font-family: 'Open Sans', sans-serif !important; - text-transform:none!important; - font-weight:300!important; -} -h4, .uk-h4, .wk-h4, h5, .uk-h5, .wk-h5 { - font-family: 'Open Sans', sans-serif !important; - font-weight:bold; -} - -h6, .uk-h6, .wk-h6 { - font-family: 'Open Sans', sans-serif !important; - font-weight: normal; -} -h2, .uk-h2, .wk-h2 { - font-size:36px; -} -h3, .uk-h3, .wk-h3 { - font-size:26px; -} -@media(min-width:640px){.uk-heading-hero{font-size:4rem;line-height:1}} -@media(min-width:960px){.uk-heading-hero{font-size:6rem;line-height:1}} - -/* support plain widgetkits */ -.wk-h1{font-size:54px;line-height:1.2} -.wk-h3{font-size:22px;line-height:1.4;font-family:'Open Sans';font-weight:700;text-transform:uppercase} -.wk-h4{font-size:18px;line-height:1.4;font-family:'Open Sans';font-weight:700;text-transform:uppercase} -.wk-h5{font-size:13px;line-height:1.4;font-family:'Open Sans';font-weight:700;text-transform:uppercase} -.wk-h6{font-size:13px;line-height:1.4;font-family:'Open Sans';font-weight:300;text-transform:uppercase} -.img-fulltext-none { - text-align: center; - margin-bottom: 10px; -} -.img-fulltext-left { - float: left; - margin-right: 10px; -} -.img-fulltext-right { - float: right; - margin-left: 10px; -} - -.wk-tab>li {font-family: 'Roboto', sans-serif!important;} -.wk-panel { } - -.dark_overlay .wk-overlay-active :not(.wk-active)>.wk-overlay-panel:not(.wk-ignore), -.dark_overlay .wk-overlay-active :not(.wk-active)>.wk-overlay-panel:not(.wk-ignore), -.dark_overlay .wk-overlay-hover:not(:hover):not(.wk-hover) .wk-overlay-panel:not(.wk-ignore), -.dark_overlay .wk-overlay-background{background:rgba(100,100,100,.6);} - -/* service pages */ -.service-button .wk-dotnav>li>a, -.service-button .wk-icon-button, .service-button .wk-list>li>a, .service-button .wk-nav ul>li>a, .service-button .wk-nav>li>a, -.service-button .wk-overlay, .service-button .wk-slidenav {} - -.service-button > .wk-subnav>li>a{ - border: 1px solid #9c9c9c!important; - border-radius: 0px!important; - -} -.service-button .wk-subnav-pill>*>:hover { - border: 1px solid #213BAA!important; - color:#213BAA!important; - text-decoration: none; - outline: 0; - box-shadow: none!important; - background:none; -} -.service-button .wk-subnav-pill>*>:focus, - { - color: #fff!important; -} -.service-button .wk-subnav-pill>.wk-active>* - { - background: #213BAA; - border: 1px solid #213BAA!important; - color: #fff!important; - box-shadow: none; -} -.service-button .wk-panel-box-primary {background:none!important;} -.service-button .wk-panel-box { - padding: 20px; - background: #fff; - /* border: 1px solid #e5e5e5; */ - border: none!important; - border-radius: 0px; - background: #fff; - color: #767779; - color: rgb(108, 109, 116); - box-shadow: rgba(0, 0, 0, 0.08) 0px 5px 15px; - background: rgb(255, 255, 255); -} - -.uk-button-default:focus, .uk-button-default:hover {color:#fff;} -.btn-info, .btn-primary, .uk-button-primary { background: #3870DF; color:#fff;} -.btn-info:focus, .btn-info:hover, .btn-primary:focus, .btn-primary:hover, -.uk-button-primary:focus, .uk-button-primary:hover { - background: #223CAA; color:#fff; -} - -a, .uk-link { - color: #2D72D6; -} -a:hover, .uk-link:hover{ -color: #D53B23; -} - -.uk-badge, .badge, a.badge { border-radius: 2px;} -.uk-button-secondary { - background-color: transparent; - color: #192699; - border: 1px solid #192699; - border-radius:0px; -} -.uk-button-secondary:hover { - background-color: #192699; - color: #fff; - border: 1px solid #192699; -} -ol.big-numbers-list{ - margin-left: 0; - padding-right: 0; - padding-left:0; - list-style-type: none; -} -ol.big-numbers-list li { - counter-increment: step-counter; - padding-bottom:20px; - -} -ol.big-numbers-list li::before { - content: counter(step-counter); - margin-right: 5px; - text-align: center; - - font-size: 100%; - vertical-align: middle; - /*background-color: #192699; - border-radius: 2px; - */ - color: #192699; - border-radius:50%; - -moz-border-radius:50%; - -webkit-border-radius:50%; - border: 1px solid #192699; - - - /* - border: 1px solid #192699; - color: #192699; - border-radius: 12px; - */ - - font-weight: normal; - padding: 2px 8px 4px 8px; -} -.badge-important { - padding: 2px 5px!important; -} - -.hero_to_top { -} -.image-front-topbar { - margin-top:-40px; -} - -.tm-header { -/*padding-top:40px;*/ -} - -.tm-toolbar { -border-top: 5px solid #05007A; -position:relative; -color: #fff; -padding-top: 0px; -padding-bottom:0px; -background:rgba(255,255,255, 0.0); -z-index:10000; -/*background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,0)), url(/images/toolbar_bg.png);*/ - -} -.tm-toolbar .forimage { -background:rgba(255,255,255, 0.4); -} - -.uk-section-overlap { - /*margin-top:-40px!important;*/ -} -.uk-sticky{ -} - -.tm-header .uk-navbar-left {position:relative;z-index:9999!important;} -.tm-header .uk-logo {padding: 5px 10px 10px 10px; position:relative;z-index:1000!important;} -.tm-header .uk-navbar-transparent{ - /* background:rgba(255,255,255, 0.7);*/ - padding-top:4px; -} -.inner { - left:0px; - background-color: #05007A; - margin-top:-5px; -} -.tm-toolbar .uk-container { -padding-right:0px; -} - -.tm-toolbar ul.uk-subnav.uk-subnav-line, -.tm-toolbar ul.uk-subnav{ - margin-top:-10px; - background-color: #05007A; - padding:10px 10px 0px 0px; - -ms-transform: skew(25deg); - -webkit-transform: skew(25deg); - transform: skew(25deg); - margin-right:10px; -} - -.tm-toolbar .uk-subnav-line li, -.tm-toolbar .uk-subnav li -{ - padding:5px 25px 5px 25px; - /*transition: background 0.2s;*/ - /* display:inline-block;*/ - font-family:Roboto!important; - font-weight:900!important; - text-transform:uppercase!important; - font-size:12px!important; - opacity:1!important; - display:inline-block; -} -.tm-toolbar .uk-subnav-line > :before, -.tm-toolbar .uk-subnav > :before { - content: none; - display: block; - /* display: inline-block*/ - height: 10px; - vertical-align: middle -} - -.uk-subnav-line > :nth-child(n + 2):before, -.tm-toolbar .uk-subnav > :nth-child(n + 2):before { - margin-right: 10px; - border-left: 0px ; -} - -.tm-toolbar .uk-subnav-line li a, -.tm-toolbar .uk-subnav li a{ - display: block; - text-decoration:none; - -ms-transform: skew(-25deg); - -webkit-transform: skew(-25deg); - transform: skew(-25deg); - font-family:Roboto:900!important; - text-transform:uppercase!important; - font-size:13px!important; - opacity:1!important; - color:#fff!important; -} - - -.tm-toolbar .uk-subnav-line li:hover, -.tm-toolbar .uk-subnav li:hover { - color:#05007A!important; - background:#fff; - background:#3870DF!important; - color: #efefef!important; - display: block; -} - - -.tm-toolbar .uk-subnav-line .uk-active .home-hover li:hover, -.tm-toolbar .uk-subnav .uk-active .home-hover li:hover, -li.uk-active.home-hover -{ - background:#05007A!important; - //rgb(5,0,122) -} - -.tm-toolbar .uk-dotnav, .tm-toolbar .uk-subnav { - margin-bottom:0px!important; -} - -.tm-toolbar .uk-subnav-line li a:hover, -.tm-toolbar .uk-subnav li a:hover, -.tm-toolbar .uk-subnav-line li:hover a, -.tm-toolbar .uk-subnav li:hover a { - display: block; - color:#05007A!important; - background:#3870DF!important; - color: #efefef!important; -} - -.tm-toolbar .uk-subnav a[title]:hover:after { - content: attr(title); - padding: 15px 20px; - color: #333; - position: absolute; - top: 200%; - right: -70%; - z-index: 20; - white-space: nowrap; - /*white-space:pre-wrap;*/ - text-align:center; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - border-radius: 0px; - background: #fff; - -moz-box-shadow: 0px 0px 1px #666; - -webkit-box-shadow: 0px 0px 1px #666; - box-shadow: 0px 0px 1px #666; -/* - background-image: -moz-linear-gradient(top, #eeeeee, #cccccc); - background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #eeeeee),color-stop(1, #cccccc)); - background-image: -webkit-linear-gradient(top, #eeeeee, #cccccc); - background-image: -moz-linear-gradient(top, #eeeeee, #cccccc); - background-image: -ms-linear-gradient(top, #eeeeee, #cccccc); - background-image: -o-linear-gradient(top, #eeeeee, #cccccc); - */ -} - -.movetotop .uk-slidenav-position{ - /*top:-130px; - z-index:5;*/ -} - -.uk-navbar-container:not(.uk-navbar-transparent) { - background: #fff; - box-shadow: 2px 15px 50px rgba(41, 44, 61, .1); -} - -.uk-navbar-sticky { - box-shadow: 2px 15px 50px rgba(41, 44, 61, .1); -} - -.navbar .nav>li>.dropdown-menu, .uk-navbar-dropdown -{ -display: none; -position: absolute; -z-index: 1020; -box-sizing: border-box; -width: 200px; -padding: 25px; -background: #fff; -color: #4F5260; -border-radius: 2px; -box-shadow: 2px 15px 50px rgba(41, 44, 61, .1) -} - -.grid-bottom-align { - -webkit-align-items: flex-end!important; - align-items: flex-end!important; -} -/* -.uk-light a, .uk-light .uk-link, -.uk-section-primary:not(.uk-preserve-color) a, .uk-section-primary:not(.uk-preserve-color) .uk-link, -.uk-section-secondary:not(.uk-preserve-color) a, .uk-section-secondary:not(.uk-preserve-color) .uk-link, -.uk-tile-primary:not(.uk-preserve-color) a, .uk-tile-primary:not(.uk-preserve-color) .uk-link, -.uk-tile-secondary:not(.uk-preserve-color) a, .uk-tile-secondary:not(.uk-preserve-color) .uk-link, -.uk-card-primary.uk-card-body a, .uk-card-primary.uk-card-body .uk-link, .uk-card-primary>:not([class*='uk-card-media']) a, -.uk-card-primary>:not([class*='uk-card-media']) .uk-link, .uk-card-secondary.uk-card-body a, -.uk-card-secondary.uk-card-body .uk-link, .uk-card-secondary>:not([class*='uk-card-media']) a, -.uk-card-secondary>:not([class*='uk-card-media']) .uk-link, .uk-overlay-primary a, .uk-overlay-primary .uk-link, -*/ -.uk-navbar-container:not(.uk-navbar-transparent) a, .uk-navbar-container:not(.uk-navbar-transparent) .uk-link, -.uk-offcanvas-bar a, .uk-offcanvas-bar .uk-link, .tm-toolbar a, .tm-toolbar .uk-link { - color: #292C3D -} -.uk-card {border-radius:0;} - -.uk-navbar-container:not(.uk-navbar-transparent) a, .uk-navbar-container:not(.uk-navbar-transparent) .uk-link, -.uk-offcanvas-bar a, .uk-offcanvas-bar .uk-link, .tm-toolbar a, .tm-toolbar .uk-link { -/*color:#292C3D; -color: #245BCC; -color: #2D72D6; -*/ -/* -font-size: 14px; -line-height: 18px; -*/ -} - -/*footer*/ -.footer-license { -font-size:11px!important; -line-height:16px!important; -} -.footer-license .uk-section-primary:not(.uk-preserve-color) a{ - color: #128DD5!important; - font-size:11px!important; -line-height:16px!important; - -} -.footer-license a:hover { - color: #D33A24; -} - -.uk-light .uk-navbar-nav>li>a, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a, .uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a, .uk-card-primary.uk-card-body .uk-navbar-nav>li>a, .uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a, -.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a, .uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a, .uk-overlay-primary .uk-navbar-nav>li>a, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a, .uk-offcanvas-bar .uk-navbar-nav>li>a, .tm-toolbar .uk-navbar-nav>li>a { -color:#292C3D;} - -.uk-light .uk-navbar-nav>li.uk-active>a, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a, .uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a, .uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a, .uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a, .uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a, .uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a, .uk-overlay-primary .uk-navbar-nav>li.uk-active>a, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li.uk-active>a, .uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a, .tm-toolbar .uk-navbar-nav>li.uk-active>a -color:#292C3D;} - -.uk-light .uk-navbar-nav>li>a::before, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a::before, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a::before, -.uk-card-primary.uk-card-body .uk-navbar-nav>li>a::before, -.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a::before, . -uk-card-secondary.uk-card-body .uk-navbar-nav>li>a::before, -.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a::before, -.uk-overlay-primary .uk-navbar-nav>li>a::before, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a::before, -.uk-offcanvas-bar .uk-navbar-nav>li>a::before, .tm-toolbar .uk-navbar-nav>li>a::before { - -background-color: #128DD5; -} -.uk-navbar-nav>li>a::before { -/*height:2px;*/ -background-color: #128DD5!important; -} -.uk-light .uk-navbar-nav>li:hover>a, .uk-light .uk-navbar-nav>li>a:focus, .uk-light .uk-navbar-nav>li>a.uk-open, -.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a, -.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus, -.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open, -.uk-card-primary.uk-card-body .uk-navbar-nav>li:hover>a, .uk-card-primary.uk-card-body .uk-navbar-nav>li>a:focus, -.uk-card-primary.uk-card-body .uk-navbar-nav>li>a.uk-open, -.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a, -.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:focus, -.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a.uk-open, -.uk-card-secondary.uk-card-body .uk-navbar-nav>li:hover>a, -.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:focus, -.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a.uk-open, -.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a, -.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:focus, -.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a.uk-open, -.uk-overlay-primary .uk-navbar-nav>li:hover>a, .uk-overlay-primary .uk-navbar-nav>li>a:focus, -.uk-overlay-primary .uk-navbar-nav>li>a.uk-open, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li:hover>a, -.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a:focus, -.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a.uk-open, -.uk-offcanvas-bar .uk-navbar-nav>li:hover>a, .uk-offcanvas-bar .uk-navbar-nav>li>a:focus, -.uk-offcanvas-bar .uk-navbar-nav>li>a.uk-open, .tm-toolbar .uk-navbar-nav>li:hover>a, -.tm-toolbar .uk-navbar-nav>li>a:focus, .tm-toolbar .uk-navbar-nav>li>a.uk-open { -color: #128DD5; -} - -.uk-light .uk-navbar-nav > li:hover > a, .uk-light .uk-navbar-nav > li > a:focus, -.uk-light .uk-navbar-nav > li > a.uk-open, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li:hover > a, -.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a:focus, -.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a.uk-open, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li:hover > a, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a:focus, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a.uk-open, -.uk-card-primary.uk-card-body .uk-navbar-nav > li:hover > a, .uk-card-primary.uk-card-body .uk-navbar-nav > li > a:focus, -.uk-card-primary.uk-card-body .uk-navbar-nav > li > a.uk-open, .uk-card-primary > :not([class * ='uk-card-media']) .uk-navbar-nav > li:hover > a, -.uk-card-primary > :not([class * ='uk-card-media']) .uk-navbar-nav > li > a:focus, -.uk-card-primary > :not([class * ='uk-card-media']) .uk-navbar-nav > li > a.uk-open, -.uk-card-secondary.uk-card-body .uk-navbar-nav > li:hover > a, .uk-card-secondary.uk-card-body .uk-navbar-nav > li > a:focus, -.uk-card-secondary.uk-card-body .uk-navbar-nav > li > a.uk-open, .uk-card-secondary > :not([class * ='uk-card-media']) .uk-navbar-nav > li:hover > a, -.uk-card-secondary > :not([class * ='uk-card-media']) .uk-navbar-nav > li > a:focus, -.uk-card-secondary > :not([class * ='uk-card-media']) .uk-navbar-nav > li > a.uk-open, -.uk-overlay-primary .uk-navbar-nav > li:hover > a, .uk-overlay-primary .uk-navbar-nav > li > a:focus, -.uk-overlay-primary .uk-navbar-nav > li > a.uk-open, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav > li:hover > a, -.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav > li > a:focus, -.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav > li > a.uk-open, -.uk-offcanvas-bar .uk-navbar-nav > li:hover > a, .uk-offcanvas-bar .uk-navbar-nav > li > a:focus, -.uk-offcanvas-bar .uk-navbar-nav > li > a.uk-open, .tm-toolbar .uk-navbar-nav > li:hover > a, -.tm-toolbar .uk-navbar-nav > li > a:focus, .tm-toolbar .uk-navbar-nav > li > a.uk-open { - color: #128DD5!important; -} -.uk-light .uk-navbar-nav>li.uk-active>a, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a, .uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a, .uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a, .uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a, .uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a, .uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a, .uk-overlay-primary .uk-navbar-nav>li.uk-active>a, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li.uk-active>a, .uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a, .tm-toolbar .uk-navbar-nav>li.uk-active>a { - color: #128DD5!important; -} -.uk-light a:hover, .uk-light .uk-link:hover, -.uk-section-primary:not(.uk-preserve-color) a:hover, .uk-section-primary:not(.uk-preserve-color) .uk-link:hover, -.uk-section-secondary:not(.uk-preserve-color) a:hover, .uk-section-secondary:not(.uk-preserve-color) .uk-link:hover, -.uk-card-primary.uk-card-body a:hover, .uk-card-primary.uk-card-body .uk-link:hover, -.uk-card-primary>:not([class*='uk-card-media']) a:hover, .uk-card-primary>:not([class*='uk-card-media']) .uk-link:hover, -.uk-card-secondary.uk-card-body a:hover, .uk-card-secondary.uk-card-body .uk-link:hover, -.uk-card-secondary>:not([class*='uk-card-media']) a:hover, .uk-card-secondary>:not([class*='uk-card-media']) .uk-link:hover, -.uk-overlay-primary a:hover, .uk-overlay-primary .uk-link:hover, -.uk-navbar-container:not(.uk-navbar-transparent) a:hover, .uk-navbar-container:not(.uk-navbar-transparent) .uk-link:hover, -.uk-offcanvas-bar a:hover, .uk-offcanvas-bar .uk-link:hover, .tm-toolbar a:hover, .tm-toolbar .uk-link:hover { - color: #128DD5!important; -} - -.uk-navbar-dropdown-nav>li.uk-active>a { - color: #128DD5!important; -} -.uk-light .uk-navbar-nav > li > a:active, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a:active, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a:active, -.uk-card-primary.uk-card-body .uk-navbar-nav > li > a:active, .uk-card-primary > :not([class * ='uk-card-media']) .uk-navbar-nav > li > a:active, -.uk-card-secondary.uk-card-body .uk-navbar-nav > li > a:active, .uk-card-secondary > :not([class * ='uk-card-media']) .uk-navbar-nav > li > a:active, -.uk-overlay-primary .uk-navbar-nav > li > a:active, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav > li > a:active, -.uk-offcanvas-bar .uk-navbar-nav > li > a:active, .tm-toolbar .uk-navbar-nav > li > a:active { - color: #292C3D!important; -} - -.uk-light .uk-navbar-nav > li.uk-active > a, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li.uk-active > a, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li.uk-active > a, -.uk-card-primary.uk-card-body .uk-navbar-nav > li.uk-active > a, .uk-card-primary > :not([class * ='uk-card-media']) .uk-navbar-nav > li.uk-active > a, -.uk-card-secondary.uk-card-body .uk-navbar-nav > li.uk-active > a, -.uk-card-secondary > :not([class * ='uk-card-media']) .uk-navbar-nav > li.uk-active > a, -.uk-overlay-primary .uk-navbar-nav > li.uk-active > a, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav > li.uk-active > a, -.uk-offcanvas-bar .uk-navbar-nav > li.uk-active > a, .tm-toolbar .uk-navbar-nav > li.uk-active > a { - color: #292C3D!important; -} -.uk-light .uk-navbar-nav>li>a:active, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active, .uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active, .uk-card-primary.uk-card-body .uk-navbar-nav>li>a:active, .uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active, .uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:active, .uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active, .uk-overlay-primary .uk-navbar-nav>li>a:active, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a:active, .uk-offcanvas-bar .uk-navbar-nav>li>a:active, .tm-toolbar .uk-navbar-nav>li>a:active { -color:#128DD5!important; -} -.uk-card-secondary {background:#2EADE4;} - -.color-three.uk-card {background:red;} - -.uk-navbar-dropdown-nav { - font-size:14px; -} -.uk-navbar-nav>li>a, .uk-navbar-item, .uk-navbar-toggle, .navbar .brand, .navbar-search, .navbar .nav>li>a { - font-size: 14px; - font-family: Roboto; - font-family: "Merriweather", serif; - font-family: 'Merriweather Sans', sans-serif; - font-family: 'Roboto Slab', serif; - font-size: 16px; - line-height: 23px; -text-transform:none; -color: rgba(0, 0, 0, 0.8)!important; - font-weight: 500 !important; -} -.uk-nav-default .uk-nav-header, -.uk-navbar-dropdown-nav .uk-nav-header { -color: #245CCF; -font-size:14px; -} - -.sidemenu .uk-h3{ - -padding-bottom: 15px; -font-weight: 300; -text-transform: none; -color:#040067; -} -.sidemenu .uk-nav, .uk-nav ul, .dropdown-menu { -font-weight: 300; -font-size: 14px; -color: #80828B; - -} -.sidemenu ul>li>ul, .sidemenu ul>li>ol, .sidemenu ol>li>ol, .sidemenu ol>li>ul{ -padding-left: 40px; -} -.sidemenu ul>li>ul a { -color: #80828B!important; -color: rgba(99, 104, 114, 0.8)!important; -} -.sidemenu ul>li>ul a:hover { -color: #D53B23!important; -} -.uk-nav-header:not(:first-child) {margin-top:10px;} -.uk-navbar-dropdown, .navbar .nav>li>.dropdown-menu { - background:#fff; -} - -.uk-nav>li>a, -.uk-navbar-dropdown-nav>li>a, -.uk-navbar-dropdown-nav .uk-nav-sub a { - color:#292C3D; - font-weight:300; - padding:4px 0; -} -.uk-nav li.emphasized_menu a, -.uk-navbar-dropdown-nav li.emphasized_menu a - { -color:#1E36B2; -font-weight: 500!important; -} - - -.uk-section-secondary:not(.uk-preserve-color) h3, -.uk-section-secondary:not(.uk-preserve-color) h3 a, -.uk-section-secondary:not(.uk-preserve-color) a:hover { color:#444!important;} - - -.uk-article-title { -font-size: 38px; -line-height: 1.1; -} - -.uk-text-meta { -font-size: 14px; -line-height: 1.4; -color: #90929D; -font-family: PT Serif; -font-weight: 400; -text-transform: none; -letter-spacing: 0; -font-style: italic; -} -.uk-card-default .uk-card-title { -color: #292C3D !important; - -} -.uk-light .uk-text-meta, .uk-section-primary:not(.uk-preserve-color) .uk-text-meta, .uk-section-secondary:not(.uk-preserve-color) .uk-text-meta, .uk-card-primary.uk-card-body .uk-text-meta, .uk-card-primary>:not([class*='uk-card-media']) .uk-text-meta, .uk-card-secondary.uk-card-body .uk-text-meta, .uk-card-secondary>:not([class*='uk-card-media']) .uk-text-meta, .uk-overlay-primary .uk-text-meta, .uk-navbar-container:not(.uk-navbar-transparent) .uk-text-meta, .uk-offcanvas-bar .uk-text-meta, .tm-toolbar .uk-text-meta{ -color: #90929D; -} - -.uk-text-primary {color: #040067!important;} -.uk-text-secondary {color: #00a0de!important;} -.uk-section-primary { - background: #040067; -} -.uk-section-secondary { - background: #00a0de; -} -.first_page_section { - /*position: relative;*/ - } -.first_page_section .uk-section>:last-child { -position: relative; -top: 50%; -transform: translateY(-50%); -} - -.first_page_section .first_page_banner_headline { - /*position: relative;*/ - font-family: 'Open Sans', sans-serif; - font-weight: 300; - color:#fff; - -} -.first_page_panel h3.uk-h1 { - color:#fff; -} -.first_page_panel { - border: 0px solid #e5e5e7!important; - padding:20px 20px!important; -/*width:100%!important;*/ - font-size:24pt!important; - padding:20px!important; - color:#fff; -} -.first_page_panel .banner_text_bottom { - font-size:20pt; - padding:20px; -} -.mainHdr {background-color: rgb(4, 0, 103)!important; -} - - -/*tabs*/ -.wk-tab::before { - content: ""; - position: absolute; - bottom: 0; - left: 20px; - right: 0; - border-bottom: 1px solid #e5e5e5; -} -.wk-tab>li.wk-active>a { -border-color: transparent transparent #1678CB transparent !important; -background:tranparent; -border-bottom: 2px solid #1678CB; -} -.wk-tab>*>a { - display: block; - text-align: center; - padding: 9px 20px; - color: #444!important; - border-bottom: 2px solid transparent; - font-size: 12px; - text-transform: uppercase; - -webkit-transition: color 0.1s ease-in-out; - transition: color 0.1s ease-in-out; - line-height: 20px; -} - -.wk-tab>li.wk-open>a, .wk-tab>li>a:focus, .wk-tab>li>a:hover { -border-color: transparent transparent #1678CB transparent !important; -background: transparent!important; -color: #1678CB!important; -outline: 0 -} - -.serviceicon .wk-panel h3{ text-transform: uppercase!important; font-weight: 700; font-size:16px; -} -.serviceicon .wk-panel:hover h3{ - color: #D53B23!important; -} -.serviceicon .wk-margin, -.serviceicon .wk-panel-teaser, .serviceicon .wk-panel-title {margin-bottom:10px;} -.serviceicon *+.wk-margin {margin-top:10px;} - -.key_message { - color: #128DD5!important; -} -.larger-font { - font-size:120%; -} - -.nspArt h4.nspHeader { -font-family: 'Open Sans', sans-serif !important; -font-weight: 400; -font-size: 16px; -margin: 0; -padding: 5px 0 5px 0; -} -.nspArt p, .nspArt ul, .nspArt ol, .nspArt dl, .nspArt pre, .nspArt address, .nspArt fieldset, .nspArt figure { - margin-top: 0px; - margin-bottom: 8px; -} -.nspArt p.nspText {margin-bottom:15px;} -.readon , .readon:link{ - margin: 0; - border: 1px solid #eaeaea; - overflow: visible; - font: inherit; - color: inherit; - text-transform: none; - display: inline-block; - box-sizing: border-box; - padding: 0 25px; - vertical-align: middle; - font-size: 13px; - line-height: 40px; - text-align: center; - text-decoration: none; - -webkit-transition: .1s ease-in-out; - transition: .1s ease-in-out; - -webkit-transition-property: color, background-color, border-color, box-shadow; - transition-property: color, background-color, border-color, box-shadow; - font-family: Roboto; - font-weight: normal; - text-transform: uppercase; - border-radius: 2px; - background-color: #fff; - color: #5b5b5b; - box-shadow: 0px 3px 12px rgba(0, 0, 0, 0.07); -} - -.readon:hover{ -background-color: #fff; -color: #00a0de; -box-shadow: 0 6px 50px rgba(0, 0, 0, 0.05); -} -.banner_text_white {font-weight: 300; font-size: 28px; color:white;} - - -/*custom classes */ -.partner_slider .wk-link-reset, .partner_slider .wk-link-reset a, .partner_slider .wk-link-reset a:focus, -.partner_slider .wk-link-reset a:hover, .partner_slider .wk-link-reset:focus, .partner_slider .wk-link-reset:hover { -color: black; -} -.dark-divider hr, .dark-divider .uk-hr { -border-top: 1px solid #6c6c6c; -} - -/*events*/ -.calendar h3{text-transform:none; font-weight:300; margin-bottom:5px; margin-top:5px;} -.mod_events_latest_table td { - padding-top:5px; - padding-bottom:5px; -} -.mod_events_latest_table td p{ - margin-bottom:10px; - margin-top:0px; -} - -.mod_events_latest_date { - width: 18%; - float: left; - position: relative; - color:#fff; - font-size:12px!important; - background: #9c9c9c; - font-weight:400; - /* - border-radius: 1px; - -moz-border-radius: 1px; - -webkit-border-radius: 1px; - border: 1px solid #757575; - -moz-box-shadow: 0px 0px 3px #757575; - -webkit-box-shadow: 0px 0px 3px #757575; - box-shadow: 0px 0px 3px #757575; - */ - margin-right:8px; - margin-top:5px; - text-align:center; - padding:10px 0px; - line-height:20px; - -} -.mod_events_latest_date .larger_font { - font-size:28px!important; - font-weight:700!important;} - -.mod_events_latest_time { - //float: left; - position: relative; - width: 75%; - overflow:visible; - line-height:14px; - font-weight:400; - font-size:12px; - padding: 5px 0px; - margin-bottom: 8px; - text-transform:none; -} -.mod_events_latest_time { - font-size:12px; -} -.mod_events_latest_table td .content{ - font-size:12px!important; - font-weight:300; - text-transform:none; -} -.mod_events_latest_table td .hdr{ - font-size:14px!important; - line-height: 16px; - font-weight:400!important; - text-transform:none; -} -.mod_events_latest_rsslink a { -color: #767779; - -} -.mod_events_latest_rsslink{ -padding: 30; -line-height: 1.625; -background: 0; -color: #767779; -position: relative; -padding-right: 27px; -margin: 0; -border: 0; -overflow: visible; -font: inherit; -display: block; -box-sizing: border-box; -vertical-align: middle; -font-size: 13px; -display:inline-block; -text-decoration: none; --webkit-transition: .1s ease-in-out; -transition: .1s ease-in-out; --webkit-transition-property: color, background-color, border-color, box-shadow; -transition-property: color, background-color, border-color, box-shadow; -font-family: Roboto; -font-weight: normal; -text-transform: uppercase; -border-radius: 2px; -background-origin: border-box; -} -.mod_events_latest_rsslink a:hover { -color: #00a0de; - -} -.mod_events_latest_rsslink:hover::before { -background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2223%22%20height%3D%2211%22%20viewBox%3D%220%200%2023%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%2300a0de%22%20points%3D%2217%201%2022%205.5%2017%2010%20%22%3E%3C%2Fpolyline%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%2300a0de%22%20x1%3D%220%22%20y1%3D%225.5%22%20x2%3D%2222.4%22%20y2%3D%225.5%22%3E%3C%2Fline%3E%0A%3C%2Fsvg%3E"); -background-position: 100% 50%; - -} -.mod_events_latest_rsslink::before{ -content: ""; -position: absolute; -top: 0; -bottom: 0; -right: 0; -width: 22px; -background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2223%22%20height%3D%2211%22%20viewBox%3D%220%200%2023%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23767779%22%20points%3D%2217%201%2022%205.5%2017%2010%20%22%3E%3C%2Fpolyline%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23767779%22%20x1%3D%220%22%20y1%3D%225.5%22%20x2%3D%2222.4%22%20y2%3D%225.5%22%3E%3C%2Fline%3E%0A%3C%2Fsvg%3E"); -background-repeat: no-repeat; -background-position: calc(100% - 5px) 50%; --webkit-transition: background-position .2s ease-out; -transition: background-position .2s ease-out; -} -.mod_events_latest_callink a, .mod_events_latest_callink a:hover{ - color: #fff!important; -} -.mod_events_latest_callink { -padding:0px; - margin:10px 0px; - background-color: #00a0de; - color: #fff!important; - display: inline-block; - box-sizing: border-box; -padding: 0 25px; -vertical-align: middle; -font-size: 13px; -line-height: 40px; -text-align: center; -text-decoration: none; --webkit-transition: .1s ease-in-out; -transition: .1s ease-in-out; --webkit-transition-property: color, background-color, border-color, box-shadow; -transition-property: color, background-color, border-color, box-shadow; -font-family: Roboto; -font-weight: normal; -text-transform: uppercase; -border-radius: 2px; -background-origin: border-box; -} - -.mod_events_latest_callink:hover { -background-color: #008ec5; -color: #fff!important; -} -/* news pro */ -.nspLinks ul li h4 { -font-weight: 400; -font-size: 16px; -line-height: 18px; -} -.nspLinks ul li p { - text-transform:none; - font-size: 14px; - font-weight:300; - margin:10px; -} -.readon-button{ -text-transform: none; -font-size: 14px; -line-height: 20px; -font-weight: 300; -font-family: 'Open Sans', sans-serif !important; -} -.readon-button:hover { -} -.newsletter .uk-h2 {font-size:28px!important;} -.newsletter .uk-icon { -padding-left: 10px; -padding-bottom: 15px; -vertical-align: middle; -} -.newsletter .el-title{ -display: inline-block; -fill: currentcolor; -margin-bottom:0; -} - -.newsletter .acymailing_mootoolsbutton a:link, -.newsletter .acymailing_mootoolsbutton a:visited { -background:none!important; -border:none!important; -text-shadow:none!important; -color: rgba(255, 255, 255, 0.5)!important; -font-size: 14px; -font-weight: 300; -line-height: 20px; -} - -.newsletter .acysubbuttons input.button, .newsletter .acysubbuttons .button { -padding: 0 15px!important; -line-height: 30px; -font-size: 13px; -border-radius: 2px; -margin: 0; -border: 0; -overflow: visible; -font-family: Roboto; -font-weight: normal; - -color: inherit; -text-transform: none; -display: inline-block; -box-sizing: border-box; -vertical-align: middle; -text-align: center; -text-decoration: none; --webkit-transition: .1s ease-in-out; -transition: .1s ease-in-out; --webkit-transition-property: color, background-color, border-color, box-shadow; -transition-property: color, background-color, border-color, box-shadow; -font-family: Roboto; -font-weight: normal; -text-transform: uppercase; -background-origin: border-box; -box-shadow: 0 3px 12px rgba(0, 0, 0, 0.07); -} - -.newsletter .acysubbuttons input.button:hover, .newsletter .acysubbuttons .button:hover { -color:#444; -background-color:#fff!important; -background-image:none!important; -} - -.newsletter .acysubbuttons input.button:hover, .newsletter .acysubbuttons .button:hover, -.newsletter .acysubbuttons button.validate:hover, .newsletter .acymailing_mootoolsbutton a:hover, -.newsletter .acymailing_mootoolsbutton a:active { -box-shadow:none!important; --moz-box-shadow:none!important; --webkit-box-shadow:none!important; -color: #00a0de!important; -box-shadow: 0 6px 50px rgba(0, 0, 0, 0.05)!important; -} -.acymailing_module a.acymailing_togglemodule { -font-size: 14px; -font-weight: 300; -color: rgba(255, 255, 255, 0.5)!important; -} - - -/*login button */ -#btl .btl-panel > span .btl-dropdown { border:3!important;} - -#btl .btl-panel > span{ - border: 0px!important; - background-color: transparent!important; - color:#444!important; - padding-right:30px; - padding-left:6px; - height:0px!important; - line-height:20px!important; - margin:0px !important; - box-shadow: 0px 0px 0px; - border-radius:0px!important; - display: inline-table!important; - text-transform:none!important; - font-size: 14px; - font-family: 'Roboto Slab', serif; - font-size: 16px; - line-height: 23px; - font-weight: 500 !important; -} -.loginLink { -text-transform:none!important; -color: rgba(0, 0, 0, 0.8)!important; -} - -/*.btl-panel { - background: url(../images/key_login.png) right 40% no-repeat; -}*/ -#btl-panel-login >span { - border: 5px solid #d0d0d0!important; -} -.uk-navbar-item .btlogin{ color: red!important; -} - -#btl .btl-panel > #btl-panel-profile { -color: #040067!important; -font-size: 13px !important; -font-family: Roboto; -} - -.btl-content-block { --webkit-font-smoothing: antialiased; -background-attachment: scroll; -background-clip: border-box; -background-color: rgb(255, 255, 255); -background-image: none; -background-origin: padding-box; -background-size: auto; -border-bottom-left-radius: 2px; -border-bottom-right-radius: 2px; -border-top-left-radius: 2px; -border-top-right-radius: 2px; -box-shadow: rgba(41, 44, 61, 0.0980392) 2px 15px 50px 0px; -box-sizing: border-box; -color: rgb(79, 82, 96); -display: none; -height: auto; -margin-top: 0px; -padding-bottom: 25px; -padding-left: 25px; -padding-right: 25px; -padding-top: 25px; -position: absolute; -text-align: left; -text-rendering: optimizeLegibility; -} - -#btl-content #btl-content-profile #module-in-profile ul li img, -#btl-content #btl-content-profile #module-in-profile ul li a {padding-right: 5px!important;} - -#btl-content #btl-content-profile #module-in-profile ul li a { --webkit-font-smoothing: antialiased; --webkit-text-decoration-skip: objects; -/*background-color: rgba(0, 0, 0, 0);*/ -box-sizing: border-box; -color: rgb(41, 44, 61); -cursor: pointer; -display: block; -font-family: Roboto; -font-size: 14px; -font-weight: 300; -height: auto; -line-height: 20px; -list-style-image: none; -list-style-position: outside; -list-style-type: none; -padding-bottom: 6px; -padding-left: 0px; -padding-right: 0px; -padding-top: 6px; -text-align: left; -text-decoration: none; -text-rendering: optimizeLegibility; -width: auto; -} - -#module-in-profile ul li a:hover { -color: #128DD5 !important; -} - -/*FAQs*/ - -.searchifaq label { -font-family: Roboto, sans-serif; -font-weight:500; -font-size:16px; -color: #040067; -} -.btn, -.buttonifaq{ -margin-top:10px; -background-color: #fff; - color: #5b5b5b; - box-shadow: 0 3px 12px rgba(0,0,0,0.07); - display: inline-block; - border:none; - box-sizing: border-box; - padding: 0 25px; - vertical-align: middle; - font-size: 13px; - line-height: 40px; - text-align: center; - text-decoration: none; - -webkit-transition: .1s ease-in-out; - transition: .1s ease-in-out; - -webkit-transition-property: color,background-color,border-color,box-shadow; - transition-property: color,background-color,border-color,box-shadow; - font-family: Roboto; - font-weight: normal; - text-transform: uppercase; - border-radius: 2px; - background-origin: border-box; - } -.buttonifaq:hover{ background-color: #fff; - color: #00a0de; - box-shadow: 0 6px 50px rgba(0,0,0,0.05); -} -.ifaq h5.ifaq-item-header { -margin-bottom:10px; -margin-top:10px; -} -.ifaq-tpl-clean_blue_arrow .collapse-open .ifaq-item-header { -font-weight:normal; -} -.ifaq .uk-tab>*>a, .ifaq .nav-tabs>li>a { -text-align:left; -color: #2D72D6; -} -.ifaq .nav-tabs>li>a:hover { - border-color:transparent; - color: #D53B23; -} - -.ifaq .nav>li>a:hover, .ifaq .nav>li>a:focus { background:none;} - -.ifaq-tpl-clean_blue_arrow .ifaq-panel { -box-shadow:none; - border-bottom: 1px solid #eee; - -} - -.ifaq-tpl-clean_blue_arrow .ifaq-collapsible > a { -display: block; padding: 1px 0 1px 0px; -background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%236C6D74%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%3E%3C%2Frect%3E%0A%20%20%20%20%3Crect%20fill%3D%22%236C6D74%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E"); -background-repeat: no-repeat; -background-position: 98% 50%; -} - -.ifaq-tpl-clean_blue_arrow .ifaq-collapsible { - text-shadow:none; - background:transparent; - box-shadow:none; - border-bottom: 1px solid #eee; -} -.ifaq-tpl-clean_blue_arrow .collapse-open, .ifaq-tpl-clean_blue_arrow .collapse-open > a { - background: transparent; - background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%236C6D74%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E"); -background-repeat: no-repeat; - background-position: 98% 50%; -} -.ifaq-tpl-clean_blue_arrow .collapse-close:hover { - background:transparent; -} - -.ifaq-tpl-clean_blue_arrow .ifaq-collapsible > a:hover { -background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%236C6D74%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%3E%3C%2Frect%3E%0A%20%20%20%20%3Crect%20fill%3D%22%236C6D74%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E"); - background-repeat: no-repeat; - background-position: 98% 50%; -} - -.ifaq-tpl-clean_blue_arrow .collapse-open > a:hover { -background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%236C6D74%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E"); -background-repeat: no-repeat; -background-position: 98% 50%; -} - -/*widget accordion */ -.wk-accordion, .wk-text-left {display:block!important;} - - -.faq .wk-accordion-title { - text-transform:none; - font-weight: 400; - font-size:16px; -} - -/* for DISCOVERY PORTAL */ -.discoverHrd {background-color: #f25f30!important;} - -.search_box_bg .uk-input, .search_box_bg .uk-input:focus { -background-color: rgba(255, 255, 255, 1.0)!important; -color: rgba(0, 0, 0, 1.0)!important; -} -.search_box_bg .uk-input::placeholder{ -color: rgba(0, 0, 0, 0.6)!important; -} - -.search_box_bg.uk-text-background{ -background-color: rgba(255, 255, 255, 0.7)!important; -font-size:28px!important; -font-weight: 500; -} -.search_box_bg .uk-grid-divider>:not(.uk-first-column)::before { -border-left-color: rgba(255, 255, 255, 0.6)!important; -} - -/*tags */ -.uk-label-arrow{ - display: inline-block; - height: 21px; - margin: 0 10px 0 0; - padding: 0 7px 0 14px; - white-space: nowrap; - position: relative; - - background-color: #5A9EDA; - - color: white; - font: normal 11px/21px Arial, Tahoma, sans-serif; - text-decoration: none; - - border-top: 1px solid #5A9EDA; - border-bottom: 1px solid #5A9EDA; - border-right: 1px solid #5A9EDA; - border-radius: 1px 3px 3px 1px; -} -.uk-label-arrow:before { - content: ''; - position: absolute; - top: 5px; - left: -6px; - width: 10px; - height: 10px; - - background-color: #5A9EDA; - border-left: 1px solid #5A9EDA; - border-bottom: 1px solid #5A9EDA; - border-radius: 0 0 0 2px; -} -.uk-label-arrow:before { - -webkit-transform: scale(1, 1.5) rotate(45deg); - -moz-transform: scale(1, 1.5) rotate(45deg); - -ms-transform: scale(1, 1.5) rotate(45deg); - transform: scale(1, 1.5) rotate(45deg); -} -.uk-label-arrow:after { - content: ''; - position: absolute; - top: 7px; - left: 1px; - width: 5px; - height: 5px; - background: #FFF; - border-radius: 4px; - border: 1px solid #5A9EDA; -} -.uk-label-arrow a:hover { - color: #FFF; - text-shadow: -1px -1px 0 rgba(153,102,51,0.3); -} -.featured.uk-card-default { -background: rgba(255,255,255, 0.6)!important; -background: #35C2CE!important; -background:#fff!important; - -} - -.featured.uk-card-default .uk-card-title {color: black!important;} - -.omtd_secondary > .uk-section-default, -.omtd_secondary.uk-section-default{ - background:#35C2CE!important; -} diff --git a/css/theme.css b/css/theme.css deleted file mode 100644 index 3763e0b..0000000 --- a/css/theme.css +++ /dev/null @@ -1,9 +0,0 @@ -@import 'https://fonts.googleapis.com/css?family=Roboto:300,400|Roboto+Condensed:300,400,700|Open+Sans:600';@font-face{font-family:'IcoMoon';src:url('../../../media/jui/fonts/IcoMoon.eot');src:url('../../../media/jui/fonts/IcoMoon.eot?#iefix') format('embedded-opentype'),url('../../../media/jui/fonts/IcoMoon.woff') format('woff'),url('../../../media/jui/fonts/IcoMoon.ttf') format('truetype'),url('../../../media/jui/fonts/IcoMoon.svg#IcoMoon') format('svg');font-weight:normal;font-style:normal}[data-icon]:before{font-family:'IcoMoon';content:attr(data-icon);speak:none}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-right:.25em;line-height:14px}[class^="icon-"]:before,[class*=" icon-"]:before{font-family:'IcoMoon';font-style:normal;speak:none}[class^="icon-"].disabled,[class*=" icon-"].disabled{font-weight:normal}.icon-joomla:before{content:"\e200"}.icon-chevron-up:before,.icon-uparrow:before,.icon-arrow-up:before{content:"\e005"}.icon-chevron-right:before,.icon-rightarrow:before,.icon-arrow-right:before{content:"\e006"}.icon-chevron-down:before,.icon-downarrow:before,.icon-arrow-down:before{content:"\e007"}.icon-chevron-left:before,.icon-leftarrow:before,.icon-arrow-left:before{content:"\e008"}.icon-arrow-first:before{content:"\e003"}.icon-arrow-last:before{content:"\e004"}.icon-arrow-up-2:before{content:"\e009"}.icon-arrow-right-2:before{content:"\e00a"}.icon-arrow-down-2:before{content:"\e00b"}.icon-arrow-left-2:before{content:"\e00c"}.icon-arrow-up-3:before{content:"\e00f"}.icon-arrow-right-3:before{content:"\e010"}.icon-arrow-down-3:before{content:"\e011"}.icon-arrow-left-3:before{content:"\e012"}.icon-menu-2:before{content:"\e00e"}.icon-arrow-up-4:before{content:"\e201"}.icon-arrow-right-4:before{content:"\e202"}.icon-arrow-down-4:before{content:"\e203"}.icon-arrow-left-4:before{content:"\e204"}.icon-share:before,.icon-redo:before{content:"\27"}.icon-undo:before{content:"\28"}.icon-forward-2:before{content:"\e205"}.icon-backward-2:before,.icon-reply:before{content:"\e206"}.icon-unblock:before,.icon-refresh:before,.icon-redo-2:before{content:"\6c"}.icon-undo-2:before{content:"\e207"}.icon-move:before{content:"\7a"}.icon-expand:before{content:"\66"}.icon-contract:before{content:"\67"}.icon-expand-2:before{content:"\68"}.icon-contract-2:before{content:"\69"}.icon-play:before{content:"\e208"}.icon-pause:before{content:"\e209"}.icon-stop:before{content:"\e210"}.icon-previous:before,.icon-backward:before{content:"\7c"}.icon-next:before,.icon-forward:before{content:"\7b"}.icon-first:before{content:"\7d"}.icon-last:before{content:"\e000"}.icon-play-circle:before{content:"\e00d"}.icon-pause-circle:before{content:"\e211"}.icon-stop-circle:before{content:"\e212"}.icon-backward-circle:before{content:"\e213"}.icon-forward-circle:before{content:"\e214"}.icon-loop:before{content:"\e001"}.icon-shuffle:before{content:"\e002"}.icon-search:before{content:"\53"}.icon-zoom-in:before{content:"\64"}.icon-zoom-out:before{content:"\65"}.icon-apply:before,.icon-edit:before,.icon-pencil:before{content:"\2b"}.icon-pencil-2:before{content:"\2c"}.icon-brush:before{content:"\3b"}.icon-save-new:before,.icon-plus-2:before{content:"\5d"}.icon-minus-sign:before,.icon-minus-2:before{content:"\5e"}.icon-delete:before,.icon-remove:before,.icon-cancel-2:before{content:"\49"}.icon-publish:before,.icon-save:before,.icon-ok:before,.icon-checkmark:before{content:"\47"}.icon-new:before,.icon-plus:before{content:"\2a"}.icon-plus-circle:before{content:"\e215"}.icon-minus:before,.icon-not-ok:before{content:"\4b"}.icon-ban-circle:before,.icon-minus-circle:before{content:"\e216"}.icon-unpublish:before,.icon-cancel:before{content:"\4a"}.icon-cancel-circle:before{content:"\e217"}.icon-checkmark-2:before{content:"\e218"}.icon-checkmark-circle:before{content:"\e219"}.icon-info:before{content:"\e220"}.icon-info-2:before,.icon-info-circle:before{content:"\e221"}.icon-question:before,.icon-question-sign:before,.icon-help:before{content:"\45"}.icon-question-2:before,.icon-question-circle:before{content:"\e222"}.icon-notification:before{content:"\e223"}.icon-notification-2:before,.icon-notification-circle:before{content:"\e224"}.icon-pending:before,.icon-warning:before{content:"\48"}.icon-warning-2:before,.icon-warning-circle:before{content:"\e225"}.icon-checkbox-unchecked:before{content:"\3d"}.icon-checkin:before,.icon-checkbox:before,.icon-checkbox-checked:before{content:"\3e"}.icon-checkbox-partial:before{content:"\3f"}.icon-square:before{content:"\e226"}.icon-radio-unchecked:before{content:"\e227"}.icon-radio-checked:before,.icon-generic:before{content:"\e228"}.icon-circle:before{content:"\e229"}.icon-signup:before{content:"\e230"}.icon-grid:before,.icon-grid-view:before{content:"\58"}.icon-grid-2:before,.icon-grid-view-2:before{content:"\59"}.icon-menu:before{content:"\5a"}.icon-list:before,.icon-list-view:before{content:"\31"}.icon-list-2:before{content:"\e231"}.icon-menu-3:before{content:"\e232"}.icon-folder-open:before,.icon-folder:before{content:"\2d"}.icon-folder-close:before,.icon-folder-2:before{content:"\2e"}.icon-folder-plus:before{content:"\e234"}.icon-folder-minus:before{content:"\e235"}.icon-folder-3:before{content:"\e236"}.icon-folder-plus-2:before{content:"\e237"}.icon-folder-remove:before{content:"\e238"}.icon-file:before{content:"\e016"}.icon-file-2:before{content:"\e239"}.icon-file-add:before,.icon-file-plus:before{content:"\29"}.icon-file-minus:before{content:"\e017"}.icon-file-check:before{content:"\e240"}.icon-file-remove:before{content:"\e241"}.icon-save-copy:before,.icon-copy:before{content:"\e018"}.icon-stack:before{content:"\e242"}.icon-tree:before{content:"\e243"}.icon-tree-2:before{content:"\e244"}.icon-paragraph-left:before{content:"\e246"}.icon-paragraph-center:before{content:"\e247"}.icon-paragraph-right:before{content:"\e248"}.icon-paragraph-justify:before{content:"\e249"}.icon-screen:before{content:"\e01c"}.icon-tablet:before{content:"\e01d"}.icon-mobile:before{content:"\e01e"}.icon-box-add:before{content:"\51"}.icon-box-remove:before{content:"\52"}.icon-download:before{content:"\e021"}.icon-upload:before{content:"\e022"}.icon-home:before{content:"\21"}.icon-home-2:before{content:"\e250"}.icon-out-2:before,.icon-new-tab:before{content:"\e024"}.icon-out-3:before,.icon-new-tab-2:before{content:"\e251"}.icon-link:before{content:"\e252"}.icon-picture:before,.icon-image:before{content:"\2f"}.icon-pictures:before,.icon-images:before{content:"\30"}.icon-palette:before,.icon-color-palette:before{content:"\e014"}.icon-camera:before{content:"\55"}.icon-camera-2:before,.icon-video:before{content:"\e015"}.icon-play-2:before,.icon-video-2:before,.icon-youtube:before{content:"\56"}.icon-music:before{content:"\57"}.icon-user:before{content:"\22"}.icon-users:before{content:"\e01f"}.icon-vcard:before{content:"\6d"}.icon-address:before{content:"\70"}.icon-share-alt:before,.icon-out:before{content:"\26"}.icon-enter:before{content:"\e257"}.icon-exit:before{content:"\e258"}.icon-comment:before,.icon-comments:before{content:"\24"}.icon-comments-2:before{content:"\25"}.icon-quote:before,.icon-quotes-left:before{content:"\60"}.icon-quote-2:before,.icon-quotes-right:before{content:"\61"}.icon-quote-3:before,.icon-bubble-quote:before{content:"\e259"}.icon-phone:before{content:"\e260"}.icon-phone-2:before{content:"\e261"}.icon-envelope:before,.icon-mail:before{content:"\4d"}.icon-envelope-opened:before,.icon-mail-2:before{content:"\4e"}.icon-unarchive:before,.icon-drawer:before{content:"\4f"}.icon-archive:before,.icon-drawer-2:before{content:"\50"}.icon-briefcase:before{content:"\e020"}.icon-tag:before{content:"\e262"}.icon-tag-2:before{content:"\e263"}.icon-tags:before{content:"\e264"}.icon-tags-2:before{content:"\e265"}.icon-options:before,.icon-cog:before{content:"\38"}.icon-cogs:before{content:"\37"}.icon-screwdriver:before,.icon-tools:before{content:"\36"}.icon-wrench:before{content:"\3a"}.icon-equalizer:before{content:"\39"}.icon-dashboard:before{content:"\78"}.icon-switch:before{content:"\e266"}.icon-filter:before{content:"\54"}.icon-purge:before,.icon-trash:before{content:"\4c"}.icon-checkedout:before,.icon-lock:before,.icon-locked:before{content:"\23"}.icon-unlock:before{content:"\e267"}.icon-key:before{content:"\5f"}.icon-support:before{content:"\46"}.icon-database:before{content:"\62"}.icon-scissors:before{content:"\e268"}.icon-health:before{content:"\6a"}.icon-wand:before{content:"\6b"}.icon-eye-open:before,.icon-eye:before{content:"\3c"}.icon-eye-close:before,.icon-eye-blocked:before,.icon-eye-2:before{content:"\e269"}.icon-clock:before{content:"\6e"}.icon-compass:before{content:"\6f"}.icon-broadcast:before,.icon-connection:before,.icon-wifi:before{content:"\e01b"}.icon-book:before{content:"\e271"}.icon-lightning:before,.icon-flash:before{content:"\79"}.icon-print:before,.icon-printer:before{content:"\e013"}.icon-feed:before{content:"\71"}.icon-calendar:before{content:"\43"}.icon-calendar-2:before{content:"\44"}.icon-calendar-3:before{content:"\e273"}.icon-pie:before{content:"\77"}.icon-bars:before{content:"\76"}.icon-chart:before{content:"\75"}.icon-power-cord:before{content:"\32"}.icon-cube:before{content:"\33"}.icon-puzzle:before{content:"\34"}.icon-attachment:before,.icon-paperclip:before,.icon-flag-2:before{content:"\72"}.icon-lamp:before{content:"\74"}.icon-pin:before,.icon-pushpin:before{content:"\73"}.icon-location:before{content:"\63"}.icon-shield:before{content:"\e274"}.icon-flag:before{content:"\35"}.icon-flag-3:before{content:"\e275"}.icon-bookmark:before{content:"\e023"}.icon-bookmark-2:before{content:"\e276"}.icon-heart:before{content:"\e277"}.icon-heart-2:before{content:"\e278"}.icon-thumbs-up:before{content:"\5b"}.icon-thumbs-down:before{content:"\5c"}.icon-unfeatured:before,.icon-asterisk:before,.icon-star-empty:before{content:"\40"}.icon-star-2:before{content:"\41"}.icon-featured:before,.icon-default:before,.icon-star:before{content:"\42"}.icon-smiley:before,.icon-smiley-happy:before{content:"\e279"}.icon-smiley-2:before,.icon-smiley-happy-2:before{content:"\e280"}.icon-smiley-sad:before{content:"\e281"}.icon-smiley-sad-2:before{content:"\e282"}.icon-smiley-neutral:before{content:"\e283"}.icon-smiley-neutral-2:before{content:"\e284"}.icon-cart:before{content:"\e019"}.icon-basket:before{content:"\e01a"}.icon-credit:before{content:"\e286"}.icon-credit-2:before{content:"\e287"}.icon-expired:before{content:"\4b"}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]:not([class*="uk-"]){box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]:not([class*="uk-"])::-webkit-search-decoration,input[type="search"]:not([class*="uk-"])::-webkit-search-cancel-button{-webkit-appearance:none}textarea:not([class*="uk-"]){overflow:auto;vertical-align:top}.img-rounded{border-radius:2px}.img-circle{border-radius:500px}.row{margin-left:0}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%}.row-fluid .span11{width:91.48936170212765%}.row-fluid .span10{width:82.97872340425532%}.row-fluid .span9{width:74.46808510638297%}.row-fluid .span8{width:65.95744680851064%}.row-fluid .span7{width:57.44680851063829%}.row-fluid .span6{width:48.93617021276595%}.row-fluid .span5{width:40.42553191489362%}.row-fluid .span4{width:31.914893617021278%}.row-fluid .span3{width:23.404255319148934%}.row-fluid .span2{width:14.893617021276595%}.row-fluid .span1{width:6.382978723404255%}.row-fluid .offset12{margin-left:104.25531914893617%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%}.row-fluid .offset11{margin-left:95.74468085106382%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%}.row-fluid .offset10{margin-left:87.23404255319149%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%}.row-fluid .offset9{margin-left:78.72340425531914%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%}.row-fluid .offset8{margin-left:70.2127659574468%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%}.row-fluid .offset7{margin-left:61.70212765957446%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%}.row-fluid .offset6{margin-left:53.191489361702125%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%}.row-fluid .offset5{margin-left:44.68085106382979%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%}.row-fluid .offset4{margin-left:36.170212765957444%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%}.row-fluid .offset3{margin-left:27.659574468085104%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%}.row-fluid .offset2{margin-left:19.148936170212764%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%}.row-fluid .offset1{margin-left:10.638297872340425%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}.muted{color:#cbcbcb}a.muted:hover,a.muted:focus{color:#b2b2b2}.text-warning{color:#f8d027}a.text-warning:hover,a.text-warning:focus{color:#e5ba07}.text-error{color:#f54f43}a.text-error:hover,a.text-error:focus{color:#f22213}.text-info{color:#00a0de}a.text-info:hover,a.text-info:focus{color:#007bab}.text-success{color:#01ce7f}a.text-success:hover,a.text-success:focus{color:#019b60}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;padding-right:5px;padding-left:5px}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #e8e8e8}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote small{display:block}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-left:0;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}.pre-scrollable{max-height:340px;overflow-y:scroll}.uneditable-input{width:206px}input[type="file"]:not([class*="uk-"]),input[type="image"]:not([class*="uk-"]),input[type="submit"]:not([class*="uk-"]),input[type="reset"]:not([class*="uk-"]),input[type="button"]:not([class*="uk-"]){width:auto}input[type="file"]{line-height:30px}select[multiple]:not([class*="uk-"]),select[size]{height:auto}.uneditable-input:not([class*="uk-"]),.uneditable-textarea:not([class*="uk-"]){color:#cbcbcb;cursor:not-allowed;background-color:#fafafa;border-color:#e8e8e8}.uneditable-input:not([class*="uk-"]){overflow:hidden;white-space:nowrap}.uneditable-textarea:not([class*="uk-"]){width:auto;height:auto}input:not([class*="uk-"]):-moz-placeholder,textarea:not([class*="uk-"]):-moz-placeholder,input:-ms-input-placeholder,textarea:not([class*="uk-"]):-ms-input-placeholder,input:not([class*="uk-"])::-webkit-input-placeholder,textarea:not([class*="uk-"])::-webkit-input-placeholder{color:#cbcbcb}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px!important}.input-small{width:90px!important}.input-medium{width:150px!important}.input-large{width:210px!important}.input-xlarge{width:270px!important}.input-xxlarge{width:530px!important}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input:not([class*="uk-"]),textarea:not([class*="uk-"]),.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#f8d027}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#f8d027}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#f8d027}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#f8d027}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#f8d027;background-color:#fadb58;border-color:#f8d027}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#f8d027}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#f8d027}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#f8d027}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#f54f43}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#f8d027;background-color:#fff;border-color:#f8d027}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#01ce7f}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#01ce7f}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#01ce7f}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#01ce7f}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#01ce7f;background-color:#6afec5;border-color:#01ce7f}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#00a0de}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#00a0de}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#00a0de}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#00a0de}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#00a0de;background-color:#78d9ff;border-color:#00a0de}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#f8d027;border-color:#f8d027}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#f8d027}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;border-top:1px solid #e8e8e8}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#cbcbcb}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;padding-left:5px;vertical-align:middle}.input-append,.input-prepend{display:inline-block;display:inline-flex;margin-bottom:10px;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;vertical-align:top;border-radius:0 2px 2px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;height:40px;width:auto;min-width:16px;padding:4px 6px;font-weight:normal;font-size:12px;line-height:34px;text-align:center;background-color:#fafafa;box-sizing:border-box}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;border-radius:0}.input-append .active,.input-prepend .active{background-color:#6afec5;border-color:#01ce7f}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{border-radius:2px 0 0 2px}.input-append input,.input-append select,.input-append .uneditable-input{border-radius:2px 0 0 2px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{border-radius:0 2px 2px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:0}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{border-radius:0 2px 2px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{border-radius:0 2px 2px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;border-radius:2px 0 0 2px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{border-radius:0 2px 2px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{margin-bottom:0}.form-search .input-append .search-query,.form-search .input-prepend .search-query{border-radius:0}.form-search .input-append .search-query{border-radius:2px 0 0 2px}.form-search .input-append .btn{border-radius:0 2px 2px 0}.form-search .input-prepend .search-query{border-radius:0 2px 2px 0}.form-search .input-prepend .btn{border-radius:2px 0 0 2px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;margin-bottom:0;vertical-align:middle}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{margin-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #e8e8e8}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #e8e8e8}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #e8e8e8;border-collapse:separate;border-left:0;border-radius:2px}.table-bordered th,.table-bordered td{border-left:1px solid #e8e8e8}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:2px;border-top-left-radius:2px;-moz-border-radius-topleft:2px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:2px;border-top-right-radius:2px;-moz-border-radius-topright:2px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:2px;border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:2px;border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:2px;border-top-left-radius:2px;-moz-border-radius-topleft:2px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:2px;border-top-right-radius:2px;-moz-border-radius-topright:2px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#fafafa}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#ffd}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#01ce7f}.table tbody tr.error>td{background-color:#f54f43}.table tbody tr.warning>td{background-color:#f8d027}.table tbody tr.info>td{background-color:#00a0de}.dropup,.dropdown{position:relative}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #767779;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:.6em;margin-left:.5ch}.dropdown-menu{top:100%;left:0;float:left;box-sizing:border-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 1px;overflow:hidden;border-bottom:1px solid #e8e8e8}.dropdown-menu>li>a{display:block;clear:both;font-weight:normal;line-height:20px;color:#767779;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#00a0de}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#00a0de}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#cbcbcb}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background:transparent}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #767779;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;content:" "}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;border-radius:2px}.well{min-height:20px;padding:25px;margin-bottom:20px;background-color:#fafafa;border-radius:2px}.well-large{padding:40px;border-radius:6px}.well-small{padding:9px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:currentColor;opacity:.2}.close:hover,.close:focus{color:#767779;text-decoration:none;cursor:pointer;opacity:.4}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;margin-bottom:0;vertical-align:middle;cursor:pointer}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-inverse{color:#fff;background-color:#1b2831}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}.btn-link{border:none!important;box-shadow:none!important}.btn-group{position:relative;display:inline-block;display:inline-flex;white-space:nowrap;vertical-align:middle}.btn-group+.btn-group{margin-left:5px}.btn-group.radio input[type="radio"]:not(:first-child){margin-left:0}.btn-toolbar{margin-top:20px;margin-bottom:20px}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:2px;border-bottom-left-radius:2px;-webkit-border-top-left-radius:2px;border-top-left-radius:2px;-moz-border-radius-bottomleft:2px;-moz-border-radius-topleft:2px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;border-bottom-right-radius:2px;-moz-border-radius-topright:2px;-moz-border-radius-bottomright:2px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-mini+.dropdown-toggle{padding-right:5px;padding-left:5px}.btn-group>.btn-large+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none}.btn-group.open .btn.dropdown-toggle{background-color:#fff}.btn-group.open .btn-primary.dropdown-toggle{background-color:#00a0de}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f54f43}.btn-group.open .btn-danger.dropdown-toggle{background-color:#f54f43}.btn-group.open .btn-success.dropdown-toggle{background-color:#1b2831}.btn-group.open .btn-info.dropdown-toggle{background-color:#fff}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#1b2831}.btn .caret{margin-top:20px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{border-radius:2px 2px 0 0}.btn-group-vertical>.btn:last-child{border-radius:0 0 2px 2px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px}.alert h4{margin:0}.alert .close{top:-2px;right:-21px;line-height:20px}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.list-striped,.list-condensed,.row-striped{list-style:none;text-align:left;vertical-align:middle;margin-left:0;padding:0}.list-striped>*:nth-child(odd),.row-striped .row:nth-child(odd),.row-striped .row-fluid:nth-child(odd){background-color:rgba(0,0,0,0.05)}.list-condensed li{padding:10px 10px}.nav{padding:0;margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#767779;text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;background-color:#00a0de}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{height:1px;margin:9px 1px;overflow:hidden;border-bottom:1px solid #e8e8e8}.nav-tabs,.nav-pills{padding:0}.nav-tabs::before{border-bottom:none!important}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a{-webkit-transition:.1s ease-in-out;transition:.1s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow;font-size:13px;line-height:1.625;font-family:Roboto;font-weight:normal;text-transform:uppercase;border-bottom:2px solid transparent}.nav-tabs>*>a:hover,.nav-tabs>*>a:focus{border-color:transparent}.nav-stacked{display:block!important}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border-radius:0}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{border-radius:0 0 2px 2px}.nav-pills .dropdown-menu{border-radius:2px}.nav .dropdown-toggle .caret{border-top-color:currentColor;border-bottom-color:currentColor}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:currentColor;border-bottom-color:currentColor}.nav-tabs .dropdown-toggle .caret{margin-top:.5em}.nav .active .dropdown-toggle .caret{border-top-color:currentColor;border-bottom-color:currentColor}.nav-tabs .active .dropdown-toggle .caret{border-top-color:currentColor;border-bottom-color:currentColor}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs>li{margin-bottom:0}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px}.tabs-right>.nav-tabs{float:right;margin-left:19px}.nav>.disabled>a{color:#cbcbcb}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{margin-bottom:20px;overflow:visible}.navbar-inner{padding-right:25px;padding-left:25px;background-color:#00a0de}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{float:left;height:80px;padding:0 25px;box-sizing:border-box}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:80px;color:#b2b2b2}.navbar-link{color:#b2b2b2}.navbar-link:hover,.navbar-link:focus{color:#767779}.navbar .divider-vertical{height:80px;margin:0 9px;border-right:1px solid currentColor;opacity:.25}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin:0}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-bottom{bottom:0}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none}.navbar .nav .dropdown-toggle .caret{margin-top:0}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#767779;outline:0}.navbar .nav>li>a:focus::before,.navbar .nav>li>a:hover::before{right:25px}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#5b5b5b}.navbar .nav>.active>a::before,.navbar .nav>.active>a:hover::before,.navbar .nav>.active>a:focus::before{right:25px}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;background-color:#ededed;background-repeat:repeat-x}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#cbcbcb}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;border-radius:1px;box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu{border:0;padding:0}.navbar .nav>li.open>.dropdown-menu{display:block}.navbar .nav>li.open>.dropdown-menu .divider{border-bottom:1px solid rgba(255,255,255,0.1)}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:currentColor;border-bottom-color:currentColor}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#5b5b5b}.navbar .nav li.dropdown.open>.dropdown-toggle::before,.navbar .nav li.dropdown.active>.dropdown-toggle::before,.navbar .nav li.dropdown.open.active>.dropdown-toggle::before{right:25px}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:currentColor;border-bottom-color:currentColor}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b2831}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#fff}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#fff}.navbar-inverse .navbar-text{color:#fff}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#1b2831}.navbar-inverse .navbar-link{color:#fff}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#1b2831}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:currentColor;border-bottom-color:currentColor}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#2d4352;border-color:#1b2831;-webkit-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{color:#767779;background-color:#fff;border:0;outline:0}.navbar-inverse .btn-navbar{color:#fff;background-color:#1b2831}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#1b2831}.breadcrumb{list-style:none}.breadcrumb>li{display:inline-block}.breadcrumb>li>.divider{padding:0 5px;color:#cbcbcb}.breadcrumb>.active{color:#767779}.pagination{margin:20px 0}.pagination ul{display:inline-block;padding:0;margin-bottom:0;margin-left:0}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;color:#cbcbcb;padding:4px 12px;line-height:20px;text-decoration:none}.pagination ul>.active>a,.pagination ul>.active>span{color:#fff;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#cbcbcb;cursor:default;background-color:transparent}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#cbcbcb;cursor:default}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:rgba(0,0,0,0.6)}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8}.modal-header{padding:9px 15px;border-bottom:1px solid #e8e8e8}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;border-top:1px solid #e8e8e8}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;visibility:visible}.tooltip.in{opacity:.8}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#666;border-radius:2px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#666;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#666;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#666;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#666;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #e8e8e8;border-radius:6px;box-shadow:0 5px 10px #e8e8e8;-webkit-background-clip:padding-box;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:12px;font-weight:normal;line-height:14px;background-color:#fafafa;border-radius:2px 2px 0 0;box-sizing:border-box}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#e8e8e8;border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#e8e8e8;border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #e8e8e8;border-radius:2px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#00a0de}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#cbcbcb}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{text-decoration:none;cursor:pointer}.badge-info{background-color:#00a0de}.badge-info[href]{background-color:#00a0de}.badge-inverse{background-color:#1b2831}.label-inverse[href],.badge-inverse[href]{background-color:#1b2831}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#fafafa;background-repeat:repeat-x;border-radius:2px;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#00a0de;background-repeat:repeat-x;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-sizing:border-box;-webkit-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#00a0de;background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger,.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#f54f43}.progress-success .bar,.progress .bar-success,.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#01ce7f}.progress-info .bar,.progress .bar-info{background-color:#00a0de}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#00a0de;background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#f8d027}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#f8d027;background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e8e8e8;border-radius:2px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-toggle:hover{text-decoration:none}.accordion-inner{padding:9px 15px;border-top:1px solid #e8e8e8}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#1b2831;border:3px solid #fff;border-radius:23px;opacity:.5}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:rgba(255,255,255,0.8)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#fafafa;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}div.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background:#fff;outline:0;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:2px}div.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}div.modal.fade.in{top:10%}.page-header{margin-bottom:20px;padding-bottom:15px;border-bottom:1px solid #e8e8e8}.inputbox[type="text"]:not([class*="input-"]){width:auto!important}select.inputbox:not([class*="input-"]){width:200px!important}.btn-group.radio{display:block}ul.row-striped>.row-fluid{padding:.3em .5em}.element-invisible{position:absolute;padding:0;margin:0;border:0;height:1px;width:1px;overflow:hidden}.finder label[for^="mod-finder-searchword"]{display:none}.finder input[name="q"]{margin-bottom:20px!important}fieldset{min-width:0}/*! - * Bootstrap Responsive v2.3.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%}.row-fluid .span11{width:91.45299145299145%}.row-fluid .span10{width:82.90598290598291%}.row-fluid .span9{width:74.35897435897436%}.row-fluid .span8{width:65.81196581196582%}.row-fluid .span7{width:57.26495726495726%}.row-fluid .span6{width:48.717948717948715%}.row-fluid .span5{width:40.17094017094017%}.row-fluid .span4{width:31.623931623931625%}.row-fluid .span3{width:23.076923076923077%}.row-fluid .span2{width:14.52991452991453%}.row-fluid .span1{width:5.982905982905983%}.row-fluid .offset12{margin-left:105.12820512820512%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%}.row-fluid .offset11{margin-left:96.58119658119658%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%}.row-fluid .offset10{margin-left:88.03418803418803%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%}.row-fluid .offset9{margin-left:79.48717948717949%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%}.row-fluid .offset8{margin-left:70.94017094017094%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%}.row-fluid .offset7{margin-left:62.393162393162385%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%}.row-fluid .offset6{margin-left:53.84615384615384%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%}.row-fluid .offset5{margin-left:45.299145299145295%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%}.row-fluid .offset4{margin-left:36.75213675213675%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%}.row-fluid .offset3{margin-left:28.205128205128204%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%}.row-fluid .offset2{margin-left:19.65811965811966%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%}.row-fluid .offset1{margin-left:11.11111111111111%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%}.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%}.row-fluid .span11{width:91.43646408839778%}.row-fluid .span10{width:82.87292817679558%}.row-fluid .span9{width:74.30939226519337%}.row-fluid .span8{width:65.74585635359117%}.row-fluid .span7{width:57.18232044198895%}.row-fluid .span6{width:48.61878453038674%}.row-fluid .span5{width:40.05524861878453%}.row-fluid .span4{width:31.491712707182323%}.row-fluid .span3{width:22.92817679558011%}.row-fluid .span2{width:14.3646408839779%}.row-fluid .span1{width:5.801104972375691%}.row-fluid .offset12{margin-left:105.52486187845304%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%}.row-fluid .offset11{margin-left:96.96132596685082%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%}.row-fluid .offset10{margin-left:88.39779005524862%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%}.row-fluid .offset9{margin-left:79.8342541436464%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%}.row-fluid .offset8{margin-left:71.2707182320442%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%}.row-fluid .offset7{margin-left:62.70718232044199%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%}.row-fluid .offset6{margin-left:54.14364640883978%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%}.row-fluid .offset5{margin-left:45.58011049723757%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%}.row-fluid .offset4{margin-left:37.01657458563536%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%}.row-fluid .offset3{margin-left:28.45303867403315%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%}.row-fluid .offset2{margin-left:19.88950276243094%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%}.row-fluid .offset1{margin-left:11.32596685082873%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%}.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.page-header h1 small{display:block;line-height:20px}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}html{font-family:Roboto;font-size:16px;font-weight:300;line-height:1.625;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;background:#fff;color:#767779;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{margin:0}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline:0}a,.uk-link{color:#00a0de;text-decoration:none;cursor:pointer}a:hover,.uk-link:hover{color:#007bab;text-decoration:none}abbr[title]{border-bottom:0;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-size:13px;font-family:Consolas,monaco,monospace;color:#f54f43;white-space:nowrap;padding:2px 6px;border:1px solid #e8e8e8;border-radius:3px}em{color:#f54f43}ins{background:#ffd;color:#767779;text-decoration:none}mark{background:#ffd;color:#767779}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}audio,canvas,img,video{max-width:100%;height:auto;box-sizing:border-box}img{border-style:none}svg:not(:root){overflow:hidden}p,ul,ol,dl,pre,address,fieldset,figure{margin:0 0 20px 0}*+p,*+ul,*+ol,*+dl,*+pre,*+address,*+fieldset,*+figure{margin-top:20px}h1,.uk-h1,h2,.uk-h2,h3,.uk-h3,h4,.uk-h4,h5,.uk-h5,h6,.uk-h6{margin:0 0 20px 0;font-family:Roboto Condensed;font-weight:300;color:#5b5b5b;text-transform:none}*+h1,*+.uk-h1,*+h2,*+.uk-h2,*+h3,*+.uk-h3,*+h4,*+.uk-h4,*+h5,*+.uk-h5,*+h6,*+.uk-h6{margin-top:40px}h1,.uk-h1{font-size:54px;line-height:1.2;font-family:Roboto Condensed;font-weight:300;text-transform:none}h2,.uk-h2{font-size:46px;line-height:1.3;font-family:Roboto Condensed;font-weight:300;text-transform:none}h3,.uk-h3{font-size:22px;line-height:1.4;font-family:Roboto Condensed;font-weight:700;text-transform:uppercase}h4,.uk-h4{font-size:18px;line-height:1.4;font-family:Roboto Condensed;font-weight:700;text-transform:uppercase}h5,.uk-h5{font-size:13px;line-height:1.4;font-family:Roboto Condensed;font-weight:700;text-transform:uppercase}h6,.uk-h6{font-size:13px;line-height:1.4;font-family:Roboto;font-weight:normal;text-transform:uppercase}ul,ol{padding-left:30px}ul>li>ul,ul>li>ol,ol>li>ol,ol>li>ul{margin:0}dt{font-weight:bold}dd{margin-left:0}hr,.uk-hr{box-sizing:content-box;height:0;overflow:visible;margin:0 0 20px 0;border:0;border-top:1px solid #e8e8e8}*+hr,*+.uk-hr{margin-top:20px}address{font-style:normal}blockquote{margin:0 0 20px 0;font-size:20px;line-height:1.5;font-style:italic;color:#5b5b5b;font-family:Roboto Condensed;font-weight:300;text-transform:none}*+blockquote{margin-top:20px}blockquote p:last-of-type{margin-bottom:0}blockquote footer{margin-top:20px;font-size:13px;line-height:1.5;color:#767779;font-family:Roboto;font-weight:normal}blockquote footer::before{content:"— "}pre{font:13px / 1.5 Consolas,monaco,monospace;color:#767779;-moz-tab-size:4;tab-size:4;overflow:auto;padding:10px;background:#fff;border:1px solid #e8e8e8;border-radius:3px}pre code{font-family:Consolas,monaco,monospace}::-moz-selection{background:#39f;color:#fff;text-shadow:none}::selection{background:#39f;color:#fff;text-shadow:none}article,aside,details,figcaption,figure,footer,header,main,nav,section,summary{display:block}progress{vertical-align:baseline}template,[hidden]{display:none}iframe{border:0}a,area,button,input,label,select,summary,textarea{touch-action:manipulation}.var-media-s:before{content:'640px'}.var-media-m:before{content:'960px'}.var-media-l:before{content:'1200px'}.var-media-xl:before{content:'1600px'}a.uk-link-muted,.uk-link-muted a{color:#cbcbcb}a.uk-link-muted:hover,.uk-link-muted a:hover{color:#767779}a.uk-link-reset,a.uk-link-reset:hover,a.uk-link-reset:focus,.uk-link-reset a,.uk-link-reset a:hover,.uk-link-reset a:focus{color:inherit!important;text-decoration:none!important}.uk-heading-primary{font-size:54px;line-height:1.2;color:#5b5b5b;font-family:Roboto Condensed;font-weight:300;text-transform:none}@media(min-width:960px){.uk-heading-primary{font-size:3.75rem;line-height:1.1}}.uk-heading-hero{font-size:4rem;line-height:1.1;color:#5b5b5b;font-family:Roboto Condensed;font-weight:300;text-transform:none}@media(min-width:640px){.uk-heading-hero{font-size:6rem;line-height:1}}@media(min-width:960px){.uk-heading-hero{font-size:8rem;line-height:1}}.uk-heading-divider{padding-bottom:10px;border-bottom:1px solid #e8e8e8}.uk-heading-bullet{position:relative}.uk-heading-bullet::before{content:"";display:inline-block;position:relative;top:calc(-0.1 * 1em);vertical-align:middle;height:.9em;margin-right:10px;border-left:5px solid #e8e8e8}.uk-heading-line{overflow:hidden}.uk-heading-line>*{display:inline-block;position:relative}.uk-heading-line>:before,.uk-heading-line>:after{content:"";position:absolute;top:calc(50% - (1px / 2));width:2000px;border-bottom:1px solid #e8e8e8}.uk-heading-line>:before{right:100%;margin-right:.6em}.uk-heading-line>:after{left:100%;margin-left:.6em}[class*='uk-divider']{border:0;margin-bottom:20px}*+[class*='uk-divider']{margin-top:20px}.uk-divider-icon{position:relative;height:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%2300a0de%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%3E%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:50% 50%}.uk-divider-icon::before,.uk-divider-icon::after{content:"";position:absolute;top:50%;max-width:calc(50% - (50px / 2));border-bottom:1px solid #e8e8e8}.uk-divider-icon::before{right:calc(50% + (50px / 2));width:100%}.uk-divider-icon::after{left:calc(50% + (50px / 2));width:100%}.uk-divider-small{line-height:0}.uk-divider-small::after{content:"";display:inline-block;width:100px;max-width:100%;border-top:3px solid #00a0de;vertical-align:top}.uk-list,.tm-child-list>ul{padding:0;list-style:none}.uk-list>li::before,.uk-list>li::after,.tm-child-list>ul>li::before,.tm-child-list>ul>li::after{content:"";display:table}.uk-list>li::after,.tm-child-list>ul>li::after{clear:both}.uk-list>li>:last-child,.tm-child-list>ul>li>:last-child{margin-bottom:0}.uk-list ul,.tm-child-list>ul ul{margin:0;padding-left:25px;list-style:none}.uk-list>li:nth-child(n+2),.uk-list>li>ul,.tm-child-list>ul>li:nth-child(n+2),.tm-child-list>ul>li>ul{margin-top:10px}.uk-list-divider>li:nth-child(n+2),.tm-child-list-divider>ul>li:nth-child(n+2){margin-top:10px;padding-top:10px;border-top:1px solid #e8e8e8}.uk-list-striped>li{padding:10px 10px}.uk-list-striped>li:nth-of-type(odd){background:#fafafa}.uk-list-striped>li:nth-child(n+2){margin-top:0}.uk-list-bullet>li{position:relative;padding-left:calc(1.625em + 10px)}.uk-list-bullet>li::before{content:"";position:absolute;top:0;left:0;width:1.625em;height:1.625em;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23767779%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%3E%3C%2Fcircle%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%;float:left}.uk-list-large>li:nth-child(n+2),.uk-list-large>li>ul{margin-top:20px}.uk-list-large.uk-list-divider>li:nth-child(n+2),.uk-list-large.tm-child-list-divider>ul>li:nth-child(n+2){margin-top:20px;padding-top:20px}.uk-list-large.uk-list-striped>li{padding:20px 10px}.uk-list-large.uk-list-striped>li:nth-child(n+2){margin-top:0}.uk-description-list>dt{color:#5b5b5b;font-size:16px;font-family:Roboto;font-weight:normal}.uk-description-list>dt:nth-child(n+2){margin-top:20px}.uk-description-list>dd{font-size:16px}.uk-description-list-divider>dt:nth-child(n+2){margin-top:20px;padding-top:20px;border-top:1px solid #e8e8e8}.uk-table,.table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:20px}*+.uk-table{margin-top:20px}.uk-table th{padding:16px 12px;text-align:left;vertical-align:bottom;font-size:13px;font-weight:300;color:#cbcbcb;text-transform:uppercase}.uk-table td{padding:16px 12px;vertical-align:top}.uk-table td>:last-child{margin-bottom:0}.uk-table tfoot{font-size:13px}.uk-table caption{font-size:13px;text-align:left;color:#cbcbcb}.uk-table>tr.uk-active,.uk-table tbody tr.uk-active{background:#ffd}.uk-table-middle,.uk-table-middle td{vertical-align:middle!important}.uk-table-divider>tr:not(:first-child),.uk-table-divider>:not(:first-child)>tr,.uk-table-divider>:first-child>tr:not(:first-child){border-top:1px solid #e8e8e8}.uk-table-striped>tr:nth-of-type(odd),.uk-table-striped tbody tr:nth-of-type(odd){background:#fafafa}.uk-table-hover>tr:hover,.uk-table-hover tbody tr:hover{background:#ffd}.uk-table-small th,.uk-table-small td{padding:10px 12px}.uk-table-justify th:first-child,.uk-table-justify td:first-child{padding-left:0}.uk-table-justify th:last-child,.uk-table-justify td:last-child{padding-right:0}.uk-table-shrink{width:1px}.uk-table-expand{min-width:300px}.uk-table-link{padding:0!important}.uk-table-link>a{display:block;padding:16px 12px}.uk-table-small .uk-table-link>a{padding:10px 12px}@media(max-width:959px){.uk-table-responsive,.uk-table-responsive tbody,.uk-table-responsive th,.uk-table-responsive td,.uk-table-responsive tr{display:block}.uk-table-responsive thead{display:none}.uk-table-responsive th,.uk-table-responsive td{width:auto!important;max-width:none!important;min-width:0!important;overflow:visible!important;white-space:normal!important}.uk-table-responsive th:not(:first-child):not(.uk-table-link),.uk-table-responsive td:not(:first-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:first-child)>a{padding-top:5px!important}.uk-table-responsive th:not(:last-child):not(.uk-table-link),.uk-table-responsive td:not(:last-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:last-child)>a{padding-bottom:5px!important}.uk-table-justify.uk-table-responsive th,.uk-table-justify.uk-table-responsive td{padding-left:0;padding-right:0}}.uk-table tbody tr{-webkit-transition:background-color .1s linear;transition:background-color .1s linear}.uk-icon{display:inline-block;fill:currentcolor;line-height:0}.uk-icon [fill*='#']:not(.uk-preserve){fill:currentcolor}.uk-icon [stroke*='#']:not(.uk-preserve){stroke:currentcolor}.uk-icon>*{transform:translate(0,0)}.uk-icon-image{width:20px;height:20px;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;vertical-align:middle}.uk-icon-link{color:#cbcbcb}.uk-icon-link:hover,.uk-icon-link:focus{color:#767779;outline:0}.uk-icon-link:active,.uk-active>.uk-icon-link{color:#696a6c}.uk-icon-button{box-sizing:border-box;width:36px;height:36px;border-radius:500px;background:#fafafa;color:#cbcbcb;vertical-align:middle;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-transition:.1s ease-in-out;transition:.1s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow}.uk-icon-button:hover,.uk-icon-button:focus{background-color:#ededed;color:#767779;outline:0}.uk-icon-button:active,.uk-active>.uk-icon-button{background-color:#e1e1e1;color:#767779}.uk-input,.uk-select,.uk-textarea,.uk-radio,.uk-checkbox,input[type="text"]:not([class*="uk-"]),input[type="password"]:not([class*="uk-"]),input[type="datetime"]:not([class*="uk-"]),input[type="datetime-local"]:not([class*="uk-"]),input[type="date"]:not([class*="uk-"]),input[type="month"]:not([class*="uk-"]),input[type="time"]:not([class*="uk-"]),input[type="week"]:not([class*="uk-"]),input[type="number"]:not([class*="uk-"]),input[type="email"]:not([class*="uk-"]),input[type="url"]:not([class*="uk-"]),input[type="search"]:not([class*="uk-"]),input[type="tel"]:not([class*="uk-"]),input[type="color"]:not([class*="uk-"]),.uneditable-input:not([class*="uk-"]),select:not([class*="uk-"]),textarea:not([class*="uk-"]),input[type="checkbox"]:not([class*="uk-"]),input[type="radio"]:not([class*="uk-"]){box-sizing:border-box;margin:0;border-radius:0;font:inherit}.uk-input,input[type="text"]:not([class*="uk-"]),input[type="password"]:not([class*="uk-"]),input[type="datetime"]:not([class*="uk-"]),input[type="datetime-local"]:not([class*="uk-"]),input[type="date"]:not([class*="uk-"]),input[type="month"]:not([class*="uk-"]),input[type="time"]:not([class*="uk-"]),input[type="week"]:not([class*="uk-"]),input[type="number"]:not([class*="uk-"]),input[type="email"]:not([class*="uk-"]),input[type="url"]:not([class*="uk-"]),input[type="search"]:not([class*="uk-"]),input[type="tel"]:not([class*="uk-"]),input[type="color"]:not([class*="uk-"]),.uneditable-input:not([class*="uk-"]){overflow:visible}.uk-select,select:not([class*="uk-"]){text-transform:none}.uk-select optgroup,select:not([class*="uk-"]) optgroup{font:inherit;font-weight:bold}.uk-textarea,textarea:not([class*="uk-"]){overflow:auto}.uk-input[type="search"]::-webkit-search-cancel-button,.uk-input[type="search"]::-webkit-search-decoration,input[type="text"]:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,input[type="text"]:not([class*="uk-"])[type="search"]::-webkit-search-decoration,input[type="password"]:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,input[type="password"]:not([class*="uk-"])[type="search"]::-webkit-search-decoration,input[type="datetime"]:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,input[type="datetime"]:not([class*="uk-"])[type="search"]::-webkit-search-decoration,input[type="datetime-local"]:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,input[type="datetime-local"]:not([class*="uk-"])[type="search"]::-webkit-search-decoration,input[type="date"]:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,input[type="date"]:not([class*="uk-"])[type="search"]::-webkit-search-decoration,input[type="month"]:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,input[type="month"]:not([class*="uk-"])[type="search"]::-webkit-search-decoration,input[type="time"]:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,input[type="time"]:not([class*="uk-"])[type="search"]::-webkit-search-decoration,input[type="week"]:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,input[type="week"]:not([class*="uk-"])[type="search"]::-webkit-search-decoration,input[type="number"]:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,input[type="number"]:not([class*="uk-"])[type="search"]::-webkit-search-decoration,input[type="email"]:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,input[type="email"]:not([class*="uk-"])[type="search"]::-webkit-search-decoration,input[type="url"]:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,input[type="url"]:not([class*="uk-"])[type="search"]::-webkit-search-decoration,input[type="search"]:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,input[type="search"]:not([class*="uk-"])[type="search"]::-webkit-search-decoration,input[type="tel"]:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,input[type="tel"]:not([class*="uk-"])[type="search"]::-webkit-search-decoration,input[type="color"]:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,input[type="color"]:not([class*="uk-"])[type="search"]::-webkit-search-decoration,.uneditable-input:not([class*="uk-"])[type="search"]::-webkit-search-cancel-button,.uneditable-input:not([class*="uk-"])[type="search"]::-webkit-search-decoration{-webkit-appearance:none}.uk-input[type="number"]::-webkit-inner-spin-button,.uk-input[type="number"]::-webkit-outer-spin-button,input[type="text"]:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,input[type="text"]:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button,input[type="password"]:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,input[type="password"]:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button,input[type="datetime"]:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,input[type="datetime"]:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button,input[type="datetime-local"]:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,input[type="datetime-local"]:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button,input[type="date"]:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,input[type="date"]:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button,input[type="month"]:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,input[type="month"]:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button,input[type="time"]:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,input[type="time"]:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button,input[type="week"]:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,input[type="week"]:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button,input[type="number"]:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,input[type="number"]:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button,input[type="email"]:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,input[type="email"]:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button,input[type="url"]:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,input[type="url"]:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button,input[type="search"]:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,input[type="search"]:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button,input[type="tel"]:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,input[type="tel"]:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button,input[type="color"]:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,input[type="color"]:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button,.uneditable-input:not([class*="uk-"])[type="number"]::-webkit-inner-spin-button,.uneditable-input:not([class*="uk-"])[type="number"]::-webkit-outer-spin-button{height:auto}.uk-input::-moz-placeholder,.uk-textarea::-moz-placeholder,input[type="text"]:not([class*="uk-"])::-moz-placeholder,input[type="password"]:not([class*="uk-"])::-moz-placeholder,input[type="datetime"]:not([class*="uk-"])::-moz-placeholder,input[type="datetime-local"]:not([class*="uk-"])::-moz-placeholder,input[type="date"]:not([class*="uk-"])::-moz-placeholder,input[type="month"]:not([class*="uk-"])::-moz-placeholder,input[type="time"]:not([class*="uk-"])::-moz-placeholder,input[type="week"]:not([class*="uk-"])::-moz-placeholder,input[type="number"]:not([class*="uk-"])::-moz-placeholder,input[type="email"]:not([class*="uk-"])::-moz-placeholder,input[type="url"]:not([class*="uk-"])::-moz-placeholder,input[type="search"]:not([class*="uk-"])::-moz-placeholder,input[type="tel"]:not([class*="uk-"])::-moz-placeholder,input[type="color"]:not([class*="uk-"])::-moz-placeholder,.uneditable-input:not([class*="uk-"])::-moz-placeholder,textarea:not([class*="uk-"])::-moz-placeholder{opacity:1}.uk-radio,.uk-checkbox,input[type="checkbox"]:not([class*="uk-"]),input[type="radio"]:not([class*="uk-"]){padding:0}.uk-radio:not(:disabled),.uk-checkbox:not(:disabled),input[type="checkbox"]:not([class*="uk-"]):not(:disabled),input[type="radio"]:not([class*="uk-"]):not(:disabled){cursor:pointer}.uk-fieldset,fieldset{border:0;margin:0;padding:0}.uk-input,.uk-textarea,input[type="text"]:not([class*="uk-"]),input[type="password"]:not([class*="uk-"]),input[type="datetime"]:not([class*="uk-"]),input[type="datetime-local"]:not([class*="uk-"]),input[type="date"]:not([class*="uk-"]),input[type="month"]:not([class*="uk-"]),input[type="time"]:not([class*="uk-"]),input[type="week"]:not([class*="uk-"]),input[type="number"]:not([class*="uk-"]),input[type="email"]:not([class*="uk-"]),input[type="url"]:not([class*="uk-"]),input[type="search"]:not([class*="uk-"]),input[type="tel"]:not([class*="uk-"]),input[type="color"]:not([class*="uk-"]),.uneditable-input:not([class*="uk-"]),textarea:not([class*="uk-"]){-webkit-appearance:none}.uk-input,.uk-select,.uk-textarea,input[type="text"]:not([class*="uk-"]),input[type="password"]:not([class*="uk-"]),input[type="datetime"]:not([class*="uk-"]),input[type="datetime-local"]:not([class*="uk-"]),input[type="date"]:not([class*="uk-"]),input[type="month"]:not([class*="uk-"]),input[type="time"]:not([class*="uk-"]),input[type="week"]:not([class*="uk-"]),input[type="number"]:not([class*="uk-"]),input[type="email"]:not([class*="uk-"]),input[type="url"]:not([class*="uk-"]),input[type="search"]:not([class*="uk-"]),input[type="tel"]:not([class*="uk-"]),input[type="color"]:not([class*="uk-"]),.uneditable-input:not([class*="uk-"]),select:not([class*="uk-"]),textarea:not([class*="uk-"]){max-width:100%;width:100%;border:0 none;padding:0 6px;background:#fff;color:#767779;-webkit-transition:.2s ease-in-out;transition:.2s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow}.uk-input,.uk-select:not([multiple]):not([size]),input[type="text"]:not([class*="uk-"]),input[type="password"]:not([class*="uk-"]),input[type="datetime"]:not([class*="uk-"]),input[type="datetime-local"]:not([class*="uk-"]),input[type="date"]:not([class*="uk-"]),input[type="month"]:not([class*="uk-"]),input[type="time"]:not([class*="uk-"]),input[type="week"]:not([class*="uk-"]),input[type="number"]:not([class*="uk-"]),input[type="email"]:not([class*="uk-"]),input[type="url"]:not([class*="uk-"]),input[type="search"]:not([class*="uk-"]),input[type="tel"]:not([class*="uk-"]),input[type="color"]:not([class*="uk-"]),.uneditable-input:not([class*="uk-"]),select:not([class*="uk-"]):not([multiple]):not([size]){height:40px;vertical-align:middle;display:inline-block;line-height:38px;border-bottom:1px solid #e8e8e8}.uk-select[multiple],.uk-select[size],.uk-textarea,select:not([class*="uk-"])[multiple],select:not([class*="uk-"])[size],textarea:not([class*="uk-"]){padding-top:4px;padding-bottom:4px;vertical-align:top;border:1px solid #e8e8e8}.uk-input:focus,.uk-select:focus,.uk-textarea:focus,input[type="text"]:not([class*="uk-"]):focus,input[type="password"]:not([class*="uk-"]):focus,input[type="datetime"]:not([class*="uk-"]):focus,input[type="datetime-local"]:not([class*="uk-"]):focus,input[type="date"]:not([class*="uk-"]):focus,input[type="month"]:not([class*="uk-"]):focus,input[type="time"]:not([class*="uk-"]):focus,input[type="week"]:not([class*="uk-"]):focus,input[type="number"]:not([class*="uk-"]):focus,input[type="email"]:not([class*="uk-"]):focus,input[type="url"]:not([class*="uk-"]):focus,input[type="search"]:not([class*="uk-"]):focus,input[type="tel"]:not([class*="uk-"]):focus,input[type="color"]:not([class*="uk-"]):focus,.uneditable-input:not([class*="uk-"]):focus,select:not([class*="uk-"]):focus,textarea:not([class*="uk-"]):focus{outline:0;background-color:#fff;color:#767779;border-color:#00a0de!important}.uk-input:disabled,.uk-select:disabled,.uk-textarea:disabled,input[type="text"]:not([class*="uk-"]):disabled,input[type="password"]:not([class*="uk-"]):disabled,input[type="datetime"]:not([class*="uk-"]):disabled,input[type="datetime-local"]:not([class*="uk-"]):disabled,input[type="date"]:not([class*="uk-"]):disabled,input[type="month"]:not([class*="uk-"]):disabled,input[type="time"]:not([class*="uk-"]):disabled,input[type="week"]:not([class*="uk-"]):disabled,input[type="number"]:not([class*="uk-"]):disabled,input[type="email"]:not([class*="uk-"]):disabled,input[type="url"]:not([class*="uk-"]):disabled,input[type="search"]:not([class*="uk-"]):disabled,input[type="tel"]:not([class*="uk-"]):disabled,input[type="color"]:not([class*="uk-"]):disabled,.uneditable-input:not([class*="uk-"]):disabled,select:not([class*="uk-"]):disabled,textarea:not([class*="uk-"]):disabled{background-color:#fafafa;color:#cbcbcb;border-color:#e8e8e8!important;box-shadow:none}.uk-input:-ms-input-placeholder,input[type="text"]:not([class*="uk-"]):-ms-input-placeholder,input[type="password"]:not([class*="uk-"]):-ms-input-placeholder,input[type="datetime"]:not([class*="uk-"]):-ms-input-placeholder,input[type="datetime-local"]:not([class*="uk-"]):-ms-input-placeholder,input[type="date"]:not([class*="uk-"]):-ms-input-placeholder,input[type="month"]:not([class*="uk-"]):-ms-input-placeholder,input[type="time"]:not([class*="uk-"]):-ms-input-placeholder,input[type="week"]:not([class*="uk-"]):-ms-input-placeholder,input[type="number"]:not([class*="uk-"]):-ms-input-placeholder,input[type="email"]:not([class*="uk-"]):-ms-input-placeholder,input[type="url"]:not([class*="uk-"]):-ms-input-placeholder,input[type="search"]:not([class*="uk-"]):-ms-input-placeholder,input[type="tel"]:not([class*="uk-"]):-ms-input-placeholder,input[type="color"]:not([class*="uk-"]):-ms-input-placeholder,.uneditable-input:not([class*="uk-"]):-ms-input-placeholder{color:#cbcbcb!important}.uk-input::-moz-placeholder,input[type="text"]:not([class*="uk-"])::-moz-placeholder,input[type="password"]:not([class*="uk-"])::-moz-placeholder,input[type="datetime"]:not([class*="uk-"])::-moz-placeholder,input[type="datetime-local"]:not([class*="uk-"])::-moz-placeholder,input[type="date"]:not([class*="uk-"])::-moz-placeholder,input[type="month"]:not([class*="uk-"])::-moz-placeholder,input[type="time"]:not([class*="uk-"])::-moz-placeholder,input[type="week"]:not([class*="uk-"])::-moz-placeholder,input[type="number"]:not([class*="uk-"])::-moz-placeholder,input[type="email"]:not([class*="uk-"])::-moz-placeholder,input[type="url"]:not([class*="uk-"])::-moz-placeholder,input[type="search"]:not([class*="uk-"])::-moz-placeholder,input[type="tel"]:not([class*="uk-"])::-moz-placeholder,input[type="color"]:not([class*="uk-"])::-moz-placeholder,.uneditable-input:not([class*="uk-"])::-moz-placeholder{color:#cbcbcb}.uk-input::-webkit-input-placeholder,input[type="text"]:not([class*="uk-"])::-webkit-input-placeholder,input[type="password"]:not([class*="uk-"])::-webkit-input-placeholder,input[type="datetime"]:not([class*="uk-"])::-webkit-input-placeholder,input[type="datetime-local"]:not([class*="uk-"])::-webkit-input-placeholder,input[type="date"]:not([class*="uk-"])::-webkit-input-placeholder,input[type="month"]:not([class*="uk-"])::-webkit-input-placeholder,input[type="time"]:not([class*="uk-"])::-webkit-input-placeholder,input[type="week"]:not([class*="uk-"])::-webkit-input-placeholder,input[type="number"]:not([class*="uk-"])::-webkit-input-placeholder,input[type="email"]:not([class*="uk-"])::-webkit-input-placeholder,input[type="url"]:not([class*="uk-"])::-webkit-input-placeholder,input[type="search"]:not([class*="uk-"])::-webkit-input-placeholder,input[type="tel"]:not([class*="uk-"])::-webkit-input-placeholder,input[type="color"]:not([class*="uk-"])::-webkit-input-placeholder,.uneditable-input:not([class*="uk-"])::-webkit-input-placeholder{color:#cbcbcb}.uk-textarea:-ms-input-placeholder,textarea:not([class*="uk-"]):-ms-input-placeholder{color:#cbcbcb!important}.uk-textarea::-moz-placeholder,textarea:not([class*="uk-"])::-moz-placeholder{color:#cbcbcb}.uk-textarea::-webkit-input-placeholder,textarea:not([class*="uk-"])::-webkit-input-placeholder{color:#cbcbcb}.-small{font-size:13px}.-small:not(textarea):not([multiple]):not([size]){height:30px;line-height:28px}.-large{font-size:18px}.-large:not(textarea):not([multiple]):not([size]){height:55px;line-height:53px}.-danger,.-danger:focus{color:#f54f43;border-color:#f54f43!important}.-success,.-success:focus{color:#01ce7f;border-color:#01ce7f!important}.-blank{background:0;border-color:transparent}.-blank:focus{border-color:#e8e8e8;border-style:dashed}input.-width-xsmall{width:40px}select.-width-xsmall{width:65px}.-width-small{width:130px}.-width-medium{width:200px}.-width-large{width:500px}.uk-select:not([multiple]):not([size]),select:not([class*="uk-"]):not([multiple]):not([size]){-webkit-appearance:none;-moz-appearance:none;padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23767779%22%20points%3D%224%201%201%206%207%206%22%3E%3C%2Fpolygon%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23767779%22%20points%3D%224%2013%201%208%207%208%22%3E%3C%2Fpolygon%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:100% 50%}.uk-select:not([multiple]):not([size])::-ms-expand,select:not([class*="uk-"]):not([multiple]):not([size])::-ms-expand{display:none}.uk-select:not([multiple]):not([size]):disabled,select:not([class*="uk-"]):not([multiple]):not([size]):disabled{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23cbcbcb%22%20points%3D%224%201%201%206%207%206%22%3E%3C%2Fpolygon%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23cbcbcb%22%20points%3D%224%2013%201%208%207%208%22%3E%3C%2Fpolygon%3E%0A%3C%2Fsvg%3E")}.uk-radio,.uk-checkbox,input[type="checkbox"]:not([class*="uk-"]),input[type="radio"]:not([class*="uk-"]){display:inline-block;height:16px;width:16px;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;background-color:transparent;background-repeat:no-repeat;background-position:50% 50%;-webkit-transition:.2s ease-in-out;transition:.2s ease-in-out;-webkit-transition-property:background-color,border-color,box-shadow;transition-property:background-color,border-color,box-shadow;border:1px solid #e8e8e8}.uk-radio,input[type="radio"]:not([class*="uk-"]){border-radius:50%}.uk-radio:focus,.uk-checkbox:focus,input[type="checkbox"]:not([class*="uk-"]):focus,input[type="radio"]:not([class*="uk-"]):focus{outline:0;border-color:#00a0de}.uk-radio:checked,.uk-checkbox:checked,.uk-checkbox:indeterminate,input[type="checkbox"]:not([class*="uk-"]):checked,input[type="checkbox"]:not([class*="uk-"]):indeterminate,input[type="radio"]:not([class*="uk-"]):checked{background-color:#00a0de;border-color:transparent}.uk-radio:checked:focus,.uk-checkbox:checked:focus,.uk-checkbox:indeterminate:focus,input[type="checkbox"]:not([class*="uk-"]):checked:focus,input[type="checkbox"]:not([class*="uk-"]):indeterminate:focus,input[type="radio"]:not([class*="uk-"]):checked:focus{background-color:#007bab}.uk-radio:checked,input[type="radio"]:not([class*="uk-"]):checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%3E%3C%2Fcircle%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:checked,input[type="checkbox"]:not([class*="uk-"]):checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:indeterminate,input[type="checkbox"]:not([class*="uk-"]):indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E")}.uk-radio:disabled,.uk-checkbox:disabled,input[type="checkbox"]:not([class*="uk-"]):disabled,input[type="radio"]:not([class*="uk-"]):disabled{background-color:#fafafa;border-color:#e8e8e8}.uk-radio:disabled:checked,input[type="radio"]:not([class*="uk-"]):disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23cbcbcb%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%3E%3C%2Fcircle%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled:checked,input[type="checkbox"]:not([class*="uk-"]):disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23cbcbcb%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled:indeterminate,input[type="checkbox"]:not([class*="uk-"]):disabled:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23cbcbcb%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E")}.uk-legend{width:100%;color:inherit;padding:0;font-size:22px;line-height:1.4}.-custom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.-custom select,.-custom input[type="file"]{position:absolute;top:0;z-index:1;width:100%;height:100%;left:0;-webkit-appearance:none;opacity:0;cursor:pointer}.-custom input[type="file"]{font-size:500px;overflow:hidden}.-label{font-size:13px;color:#5b5b5b;font-family:Roboto;font-weight:normal}.-stacked .-label{display:block;margin-bottom:5px}@media(max-width:959px){.-horizontal .-label{display:block;margin-bottom:5px}}@media(min-width:960px){.-horizontal .-label{width:200px;margin-top:7px;float:left}.-horizontal .-controls{margin-left:215px}.-horizontal .-controls-text{padding-top:7px}}.-icon{position:absolute;top:0;bottom:0;left:0;width:30px;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;color:#cbcbcb}.-icon:hover{color:#767779}.-icon:not(a):not(button):not(input){pointer-events:none}.-icon:not(.-icon-flip)+.uk-input,.-icon:not(.-icon-flip)+input[type="text"]:not([class*="uk-"]),.-icon:not(.-icon-flip)+input[type="password"]:not([class*="uk-"]),.-icon:not(.-icon-flip)+input[type="datetime"]:not([class*="uk-"]),.-icon:not(.-icon-flip)+input[type="datetime-local"]:not([class*="uk-"]),.-icon:not(.-icon-flip)+input[type="date"]:not([class*="uk-"]),.-icon:not(.-icon-flip)+input[type="month"]:not([class*="uk-"]),.-icon:not(.-icon-flip)+input[type="time"]:not([class*="uk-"]),.-icon:not(.-icon-flip)+input[type="week"]:not([class*="uk-"]),.-icon:not(.-icon-flip)+input[type="number"]:not([class*="uk-"]),.-icon:not(.-icon-flip)+input[type="email"]:not([class*="uk-"]),.-icon:not(.-icon-flip)+input[type="url"]:not([class*="uk-"]),.-icon:not(.-icon-flip)+input[type="search"]:not([class*="uk-"]),.-icon:not(.-icon-flip)+input[type="tel"]:not([class*="uk-"]),.-icon:not(.-icon-flip)+input[type="color"]:not([class*="uk-"]),.-icon:not(.-icon-flip)+.uneditable-input:not([class*="uk-"]){padding-left:30px}.-icon-flip{right:0;left:auto}.-icon-flip+.uk-input,.-icon-flip+input[type="text"]:not([class*="uk-"]),.-icon-flip+input[type="password"]:not([class*="uk-"]),.-icon-flip+input[type="datetime"]:not([class*="uk-"]),.-icon-flip+input[type="datetime-local"]:not([class*="uk-"]),.-icon-flip+input[type="date"]:not([class*="uk-"]),.-icon-flip+input[type="month"]:not([class*="uk-"]),.-icon-flip+input[type="time"]:not([class*="uk-"]),.-icon-flip+input[type="week"]:not([class*="uk-"]),.-icon-flip+input[type="number"]:not([class*="uk-"]),.-icon-flip+input[type="email"]:not([class*="uk-"]),.-icon-flip+input[type="url"]:not([class*="uk-"]),.-icon-flip+input[type="search"]:not([class*="uk-"]),.-icon-flip+input[type="tel"]:not([class*="uk-"]),.-icon-flip+input[type="color"]:not([class*="uk-"]),.-icon-flip+.uneditable-input:not([class*="uk-"]){padding-right:30px}.uk-button,.btn{margin:0;border:0;overflow:visible;font:inherit;color:inherit;text-transform:none;display:inline-block;box-sizing:border-box;padding:0 25px;vertical-align:middle;font-size:13px;line-height:40px;text-align:center;text-decoration:none;-webkit-transition:.1s ease-in-out;transition:.1s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow;font-family:Roboto;font-weight:normal;text-transform:uppercase;border-radius:2px;background-origin:border-box}.uk-button:not(:disabled),.btn:not(:disabled){cursor:pointer}.uk-button::-moz-focus-inner,.btn::-moz-focus-inner{border:0;padding:0}.uk-button:hover,.btn:hover{text-decoration:none}.uk-button:focus,.btn:focus{outline:0}.uk-button-default,.btn{background-color:#fff;color:#5b5b5b;box-shadow:0 3px 12px rgba(0,0,0,0.07)}.uk-button-default:hover,.uk-button-default:focus,.btn:hover,.btn:focus{background-color:#fff;color:#00a0de;box-shadow:0 6px 50px rgba(0,0,0,0.05)}.uk-button-default:active,.uk-button-default.uk-active,.btn:active,.btn.uk-active{background-color:#fff;color:#5b5b5b}.uk-button-primary,.btn-primary,.btn-info{background-color:#00a0de;color:#fff}.uk-button-primary:hover,.uk-button-primary:focus,.btn-primary:hover,.btn-primary:focus,.btn-info:hover,.btn-info:focus{background-color:#008ec5;color:#fff}.uk-button-primary:active,.uk-button-primary.uk-active,.btn-primary:active,.btn-primary.uk-active,.btn-info:active,.btn-info.uk-active{background-color:#007bab;color:#fff}.uk-button-secondary,.btn-success{background-color:#1b2831;color:#fff}.uk-button-secondary:hover,.uk-button-secondary:focus,.btn-success:hover,.btn-success:focus{background-color:#2d4352;color:#fff}.uk-button-secondary:active,.uk-button-secondary.uk-active,.btn-success:active,.btn-success.uk-active{background-color:#365062;color:#fff}.uk-button-danger,.btn-warning,.btn-danger{background-color:#f54f43;color:#fff}.uk-button-danger:hover,.uk-button-danger:focus,.btn-warning:hover,.btn-warning:focus,.btn-danger:hover,.btn-danger:focus{background-color:#f4382b;color:#fff}.uk-button-danger:active,.uk-button-danger.uk-active,.btn-warning:active,.btn-warning.uk-active,.btn-danger:active,.btn-danger.uk-active{background-color:#f22213;color:#fff}.uk-button-default:disabled,.uk-button-primary:disabled,.uk-button-secondary:disabled,.uk-button-danger:disabled,.btn:disabled,.btn-primary:disabled,.btn-warning:disabled,.btn-danger:disabled,.btn-success:disabled,.btn-info:disabled{background-color:#fafafa;color:#cbcbcb;background-image:none;box-shadow:none}.uk-button-small,.btn-small{padding:0 15px;line-height:30px;font-size:13px;border-radius:2px}.uk-button-large,.btn-large{padding:0 40px;line-height:55px;font-size:18px;border-radius:2px}.uk-button-text{padding:0;line-height:1.625;background:0;color:#767779;position:relative;padding-right:27px}.uk-button-text::before{content:"";position:absolute;top:0;bottom:0;right:0;width:22px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2223%22%20height%3D%2211%22%20viewBox%3D%220%200%2023%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23767779%22%20points%3D%2217%201%2022%205.5%2017%2010%20%22%3E%3C%2Fpolyline%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23767779%22%20x1%3D%220%22%20y1%3D%225.5%22%20x2%3D%2222.4%22%20y2%3D%225.5%22%3E%3C%2Fline%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:calc(100% - 5px) 50%;-webkit-transition:background-position .2s ease-out;transition:background-position .2s ease-out}.uk-button-text:hover,.uk-button-text:focus{color:#00a0de}.uk-button-text:hover::before,.uk-button-text:focus::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2223%22%20height%3D%2211%22%20viewBox%3D%220%200%2023%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%2300a0de%22%20points%3D%2217%201%2022%205.5%2017%2010%20%22%3E%3C%2Fpolyline%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%2300a0de%22%20x1%3D%220%22%20y1%3D%225.5%22%20x2%3D%2222.4%22%20y2%3D%225.5%22%3E%3C%2Fline%3E%0A%3C%2Fsvg%3E");background-position:100% 50%}.uk-button-text:disabled{color:#cbcbcb}.uk-button-link,.btn-link,.pager li>a,.pager li>span{padding:0;line-height:1.625;background:0;color:#00a0de}.uk-button-link:hover,.uk-button-link:focus,.btn-link:hover,.btn-link:focus,.pager li>a:hover,.pager li>a:focus,.pager li>span:hover,.pager li>span:focus{color:#007bab;text-decoration:none}.uk-button-link:disabled,.btn-link:disabled,.pager li>a:disabled,.pager li>span:disabled{color:#cbcbcb;text-decoration:none}.uk-button-group{display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;vertical-align:middle;position:relative}.uk-button-group>.uk-button:not(:first-child):not(:last-child),.uk-button-group>div:not(:first-child):not(:last-child) .uk-button,.uk-button-group>.btn:not(:first-child):not(:last-child),.uk-button-group>div:not(:first-child):not(:last-child) .btn{border-radius:0}.uk-button-group>.uk-button:first-child,.uk-button-group>div:first-child .uk-button,.uk-button-group>.btn:first-child,.uk-button-group>div:first-child .btn{border-top-right-radius:0;border-bottom-right-radius:0}.uk-button-group>.uk-button:last-child,.uk-button-group>div:last-child .uk-button,.uk-button-group>.btn:last-child,.uk-button-group>div:last-child .btn{border-top-left-radius:0;border-bottom-left-radius:0}.uk-section{box-sizing:border-box;padding-top:40px;padding-bottom:40px}@media(min-width:960px){.uk-section{padding-top:70px;padding-bottom:70px}}.uk-section::before,.uk-section::after{content:"";display:table}.uk-section::after{clear:both}.uk-section>:last-child{margin-bottom:0}.uk-section-xsmall{padding-top:20px;padding-bottom:20px}.uk-section-small{padding-top:40px;padding-bottom:40px}.uk-section-large{padding-top:70px;padding-bottom:70px}@media(min-width:960px){.uk-section-large{padding-top:140px;padding-bottom:140px}}.uk-section-xlarge{padding-top:140px;padding-bottom:140px}@media(min-width:960px){.uk-section-xlarge{padding-top:210px;padding-bottom:210px}}.uk-section-default{background:#fff}.uk-section-muted{background:#fafafa}.uk-section-primary{background:#00a0de}.uk-section-secondary{background:#1b2831}.uk-container,.container{box-sizing:content-box;max-width:1200px;margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media(min-width:640px){.uk-container,.container{padding-left:25px;padding-right:25px}}@media(min-width:960px){.uk-container,.container{padding-left:40px;padding-right:40px}}.uk-container::before,.uk-container::after,.container::before,.container::after{content:"";display:table}.uk-container::after,.container::after{clear:both}.uk-container>:last-child,.container>:last-child{margin-bottom:0}.uk-container .uk-container,.container .container{padding-left:0;padding-right:0}.uk-container-small{max-width:900px}.uk-container-large{max-width:1600px}.uk-container-expand{max-width:none}.uk-grid{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid>*{margin:0}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-25px}.uk-grid>*{padding-left:25px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:25px}@media(min-width:1200px){.uk-grid{margin-left:-40px}.uk-grid>*{padding-left:40px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:40px}}.uk-grid-small{margin-left:-15px}.uk-grid-small>*{padding-left:15px}.uk-grid+.uk-grid-small,.uk-grid-small>.uk-grid-margin,*+.uk-grid-margin-small{margin-top:15px}.uk-grid-medium{margin-left:-25px}.uk-grid-medium>*{padding-left:25px}.uk-grid+.uk-grid-medium,.uk-grid-medium>.uk-grid-margin,*+.uk-grid-margin-medium{margin-top:25px}.uk-grid-large{margin-left:-40px}.uk-grid-large>*{padding-left:40px}.uk-grid+.uk-grid-large,.uk-grid-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:40px}@media(min-width:1200px){.uk-grid-large{margin-left:-70px}.uk-grid-large>*{padding-left:70px}.uk-grid+.uk-grid-large,.uk-grid-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:70px}}.uk-grid-collapse{margin-left:0}.uk-grid-collapse>*{padding-left:0}.uk-grid+.uk-grid-collapse,.uk-grid-collapse>.uk-grid-margin{margin-top:0}.uk-grid-divider>*{position:relative}.uk-grid-divider>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;border-left:1px solid #e8e8e8}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;left:0;right:0;border-top:1px solid #e8e8e8}.uk-grid-divider{margin-left:-50px}.uk-grid-divider>*{padding-left:50px}.uk-grid-divider>:not(.uk-first-column)::before{left:25px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:50px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-25px;left:50px}@media(min-width:1200px){.uk-grid-divider{margin-left:-80px}.uk-grid-divider>*{padding-left:80px}.uk-grid-divider>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}}.uk-grid-divider.uk-grid-small{margin-left:-30px}.uk-grid-divider.uk-grid-small>*{padding-left:30px}.uk-grid-divider.uk-grid-small>:not(.uk-first-column)::before{left:15px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin{margin-top:30px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin::before{top:-15px;left:30px}.uk-grid-divider.uk-grid-medium{margin-left:-50px}.uk-grid-divider.uk-grid-medium>*{padding-left:50px}.uk-grid-divider.uk-grid-medium>:not(.uk-first-column)::before{left:25px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin{margin-top:50px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin::before{top:-25px;left:50px}.uk-grid-divider.uk-grid-large{margin-left:-80px}.uk-grid-divider.uk-grid-large>*{padding-left:80px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}@media(min-width:1200px){.uk-grid-divider.uk-grid-large{margin-left:-140px}.uk-grid-divider.uk-grid-large>*{padding-left:140px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{left:70px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin{margin-top:140px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-70px;left:140px}}.uk-grid-match>*,.uk-grid-item-match{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.uk-grid-match>*>:not([class*='uk-width']),.uk-grid-item-match>:not([class*='uk-width']){box-sizing:border-box;width:100%;-ms-flex:auto;-webkit-flex:auto;flex:auto}.uk-tile{position:relative;box-sizing:border-box;padding:25px 25px}@media(min-width:1200px){.uk-tile{padding:40px 40px}}.uk-tile::before,.uk-tile::after{content:"";display:table}.uk-tile::after{clear:both}.uk-tile>:last-child{margin-bottom:0}.uk-tile-default{background:#fff}.uk-tile-muted{background:#fafafa}.uk-tile-primary{background:#00a0de}.uk-tile-secondary{background:#1b2831}.uk-card{position:relative;box-sizing:border-box;-webkit-transition:.1s ease-in-out;transition:.1s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow;border-radius:2px}.uk-card-body{padding:25px 25px}.uk-card-header{padding:13px 25px}.uk-card-footer{padding:12.5px 25px}@media(min-width:1200px){.uk-card-body{padding:40px 40px}.uk-card-header{padding:20px 40px}.uk-card-footer{padding:20px 40px}}.uk-card-body::before,.uk-card-body::after,.uk-card-header::before,.uk-card-header::after,.uk-card-footer::before,.uk-card-footer::after{content:"";display:table}.uk-card-body::after,.uk-card-header::after,.uk-card-footer::after{clear:both}.uk-card-body>:last-child,.uk-card-header>:last-child,.uk-card-footer>:last-child{margin-bottom:0}[class*='uk-card-media']{overflow:hidden}.uk-card-media-top,.uk-grid-stack>.uk-card-media-left,.uk-grid-stack>.uk-card-media-right{border-radius:2px 2px 0 0}.uk-card-media-bottom{border-radius:0 0 2px 2px}:not(.uk-grid-stack)>.uk-card-media-left{border-radius:2px 0 0 2px}:not(.uk-grid-stack)>.uk-card-media-right{border-radius:0 2px 2px 0}.uk-card-title{font-size:22px;line-height:1.4;font-family:Roboto Condensed;font-weight:300;text-transform:none}.uk-card-badge{position:absolute;top:25px;right:25px;z-index:1;color:#767779;font-size:16px;font-family:Roboto;font-weight:normal}.uk-card-badge:first-child+*{margin-top:0}.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover{background:#fff;box-shadow:0 6px 50px rgba(0,0,0,0.05)}.uk-card-default{background:#fff;color:#767779;box-shadow:0 6px 50px rgba(0,0,0,0.05)}.uk-card-default .uk-card-title{color:#5b5b5b}.uk-card-default.uk-card-hover:hover{background-color:#fff;box-shadow:0 4px 28px rgba(0,0,0,0.07)}.uk-card-default .uk-card-header{border-bottom:1px solid #e8e8e8}.uk-card-default .uk-card-footer{border-top:1px solid #e8e8e8}.uk-card-primary{background:#00b2f8;color:#fff}.uk-card-primary .uk-card-title{color:#fff}.uk-card-primary.uk-card-hover:hover{background-color:#12bdff}.uk-card-secondary{background:#243541;color:#fff;box-shadow:0 6px 50px rgba(0,0,0,0.05)}.uk-card-secondary .uk-card-title{color:#fff}.uk-card-secondary.uk-card-hover:hover{background-color:#314858;box-shadow:0 4px 28px rgba(0,0,0,0.07)}.uk-card-small.uk-card-body,.uk-card-small .uk-card-body{padding:20px 20px}.uk-card-small .uk-card-header{padding:13px 20px}.uk-card-small .uk-card-footer{padding:13px 20px}@media(min-width:1200px){.uk-card-large.uk-card-body,.uk-card-large .uk-card-body{padding:70px 70px}.uk-card-large .uk-card-header{padding:35px 70px}.uk-card-large .uk-card-footer{padding:35px 70px}}.uk-card-body .uk-nav-default{margin:-10px -25px}.uk-card-title+.uk-nav-default{margin-top:0}.uk-card-body .uk-nav-default>li>a,.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-body .uk-nav-default .uk-nav-divider{padding-left:25px;padding-right:25px}.uk-card-body .uk-nav-default .uk-nav-sub{padding-left:41px}@media(min-width:1200px){.uk-card-body .uk-nav-default{margin:-25px -40px}.uk-card-title+.uk-nav-default{margin-top:0}.uk-card-body .uk-nav-default>li>a,.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-body .uk-nav-default .uk-nav-divider{padding-left:40px;padding-right:40px}.uk-card-body .uk-nav-default .uk-nav-sub{padding-left:56px}}.uk-card-small .uk-nav-default{margin:-5px -20px}.uk-card-small .uk-card-title+.uk-nav-default{margin-top:0}.uk-card-small .uk-nav-default>li>a,.uk-card-small .uk-nav-default .uk-nav-header,.uk-card-small .uk-nav-default .uk-nav-divider{padding-left:20px;padding-right:20px}.uk-card-small .uk-nav-default .uk-nav-sub{padding-left:36px}@media(min-width:1200px){.uk-card-large .uk-nav-default{margin:-55px -70px}.uk-card-large .uk-card-title+.uk-nav-default{margin-top:0}}.uk-card-body .uk-nav-default>li>a{border-radius:0}.uk-close{margin:0;border:0;overflow:visible;font:inherit;color:#cbcbcb;text-transform:none;padding:0;background-color:transparent;cursor:pointer;line-height:0;-webkit-transition:.1s ease-in-out;transition:.1s ease-in-out;-webkit-transition-property:color,opacity;transition-property:color,opacity}.uk-close::-moz-focus-inner{border:0;padding:0}.uk-close:hover,.uk-close:focus{color:#767779;outline:0}.uk-spinner>*{-webkit-animation:uk-spinner-rotate 1.4s linear infinite;animation:uk-spinner-rotate 1.4s linear infinite}@-webkit-keyframes uk-spinner-rotate{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(270deg)}}@keyframes uk-spinner-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(270deg)}}.uk-spinner>*>*{stroke-dasharray:88px;stroke-dashoffset:0;transform-origin:center;-webkit-animation:uk-spinner-dash 1.4s ease-in-out infinite;animation:uk-spinner-dash 1.4s ease-in-out infinite;stroke-width:1;stroke-linecap:round}@-webkit-keyframes uk-spinner-dash{0%{stroke-dashoffset:88px}50%{stroke-dashoffset:22px;-webkit-transform:rotate(135deg)}100%{stroke-dashoffset:88px;-webkit-transform:rotate(450deg)}}@keyframes uk-spinner-dash{0%{stroke-dashoffset:88px}50%{stroke-dashoffset:22px;transform:rotate(135deg)}100%{stroke-dashoffset:88px;transform:rotate(450deg)}}.uk-totop{padding:5px;color:#cbcbcb;background:transparent;-webkit-transition:.1s ease-in-out;transition:.1s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow}.uk-totop:hover,.uk-totop:focus{color:#767779;outline:0;background-color:transparent}.uk-totop:active{color:#5b5b5b;background-color:transparent}.uk-alert,.alert{position:relative;margin-bottom:20px;padding:15px 29px 15px 15px;background:#fafafa;color:#767779;border-radius:2px}*+.uk-alert{margin-top:20px}.uk-alert>:last-child{margin-bottom:0}.uk-alert-close{position:absolute;top:20px;right:15px;color:inherit;opacity:.4}.uk-alert-close:first-child+*{margin-top:0}.uk-alert-close:hover,.uk-alert-close:focus{color:inherit;opacity:.8}.uk-alert-primary,.alert-info{background:#d4f3ff;color:#00a0de}.uk-alert-success,.alert-success{background:#d1f6e8;color:#01a566}.uk-alert-warning{background:#fef5d2;color:#cca607}.uk-alert-danger,.alert-danger,.alert-error{background:#fef0ef;color:#f54f43}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert a:not([class]){color:inherit;text-decoration:underline}.uk-alert a:not([class]):hover{color:inherit;text-decoration:underline}.uk-badge,.badge,a.badge{box-sizing:border-box;min-width:22px;height:22px;line-height:22px;padding:0 5px;border-radius:500px;vertical-align:middle;background:#00a0de;color:#fff;font-size:13px;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;font-weight:normal;font-family:Roboto}.uk-badge:hover,.uk-badge:focus{color:#fff;text-decoration:none;outline:0}.uk-label,.label,a.label{display:inline-block;padding:2px 10px;background:#00a0de;line-height:1.625;font-size:12px;color:#fff;vertical-align:middle;white-space:nowrap;font-family:Roboto;font-weight:normal;text-transform:uppercase;border-radius:2px}.uk-label-success,.label-success,.badge-success,.label-success[href],.badge-success[href]{background-color:#01ce7f;color:#fff}.uk-label-warning,.label-warning,.badge-warning,.label-warning[href],.badge-warning[href]{background-color:#f8d027;color:#fff}.uk-label-danger,.label-important,.badge-important,.label-important[href],.badge-important[href]{background-color:#f54f43;color:#fff}.uk-overlay{padding:25px 25px}.uk-overlay>:last-child{margin-bottom:0}.uk-overlay-default{background:rgba(255,255,255,0.8)}.uk-overlay-primary{background:rgba(27,40,49,0.8)}.uk-article::before,.uk-article::after{content:"";display:table}.uk-article::after{clear:both}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:70px}.uk-article-title{font-size:54px;line-height:1.2;color:#5b5b5b;font-family:Roboto Condensed;font-weight:300;text-transform:none}.uk-article-meta{font-size:13px;line-height:1.4;color:#cbcbcb;font-family:Roboto;font-weight:normal}.uk-article-meta a{color:#cbcbcb}.uk-article-meta a:hover{color:#767779;text-decoration:none}.uk-comment-header{margin-bottom:20px}.uk-comment-body::before,.uk-comment-body::after,.uk-comment-header::before,.uk-comment-header::after{content:"";display:table}.uk-comment-body::after,.uk-comment-header::after{clear:both}.uk-comment-body>:last-child,.uk-comment-header>:last-child{margin-bottom:0}.uk-comment-title{font-size:18px;line-height:1.4}.uk-comment-meta{font-size:13px;line-height:1.4;color:#cbcbcb;font-family:Roboto;font-weight:normal}.uk-comment-list{padding:0;list-style:none}.uk-comment-list>:nth-child(n+2){margin-top:70px}.uk-comment-list .uk-comment ~ ul{margin:70px 0 0 0;padding-left:30px;list-style:none}@media(min-width:960px){.uk-comment-list .uk-comment ~ ul{padding-left:100px}}.uk-comment-list .uk-comment ~ ul>:nth-child(n+2){margin-top:70px}.uk-comment-primary{padding:25px;background-color:#fafafa;border-radius:2px}.uk-search{display:inline-block;position:relative;max-width:100%;margin:0}.uk-search-input::-webkit-search-cancel-button,.uk-search-input::-webkit-search-decoration{-webkit-appearance:none}.uk-search-input::-moz-placeholder{opacity:1}.uk-search-input{box-sizing:border-box;margin:0;border-radius:0;font:inherit;overflow:visible;-webkit-appearance:none;vertical-align:middle;width:100%;border:0;color:#767779;-webkit-transition:.2s ease-in-out;transition:.2s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow}.uk-search-input:focus{outline:0}.uk-search-input:-ms-input-placeholder{color:#cbcbcb!important}.uk-search-input::-moz-placeholder{color:#cbcbcb}.uk-search-input::-webkit-input-placeholder{color:#cbcbcb}.uk-search-icon{margin:0;border:0;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background-color:transparent;cursor:pointer}.uk-search-icon::-moz-focus-inner{border:0;padding:0}.uk-search-icon:focus{outline:0}.uk-search .uk-search-icon{position:absolute;top:0;bottom:0;left:0;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;color:#cbcbcb}.uk-search .uk-search-icon:hover{color:#cbcbcb}.uk-search .uk-search-icon:not(a):not(button):not(input){pointer-events:none}.uk-search .uk-search-icon-flip{right:0;left:auto}.uk-search-default{width:180px}.uk-search-default .uk-search-input{height:40px;padding-left:6px;padding-right:6px;background:transparent}.uk-search-default .uk-search-input:focus{background-color:transparent}.uk-search-default .uk-search-icon{width:40px}.uk-search-default .uk-search-icon:not(.uk-search-icon-flip)+.uk-search-input{padding-left:40px}.uk-search-default .uk-search-icon-flip+.uk-search-input{padding-right:40px}.uk-search-navbar{width:400px}.uk-search-navbar .uk-search-input{height:40px;background:transparent;font-size:22px}.uk-search-navbar .uk-search-icon{width:40px}.uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip)+.uk-search-input{padding-left:40px}.uk-search-navbar .uk-search-icon-flip+.uk-search-input{padding-right:40px}.uk-search-large{width:500px}.uk-search-large .uk-search-input{height:80px;background:transparent;font-size:54px}.uk-search-large .uk-search-icon{width:80px}.uk-search-large .uk-search-icon:not(.uk-search-icon-flip)+.uk-search-input{padding-left:80px}.uk-search-large .uk-search-icon-flip+.uk-search-input{padding-right:80px}.uk-search-toggle{color:#cbcbcb}.uk-search-toggle:hover,.uk-search-toggle:focus{color:#767779}.uk-nav,.uk-nav ul,.dropdown-menu{margin:0;padding:0;list-style:none}.uk-nav li>a{display:block;text-decoration:none}.uk-nav li>a:focus{outline:0}.uk-nav>li>a{padding:8px 16px}ul.uk-nav-sub{padding:5px 0 5px 32px}.uk-nav-sub ul{padding-left:16px}.uk-nav-sub a{padding:2px 0}.uk-nav-parent-icon>.uk-parent>a::after{content:"";width:1.625em;height:1.625em;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23767779%22%20stroke-width%3D%221.1%22%20points%3D%2210%201%204%207%2010%2013%22%3E%3C%2Fpolyline%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%;margin-right:-10px}.uk-nav-parent-icon>.uk-parent.uk-open>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23767779%22%20stroke-width%3D%221.1%22%20points%3D%221%204%207%2010%2013%204%22%3E%3C%2Fpolyline%3E%0A%3C%2Fsvg%3E")}.uk-nav-header{padding:8px 16px;text-transform:uppercase;font-size:13px}.uk-nav-header:not(:first-child){margin-top:20px}.uk-nav-divider{margin:15px 0}.uk-nav-default{font-size:16px;font-family:Roboto;font-weight:normal}.uk-nav-default>li>a{color:#767779;-webkit-transition:.1s ease-in-out;transition:.1s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow;border-radius:2px}.uk-nav-default>li>a:hover,.uk-nav-default>li>a:focus{color:#767779;background-color:#f5f5f5}.uk-nav-default>li.uk-active>a{color:#fff;background-color:#00a0de}.uk-nav-default .uk-nav-header{color:#5b5b5b}.uk-nav-default .uk-nav-divider{border-top:1px solid #e8e8e8}.uk-nav-default .uk-nav-sub a{color:#cbcbcb}.uk-nav-default .uk-nav-sub a:hover,.uk-nav-default .uk-nav-sub a:focus{color:#767779}.uk-nav-primary{font-family:Roboto Condensed;font-weight:300;text-transform:none}.uk-nav-primary>li>a{font-size:22px;line-height:1.625;color:#cbcbcb;-webkit-transition:.1s ease-in-out;transition:.1s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow;padding:5px 0}.uk-nav-primary>li>a:hover,.uk-nav-primary>li>a:focus{color:#767779}.uk-nav-primary>li.uk-active>a{color:#5b5b5b}.uk-nav-primary .uk-nav-header{color:#5b5b5b;padding:5px 0}.uk-nav-primary .uk-nav-divider{border-top:1px solid #e8e8e8}.uk-nav-primary .uk-nav-sub a{color:#cbcbcb}.uk-nav-primary .uk-nav-sub a:hover,.uk-nav-primary .uk-nav-sub a:focus{color:#767779}.uk-nav-center{text-align:center}.uk-nav-center .uk-nav-sub,.uk-nav-center .uk-nav-sub ul{padding-left:0}.uk-nav-center.uk-nav-parent-icon>.uk-parent>a::after{position:absolute}.uk-navbar{display:-ms-flexbox;display:-webkit-flex;display:flex;position:relative}.uk-navbar-container:not(.uk-navbar-transparent){background:#00a0de}.uk-navbar-container>::before,.uk-navbar-container>::after{display:none!important}.uk-navbar-left,.uk-navbar-right,.uk-navbar-center,.uk-navbar-center-left>*,.uk-navbar-center-right>*{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.uk-navbar-right{margin-left:auto}.uk-navbar-center:only-child{margin-left:auto;margin-right:auto;position:relative}.uk-navbar-center:not(:only-child){position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:990}.uk-navbar-center:not(:only-child) .uk-navbar-nav>li>a,.uk-navbar-center:not(:only-child) .uk-navbar-item,.uk-navbar-center:not(:only-child) .uk-navbar-toggle{white-space:nowrap}.uk-navbar-center-left,.uk-navbar-center-right{position:absolute;top:0}.uk-navbar-center-left{right:100%}.uk-navbar-center-right{left:100%}[class*='uk-navbar-center-'] .uk-navbar-nav>li>a,[class*='uk-navbar-center-'] .uk-navbar-item,[class*='uk-navbar-center-'] .uk-navbar-toggle{white-space:nowrap}.uk-navbar-nav{display:-ms-flexbox;display:-webkit-flex;display:flex;margin:0;padding:0;list-style:none}.uk-navbar-left,.uk-navbar-right,.uk-navbar-center:only-child{-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.uk-navbar-nav>li>a,.uk-navbar-item,.uk-navbar-toggle,.navbar .brand,.navbar-search,.navbar .nav>li>a{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;box-sizing:border-box;height:80px;padding:0 25px;font-size:13px;font-family:Open Sans;text-decoration:none}.uk-navbar-nav>li>a{color:#b2b2b2;-webkit-transition:.1s ease-in-out;transition:.1s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow;position:relative;font-weight:600;text-transform:uppercase}.uk-navbar-nav>li>a::before{content:'';display:block;position:absolute;bottom:24px;height:1px;background-color:#00a0de;-webkit-transition:.4s ease-in-out;transition:.4s ease-in-out;-webkit-transition-property:background-color,border-color,box-shadow,height,right;transition-property:background-color,border-color,box-shadow,height,right;left:25px;right:calc(102% - 25px)}.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a:focus,.uk-navbar-nav>li>a.uk-open{color:#767779;outline:0}.uk-navbar-nav>li:hover>a::before,.uk-navbar-nav>li>a:focus::before,.uk-navbar-nav>li>a.uk-open::before{right:25px}.uk-navbar-nav>li>a:active{color:#5b5b5b}.uk-navbar-nav>li.uk-active>a{color:#5b5b5b}.uk-navbar-nav>li.uk-active>a::before{right:25px}.uk-navbar-item,.navbar .brand,.navbar-search,.navbar .nav>li>a{color:#767779}.uk-navbar-toggle{color:#b2b2b2;font-weight:600;text-transform:uppercase}.uk-navbar-toggle:hover,.uk-navbar-toggle:focus,.uk-navbar-toggle.uk-open{color:#767779;outline:0;text-decoration:none}.uk-navbar-subtitle{font-size:12px}.uk-navbar-dropdown,.navbar .nav>li>.dropdown-menu{display:none;position:absolute;z-index:1020;box-sizing:border-box;width:200px;padding:25px;background:#00a0de;color:#fff}.uk-navbar-dropdown.uk-open,.navbar .nav>li>.dropdown-menu.uk-open{display:block}[class*='uk-navbar-dropdown-top']{margin-top:0}[class*='uk-navbar-dropdown-bottom']{margin-top:0}[class*='uk-navbar-dropdown-left']{margin-left:0}[class*='uk-navbar-dropdown-right']{margin-left:0}.uk-navbar-dropdown-grid{margin-left:-50px}.uk-navbar-dropdown-grid>*{padding-left:50px}.uk-navbar-dropdown-grid>.uk-grid-margin{margin-top:50px}.uk-navbar-dropdown-stack .uk-navbar-dropdown-grid>*{width:100%!important}.uk-navbar-dropdown-width-2:not(.uk-navbar-dropdown-stack){width:400px}.uk-navbar-dropdown-width-3:not(.uk-navbar-dropdown-stack){width:600px}.uk-navbar-dropdown-width-4:not(.uk-navbar-dropdown-stack){width:800px}.uk-navbar-dropdown-width-5:not(.uk-navbar-dropdown-stack){width:1000px}.uk-navbar-dropdown-dropbar{margin-bottom:30px}.uk-navbar-dropdown-nav{margin-left:0;margin-right:0;font-size:16px;font-family:Roboto;font-weight:normal}.uk-navbar-dropdown-nav>li>a{color:#fff;padding:6px 0}.uk-navbar-dropdown-nav>li>a:hover,.uk-navbar-dropdown-nav>li>a:focus{color:rgba(255,255,255,0.5);background-color:transparent}.uk-navbar-dropdown-nav>li.uk-active>a{color:#fff}.uk-navbar-dropdown-nav .uk-nav-header{color:rgba(255,255,255,0.5);padding:6px 0}.uk-navbar-dropdown-nav .uk-nav-divider{border-top:1px solid rgba(255,255,255,0.1);margin-top:15px;margin-bottom:15px}.uk-navbar-dropdown-nav .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-navbar-dropdown-nav .uk-nav-sub a:hover,.uk-navbar-dropdown-nav .uk-nav-sub a:focus{color:#fff}.uk-navbar-dropbar{position:relative;background:#00a0de;overflow:hidden}.uk-navbar-dropbar-slide{position:absolute;z-index:1020;left:0;right:0}.uk-navbar-container>.uk-container .uk-navbar-left,.uk-navbar-container>.container .uk-navbar-left{margin-left:-25px;margin-right:-25px}.uk-navbar-container>.uk-container .uk-navbar-right,.uk-navbar-container>.container .uk-navbar-right{margin-right:-25px}.uk-navbar-dropdown-nav .uk-nav-sub{padding-left:16px}.uk-navbar-dropdown-grid>*{position:relative}.uk-navbar-dropdown-grid>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;left:25px;border-left:1px solid rgba(255,255,255,0.1)}.uk-navbar-dropdown-grid.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;top:-25px;left:50px;right:0;border-top:1px solid rgba(255,255,255,0.1)}.uk-subnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-24px;padding:0;list-style:none}.uk-subnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:24px;position:relative}.uk-subnav>*>:first-child{display:block;color:#cbcbcb;-webkit-transition:.1s ease-in-out;transition:.1s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow;font-size:16px;font-family:Roboto;font-weight:normal}.uk-subnav>*>a:hover,.uk-subnav>*>a:focus{color:#767779;text-decoration:none;outline:0}.uk-subnav>.uk-active>a{color:#767779}.uk-subnav-divider>*{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{content:"";height:18px;margin-left:0;margin-right:24px;border-left:1px solid #e8e8e8}.uk-subnav-pill>*>:first-child{padding:5px 10px;background:transparent;color:#cbcbcb;border-radius:2px}.uk-subnav-pill>*>a:hover,.uk-subnav-pill>*>a:focus,.nav-pills>li>a:hover,.nav-pills>li>a:focus{background-color:#fafafa;color:#767779}.uk-subnav-pill>*>a:active,.nav-pills>li>a:active{background-color:#fafafa;color:#767779}.uk-subnav-pill>.uk-active>a,.nav-pills>.active>a{background-color:#00a0de;color:#fff}.uk-subnav>.uk-disabled>a{color:#cbcbcb}.uk-breadcrumb,.breadcrumb{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.uk-breadcrumb>*{-ms-flex:none;-webkit-flex:none;flex:none}.uk-breadcrumb>*>*{display:inline-block;font-size:13px;color:#cbcbcb;font-family:Roboto;font-weight:normal}.uk-breadcrumb>*>:hover,.uk-breadcrumb>*>:focus{color:#767779;text-decoration:none}.uk-breadcrumb>:last-child>*{color:#767779}.uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{content:"/";display:inline-block;margin:0 20px;color:#cbcbcb}.uk-pagination{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-10px;padding:0;list-style:none}.uk-pagination>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:10px;position:relative}.uk-pagination>*>*{display:block;color:#cbcbcb;box-sizing:border-box;min-width:26px;padding:0;background:transparent;line-height:1.625;text-align:center;-webkit-transition:.1s ease-in-out;transition:.1s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow;font-size:16px;font-family:Roboto;font-weight:normal;border-radius:2px}.uk-pagination>*>:hover,.uk-pagination>*>:focus{color:#00a0de;text-decoration:none;background-color:transparent}.uk-pagination>.uk-active>*{color:#fff;background-color:#00a0de}.uk-pagination>.uk-disabled>*{color:#cbcbcb;background-color:transparent}.uk-tab,.nav-tabs{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none}.uk-tab>*,.nav-tabs>li{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:20px;position:relative}.uk-tab>*>a,.nav-tabs>li>a{display:block;text-align:center;padding:5px 10px;color:#cbcbcb;-webkit-transition:.1s ease-in-out;transition:.1s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow;font-size:13px;line-height:1.625;font-family:Roboto;font-weight:normal;text-transform:uppercase;border-bottom:2px solid transparent}.uk-tab>*>a:hover,.uk-tab>*>a:focus{color:#767779;text-decoration:none;border-color:transparent}.uk-tab>.uk-active>a,.nav-tabs>.active>a{color:#767779;border-color:#00a0de}.uk-tab>.uk-disabled>a{color:#cbcbcb}.uk-tab-bottom>*>a{border-top:2px solid transparent;border-bottom:0 none}.uk-tab-left,.uk-tab-right{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;margin-left:0}.uk-tab-left>*,.uk-tab-right>*{padding-left:0}.uk-tab-left>*>a{text-align:right;padding:5px 10px;border-right:2px solid transparent;border-bottom:0 none}.uk-tab-right>*>a{text-align:left;padding:5px 10px;border-left:2px solid transparent;border-bottom:0 none}.uk-tab .uk-dropdown{margin-left:30px}.uk-slidenav{padding:5px;color:rgba(118,119,121,0.6);background:transparent;-webkit-transition:.1s ease-in-out;transition:.1s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow}.uk-slidenav:hover,.uk-slidenav:focus{color:rgba(118,119,121,0.8);outline:0;background-color:transparent}.uk-slidenav:active{color:rgba(118,119,121,0.9);background-color:transparent}.uk-slidenav-container{display:-ms-flexbox;display:-webkit-flex;display:flex}.uk-dotnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-15px}.uk-dotnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:15px}.uk-dotnav>*>*{display:block;box-sizing:content-box;width:14px;height:14px;border-radius:50%;background:rgba(118,119,121,0.15);text-indent:100%;overflow:hidden;white-space:nowrap;-webkit-transition:.2s ease-in-out;transition:.2s ease-in-out;-webkit-transition-property:color,background-color,border-color,box-shadow;transition-property:color,background-color,border-color,box-shadow}.uk-dotnav>*>:hover,.uk-dotnav>*>:focus{background-color:#00a0de;outline:0}.uk-dotnav>*>:active{background-color:#00a0de}.uk-dotnav>.uk-active>*{background-color:#00a0de}.uk-dotnav-vertical{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;margin-left:0;margin-top:-15px}.uk-dotnav-vertical>*{padding-left:0;padding-top:15px}.uk-accordion{padding:0;list-style:none}.uk-accordion>:nth-child(n+2){margin-top:20px}.uk-accordion-title{margin:0;font-size:18px;line-height:1.4;cursor:pointer;padding:0;background:transparent;overflow:hidden}.uk-accordion-title::after{content:"";width:1.4em;height:1.4em;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23767779%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%3E%3C%2Frect%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23767779%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-open>.uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23767779%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E")}.uk-accordion-content{margin-top:20px}.uk-accordion-content:before,.uk-accordion-content:after{content:"";display:table}.uk-accordion-content:after{clear:both}.uk-accordion-content>:last-child{margin-bottom:0}.uk-drop{display:none;position:absolute;z-index:1020;box-sizing:border-box;width:300px}.uk-drop.uk-open{display:block}[class*='uk-drop-top']{margin-top:-20px}[class*='uk-drop-bottom']{margin-top:20px}[class*='uk-drop-left']{margin-left:-20px}[class*='uk-drop-right']{margin-left:20px}.uk-drop-stack .uk-drop-grid>*{width:100%!important}.uk-dropdown,.dropdown-menu{display:none;position:absolute;z-index:1020;box-sizing:border-box;min-width:200px;padding:15px;background:#fff;color:#767779;border-radius:2px;box-shadow:0 3px 12px rgba(0,0,0,0.07)}.uk-dropdown.uk-open{display:block}.uk-dropdown-nav,.dropdown-menu{white-space:nowrap;margin-left:-15px;margin-right:-15px;font-size:16px;font-family:Roboto;font-weight:normal}.uk-dropdown-nav>li>a,.dropdown-menu>li>a{color:#767779;padding:6px 25px}.uk-dropdown-nav>li>a:hover,.uk-dropdown-nav>li>a:focus,.uk-dropdown-nav>li.uk-active>a{color:#767779;background-color:#fafafa}.uk-dropdown-nav .uk-nav-header{color:#5b5b5b;padding:6px 25px}.uk-dropdown-nav .uk-nav-divider{border-top:1px solid #e8e8e8;margin-left:0;margin-right:0}.uk-dropdown-nav .uk-nav-sub a{color:#cbcbcb}.uk-dropdown-nav .uk-nav-sub a:hover,.uk-dropdown-nav .uk-nav-sub a:focus{color:#767779}[class*='uk-dropdown-top']{margin-top:-10px}[class*='uk-dropdown-bottom']{margin-top:10px}[class*='uk-dropdown-left']{margin-left:-10px}[class*='uk-dropdown-right']{margin-left:10px}.uk-dropdown-stack .uk-dropdown-grid>*{width:100%!important}.uk-dropdown-nav .uk-nav-sub{padding-left:41px}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-left:15px;padding-right:15px;background:rgba(0,0,0,0.6);opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}@media(min-width:640px){.uk-modal{padding-left:25px;padding-right:25px}}@media(min-width:960px){.uk-modal{padding-left:40px;padding-right:40px}}.uk-modal.uk-open{opacity:1}.uk-modal-page{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:50px auto;width:600px;max-width:100%;background:#fff;opacity:0;-webkit-transform:translateY(-100px);transform:translateY(-100px);-webkit-transition:opacity .3s linear,-webkit-transform .3s ease-out;transition:opacity .3s linear,transform .3s ease-out;border-radius:2px}@media(max-width:639px){.uk-modal-dialog{margin-top:15px;margin-bottom:15px}}.uk-open>.uk-modal-dialog{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}.uk-modal-container .uk-modal-dialog{width:1200px}.uk-modal-full{padding:0;background:0}.uk-modal-full .uk-modal-dialog{margin:0;width:100%;max-width:100%;-webkit-transform:translateY(0);transform:translateY(0)}.uk-modal-lightbox{background:rgba(0,0,0,0.9)}.uk-modal-lightbox .uk-modal-dialog{margin-left:15px;margin-right:15px}.uk-modal-body{padding:25px 25px}.uk-modal-header{padding:12.5px 25px;background:#fff;border-bottom:1px solid #e8e8e8}.uk-modal-footer{padding:12.5px 25px;background:#fff;border-top:1px solid #e8e8e8}.uk-modal-body::before,.uk-modal-body::after,.uk-modal-header::before,.uk-modal-header::after,.uk-modal-footer::before,.uk-modal-footer::after{content:"";display:table}.uk-modal-body::after,.uk-modal-header::after,.uk-modal-footer::after{clear:both}.uk-modal-body>:last-child,.uk-modal-header>:last-child,.uk-modal-footer>:last-child{margin-bottom:0}.uk-modal-title{font-size:46px;line-height:1.3;font-family:Roboto Condensed;font-weight:300;text-transform:none}[class*='uk-modal-close-']{position:absolute;z-index:1010;top:10px;right:10px;padding:5px}[class*='uk-modal-close-']:first-child+*{margin-top:0}.uk-modal-close-outside{top:0;right:0;-webkit-transform:translate(100%,-100%);transform:translate(100%,-100%);color:#fff}.uk-modal-close-outside:hover{color:#fff}.uk-modal-close-full{top:0;right:0;padding:20px;background:#fff}.uk-modal-caption{position:absolute;left:0;right:0;top:100%;margin-top:20px;color:#fff;text-align:center}.uk-sticky-fixed{z-index:980;box-sizing:border-box;margin:0!important;-webkit-backface-visibility:hidden;backface-visibility:hidden}.uk-sticky[class*='uk-animation-']{-webkit-animation-duration:.2s;animation-duration:.2s}.uk-sticky.uk-animation-reverse{-webkit-animation-duration:.2s;animation-duration:.2s}.uk-offcanvas{display:none;position:fixed;top:0;bottom:0;left:0;z-index:1000}.uk-offcanvas-flip .uk-offcanvas{right:0;left:auto}.uk-offcanvas-bar{position:absolute;top:0;bottom:0;left:0;box-sizing:border-box;width:270px;padding:20px 20px;background:#00a0de;overflow-y:auto;-webkit-overflow-scrolling:touch;-webkit-transform:translateX(-100%);transform:translateX(-100%)}@media(min-width:960px){.uk-offcanvas-bar{width:350px;padding:40px 40px}}.uk-offcanvas-flip .uk-offcanvas-bar{left:auto;right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-open>.uk-offcanvas-bar{-webkit-transform:translateX(0);transform:translateX(0)}.uk-offcanvas-bar-animation{-webkit-transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out}.uk-offcanvas-reveal{position:absolute;top:0;bottom:0;left:0;width:0;overflow:hidden;-webkit-transition:width .3s ease-out;transition:width .3s ease-out}.uk-offcanvas-reveal .uk-offcanvas-bar{-webkit-transform:translateX(0);transform:translateX(0)}.uk-open>.uk-offcanvas-reveal{width:270px}@media(min-width:960px){.uk-open>.uk-offcanvas-reveal{width:350px}}.uk-offcanvas-flip .uk-offcanvas-reveal{right:0;left:auto}.uk-offcanvas-close{position:absolute;z-index:1000;top:20px;right:20px;padding:5px}.uk-offcanvas-overlay{width:100vw;touch-action:none}.uk-offcanvas-overlay::before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(85,100,140,0.3);opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.uk-offcanvas-overlay.uk-open::before{opacity:1}.uk-offcanvas-page,.uk-offcanvas-container{overflow-x:hidden}.uk-offcanvas-container-overlay{overflow:hidden}.uk-offcanvas-container .uk-offcanvas-content{position:relative;left:0;-webkit-transition:left .3s ease-out;transition:left .3s ease-out;-webkit-overflow-scrolling:touch}.uk-offcanvas-overlay .uk-offcanvas-content{overflow-y:hidden}:not(.uk-offcanvas-flip)>.uk-offcanvas-content-animation{left:270px}.uk-offcanvas-flip>.uk-offcanvas-content-animation{left:-270px}@media(min-width:960px){:not(.uk-offcanvas-flip)>.uk-offcanvas-content-animation{left:350px}.uk-offcanvas-flip>.uk-offcanvas-content-animation{left:-350px}}.uk-switcher{margin:0;padding:0;list-style:none}.uk-switcher>:not(.uk-active){display:none}.uk-switcher>*>:last-child{margin-bottom:0}.uk-iconnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-10px}.uk-iconnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:10px}.uk-iconnav>*>*{display:block;color:#cbcbcb}.uk-iconnav>*>:hover,.uk-iconnav>*>:focus{color:#767779;outline:0}.uk-iconnav>.uk-active>*{color:#767779}.uk-iconnav-vertical{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;margin-left:0;margin-top:-10px}.uk-iconnav-vertical>*{padding-left:0;padding-top:10px}.uk-notification{position:fixed;top:10px;left:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notification-top-right,.uk-notification-bottom-right{left:auto;right:10px}.uk-notification-top-center,.uk-notification-bottom-center{left:50%;margin-left:-175px}.uk-notification-bottom-left,.uk-notification-bottom-right,.uk-notification-bottom-center{top:auto;bottom:10px}@media(max-width:639px){.uk-notification{left:10px;right:10px;width:auto;margin:0}}.uk-notification-message{position:relative;margin-bottom:10px;padding:15px;background:#fafafa;color:#767779;font-size:18px;line-height:1.4;cursor:pointer;border-radius:2px}.uk-notification-close{display:none;position:absolute;top:20px;right:15px}.uk-notification-message:hover .uk-notification-close{display:block}.uk-notification-message-primary{color:#00a0de}.uk-notification-message-success{color:#01ce7f}.uk-notification-message-warning{color:#f8d027}.uk-notification-message-danger{color:#f54f43}.uk-tooltip{display:none;position:absolute;z-index:1030;box-sizing:border-box;max-width:200px;padding:3px 6px;background:#666;border-radius:2px;color:#fff;font-size:12px}.uk-tooltip.uk-active{display:block}[class*='uk-tooltip-top']{margin-top:-10px}[class*='uk-tooltip-bottom']{margin-top:10px}[class*='uk-tooltip-left']{margin-left:-10px}[class*='uk-tooltip-right']{margin-left:10px}.uk-placeholder{margin-bottom:20px;padding:25px 25px;background:transparent;border:1px dashed #e8e8e8;border-radius:2px}*+.uk-placeholder{margin-top:20px}.uk-placeholder>:last-child{margin-bottom:0}.uk-progress{-webkit-appearance:none;-moz-appearance:none;display:block;width:100%;border:0;background-color:#fafafa;margin-bottom:20px;height:15px;border-radius:500px;overflow:hidden}*+.uk-progress{margin-top:20px}.uk-progress:indeterminate{color:transparent}.uk-progress::-webkit-progress-bar{background-color:#fafafa;border-radius:500px;overflow:hidden}.uk-progress:indeterminate::-moz-progress-bar{width:0}.uk-progress::-webkit-progress-value{background-color:#00a0de;transition:width .6s ease}.uk-progress::-moz-progress-bar{background-color:#00a0de}.uk-progress::-ms-fill{background-color:#00a0de;transition:width .6s ease;border:0}.uk-sortable{position:relative}.uk-sortable>*{touch-action:none}.uk-sortable svg{pointer-events:none}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-drag{position:absolute!important;z-index:1050!important;pointer-events:none}.uk-sortable-placeholder{opacity:0}.uk-sortable-empty{min-height:50px}.uk-sortable-handle:hover{cursor:move}.uk-countdown-number,.uk-countdown-separator{line-height:70px;color:#5b5b5b}.uk-countdown-number{font-size:2rem}@media(min-width:640px){.uk-countdown-number{font-size:4rem}}@media(min-width:960px){.uk-countdown-number{font-size:6rem}}.uk-countdown-separator{font-size:1rem}@media(min-width:640px){.uk-countdown-separator{font-size:2rem}}@media(min-width:960px){.uk-countdown-separator{font-size:3rem}}.uk-countdown-label{color:#cbcbcb;font-size:16px}[class*='uk-animation-']{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.uk-animation-reverse{-webkit-animation-direction:reverse;animation-direction:reverse;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}.uk-animation-fade{-webkit-animation-name:uk-fade;animation-name:uk-fade;-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-timing-function:linear;animation-timing-function:linear}.uk-animation-scale-up{-webkit-animation-name:uk-fade-scale-02;animation-name:uk-fade-scale-02}.uk-animation-scale-down{-webkit-animation-name:uk-fade-scale-18;animation-name:uk-fade-scale-18}.uk-animation-slide-top{-webkit-animation-name:uk-fade-top;animation-name:uk-fade-top}.uk-animation-slide-bottom{-webkit-animation-name:uk-fade-bottom;animation-name:uk-fade-bottom}.uk-animation-slide-left{-webkit-animation-name:uk-fade-left;animation-name:uk-fade-left}.uk-animation-slide-right{-webkit-animation-name:uk-fade-right;animation-name:uk-fade-right}.uk-animation-slide-top-small{-webkit-animation-name:uk-fade-top-small;animation-name:uk-fade-top-small}.uk-animation-slide-bottom-small{-webkit-animation-name:uk-fade-bottom-small;animation-name:uk-fade-bottom-small}.uk-animation-slide-left-small{-webkit-animation-name:uk-fade-left-small;animation-name:uk-fade-left-small}.uk-animation-slide-right-small{-webkit-animation-name:uk-fade-right-small;animation-name:uk-fade-right-small}.uk-animation-slide-top-medium{-webkit-animation-name:uk-fade-top-medium;animation-name:uk-fade-top-medium}.uk-animation-slide-bottom-medium{-webkit-animation-name:uk-fade-bottom-medium;animation-name:uk-fade-bottom-medium}.uk-animation-slide-left-medium{-webkit-animation-name:uk-fade-left-medium;animation-name:uk-fade-left-medium}.uk-animation-slide-right-medium{-webkit-animation-name:uk-fade-right-medium;animation-name:uk-fade-right-medium}.uk-animation-kenburns{-webkit-animation-name:uk-scale-kenburns;animation-name:uk-scale-kenburns;-webkit-animation-duration:15s;animation-duration:15s}.uk-animation-shake{-webkit-animation-name:uk-shake;animation-name:uk-shake}.uk-animation-fast{-webkit-animation-duration:.1s;animation-duration:.1s}.uk-animation-toggle:not(:hover):not(.uk-hover) [class*='uk-animation-']{-webkit-animation-name:none;animation-name:none}@-webkit-keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes uk-fade-top{0%{opacity:0;-webkit-transform:translateY(-100%)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-top{0%{opacity:0;transform:translateY(-100%)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-bottom{0%{opacity:0;-webkit-transform:translateY(100%)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-bottom{0%{opacity:0;transform:translateY(100%)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-left{0%{opacity:0;-webkit-transform:translateX(-100%)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-left{0%{opacity:0;transform:translateX(-100%)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-right{0%{opacity:0;-webkit-transform:translateX(100%)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-right{0%{opacity:0;transform:translateX(100%)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-top-small{0%{opacity:0;-webkit-transform:translateY(-10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-top-small{0%{opacity:0;transform:translateY(-10px)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-bottom-small{0%{opacity:0;-webkit-transform:translateY(10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-bottom-small{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-left-small{0%{opacity:0;-webkit-transform:translateX(-10px)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-left-small{0%{opacity:0;transform:translateX(-10px)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-right-small{0%{opacity:0;-webkit-transform:translateX(10px)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-right-small{0%{opacity:0;transform:translateX(10px)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-top-medium{0%{opacity:0;-webkit-transform:translateY(-50px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-top-medium{0%{opacity:0;transform:translateY(-50px)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-bottom-medium{0%{opacity:0;-webkit-transform:translateY(50px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-bottom-medium{0%{opacity:0;transform:translateY(50px)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-left-medium{0%{opacity:0;-webkit-transform:translateX(-50px)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-left-medium{0%{opacity:0;transform:translateX(-50px)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-right-medium{0%{opacity:0;-webkit-transform:translateX(50px)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-right-medium{0%{opacity:0;transform:translateX(50px)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-scale-02{0%{opacity:0;-webkit-transform:scale(0.2)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-02{0%{opacity:0;transform:scale(0.2)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-fade-scale-18{0%{opacity:0;-webkit-transform:scale(1.8)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-18{0%{opacity:0;transform:scale(1.8)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-scale-kenburns{0%{-webkit-transform:scale(1)}100%{-webkit-transform:scale(1.2)}}@keyframes uk-scale-kenburns{0%{transform:scale(1)}100%{transform:scale(1.2)}}@-webkit-keyframes uk-shake{0%,100%{-webkit-transform:translateX(0)}10%{-webkit-transform:translateX(-9px)}20%{-webkit-transform:translateX(8px)}30%{-webkit-transform:translateX(-7px)}40%{-webkit-transform:translateX(6px)}50%{-webkit-transform:translateX(-5px)}60%{-webkit-transform:translateX(4px)}70%{-webkit-transform:translateX(-3px)}80%{-webkit-transform:translateX(2px)}90%{-webkit-transform:translateX(-1px)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}[class*='uk-child-width']>*{box-sizing:border-box;width:100%}.uk-child-width-1-2>*{width:50%}.uk-child-width-1-3>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4>*{width:25%}.uk-child-width-1-5>*{width:20%}.uk-child-width-1-6>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto>*{width:auto}.uk-child-width-expand>*{width:1px}.uk-child-width-expand>:not([class*='uk-width']){-ms-flex:1;-webkit-flex:1;flex:1;min-width:0;flex-basis:1px}@media(min-width:640px){.uk-child-width-1-1\@s>*{width:100%}.uk-child-width-1-2\@s>*{width:50%}.uk-child-width-1-3\@s>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@s>*{width:25%}.uk-child-width-1-5\@s>*{width:20%}.uk-child-width-1-6\@s>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@s>*{width:auto}.uk-child-width-expand\@s>*{width:1px}.uk-child-width-expand\@s>:not([class*='uk-width']){-ms-flex:1;-webkit-flex:1;flex:1;min-width:0;flex-basis:1px}}@media(min-width:960px){.uk-child-width-1-1\@m>*{width:100%}.uk-child-width-1-2\@m>*{width:50%}.uk-child-width-1-3\@m>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@m>*{width:25%}.uk-child-width-1-5\@m>*{width:20%}.uk-child-width-1-6\@m>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@m>*{width:auto}.uk-child-width-expand\@m>*{width:1px}.uk-child-width-expand\@m>:not([class*='uk-width']){-ms-flex:1;-webkit-flex:1;flex:1;min-width:0;flex-basis:1px}}@media(min-width:1200px){.uk-child-width-1-1\@l>*{width:100%}.uk-child-width-1-2\@l>*{width:50%}.uk-child-width-1-3\@l>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@l>*{width:25%}.uk-child-width-1-5\@l>*{width:20%}.uk-child-width-1-6\@l>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@l>*{width:auto}.uk-child-width-expand\@l>*{width:1px}.uk-child-width-expand\@l>:not([class*='uk-width']){-ms-flex:1;-webkit-flex:1;flex:1;min-width:0;flex-basis:1px}}@media(min-width:1600px){.uk-child-width-1-1\@xl>*{width:100%}.uk-child-width-1-2\@xl>*{width:50%}.uk-child-width-1-3\@xl>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@xl>*{width:25%}.uk-child-width-1-5\@xl>*{width:20%}.uk-child-width-1-6\@xl>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@xl>*{width:auto}.uk-child-width-expand\@xl>*{width:1px}.uk-child-width-expand\@xl>:not([class*='uk-width']){-ms-flex:1;-webkit-flex:1;flex:1;min-width:0;flex-basis:1px}}[class*='uk-width']{box-sizing:border-box;width:100%;max-width:100%}.uk-width-1-2{width:50%}.uk-width-1-3{width:calc(100% * 1 / 3.001)}.uk-width-2-3{width:calc(100% * 2 / 3.001)}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5{width:20%}.uk-width-2-5{width:40%}.uk-width-3-5{width:60%}.uk-width-4-5{width:80%}.uk-width-1-6{width:calc(100% * 1 / 6.001)}.uk-width-5-6{width:calc(100% * 5 / 6.001)}.uk-width-small{width:150px}.uk-width-medium{width:300px}.uk-width-large{width:450px}.uk-width-xlarge{width:600px}.uk-width-xxlarge{width:750px}.uk-width-auto{width:auto}.uk-width-expand{width:1px;-ms-flex:1;-webkit-flex:1;flex:1;min-width:0;flex-basis:1px}@media(min-width:640px){.uk-width-1-1\@s{width:100%}.uk-width-1-2\@s{width:50%}.uk-width-1-3\@s{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@s{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@s{width:25%}.uk-width-3-4\@s{width:75%}.uk-width-1-5\@s{width:20%}.uk-width-2-5\@s{width:40%}.uk-width-3-5\@s{width:60%}.uk-width-4-5\@s{width:80%}.uk-width-1-6\@s{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@s{width:calc(100% * 5 / 6.001)}.uk-width-small\@s{width:150px}.uk-width-medium\@s{width:300px}.uk-width-large\@s{width:450px}.uk-width-xlarge\@s{width:600px}.uk-width-xxlarge\@s{width:750px}.uk-width-auto\@s{width:auto}.uk-width-expand\@s{width:1px;-ms-flex:1;-webkit-flex:1;flex:1;min-width:0;flex-basis:1px}}@media(min-width:960px){.uk-width-1-1\@m{width:100%}.uk-width-1-2\@m{width:50%}.uk-width-1-3\@m{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@m{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@m{width:25%}.uk-width-3-4\@m{width:75%}.uk-width-1-5\@m{width:20%}.uk-width-2-5\@m{width:40%}.uk-width-3-5\@m{width:60%}.uk-width-4-5\@m{width:80%}.uk-width-1-6\@m{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@m{width:calc(100% * 5 / 6.001)}.uk-width-small\@m{width:150px}.uk-width-medium\@m{width:300px}.uk-width-large\@m{width:450px}.uk-width-xlarge\@m{width:600px}.uk-width-xxlarge\@m{width:750px}.uk-width-auto\@m{width:auto}.uk-width-expand\@m{width:1px;-ms-flex:1;-webkit-flex:1;flex:1;min-width:0;flex-basis:1px}}@media(min-width:1200px){.uk-width-1-1\@l{width:100%}.uk-width-1-2\@l{width:50%}.uk-width-1-3\@l{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@l{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@l{width:25%}.uk-width-3-4\@l{width:75%}.uk-width-1-5\@l{width:20%}.uk-width-2-5\@l{width:40%}.uk-width-3-5\@l{width:60%}.uk-width-4-5\@l{width:80%}.uk-width-1-6\@l{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@l{width:calc(100% * 5 / 6.001)}.uk-width-small\@l{width:150px}.uk-width-medium\@l{width:300px}.uk-width-large\@l{width:450px}.uk-width-xlarge\@l{width:600px}.uk-width-xxlarge\@l{width:750px}.uk-width-auto\@l{width:auto}.uk-width-expand\@l{width:1px;-ms-flex:1;-webkit-flex:1;flex:1;min-width:0;flex-basis:1px}}@media(min-width:1600px){.uk-width-1-1\@xl{width:100%}.uk-width-1-2\@xl{width:50%}.uk-width-1-3\@xl{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@xl{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@xl{width:25%}.uk-width-3-4\@xl{width:75%}.uk-width-1-5\@xl{width:20%}.uk-width-2-5\@xl{width:40%}.uk-width-3-5\@xl{width:60%}.uk-width-4-5\@xl{width:80%}.uk-width-1-6\@xl{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@xl{width:calc(100% * 5 / 6.001)}.uk-width-small\@xl{width:150px}.uk-width-medium\@xl{width:300px}.uk-width-large\@xl{width:450px}.uk-width-xlarge\@xl{width:600px}.uk-width-xxlarge\@xl{width:750px}.uk-width-auto\@xl{width:auto}.uk-width-expand\@xl{width:1px;-ms-flex:1;-webkit-flex:1;flex:1;min-width:0;flex-basis:1px}}.uk-text-lead{font-size:22px;line-height:1.5;color:#5b5b5b;font-family:Roboto;font-weight:300;text-transform:none}.uk-text-meta{font-size:13px;line-height:1.4;color:#cbcbcb;font-family:Roboto;font-weight:normal}.uk-text-meta a{color:#cbcbcb}.uk-text-meta a:hover{color:#767779;text-decoration:none}.uk-text-small{font-size:13px;line-height:1.5}.uk-text-large{font-size:22px;line-height:1.5}.uk-text-bold{font-weight:bolder}.uk-text-uppercase{text-transform:uppercase!important}.uk-text-capitalize{text-transform:capitalize!important}.uk-text-lowercase{text-transform:lowercase!important}.uk-text-muted{color:#cbcbcb!important}.uk-text-primary{color:#00a0de!important}.uk-text-success{color:#01ce7f!important}.uk-text-warning{color:#f8d027!important}.uk-text-danger{color:#f54f43!important}.uk-text-background{-webkit-background-clip:text;-webkit-text-fill-color:transparent;display:inline-block;color:#00a0de!important}@supports(-webkit-background-clip:text){.uk-text-background{background-color:#00a0de}}.uk-text-left{text-align:left!important}.uk-text-right{text-align:right!important}.uk-text-center{text-align:center!important}.uk-text-justify{text-align:justify!important}@media(min-width:640px){.uk-text-left\@s{text-align:left!important}.uk-text-right\@s{text-align:right!important}.uk-text-center\@s{text-align:center!important}}@media(min-width:960px){.uk-text-left\@m{text-align:left!important}.uk-text-right\@m{text-align:right!important}.uk-text-center\@m{text-align:center!important}}@media(min-width:1200px){.uk-text-left\@l{text-align:left!important}.uk-text-right\@l{text-align:right!important}.uk-text-center\@l{text-align:center!important}}@media(min-width:1600px){.uk-text-left\@xl{text-align:left!important}.uk-text-right\@xl{text-align:right!important}.uk-text-center\@xl{text-align:center!important}}.uk-text-top{vertical-align:top!important}.uk-text-middle{vertical-align:middle!important}.uk-text-bottom{vertical-align:bottom!important}.uk-text-baseline{vertical-align:baseline!important}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}th.uk-text-truncate,td.uk-text-truncate{max-width:0}.uk-text-break{overflow-wrap:break-word;word-wrap:break-word;-webkit-hyphens:auto;-ms-hyphens:auto;-moz-hyphens:auto;hyphens:auto}th.uk-text-break,td.uk-text-break{word-break:break-all}[class*='uk-column-']{-webkit-column-gap:25px;-moz-column-gap:25px;column-gap:25px}@media(min-width:1200px){[class*='uk-column-']{-webkit-column-gap:40px;-moz-column-gap:40px;column-gap:40px}}[class*='uk-column-'] img{transform:translate3d(0,0,0)}.uk-column-divider{-webkit-column-rule:1px solid #e8e8e8;-moz-column-rule:1px solid #e8e8e8;column-rule:1px solid #e8e8e8;-webkit-column-gap:50px;-moz-column-gap:50px;column-gap:50px}@media(min-width:1200px){.uk-column-divider{-webkit-column-gap:80px;-moz-column-gap:80px;column-gap:80px}}.uk-column-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}@media(min-width:640px){.uk-column-1-2\@s{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-1-3\@s{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-1-4\@s{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-1-5\@s{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-1-6\@s{-webkit-column-count:6;-moz-column-count:6;column-count:6}}@media(min-width:960px){.uk-column-1-2\@m{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-1-3\@m{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-1-4\@m{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-1-5\@m{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-1-6\@m{-webkit-column-count:6;-moz-column-count:6;column-count:6}}@media(min-width:1200px){.uk-column-1-2\@l{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-1-3\@l{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-1-4\@l{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-1-5\@l{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-1-6\@l{-webkit-column-count:6;-moz-column-count:6;column-count:6}}@media(min-width:1600px){.uk-column-1-2\@xl{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-1-3\@xl{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-1-4\@xl{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-1-5\@xl{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-1-6\@xl{-webkit-column-count:6;-moz-column-count:6;column-count:6}}.uk-column-span{-webkit-column-span:all;-moz-column-span:all;column-span:all}.uk-cover{max-width:none;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.uk-cover-container{overflow:hidden;position:relative}.uk-background-default{background-color:#fff}.uk-background-muted{background-color:#fafafa}.uk-background-primary{background-color:#00a0de}.uk-background-secondary{background-color:#1b2831}.uk-background-cover,.uk-background-contain{background-position:50% 50%;background-repeat:no-repeat}.uk-background-cover{background-size:cover}.uk-background-contain{background-size:contain}.uk-background-top-left{background-position:0 0}.uk-background-top-center{background-position:50% 0}.uk-background-top-right{background-position:100% 0}.uk-background-center-left{background-position:0 50%}.uk-background-center-center{background-position:50% 50%}.uk-background-center-right{background-position:100% 50%}.uk-background-bottom-left{background-position:0 100%}.uk-background-bottom-center{background-position:50% 100%}.uk-background-bottom-right{background-position:100% 100%}.uk-background-norepeat{background-repeat:no-repeat}.uk-background-fixed{background-attachment:fixed}@media(pointer:coarse){.uk-background-fixed{background-attachment:scroll}}@media(max-width:639px){.uk-background-image\@s{background-image:none!important}}@media(max-width:959px){.uk-background-image\@m{background-image:none!important}}@media(max-width:1199px){.uk-background-image\@l{background-image:none!important}}@media(max-width:1599px){.uk-background-image\@xl{background-image:none!important}}.uk-background-blend-multiply{background-blend-mode:multiply}.uk-background-blend-screen{background-blend-mode:screen}.uk-background-blend-overlay{background-blend-mode:overlay}.uk-background-blend-darken{background-blend-mode:darken}.uk-background-blend-lighten{background-blend-mode:lighten}.uk-background-blend-color-dodge{background-blend-mode:color-dodge}.uk-background-blend-color-burn{background-blend-mode:color-burn}.uk-background-blend-hard-light{background-blend-mode:hard-light}.uk-background-blend-soft-light{background-blend-mode:soft-light}.uk-background-blend-difference{background-blend-mode:difference}.uk-background-blend-exclusion{background-blend-mode:exclusion}.uk-background-blend-hue{background-blend-mode:hue}.uk-background-blend-saturation{background-blend-mode:saturation}.uk-background-blend-color{background-blend-mode:color}.uk-background-blend-luminosity{background-blend-mode:luminosity}[class*='uk-align']{display:block;margin-bottom:25px}*+[class*='uk-align']{margin-top:25px}.uk-align-center,.aligncenter{margin-left:auto;margin-right:auto}.uk-align-left,.alignleft{margin-top:0;margin-right:25px;float:left}.uk-align-right,.alignright{margin-top:0;margin-left:25px;float:right}@media(min-width:640px){.uk-align-left\@s{margin-top:0;margin-right:25px;float:left}.uk-align-right\@s{margin-top:0;margin-left:25px;float:right}}@media(min-width:960px){.uk-align-left\@m{margin-top:0;margin-right:25px;float:left}.uk-align-right\@m{margin-top:0;margin-left:25px;float:right}}@media(min-width:1200px){.uk-align-left\@l{margin-top:0;float:left}.uk-align-right\@l{margin-top:0;float:right}.uk-align-left,.uk-align-left\@s,.uk-align-left\@m,.uk-align-left\@l,.alignleft{margin-right:40px}.uk-align-right,.uk-align-right\@s,.uk-align-right\@m,.uk-align-right\@l,.alignright{margin-left:40px}}@media(min-width:1600px){.uk-align-left\@xl{margin-top:0;margin-right:40px;float:left}.uk-align-right\@xl{margin-top:0;margin-left:40px;float:right}}.uk-panel{position:relative;box-sizing:border-box}.uk-panel::before,.uk-panel::after{content:"";display:table}.uk-panel::after{clear:both}.uk-panel>:last-child{margin-bottom:0}.uk-panel-scrollable{height:170px;padding:10px;border:1px solid #e8e8e8;overflow:auto;-webkit-overflow-scrolling:touch;resize:both}.uk-clearfix::before,.clearfix::before,.dl-horizontal::before,.form-group::before,.nav-tabs::before,.nav-pills::before{content:"";display:table-cell}.uk-clearfix::after,.clearfix::after,.dl-horizontal::after,.form-group::after,.nav-tabs::after,.nav-pills::after{content:"";display:table;clear:both}.uk-float-left{float:left}.uk-float-right{float:right}[class*='uk-float-']{max-width:100%}.uk-overflow-hidden{overflow:hidden}.uk-overflow-auto{overflow:auto;-webkit-overflow-scrolling:touch}.uk-overflow-auto>:last-child{margin-bottom:0}.uk-resize{resize:both}.uk-resize-vertical{resize:vertical}.uk-display-block{display:block!important}.uk-display-inline{display:inline!important}.uk-display-inline-block{display:inline-block!important}[class*='uk-inline']{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-inline-clip{overflow:hidden}[class*='uk-height']{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{min-height:100vh}.uk-height-small{height:150px}.uk-height-medium{height:300px}.uk-height-large{height:450px}.uk-height-max-small{max-height:150px}.uk-height-max-medium{max-height:300px}.uk-height-max-large{max-height:450px}.uk-preserve-width,.uk-preserve-width audio,.uk-preserve-width canvas,.uk-preserve-width img,.uk-preserve-width svg,.uk-preserve-width video{max-width:none}.uk-responsive-width,.uk-responsive-height{box-sizing:border-box}.uk-responsive-width{max-width:100%!important;height:auto}.uk-responsive-height{max-height:100%;width:auto;max-width:none}.uk-border-circle{border-radius:50%}.uk-border-rounded{border-radius:5px}.uk-inline-clip[class*='uk-border-']{-webkit-transform:translateZ(0)}.uk-box-shadow-small{box-shadow:0 3px 12px rgba(0,0,0,0.07)}.uk-box-shadow-medium{box-shadow:0 4px 28px rgba(0,0,0,0.07)}.uk-box-shadow-large{box-shadow:0 6px 50px rgba(0,0,0,0.05)}.uk-box-shadow-xlarge{box-shadow:0 28px 50px rgba(0,0,0,0.16)}[class*='uk-box-shadow-hover']{-webkit-transition:box-shadow .1s ease-in-out;transition:box-shadow .1s ease-in-out}.uk-box-shadow-hover-small:hover{box-shadow:0 3px 12px rgba(0,0,0,0.07)}.uk-box-shadow-hover-medium:hover{box-shadow:0 4px 28px rgba(0,0,0,0.07)}.uk-box-shadow-hover-large:hover{box-shadow:0 6px 50px rgba(0,0,0,0.05)}.uk-box-shadow-hover-xlarge:hover{box-shadow:0 28px 50px rgba(0,0,0,0.16)}@supports(filter:blur(0)) or(-webkit-filter:blur(0)){.uk-box-shadow-bottom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-box-shadow-bottom::before{content:'';position:absolute;bottom:-30px;left:0;right:0;height:30px;border-radius:100%;background:#444;-webkit-filter:blur(20px);filter:blur(20px)}.uk-box-shadow-bottom>*{position:relative}}.uk-dropcap::first-letter ,.uk-dropcap>p:first-of-type::first-letter {display:block;margin-right:10px;float:left;font-size:4.875em;line-height:1;color:inherit;margin-bottom:-2px}.uk-leader{overflow:hidden}.uk-leader-fill::after{display:inline-block;margin-left:15px;width:0;content:attr(data-fill);white-space:nowrap;color:#767779}.uk-leader-fill.uk-leader-hide::after{display:none}.var-leader-fill:before{content:'.'}.uk-logo,.navbar .brand{font-size:22px;font-family:Roboto;color:#767779;text-decoration:none}.uk-logo:hover,.uk-logo:focus{color:#767779;outline:0;text-decoration:none}.uk-logo-inverse{display:none}.uk-svg,.uk-svg:not(.uk-preserve) [fill*='#']:not(.uk-preserve){fill:currentcolor}.uk-svg:not(.uk-preserve) [stroke*='#']:not(.uk-preserve){stroke:currentcolor}.uk-svg{transform:translate(0,0)}.uk-disabled{pointer-events:none}.uk-drag,.uk-drag *{cursor:move}.uk-drag iframe{pointer-events:none}.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,0.3)}.uk-blend-multiply{mix-blend-mode:multiply}.uk-blend-screen{mix-blend-mode:screen}.uk-blend-overlay{mix-blend-mode:overlay}.uk-blend-darken{mix-blend-mode:darken}.uk-blend-lighten{mix-blend-mode:lighten}.uk-blend-color-dodge{mix-blend-mode:color-dodge}.uk-blend-color-burn{mix-blend-mode:color-burn}.uk-blend-hard-light{mix-blend-mode:hard-light}.uk-blend-soft-light{mix-blend-mode:soft-light}.uk-blend-difference{mix-blend-mode:difference}.uk-blend-exclusion{mix-blend-mode:exclusion}.uk-blend-hue{mix-blend-mode:hue}.uk-blend-saturation{mix-blend-mode:saturation}.uk-blend-color{mix-blend-mode:color}.uk-blend-luminosity{mix-blend-mode:luminosity}.uk-transform-origin-top-left{-webkit-transform-origin:0 0;transform-origin:0 0}.uk-transform-origin-top-center{-webkit-transform-origin:50% 0;transform-origin:50% 0}.uk-transform-origin-top-right{-webkit-transform-origin:100% 0;transform-origin:100% 0}.uk-transform-origin-center-left{-webkit-transform-origin:0 50%;transform-origin:0 50%}.uk-transform-origin-center-right{-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.uk-transform-origin-bottom-left{-webkit-transform-origin:0 100%;transform-origin:0 100%}.uk-transform-origin-bottom-center{-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.uk-transform-origin-bottom-right{-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.uk-flex{display:-ms-flexbox;display:-webkit-flex;display:flex}.uk-flex-inline{display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex}.uk-flex::before,.uk-flex::after,.uk-flex-inline::before,.uk-flex-inline::after{display:none}.uk-flex-left{-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.uk-flex-center{-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.uk-flex-right{-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.uk-flex-between{-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.uk-flex-around{-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around}@media(min-width:640px){.uk-flex-left\@s{-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.uk-flex-center\@s{-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.uk-flex-right\@s{-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.uk-flex-between\@s{-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.uk-flex-around\@s{-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around}}@media(min-width:960px){.uk-flex-left\@m{-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.uk-flex-center\@m{-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.uk-flex-right\@m{-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.uk-flex-between\@m{-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.uk-flex-around\@m{-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around}}@media(min-width:1200px){.uk-flex-left\@l{-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.uk-flex-center\@l{-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.uk-flex-right\@l{-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.uk-flex-between\@l{-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.uk-flex-around\@l{-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around}}@media(min-width:1600px){.uk-flex-left\@xl{-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.uk-flex-center\@xl{-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.uk-flex-right\@xl{-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.uk-flex-between\@xl{-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.uk-flex-around\@xl{-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around}}.uk-flex-stretch{-ms-flex-align:stretch;-webkit-align-items:stretch;align-items:stretch}.uk-flex-top{-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start}.uk-flex-middle{-ms-flex-align:center;-webkit-align-items:center;align-items:center}.uk-flex-bottom{-ms-flex-align:end;-webkit-align-items:flex-end;align-items:flex-end}.uk-flex-row{-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row}.uk-flex-row-reverse{-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.uk-flex-column{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.uk-flex-column-reverse{-ms-flex-direction:column-reverse;-webkit-flex-direction:column-reverse;flex-direction:column-reverse}.uk-flex-nowrap{-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.uk-flex-wrap{-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.uk-flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;-webkit-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.uk-flex-wrap-stretch{-ms-flex-line-pack:stretch;-webkit-align-content:stretch;align-content:stretch}.uk-flex-wrap-top{-ms-flex-line-pack:start;-webkit-align-content:flex-start;align-content:flex-start}.uk-flex-wrap-middle{-ms-flex-line-pack:center;-webkit-align-content:center;align-content:center}.uk-flex-wrap-bottom{-ms-flex-line-pack:end;-webkit-align-content:flex-end;align-content:flex-end}.uk-flex-wrap-between{-ms-flex-line-pack:justify;-webkit-align-content:space-between;align-content:space-between}.uk-flex-wrap-around{-ms-flex-line-pack:distribute;-webkit-align-content:space-around;align-content:space-around}.uk-flex-first{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-last{-ms-flex-order:99;-webkit-order:99;order:99}@media(min-width:640px){.uk-flex-first\@s{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-last\@s{-ms-flex-order:99;-webkit-order:99;order:99}}@media(min-width:960px){.uk-flex-first\@m{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-last\@m{-ms-flex-order:99;-webkit-order:99;order:99}}@media(min-width:1200px){.uk-flex-first\@l{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-last\@l{-ms-flex-order:99;-webkit-order:99;order:99}}@media(min-width:1600px){.uk-flex-first\@xl{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-last\@xl{-ms-flex-order:99;-webkit-order:99;order:99}}.uk-flex-none{-ms-flex:none;-webkit-flex:none;flex:none}.uk-flex-auto{-ms-flex:auto;-webkit-flex:auto;flex:auto}.uk-flex-1{-ms-flex:1;-webkit-flex:1;flex:1}.uk-margin,.form-group{margin-bottom:20px}*+.uk-margin{margin-top:20px!important}.uk-margin-top{margin-top:20px!important}.uk-margin-bottom{margin-bottom:20px!important}.uk-margin-left{margin-left:20px!important}.uk-margin-right{margin-right:20px!important}.uk-margin-small{margin-bottom:10px}*+.uk-margin-small{margin-top:10px!important}.uk-margin-small-top{margin-top:10px!important}.uk-margin-small-bottom{margin-bottom:10px!important}.uk-margin-small-left{margin-left:10px!important}.uk-margin-small-right{margin-right:10px!important}.uk-margin-medium{margin-bottom:40px}*+.uk-margin-medium{margin-top:40px!important}.uk-margin-medium-top{margin-top:40px!important}.uk-margin-medium-bottom{margin-bottom:40px!important}.uk-margin-medium-left{margin-left:40px!important}.uk-margin-medium-right{margin-right:40px!important}.uk-margin-large{margin-bottom:40px}*+.uk-margin-large{margin-top:40px!important}.uk-margin-large-top{margin-top:40px!important}.uk-margin-large-bottom{margin-bottom:40px!important}.uk-margin-large-left{margin-left:40px!important}.uk-margin-large-right{margin-right:40px!important}@media(min-width:1200px){.uk-margin-large{margin-bottom:70px}*+.uk-margin-large{margin-top:70px!important}.uk-margin-large-top{margin-top:70px!important}.uk-margin-large-bottom{margin-bottom:70px!important}.uk-margin-large-left{margin-left:70px!important}.uk-margin-large-right{margin-right:70px!important}}.uk-margin-xlarge{margin-bottom:70px}*+.uk-margin-xlarge{margin-top:70px!important}.uk-margin-xlarge-top{margin-top:70px!important}.uk-margin-xlarge-bottom{margin-bottom:70px!important}.uk-margin-xlarge-left{margin-left:70px!important}.uk-margin-xlarge-right{margin-right:70px!important}@media(min-width:1200px){.uk-margin-xlarge{margin-bottom:140px}*+.uk-margin-xlarge{margin-top:140px!important}.uk-margin-xlarge-top{margin-top:140px!important}.uk-margin-xlarge-bottom{margin-bottom:140px!important}.uk-margin-xlarge-left{margin-left:140px!important}.uk-margin-xlarge-right{margin-right:140px!important}}.uk-margin-remove{margin:0!important}.uk-margin-remove-top{margin-top:0!important}.uk-margin-remove-bottom{margin-bottom:0!important}.uk-margin-remove-left{margin-left:0!important}.uk-margin-remove-right{margin-right:0!important}.uk-margin-remove-vertical{margin-top:0!important;margin-bottom:0!important}.uk-margin-remove-adjacent+*{margin-top:0!important}.uk-margin-auto{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-top{margin-top:auto!important}.uk-margin-auto-bottom{margin-bottom:auto!important}.uk-margin-auto-left{margin-left:auto!important}.uk-margin-auto-right{margin-right:auto!important}.uk-margin-auto-vertical{margin-top:auto!important;margin-bottom:auto!important}.uk-padding{padding:25px}@media(min-width:1200px){.uk-padding{padding:40px}}.uk-padding-small{padding:15px}.uk-padding-large{padding:25px}@media(min-width:1200px){.uk-padding-large{padding:70px}}.uk-padding-remove{padding:0!important}.uk-padding-remove-top{padding-top:0!important}.uk-padding-remove-bottom{padding-bottom:0!important}.uk-padding-remove-left{padding-left:0!important}.uk-padding-remove-right{padding-right:0!important}.uk-padding-remove-vertical{padding-top:0!important;padding-bottom:0!important}.uk-padding-remove-horizontal{padding-left:0!important;padding-right:0!important}[class*='uk-position-top'],[class*='uk-position-bottom'],[class*='uk-position-left'],[class*='uk-position-right'],[class*='uk-position-center']{position:absolute!important}.uk-position-top{top:0;left:0;right:0}.uk-position-bottom{bottom:0;left:0;right:0}.uk-position-left{top:0;bottom:0;left:0}.uk-position-right{top:0;bottom:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-center{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:table;width:-moz-max-content;max-width:100%}.uk-position-center-left,.uk-position-center-right{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.uk-position-center-left{left:0}.uk-position-center-right{right:0}.uk-position-top-center,.uk-position-bottom-center{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);display:table}.uk-position-top-center{top:0}.uk-position-bottom-center{bottom:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-relative{position:relative!important}.uk-position-absolute{position:absolute!important}.uk-position-fixed{position:fixed!important}.uk-position-z-index{z-index:1}.uk-position-small{margin:15px}.uk-position-small.uk-position-center{-webkit-transform:translate(calc(-50% - 15px),calc(-50% - 15px));transform:translate(calc(-50% - 15px),calc(-50% - 15px))}.uk-position-small.uk-position-center-left,.uk-position-small.uk-position-center-right{-webkit-transform:translateY(calc(-50% - 15px));transform:translateY(calc(-50% - 15px))}.uk-position-small.uk-position-top-center,.uk-position-small.uk-position-bottom-center{-webkit-transform:translateX(calc(-50% - 15px));transform:translateX(calc(-50% - 15px))}.uk-position-medium{margin:25px}.uk-position-medium.uk-position-center{-webkit-transform:translate(calc(-50% - 25px),calc(-50% - 25px));transform:translate(calc(-50% - 25px),calc(-50% - 25px))}.uk-position-medium.uk-position-center-left,.uk-position-medium.uk-position-center-right{-webkit-transform:translateY(calc(-50% - 25px));transform:translateY(calc(-50% - 25px))}.uk-position-medium.uk-position-top-center,.uk-position-medium.uk-position-bottom-center{-webkit-transform:translateX(calc(-50% - 25px));transform:translateX(calc(-50% - 25px))}.uk-transition-fade,[class*='uk-transition-scale'],[class*='uk-transition-slide']{-webkit-transition:.3s ease-out;transition:.3s ease-out;-webkit-transition-property:opacity,transform,filter;transition-property:opacity,transform,filter}.uk-transition-fade{opacity:0}.uk-transition-toggle:hover [class*='uk-transition-fade'],.uk-transition-toggle.uk-hover [class*='uk-transition-fade']{opacity:1}[class*='uk-transition-scale']{opacity:0}.uk-transition-scale-up{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.uk-transition-toggle:hover .uk-transition-scale-up,.uk-transition-toggle.uk-hover .uk-transition-scale-up{opacity:1;-webkit-transform:scale3d(1.1,1.1,1);transform:scale3d(1.1,1.1,1)}.uk-transition-scale-down{-webkit-transform:scale3d(1.1,1.1,1);transform:scale3d(1.1,1.1,1)}.uk-transition-toggle:hover .uk-transition-scale-down,.uk-transition-toggle.uk-hover .uk-transition-scale-down{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}[class*='uk-transition-slide']{opacity:0}.uk-transition-slide-top{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.uk-transition-slide-bottom{-webkit-transform:translateY(100%);transform:translateY(100%)}.uk-transition-slide-left{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.uk-transition-slide-right{-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-transition-slide-top-small{-webkit-transform:translateY(-10px);transform:translateY(-10px)}.uk-transition-slide-bottom-small{-webkit-transform:translateY(10px);transform:translateY(10px)}.uk-transition-slide-left-small{-webkit-transform:translateX(-10px);transform:translateX(-10px)}.uk-transition-slide-right-small{-webkit-transform:translateX(10px);transform:translateX(10px)}.uk-transition-slide-top-medium{-webkit-transform:translateY(-50px);transform:translateY(-50px)}.uk-transition-slide-bottom-medium{-webkit-transform:translateY(50px);transform:translateY(50px)}.uk-transition-slide-left-medium{-webkit-transform:translateX(-50px);transform:translateX(-50px)}.uk-transition-slide-right-medium{-webkit-transform:translateX(50px);transform:translateX(50px)}.uk-transition-toggle:hover [class*='uk-transition-slide'],.uk-transition-toggle.uk-hover [class*='uk-transition-slide']{opacity:1;-webkit-transform:translateX(0) translateY(0);transform:translateX(0) translateY(0)}.uk-transition-opaque{opacity:1}.uk-transition-slow{transition-duration:.7s}[hidden],.uk-hidden{display:none!important}@media(min-width:640px){.uk-hidden\@s{display:none!important}}@media(min-width:960px){.uk-hidden\@m{display:none!important}}@media(min-width:1200px){.uk-hidden\@l{display:none!important}}@media(min-width:1600px){.uk-hidden\@xl{display:none!important}}@media(max-width:639px){.uk-visible\@s{display:none!important}}@media(max-width:959px){.uk-visible\@m{display:none!important}}@media(max-width:1199px){.uk-visible\@l{display:none!important}}@media(max-width:1599px){.uk-visible\@xl{display:none!important}}.uk-invisible{visibility:hidden!important}.uk-visible-toggle:not(:hover):not(.uk-hover) .uk-hidden-hover{display:none!important}.uk-visible-toggle:not(:hover):not(.uk-hover) .uk-invisible-hover{visibility:hidden!important}@media(pointer:coarse){.uk-hidden-touch{display:none!important}}.uk-hidden-notouch{display:none!important}@media(pointer:coarse){.uk-hidden-notouch{display:block!important}}.uk-light,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color),.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*='uk-card-media']),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*='uk-card-media']),.uk-overlay-primary,.uk-navbar-container:not(.uk-navbar-transparent),.uk-offcanvas-bar,.tm-toolbar{color:rgba(255,255,255,0.7)}.uk-light a,.uk-light .uk-link,.uk-section-primary:not(.uk-preserve-color) a,.uk-section-primary:not(.uk-preserve-color) .uk-link,.uk-section-secondary:not(.uk-preserve-color) a,.uk-section-secondary:not(.uk-preserve-color) .uk-link,.uk-tile-primary:not(.uk-preserve-color) a,.uk-tile-primary:not(.uk-preserve-color) .uk-link,.uk-tile-secondary:not(.uk-preserve-color) a,.uk-tile-secondary:not(.uk-preserve-color) .uk-link,.uk-card-primary.uk-card-body a,.uk-card-primary.uk-card-body .uk-link,.uk-card-primary>:not([class*='uk-card-media']) a,.uk-card-primary>:not([class*='uk-card-media']) .uk-link,.uk-card-secondary.uk-card-body a,.uk-card-secondary.uk-card-body .uk-link,.uk-card-secondary>:not([class*='uk-card-media']) a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link,.uk-overlay-primary a,.uk-overlay-primary .uk-link,.uk-navbar-container:not(.uk-navbar-transparent) a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-link,.uk-offcanvas-bar a,.uk-offcanvas-bar .uk-link,.tm-toolbar a,.tm-toolbar .uk-link{color:#fff}.uk-light a:hover,.uk-light .uk-link:hover,.uk-section-primary:not(.uk-preserve-color) a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link:hover,.uk-section-secondary:not(.uk-preserve-color) a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-primary:not(.uk-preserve-color) a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-secondary:not(.uk-preserve-color) a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-card-primary.uk-card-body a:hover,.uk-card-primary.uk-card-body .uk-link:hover,.uk-card-primary>:not([class*='uk-card-media']) a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link:hover,.uk-card-secondary.uk-card-body a:hover,.uk-card-secondary.uk-card-body .uk-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link:hover,.uk-overlay-primary a:hover,.uk-overlay-primary .uk-link:hover,.uk-navbar-container:not(.uk-navbar-transparent) a:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-link:hover,.uk-offcanvas-bar a:hover,.uk-offcanvas-bar .uk-link:hover,.tm-toolbar a:hover,.tm-toolbar .uk-link:hover{color:rgba(255,255,255,0.5)}.uk-light :not(pre)>code,.uk-light :not(pre)>kbd,.uk-light :not(pre)>samp,.uk-section-primary:not(.uk-preserve-color) :not(pre)>code,.uk-section-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-card-primary.uk-card-body :not(pre)>code,.uk-card-primary.uk-card-body :not(pre)>kbd,.uk-card-primary.uk-card-body :not(pre)>samp,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>code,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>kbd,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>samp,.uk-card-secondary.uk-card-body :not(pre)>code,.uk-card-secondary.uk-card-body :not(pre)>kbd,.uk-card-secondary.uk-card-body :not(pre)>samp,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>code,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>kbd,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>samp,.uk-overlay-primary :not(pre)>code,.uk-overlay-primary :not(pre)>kbd,.uk-overlay-primary :not(pre)>samp,.uk-navbar-container:not(.uk-navbar-transparent) :not(pre)>code,.uk-navbar-container:not(.uk-navbar-transparent) :not(pre)>kbd,.uk-navbar-container:not(.uk-navbar-transparent) :not(pre)>samp,.uk-offcanvas-bar :not(pre)>code,.uk-offcanvas-bar :not(pre)>kbd,.uk-offcanvas-bar :not(pre)>samp,.tm-toolbar :not(pre)>code,.tm-toolbar :not(pre)>kbd,.tm-toolbar :not(pre)>samp{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.2)}.uk-light em,.uk-section-primary:not(.uk-preserve-color) em,.uk-section-secondary:not(.uk-preserve-color) em,.uk-tile-primary:not(.uk-preserve-color) em,.uk-tile-secondary:not(.uk-preserve-color) em,.uk-card-primary.uk-card-body em,.uk-card-primary>:not([class*='uk-card-media']) em,.uk-card-secondary.uk-card-body em,.uk-card-secondary>:not([class*='uk-card-media']) em,.uk-overlay-primary em,.uk-navbar-container:not(.uk-navbar-transparent) em,.uk-offcanvas-bar em,.tm-toolbar em{color:#fff}.uk-light h1,.uk-light .uk-h1,.uk-light h2,.uk-light .uk-h2,.uk-light h3,.uk-light .uk-h3,.uk-light h4,.uk-light .uk-h4,.uk-light h5,.uk-light .uk-h5,.uk-light h6,.uk-light .uk-h6,.uk-section-primary:not(.uk-preserve-color) h1,.uk-section-primary:not(.uk-preserve-color) .uk-h1,.uk-section-primary:not(.uk-preserve-color) h2,.uk-section-primary:not(.uk-preserve-color) .uk-h2,.uk-section-primary:not(.uk-preserve-color) h3,.uk-section-primary:not(.uk-preserve-color) .uk-h3,.uk-section-primary:not(.uk-preserve-color) h4,.uk-section-primary:not(.uk-preserve-color) .uk-h4,.uk-section-primary:not(.uk-preserve-color) h5,.uk-section-primary:not(.uk-preserve-color) .uk-h5,.uk-section-primary:not(.uk-preserve-color) h6,.uk-section-primary:not(.uk-preserve-color) .uk-h6,.uk-section-secondary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h1,.uk-section-secondary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) .uk-h2,.uk-section-secondary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) .uk-h3,.uk-section-secondary:not(.uk-preserve-color) h4,.uk-section-secondary:not(.uk-preserve-color) .uk-h4,.uk-section-secondary:not(.uk-preserve-color) h5,.uk-section-secondary:not(.uk-preserve-color) .uk-h5,.uk-section-secondary:not(.uk-preserve-color) h6,.uk-section-secondary:not(.uk-preserve-color) .uk-h6,.uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h1,.uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) .uk-h2,.uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) .uk-h3,.uk-tile-primary:not(.uk-preserve-color) h4,.uk-tile-primary:not(.uk-preserve-color) .uk-h4,.uk-tile-primary:not(.uk-preserve-color) h5,.uk-tile-primary:not(.uk-preserve-color) .uk-h5,.uk-tile-primary:not(.uk-preserve-color) h6,.uk-tile-primary:not(.uk-preserve-color) .uk-h6,.uk-tile-secondary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h1,.uk-tile-secondary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) .uk-h2,.uk-tile-secondary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) .uk-h3,.uk-tile-secondary:not(.uk-preserve-color) h4,.uk-tile-secondary:not(.uk-preserve-color) .uk-h4,.uk-tile-secondary:not(.uk-preserve-color) h5,.uk-tile-secondary:not(.uk-preserve-color) .uk-h5,.uk-tile-secondary:not(.uk-preserve-color) h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-h6,.uk-card-primary.uk-card-body h1,.uk-card-primary.uk-card-body .uk-h1,.uk-card-primary.uk-card-body h2,.uk-card-primary.uk-card-body .uk-h2,.uk-card-primary.uk-card-body h3,.uk-card-primary.uk-card-body .uk-h3,.uk-card-primary.uk-card-body h4,.uk-card-primary.uk-card-body .uk-h4,.uk-card-primary.uk-card-body h5,.uk-card-primary.uk-card-body .uk-h5,.uk-card-primary.uk-card-body h6,.uk-card-primary.uk-card-body .uk-h6,.uk-card-primary>:not([class*='uk-card-media']) h1,.uk-card-primary>:not([class*='uk-card-media']) .uk-h1,.uk-card-primary>:not([class*='uk-card-media']) h2,.uk-card-primary>:not([class*='uk-card-media']) .uk-h2,.uk-card-primary>:not([class*='uk-card-media']) h3,.uk-card-primary>:not([class*='uk-card-media']) .uk-h3,.uk-card-primary>:not([class*='uk-card-media']) h4,.uk-card-primary>:not([class*='uk-card-media']) .uk-h4,.uk-card-primary>:not([class*='uk-card-media']) h5,.uk-card-primary>:not([class*='uk-card-media']) .uk-h5,.uk-card-primary>:not([class*='uk-card-media']) h6,.uk-card-primary>:not([class*='uk-card-media']) .uk-h6,.uk-card-secondary.uk-card-body h1,.uk-card-secondary.uk-card-body .uk-h1,.uk-card-secondary.uk-card-body h2,.uk-card-secondary.uk-card-body .uk-h2,.uk-card-secondary.uk-card-body h3,.uk-card-secondary.uk-card-body .uk-h3,.uk-card-secondary.uk-card-body h4,.uk-card-secondary.uk-card-body .uk-h4,.uk-card-secondary.uk-card-body h5,.uk-card-secondary.uk-card-body .uk-h5,.uk-card-secondary.uk-card-body h6,.uk-card-secondary.uk-card-body .uk-h6,.uk-card-secondary>:not([class*='uk-card-media']) h1,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h1,.uk-card-secondary>:not([class*='uk-card-media']) h2,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h2,.uk-card-secondary>:not([class*='uk-card-media']) h3,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h3,.uk-card-secondary>:not([class*='uk-card-media']) h4,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h4,.uk-card-secondary>:not([class*='uk-card-media']) h5,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h5,.uk-card-secondary>:not([class*='uk-card-media']) h6,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h6,.uk-overlay-primary h1,.uk-overlay-primary .uk-h1,.uk-overlay-primary h2,.uk-overlay-primary .uk-h2,.uk-overlay-primary h3,.uk-overlay-primary .uk-h3,.uk-overlay-primary h4,.uk-overlay-primary .uk-h4,.uk-overlay-primary h5,.uk-overlay-primary .uk-h5,.uk-overlay-primary h6,.uk-overlay-primary .uk-h6,.uk-navbar-container:not(.uk-navbar-transparent) h1,.uk-navbar-container:not(.uk-navbar-transparent) .uk-h1,.uk-navbar-container:not(.uk-navbar-transparent) h2,.uk-navbar-container:not(.uk-navbar-transparent) .uk-h2,.uk-navbar-container:not(.uk-navbar-transparent) h3,.uk-navbar-container:not(.uk-navbar-transparent) .uk-h3,.uk-navbar-container:not(.uk-navbar-transparent) h4,.uk-navbar-container:not(.uk-navbar-transparent) .uk-h4,.uk-navbar-container:not(.uk-navbar-transparent) h5,.uk-navbar-container:not(.uk-navbar-transparent) .uk-h5,.uk-navbar-container:not(.uk-navbar-transparent) h6,.uk-navbar-container:not(.uk-navbar-transparent) .uk-h6,.uk-offcanvas-bar h1,.uk-offcanvas-bar .uk-h1,.uk-offcanvas-bar h2,.uk-offcanvas-bar .uk-h2,.uk-offcanvas-bar h3,.uk-offcanvas-bar .uk-h3,.uk-offcanvas-bar h4,.uk-offcanvas-bar .uk-h4,.uk-offcanvas-bar h5,.uk-offcanvas-bar .uk-h5,.uk-offcanvas-bar h6,.uk-offcanvas-bar .uk-h6,.tm-toolbar h1,.tm-toolbar .uk-h1,.tm-toolbar h2,.tm-toolbar .uk-h2,.tm-toolbar h3,.tm-toolbar .uk-h3,.tm-toolbar h4,.tm-toolbar .uk-h4,.tm-toolbar h5,.tm-toolbar .uk-h5,.tm-toolbar h6,.tm-toolbar .uk-h6{color:#fff}.uk-light blockquote,.uk-section-primary:not(.uk-preserve-color) blockquote,.uk-section-secondary:not(.uk-preserve-color) blockquote,.uk-tile-primary:not(.uk-preserve-color) blockquote,.uk-tile-secondary:not(.uk-preserve-color) blockquote,.uk-card-primary.uk-card-body blockquote,.uk-card-primary>:not([class*='uk-card-media']) blockquote,.uk-card-secondary.uk-card-body blockquote,.uk-card-secondary>:not([class*='uk-card-media']) blockquote,.uk-overlay-primary blockquote,.uk-navbar-container:not(.uk-navbar-transparent) blockquote,.uk-offcanvas-bar blockquote,.tm-toolbar blockquote{color:#fff}.uk-light blockquote footer,.uk-section-primary:not(.uk-preserve-color) blockquote footer,.uk-section-secondary:not(.uk-preserve-color) blockquote footer,.uk-tile-primary:not(.uk-preserve-color) blockquote footer,.uk-tile-secondary:not(.uk-preserve-color) blockquote footer,.uk-card-primary.uk-card-body blockquote footer,.uk-card-primary>:not([class*='uk-card-media']) blockquote footer,.uk-card-secondary.uk-card-body blockquote footer,.uk-card-secondary>:not([class*='uk-card-media']) blockquote footer,.uk-overlay-primary blockquote footer,.uk-navbar-container:not(.uk-navbar-transparent) blockquote footer,.uk-offcanvas-bar blockquote footer,.tm-toolbar blockquote footer{color:rgba(255,255,255,0.7)}.uk-light hr,.uk-section-primary:not(.uk-preserve-color) hr,.uk-section-secondary:not(.uk-preserve-color) hr,.uk-tile-primary:not(.uk-preserve-color) hr,.uk-tile-secondary:not(.uk-preserve-color) hr,.uk-card-primary.uk-card-body hr,.uk-card-primary>:not([class*='uk-card-media']) hr,.uk-card-secondary.uk-card-body hr,.uk-card-secondary>:not([class*='uk-card-media']) hr,.uk-overlay-primary hr,.uk-navbar-container:not(.uk-navbar-transparent) hr,.uk-offcanvas-bar hr,.tm-toolbar hr{border-top-color:rgba(255,255,255,0.2)}.uk-light a.uk-link-muted,.uk-light .uk-link-muted a,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-card-primary.uk-card-body a.uk-link-muted,.uk-card-primary.uk-card-body .uk-link-muted a,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-muted,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-muted a,.uk-card-secondary.uk-card-body a.uk-link-muted,.uk-card-secondary.uk-card-body .uk-link-muted a,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-muted,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-muted a,.uk-overlay-primary a.uk-link-muted,.uk-overlay-primary .uk-link-muted a,.uk-navbar-container:not(.uk-navbar-transparent) a.uk-link-muted,.uk-navbar-container:not(.uk-navbar-transparent) .uk-link-muted a,.uk-offcanvas-bar a.uk-link-muted,.uk-offcanvas-bar .uk-link-muted a,.tm-toolbar a.uk-link-muted,.tm-toolbar .uk-link-muted a{color:rgba(255,255,255,0.5)}.uk-light a.uk-link-muted:hover,.uk-light .uk-link-muted a:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-card-primary.uk-card-body a.uk-link-muted:hover,.uk-card-primary.uk-card-body .uk-link-muted a:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-muted:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-muted a:hover,.uk-card-secondary.uk-card-body a.uk-link-muted:hover,.uk-card-secondary.uk-card-body .uk-link-muted a:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-muted:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-muted a:hover,.uk-overlay-primary a.uk-link-muted:hover,.uk-overlay-primary .uk-link-muted a:hover,.uk-navbar-container:not(.uk-navbar-transparent) a.uk-link-muted:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-link-muted a:hover,.uk-offcanvas-bar a.uk-link-muted:hover,.uk-offcanvas-bar .uk-link-muted a:hover,.tm-toolbar a.uk-link-muted:hover,.tm-toolbar .uk-link-muted a:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-heading-primary,.uk-section-primary:not(.uk-preserve-color) .uk-heading-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-primary,.uk-card-primary.uk-card-body .uk-heading-primary,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-primary,.uk-card-secondary.uk-card-body .uk-heading-primary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-primary,.uk-overlay-primary .uk-heading-primary,.uk-navbar-container:not(.uk-navbar-transparent) .uk-heading-primary,.uk-offcanvas-bar .uk-heading-primary,.tm-toolbar .uk-heading-primary{color:#fff}.uk-light .uk-heading-hero,.uk-section-primary:not(.uk-preserve-color) .uk-heading-hero,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-hero,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-hero,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-hero,.uk-card-primary.uk-card-body .uk-heading-hero,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-hero,.uk-card-secondary.uk-card-body .uk-heading-hero,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-hero,.uk-overlay-primary .uk-heading-hero,.uk-navbar-container:not(.uk-navbar-transparent) .uk-heading-hero,.uk-offcanvas-bar .uk-heading-hero,.tm-toolbar .uk-heading-hero{color:#fff}.uk-light .uk-heading-divider,.uk-section-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-card-primary.uk-card-body .uk-heading-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-divider,.uk-card-secondary.uk-card-body .uk-heading-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-divider,.uk-overlay-primary .uk-heading-divider,.uk-navbar-container:not(.uk-navbar-transparent) .uk-heading-divider,.uk-offcanvas-bar .uk-heading-divider,.tm-toolbar .uk-heading-divider{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-heading-bullet::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-card-primary.uk-card-body .uk-heading-bullet::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-bullet::before,.uk-card-secondary.uk-card-body .uk-heading-bullet::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-bullet::before,.uk-overlay-primary .uk-heading-bullet::before,.uk-navbar-container:not(.uk-navbar-transparent) .uk-heading-bullet::before,.uk-offcanvas-bar .uk-heading-bullet::before,.tm-toolbar .uk-heading-bullet::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-heading-line>:before,.uk-light .uk-heading-line>:after,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>:before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>:after,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>:before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>:after,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>:before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>:after,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>:before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>:after,.uk-card-primary.uk-card-body .uk-heading-line>:before,.uk-card-primary.uk-card-body .uk-heading-line>:after,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-line>:before,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-line>:after,.uk-card-secondary.uk-card-body .uk-heading-line>:before,.uk-card-secondary.uk-card-body .uk-heading-line>:after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-line>:before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-line>:after,.uk-overlay-primary .uk-heading-line>:before,.uk-overlay-primary .uk-heading-line>:after,.uk-navbar-container:not(.uk-navbar-transparent) .uk-heading-line>:before,.uk-navbar-container:not(.uk-navbar-transparent) .uk-heading-line>:after,.uk-offcanvas-bar .uk-heading-line>:before,.uk-offcanvas-bar .uk-heading-line>:after,.tm-toolbar .uk-heading-line>:before,.tm-toolbar .uk-heading-line>:after{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-divider-icon,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-card-primary.uk-card-body .uk-divider-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon,.uk-card-secondary.uk-card-body .uk-divider-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon,.uk-overlay-primary .uk-divider-icon,.uk-navbar-container:not(.uk-navbar-transparent) .uk-divider-icon,.uk-offcanvas-bar .uk-divider-icon,.tm-toolbar .uk-divider-icon{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.2%29%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%3E%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-divider-icon::before,.uk-light .uk-divider-icon::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-card-primary.uk-card-body .uk-divider-icon::before,.uk-card-primary.uk-card-body .uk-divider-icon::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon::after,.uk-card-secondary.uk-card-body .uk-divider-icon::before,.uk-card-secondary.uk-card-body .uk-divider-icon::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon::after,.uk-overlay-primary .uk-divider-icon::before,.uk-overlay-primary .uk-divider-icon::after,.uk-navbar-container:not(.uk-navbar-transparent) .uk-divider-icon::before,.uk-navbar-container:not(.uk-navbar-transparent) .uk-divider-icon::after,.uk-offcanvas-bar .uk-divider-icon::before,.uk-offcanvas-bar .uk-divider-icon::after,.tm-toolbar .uk-divider-icon::before,.tm-toolbar .uk-divider-icon::after{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-divider-small::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-card-primary.uk-card-body .uk-divider-small::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-small::after,.uk-card-secondary.uk-card-body .uk-divider-small::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-small::after,.uk-overlay-primary .uk-divider-small::after,.uk-navbar-container:not(.uk-navbar-transparent) .uk-divider-small::after,.uk-offcanvas-bar .uk-divider-small::after,.tm-toolbar .uk-divider-small::after{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-list-divider>li:nth-child(n+2),.uk-section-primary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-tile-primary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-card-primary.uk-card-body .uk-list-divider>li:nth-child(n+2),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-divider>li:nth-child(n+2),.uk-card-secondary.uk-card-body .uk-list-divider>li:nth-child(n+2),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-divider>li:nth-child(n+2),.uk-overlay-primary .uk-list-divider>li:nth-child(n+2),.uk-navbar-container:not(.uk-navbar-transparent) .uk-list-divider>li:nth-child(n+2),.uk-offcanvas-bar .uk-list-divider>li:nth-child(n+2),.tm-toolbar .uk-list-divider>li:nth-child(n+2),.uk-light .tm-child-list-divider>ul>li:nth-child(n+2){border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-list-striped>li:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-striped>li:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>li:nth-of-type(odd),.uk-navbar-container:not(.uk-navbar-transparent) .uk-list-striped>li:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>li:nth-of-type(odd),.tm-toolbar .uk-list-striped>li:nth-of-type(odd){background-color:rgba(255,255,255,0.1)}.uk-light .uk-list-bullet>li::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-card-primary.uk-card-body .uk-list-bullet>li::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-list-bullet>li::before,.uk-card-secondary.uk-card-body .uk-list-bullet>li::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-bullet>li::before,.uk-overlay-primary .uk-list-bullet>li::before,.uk-navbar-container:not(.uk-navbar-transparent) .uk-list-bullet>li::before,.uk-offcanvas-bar .uk-list-bullet>li::before,.tm-toolbar .uk-list-bullet>li::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%3E%3C%2Fcircle%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-table th,.uk-section-primary:not(.uk-preserve-color) .uk-table th,.uk-section-secondary:not(.uk-preserve-color) .uk-table th,.uk-tile-primary:not(.uk-preserve-color) .uk-table th,.uk-tile-secondary:not(.uk-preserve-color) .uk-table th,.uk-card-primary.uk-card-body .uk-table th,.uk-card-primary>:not([class*='uk-card-media']) .uk-table th,.uk-card-secondary.uk-card-body .uk-table th,.uk-card-secondary>:not([class*='uk-card-media']) .uk-table th,.uk-overlay-primary .uk-table th,.uk-navbar-container:not(.uk-navbar-transparent) .uk-table th,.uk-offcanvas-bar .uk-table th,.tm-toolbar .uk-table th{color:rgba(255,255,255,0.7)}.uk-light .uk-table caption,.uk-section-primary:not(.uk-preserve-color) .uk-table caption,.uk-section-secondary:not(.uk-preserve-color) .uk-table caption,.uk-tile-primary:not(.uk-preserve-color) .uk-table caption,.uk-tile-secondary:not(.uk-preserve-color) .uk-table caption,.uk-card-primary.uk-card-body .uk-table caption,.uk-card-primary>:not([class*='uk-card-media']) .uk-table caption,.uk-card-secondary.uk-card-body .uk-table caption,.uk-card-secondary>:not([class*='uk-card-media']) .uk-table caption,.uk-overlay-primary .uk-table caption,.uk-navbar-container:not(.uk-navbar-transparent) .uk-table caption,.uk-offcanvas-bar .uk-table caption,.tm-toolbar .uk-table caption{color:rgba(255,255,255,0.5)}.uk-light .uk-table>tr.uk-active,.uk-light .uk-table tbody tr.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-card-primary.uk-card-body .uk-table>tr.uk-active,.uk-card-primary.uk-card-body .uk-table tbody tr.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-table>tr.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-table tbody tr.uk-active,.uk-card-secondary.uk-card-body .uk-table>tr.uk-active,.uk-card-secondary.uk-card-body .uk-table tbody tr.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-table>tr.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-table tbody tr.uk-active,.uk-overlay-primary .uk-table>tr.uk-active,.uk-overlay-primary .uk-table tbody tr.uk-active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-table>tr.uk-active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-table tbody tr.uk-active,.uk-offcanvas-bar .uk-table>tr.uk-active,.uk-offcanvas-bar .uk-table tbody tr.uk-active,.tm-toolbar .uk-table>tr.uk-active,.tm-toolbar .uk-table tbody tr.uk-active{background:rgba(255,255,255,0.08)}.uk-light .uk-table-divider>tr:not(:first-child),.uk-light .uk-table-divider>:not(:first-child)>tr,.uk-light .uk-table-divider>:first-child>tr:not(:first-child),.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-primary.uk-card-body .uk-table-divider>tr:not(:first-child),.uk-card-primary.uk-card-body .uk-table-divider>:not(:first-child)>tr,.uk-card-primary.uk-card-body .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-primary>:not([class*='uk-card-media']) .uk-table-divider>tr:not(:first-child),.uk-card-primary>:not([class*='uk-card-media']) .uk-table-divider>:not(:first-child)>tr,.uk-card-primary>:not([class*='uk-card-media']) .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-secondary.uk-card-body .uk-table-divider>tr:not(:first-child),.uk-card-secondary.uk-card-body .uk-table-divider>:not(:first-child)>tr,.uk-card-secondary.uk-card-body .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-secondary>:not([class*='uk-card-media']) .uk-table-divider>tr:not(:first-child),.uk-card-secondary>:not([class*='uk-card-media']) .uk-table-divider>:not(:first-child)>tr,.uk-card-secondary>:not([class*='uk-card-media']) .uk-table-divider>:first-child>tr:not(:first-child),.uk-overlay-primary .uk-table-divider>tr:not(:first-child),.uk-overlay-primary .uk-table-divider>:not(:first-child)>tr,.uk-overlay-primary .uk-table-divider>:first-child>tr:not(:first-child),.uk-navbar-container:not(.uk-navbar-transparent) .uk-table-divider>tr:not(:first-child),.uk-navbar-container:not(.uk-navbar-transparent) .uk-table-divider>:not(:first-child)>tr,.uk-navbar-container:not(.uk-navbar-transparent) .uk-table-divider>:first-child>tr:not(:first-child),.uk-offcanvas-bar .uk-table-divider>tr:not(:first-child),.uk-offcanvas-bar .uk-table-divider>:not(:first-child)>tr,.uk-offcanvas-bar .uk-table-divider>:first-child>tr:not(:first-child),.tm-toolbar .uk-table-divider>tr:not(:first-child),.tm-toolbar .uk-table-divider>:not(:first-child)>tr,.tm-toolbar .uk-table-divider>:first-child>tr:not(:first-child){border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-table-striped>tr:nth-of-type(odd),.uk-light .uk-table-striped tbody tr:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-table-striped>tr:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-primary>:not([class*='uk-card-media']) .uk-table-striped>tr:nth-of-type(odd),.uk-card-primary>:not([class*='uk-card-media']) .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-table-striped>tr:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-secondary>:not([class*='uk-card-media']) .uk-table-striped>tr:nth-of-type(odd),.uk-card-secondary>:not([class*='uk-card-media']) .uk-table-striped tbody tr:nth-of-type(odd),.uk-overlay-primary .uk-table-striped>tr:nth-of-type(odd),.uk-overlay-primary .uk-table-striped tbody tr:nth-of-type(odd),.uk-navbar-container:not(.uk-navbar-transparent) .uk-table-striped>tr:nth-of-type(odd),.uk-navbar-container:not(.uk-navbar-transparent) .uk-table-striped tbody tr:nth-of-type(odd),.uk-offcanvas-bar .uk-table-striped>tr:nth-of-type(odd),.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(odd),.tm-toolbar .uk-table-striped>tr:nth-of-type(odd),.tm-toolbar .uk-table-striped tbody tr:nth-of-type(odd){background:rgba(255,255,255,0.1)}.uk-light .uk-table-hover>tr:hover,.uk-light .uk-table-hover tbody tr:hover,.uk-section-primary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-section-primary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-card-primary.uk-card-body .uk-table-hover>tr:hover,.uk-card-primary.uk-card-body .uk-table-hover tbody tr:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-table-hover>tr:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-table-hover tbody tr:hover,.uk-card-secondary.uk-card-body .uk-table-hover>tr:hover,.uk-card-secondary.uk-card-body .uk-table-hover tbody tr:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-table-hover>tr:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-table-hover tbody tr:hover,.uk-overlay-primary .uk-table-hover>tr:hover,.uk-overlay-primary .uk-table-hover tbody tr:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-table-hover>tr:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-table-hover tbody tr:hover,.uk-offcanvas-bar .uk-table-hover>tr:hover,.uk-offcanvas-bar .uk-table-hover tbody tr:hover,.tm-toolbar .uk-table-hover>tr:hover,.tm-toolbar .uk-table-hover tbody tr:hover{background:rgba(255,255,255,0.08)}.uk-light .uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link,.uk-overlay-primary .uk-icon-link,.uk-navbar-container:not(.uk-navbar-transparent) .uk-icon-link,.uk-offcanvas-bar .uk-icon-link,.tm-toolbar .uk-icon-link{color:#fff}.uk-light .uk-icon-link:hover,.uk-light .uk-icon-link:focus,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-card-primary.uk-card-body .uk-icon-link:hover,.uk-card-primary.uk-card-body .uk-icon-link:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:focus,.uk-card-secondary.uk-card-body .uk-icon-link:hover,.uk-card-secondary.uk-card-body .uk-icon-link:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:focus,.uk-overlay-primary .uk-icon-link:hover,.uk-overlay-primary .uk-icon-link:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-icon-link:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-icon-link:focus,.uk-offcanvas-bar .uk-icon-link:hover,.uk-offcanvas-bar .uk-icon-link:focus,.tm-toolbar .uk-icon-link:hover,.tm-toolbar .uk-icon-link:focus{color:rgba(255,255,255,0.5)}.uk-light .uk-icon-link:active,.uk-light .uk-active>.uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link:active,.uk-card-primary.uk-card-body .uk-active>.uk-icon-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-active>.uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link:active,.uk-card-secondary.uk-card-body .uk-active>.uk-icon-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-active>.uk-icon-link,.uk-overlay-primary .uk-icon-link:active,.uk-overlay-primary .uk-active>.uk-icon-link,.uk-navbar-container:not(.uk-navbar-transparent) .uk-icon-link:active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-active>.uk-icon-link,.uk-offcanvas-bar .uk-icon-link:active,.uk-offcanvas-bar .uk-active>.uk-icon-link,.tm-toolbar .uk-icon-link:active,.tm-toolbar .uk-active>.uk-icon-link{color:rgba(255,255,255,0.5)}.uk-light .uk-icon-button,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-card-primary.uk-card-body .uk-icon-button,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button,.uk-card-secondary.uk-card-body .uk-icon-button,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button,.uk-overlay-primary .uk-icon-button,.uk-navbar-container:not(.uk-navbar-transparent) .uk-icon-button,.uk-offcanvas-bar .uk-icon-button,.tm-toolbar .uk-icon-button{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.5)}.uk-light .uk-icon-button:hover,.uk-light .uk-icon-button:focus,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-card-primary.uk-card-body .uk-icon-button:hover,.uk-card-primary.uk-card-body .uk-icon-button:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:focus,.uk-card-secondary.uk-card-body .uk-icon-button:hover,.uk-card-secondary.uk-card-body .uk-icon-button:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:focus,.uk-overlay-primary .uk-icon-button:hover,.uk-overlay-primary .uk-icon-button:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-icon-button:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-icon-button:focus,.uk-offcanvas-bar .uk-icon-button:hover,.uk-offcanvas-bar .uk-icon-button:focus,.tm-toolbar .uk-icon-button:hover,.tm-toolbar .uk-icon-button:focus{background-color:rgba(242,242,242,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-icon-button:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-card-primary.uk-card-body .uk-icon-button:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:active,.uk-card-secondary.uk-card-body .uk-icon-button:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:active,.uk-overlay-primary .uk-icon-button:active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-icon-button:active,.uk-offcanvas-bar .uk-icon-button:active,.tm-toolbar .uk-icon-button:active{background-color:rgba(230,230,230,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-input,.uk-light .uk-select,.uk-light .uk-textarea,.uk-light input[type="text"]:not([class*="uk-"]),.uk-light input[type="password"]:not([class*="uk-"]),.uk-light input[type="datetime"]:not([class*="uk-"]),.uk-light input[type="datetime-local"]:not([class*="uk-"]),.uk-light input[type="date"]:not([class*="uk-"]),.uk-light input[type="month"]:not([class*="uk-"]),.uk-light input[type="time"]:not([class*="uk-"]),.uk-light input[type="week"]:not([class*="uk-"]),.uk-light input[type="number"]:not([class*="uk-"]),.uk-light input[type="email"]:not([class*="uk-"]),.uk-light input[type="url"]:not([class*="uk-"]),.uk-light input[type="search"]:not([class*="uk-"]),.uk-light input[type="tel"]:not([class*="uk-"]),.uk-light input[type="color"]:not([class*="uk-"]),.uk-light .uneditable-input:not([class*="uk-"]),.uk-light select:not([class*="uk-"]),.uk-light textarea:not([class*="uk-"]),.uk-section-primary:not(.uk-preserve-color) .uk-input,.uk-section-primary:not(.uk-preserve-color) .uk-select,.uk-section-primary:not(.uk-preserve-color) .uk-textarea,.uk-section-secondary:not(.uk-preserve-color) .uk-input,.uk-section-secondary:not(.uk-preserve-color) .uk-select,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea,.uk-tile-primary:not(.uk-preserve-color) .uk-input,.uk-tile-primary:not(.uk-preserve-color) .uk-select,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea,.uk-tile-secondary:not(.uk-preserve-color) .uk-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-select,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea,.uk-card-primary.uk-card-body .uk-input,.uk-card-primary.uk-card-body .uk-select,.uk-card-primary.uk-card-body .uk-textarea,.uk-card-primary>:not([class*='uk-card-media']) .uk-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-select,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea,.uk-card-secondary.uk-card-body .uk-input,.uk-card-secondary.uk-card-body .uk-select,.uk-card-secondary.uk-card-body .uk-textarea,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-select,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea,.uk-overlay-primary .uk-input,.uk-overlay-primary .uk-select,.uk-overlay-primary .uk-textarea,.uk-navbar-container:not(.uk-navbar-transparent) .uk-input,.uk-navbar-container:not(.uk-navbar-transparent) .uk-select,.uk-navbar-container:not(.uk-navbar-transparent) .uk-textarea,.uk-offcanvas-bar .uk-input,.uk-offcanvas-bar .uk-select,.uk-offcanvas-bar .uk-textarea,.tm-toolbar .uk-input,.tm-toolbar .uk-select,.tm-toolbar .uk-textarea{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7);background-clip:padding-box;border-color:transparent!important}.uk-light .uk-input:focus,.uk-light .uk-select:focus,.uk-light .uk-textarea:focus,.uk-light input[type="text"]:not([class*="uk-"]):focus,.uk-light input[type="password"]:not([class*="uk-"]):focus,.uk-light input[type="datetime"]:not([class*="uk-"]):focus,.uk-light input[type="datetime-local"]:not([class*="uk-"]):focus,.uk-light input[type="date"]:not([class*="uk-"]):focus,.uk-light input[type="month"]:not([class*="uk-"]):focus,.uk-light input[type="time"]:not([class*="uk-"]):focus,.uk-light input[type="week"]:not([class*="uk-"]):focus,.uk-light input[type="number"]:not([class*="uk-"]):focus,.uk-light input[type="email"]:not([class*="uk-"]):focus,.uk-light input[type="url"]:not([class*="uk-"]):focus,.uk-light input[type="search"]:not([class*="uk-"]):focus,.uk-light input[type="tel"]:not([class*="uk-"]):focus,.uk-light input[type="color"]:not([class*="uk-"]):focus,.uk-light .uneditable-input:not([class*="uk-"]):focus,.uk-light select:not([class*="uk-"]):focus,.uk-light textarea:not([class*="uk-"]):focus,.uk-section-primary:not(.uk-preserve-color) .uk-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-select:focus,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-card-primary.uk-card-body .uk-input:focus,.uk-card-primary.uk-card-body .uk-select:focus,.uk-card-primary.uk-card-body .uk-textarea:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-input:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-select:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea:focus,.uk-card-secondary.uk-card-body .uk-input:focus,.uk-card-secondary.uk-card-body .uk-select:focus,.uk-card-secondary.uk-card-body .uk-textarea:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-select:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea:focus,.uk-overlay-primary .uk-input:focus,.uk-overlay-primary .uk-select:focus,.uk-overlay-primary .uk-textarea:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-input:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-select:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-textarea:focus,.uk-offcanvas-bar .uk-input:focus,.uk-offcanvas-bar .uk-select:focus,.uk-offcanvas-bar .uk-textarea:focus,.tm-toolbar .uk-input:focus,.tm-toolbar .uk-select:focus,.tm-toolbar .uk-textarea:focus{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7);border-color:transparent!important}.uk-light .uk-input:-ms-input-placeholder,.uk-light input[type="text"]:not([class*="uk-"]):-ms-input-placeholder,.uk-light input[type="password"]:not([class*="uk-"]):-ms-input-placeholder,.uk-light input[type="datetime"]:not([class*="uk-"]):-ms-input-placeholder,.uk-light input[type="datetime-local"]:not([class*="uk-"]):-ms-input-placeholder,.uk-light input[type="date"]:not([class*="uk-"]):-ms-input-placeholder,.uk-light input[type="month"]:not([class*="uk-"]):-ms-input-placeholder,.uk-light input[type="time"]:not([class*="uk-"]):-ms-input-placeholder,.uk-light input[type="week"]:not([class*="uk-"]):-ms-input-placeholder,.uk-light input[type="number"]:not([class*="uk-"]):-ms-input-placeholder,.uk-light input[type="email"]:not([class*="uk-"]):-ms-input-placeholder,.uk-light input[type="url"]:not([class*="uk-"]):-ms-input-placeholder,.uk-light input[type="search"]:not([class*="uk-"]):-ms-input-placeholder,.uk-light input[type="tel"]:not([class*="uk-"]):-ms-input-placeholder,.uk-light input[type="color"]:not([class*="uk-"]):-ms-input-placeholder,.uk-light .uneditable-input:not([class*="uk-"]):-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-card-primary.uk-card-body .uk-input:-ms-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-input:-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-input:-ms-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input:-ms-input-placeholder,.uk-overlay-primary .uk-input:-ms-input-placeholder,.uk-navbar-container:not(.uk-navbar-transparent) .uk-input:-ms-input-placeholder,.uk-offcanvas-bar .uk-input:-ms-input-placeholder,.tm-toolbar .uk-input:-ms-input-placeholder{color:rgba(255,255,255,0.5)!important}.uk-light .uk-input::-moz-placeholder,.uk-light input[type="text"]:not([class*="uk-"])::-moz-placeholder,.uk-light input[type="password"]:not([class*="uk-"])::-moz-placeholder,.uk-light input[type="datetime"]:not([class*="uk-"])::-moz-placeholder,.uk-light input[type="datetime-local"]:not([class*="uk-"])::-moz-placeholder,.uk-light input[type="date"]:not([class*="uk-"])::-moz-placeholder,.uk-light input[type="month"]:not([class*="uk-"])::-moz-placeholder,.uk-light input[type="time"]:not([class*="uk-"])::-moz-placeholder,.uk-light input[type="week"]:not([class*="uk-"])::-moz-placeholder,.uk-light input[type="number"]:not([class*="uk-"])::-moz-placeholder,.uk-light input[type="email"]:not([class*="uk-"])::-moz-placeholder,.uk-light input[type="url"]:not([class*="uk-"])::-moz-placeholder,.uk-light input[type="search"]:not([class*="uk-"])::-moz-placeholder,.uk-light input[type="tel"]:not([class*="uk-"])::-moz-placeholder,.uk-light input[type="color"]:not([class*="uk-"])::-moz-placeholder,.uk-light .uneditable-input:not([class*="uk-"])::-moz-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input::-moz-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input::-moz-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input::-moz-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input::-moz-placeholder,.uk-card-primary.uk-card-body .uk-input::-moz-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-input::-moz-placeholder,.uk-card-secondary.uk-card-body .uk-input::-moz-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input::-moz-placeholder,.uk-overlay-primary .uk-input::-moz-placeholder,.uk-navbar-container:not(.uk-navbar-transparent) .uk-input::-moz-placeholder,.uk-offcanvas-bar .uk-input::-moz-placeholder,.tm-toolbar .uk-input::-moz-placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-input::-webkit-input-placeholder,.uk-light input[type="text"]:not([class*="uk-"])::-webkit-input-placeholder,.uk-light input[type="password"]:not([class*="uk-"])::-webkit-input-placeholder,.uk-light input[type="datetime"]:not([class*="uk-"])::-webkit-input-placeholder,.uk-light input[type="datetime-local"]:not([class*="uk-"])::-webkit-input-placeholder,.uk-light input[type="date"]:not([class*="uk-"])::-webkit-input-placeholder,.uk-light input[type="month"]:not([class*="uk-"])::-webkit-input-placeholder,.uk-light input[type="time"]:not([class*="uk-"])::-webkit-input-placeholder,.uk-light input[type="week"]:not([class*="uk-"])::-webkit-input-placeholder,.uk-light input[type="number"]:not([class*="uk-"])::-webkit-input-placeholder,.uk-light input[type="email"]:not([class*="uk-"])::-webkit-input-placeholder,.uk-light input[type="url"]:not([class*="uk-"])::-webkit-input-placeholder,.uk-light input[type="search"]:not([class*="uk-"])::-webkit-input-placeholder,.uk-light input[type="tel"]:not([class*="uk-"])::-webkit-input-placeholder,.uk-light input[type="color"]:not([class*="uk-"])::-webkit-input-placeholder,.uk-light .uneditable-input:not([class*="uk-"])::-webkit-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input::-webkit-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input::-webkit-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input::-webkit-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input::-webkit-input-placeholder,.uk-card-primary.uk-card-body .uk-input::-webkit-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-input::-webkit-input-placeholder,.uk-card-secondary.uk-card-body .uk-input::-webkit-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input::-webkit-input-placeholder,.uk-overlay-primary .uk-input::-webkit-input-placeholder,.uk-navbar-container:not(.uk-navbar-transparent) .uk-input::-webkit-input-placeholder,.uk-offcanvas-bar .uk-input::-webkit-input-placeholder,.tm-toolbar .uk-input::-webkit-input-placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-textarea:-ms-input-placeholder,.uk-light textarea:not([class*="uk-"]):-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-card-primary.uk-card-body .uk-textarea:-ms-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea:-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-textarea:-ms-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea:-ms-input-placeholder,.uk-overlay-primary .uk-textarea:-ms-input-placeholder,.uk-navbar-container:not(.uk-navbar-transparent) .uk-textarea:-ms-input-placeholder,.uk-offcanvas-bar .uk-textarea:-ms-input-placeholder,.tm-toolbar .uk-textarea:-ms-input-placeholder{color:rgba(255,255,255,0.5)!important}.uk-light .uk-textarea::-moz-placeholder,.uk-light textarea:not([class*="uk-"])::-moz-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea::-moz-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::-moz-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::-moz-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::-moz-placeholder,.uk-card-primary.uk-card-body .uk-textarea::-moz-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea::-moz-placeholder,.uk-card-secondary.uk-card-body .uk-textarea::-moz-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea::-moz-placeholder,.uk-overlay-primary .uk-textarea::-moz-placeholder,.uk-navbar-container:not(.uk-navbar-transparent) .uk-textarea::-moz-placeholder,.uk-offcanvas-bar .uk-textarea::-moz-placeholder,.tm-toolbar .uk-textarea::-moz-placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-textarea::-webkit-input-placeholder,.uk-light textarea:not([class*="uk-"])::-webkit-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea::-webkit-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::-webkit-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::-webkit-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::-webkit-input-placeholder,.uk-card-primary.uk-card-body .uk-textarea::-webkit-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea::-webkit-input-placeholder,.uk-card-secondary.uk-card-body .uk-textarea::-webkit-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea::-webkit-input-placeholder,.uk-overlay-primary .uk-textarea::-webkit-input-placeholder,.uk-navbar-container:not(.uk-navbar-transparent) .uk-textarea::-webkit-input-placeholder,.uk-offcanvas-bar .uk-textarea::-webkit-input-placeholder,.tm-toolbar .uk-textarea::-webkit-input-placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-select:not([multiple]):not([size]),.uk-light select:not([class*="uk-"]):not([multiple]):not([size]),.uk-section-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-section-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-card-primary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-primary>:not([class*='uk-card-media']) .uk-select:not([multiple]):not([size]),.uk-card-secondary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-secondary>:not([class*='uk-card-media']) .uk-select:not([multiple]):not([size]),.uk-overlay-primary .uk-select:not([multiple]):not([size]),.uk-navbar-container:not(.uk-navbar-transparent) .uk-select:not([multiple]):not([size]),.uk-offcanvas-bar .uk-select:not([multiple]):not([size]),.tm-toolbar .uk-select:not([multiple]):not([size]){background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%224%201%201%206%207%206%22%3E%3C%2Fpolygon%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%224%2013%201%208%207%208%22%3E%3C%2Fpolygon%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-radio,.uk-light .uk-checkbox,.uk-light input[type="checkbox"]:not([class*="uk-"]),.uk-light input[type="radio"]:not([class*="uk-"]),.uk-section-primary:not(.uk-preserve-color) .uk-radio,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox,.uk-section-secondary:not(.uk-preserve-color) .uk-radio,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-primary:not(.uk-preserve-color) .uk-radio,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-card-primary.uk-card-body .uk-radio,.uk-card-primary.uk-card-body .uk-checkbox,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox,.uk-card-secondary.uk-card-body .uk-radio,.uk-card-secondary.uk-card-body .uk-checkbox,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox,.uk-overlay-primary .uk-radio,.uk-overlay-primary .uk-checkbox,.uk-navbar-container:not(.uk-navbar-transparent) .uk-radio,.uk-navbar-container:not(.uk-navbar-transparent) .uk-checkbox,.uk-offcanvas-bar .uk-radio,.uk-offcanvas-bar .uk-checkbox,.tm-toolbar .uk-radio,.tm-toolbar .uk-checkbox{background-color:rgba(242,242,242,0.1);border-color:transparent}.uk-light .uk-radio:focus,.uk-light .uk-checkbox:focus,.uk-light input[type="checkbox"]:not([class*="uk-"]):focus,.uk-light input[type="radio"]:not([class*="uk-"]):focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-card-primary.uk-card-body .uk-radio:focus,.uk-card-primary.uk-card-body .uk-checkbox:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:focus,.uk-card-secondary.uk-card-body .uk-radio:focus,.uk-card-secondary.uk-card-body .uk-checkbox:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:focus,.uk-overlay-primary .uk-radio:focus,.uk-overlay-primary .uk-checkbox:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-radio:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-checkbox:focus,.uk-offcanvas-bar .uk-radio:focus,.uk-offcanvas-bar .uk-checkbox:focus,.tm-toolbar .uk-radio:focus,.tm-toolbar .uk-checkbox:focus{border-color:transparent}.uk-light .uk-radio:checked,.uk-light .uk-checkbox:checked,.uk-light .uk-checkbox:indeterminate,.uk-light input[type="checkbox"]:not([class*="uk-"]):checked,.uk-light input[type="checkbox"]:not([class*="uk-"]):indeterminate,.uk-light input[type="radio"]:not([class*="uk-"]):checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-radio:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-navbar-container:not(.uk-navbar-transparent) .uk-radio:checked,.uk-navbar-container:not(.uk-navbar-transparent) .uk-checkbox:checked,.uk-navbar-container:not(.uk-navbar-transparent) .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-radio:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:indeterminate,.tm-toolbar .uk-radio:checked,.tm-toolbar .uk-checkbox:checked,.tm-toolbar .uk-checkbox:indeterminate{background-color:#fff;border-color:transparent}.uk-light .uk-radio:checked:focus,.uk-light .uk-checkbox:checked:focus,.uk-light .uk-checkbox:indeterminate:focus,.uk-light input[type="checkbox"]:not([class*="uk-"]):checked:focus,.uk-light input[type="checkbox"]:not([class*="uk-"]):indeterminate:focus,.uk-light input[type="radio"]:not([class*="uk-"]):checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-card-primary.uk-card-body .uk-radio:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate:focus,.uk-card-secondary.uk-card-body .uk-radio:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate:focus,.uk-overlay-primary .uk-radio:checked:focus,.uk-overlay-primary .uk-checkbox:checked:focus,.uk-overlay-primary .uk-checkbox:indeterminate:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-radio:checked:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-checkbox:checked:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-checkbox:indeterminate:focus,.uk-offcanvas-bar .uk-radio:checked:focus,.uk-offcanvas-bar .uk-checkbox:checked:focus,.uk-offcanvas-bar .uk-checkbox:indeterminate:focus,.tm-toolbar .uk-radio:checked:focus,.tm-toolbar .uk-checkbox:checked:focus,.tm-toolbar .uk-checkbox:indeterminate:focus{background-color:#e6e6e6}.uk-light .uk-radio:checked,.uk-light input[type="radio"]:not([class*="uk-"]):checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-navbar-container:not(.uk-navbar-transparent) .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked,.tm-toolbar .uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23767779%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%3E%3C%2Fcircle%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-checkbox:checked,.uk-light input[type="checkbox"]:not([class*="uk-"]):checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-navbar-container:not(.uk-navbar-transparent) .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked,.tm-toolbar .uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23767779%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-checkbox:indeterminate,.uk-light input[type="checkbox"]:not([class*="uk-"]):indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-navbar-container:not(.uk-navbar-transparent) .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate,.tm-toolbar .uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23767779%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E")}.uk-light .-label,.uk-section-primary:not(.uk-preserve-color) .-label,.uk-section-secondary:not(.uk-preserve-color) .-label,.uk-tile-primary:not(.uk-preserve-color) .-label,.uk-tile-secondary:not(.uk-preserve-color) .-label,.uk-card-primary.uk-card-body .-label,.uk-card-primary>:not([class*='uk-card-media']) .-label,.uk-card-secondary.uk-card-body .-label,.uk-card-secondary>:not([class*='uk-card-media']) .-label,.uk-overlay-primary .-label,.uk-navbar-container:not(.uk-navbar-transparent) .-label,.uk-offcanvas-bar .-label,.tm-toolbar .-label{color:#fff}.uk-light .uk-button-default,.uk-light .btn,.uk-section-primary:not(.uk-preserve-color) .uk-button-default,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default,.uk-card-primary.uk-card-body .uk-button-default,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default,.uk-card-secondary.uk-card-body .uk-button-default,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default,.uk-overlay-primary .uk-button-default,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-default,.uk-offcanvas-bar .uk-button-default,.tm-toolbar .uk-button-default{background-color:#fff;color:#767779;box-shadow:none}.uk-light .uk-button-default:hover,.uk-light .uk-button-default:focus,.uk-light .btn:hover,.uk-light .btn:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:focus,.uk-card-primary.uk-card-body .uk-button-default:hover,.uk-card-primary.uk-card-body .uk-button-default:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:focus,.uk-card-secondary.uk-card-body .uk-button-default:hover,.uk-card-secondary.uk-card-body .uk-button-default:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:focus,.uk-overlay-primary .uk-button-default:hover,.uk-overlay-primary .uk-button-default:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-default:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-default:focus,.uk-offcanvas-bar .uk-button-default:hover,.uk-offcanvas-bar .uk-button-default:focus,.tm-toolbar .uk-button-default:hover,.tm-toolbar .uk-button-default:focus{background-color:#f2f2f2;color:#767779;box-shadow:none}.uk-light .uk-button-default:active,.uk-light .uk-button-default.uk-active,.uk-light .btn:active,.uk-light .btn.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-card-primary.uk-card-body .uk-button-default:active,.uk-card-primary.uk-card-body .uk-button-default.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default.uk-active,.uk-card-secondary.uk-card-body .uk-button-default:active,.uk-card-secondary.uk-card-body .uk-button-default.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default.uk-active,.uk-overlay-primary .uk-button-default:active,.uk-overlay-primary .uk-button-default.uk-active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-default:active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-default.uk-active,.uk-offcanvas-bar .uk-button-default:active,.uk-offcanvas-bar .uk-button-default.uk-active,.tm-toolbar .uk-button-default:active,.tm-toolbar .uk-button-default.uk-active{background-color:#e6e6e6;color:#767779}.uk-light .uk-button-primary,.uk-light .btn-primary,.uk-light .btn-info,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-card-primary.uk-card-body .uk-button-primary,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary,.uk-card-secondary.uk-card-body .uk-button-primary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary,.uk-overlay-primary .uk-button-primary,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-primary,.uk-offcanvas-bar .uk-button-primary,.tm-toolbar .uk-button-primary{background-color:#fff;color:#767779}.uk-light .uk-button-primary:hover,.uk-light .uk-button-primary:focus,.uk-light .btn-primary:hover,.uk-light .btn-primary:focus,.uk-light .btn-info:hover,.uk-light .btn-info:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-card-primary.uk-card-body .uk-button-primary:hover,.uk-card-primary.uk-card-body .uk-button-primary:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:focus,.uk-card-secondary.uk-card-body .uk-button-primary:hover,.uk-card-secondary.uk-card-body .uk-button-primary:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:focus,.uk-overlay-primary .uk-button-primary:hover,.uk-overlay-primary .uk-button-primary:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-primary:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-primary:focus,.uk-offcanvas-bar .uk-button-primary:hover,.uk-offcanvas-bar .uk-button-primary:focus,.tm-toolbar .uk-button-primary:hover,.tm-toolbar .uk-button-primary:focus{background-color:#f2f2f2;color:#767779}.uk-light .uk-button-primary:active,.uk-light .uk-button-primary.uk-active,.uk-light .btn-primary:active,.uk-light .btn-primary.uk-active,.uk-light .btn-info:active,.uk-light .btn-info.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-card-primary.uk-card-body .uk-button-primary:active,.uk-card-primary.uk-card-body .uk-button-primary.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary.uk-active,.uk-card-secondary.uk-card-body .uk-button-primary:active,.uk-card-secondary.uk-card-body .uk-button-primary.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary.uk-active,.uk-overlay-primary .uk-button-primary:active,.uk-overlay-primary .uk-button-primary.uk-active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-primary:active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-primary.uk-active,.uk-offcanvas-bar .uk-button-primary:active,.uk-offcanvas-bar .uk-button-primary.uk-active,.tm-toolbar .uk-button-primary:active,.tm-toolbar .uk-button-primary.uk-active{background-color:#e6e6e6;color:#767779}.uk-light .uk-button-secondary,.uk-light .btn-success,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-card-primary.uk-card-body .uk-button-secondary,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary,.uk-card-secondary.uk-card-body .uk-button-secondary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary,.uk-overlay-primary .uk-button-secondary,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-secondary,.uk-offcanvas-bar .uk-button-secondary,.tm-toolbar .uk-button-secondary{background-color:#fff;color:#767779}.uk-light .uk-button-secondary:hover,.uk-light .uk-button-secondary:focus,.uk-light .btn-success:hover,.uk-light .btn-success:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-card-primary.uk-card-body .uk-button-secondary:hover,.uk-card-primary.uk-card-body .uk-button-secondary:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:focus,.uk-card-secondary.uk-card-body .uk-button-secondary:hover,.uk-card-secondary.uk-card-body .uk-button-secondary:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:focus,.uk-overlay-primary .uk-button-secondary:hover,.uk-overlay-primary .uk-button-secondary:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-secondary:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-secondary:focus,.uk-offcanvas-bar .uk-button-secondary:hover,.uk-offcanvas-bar .uk-button-secondary:focus,.tm-toolbar .uk-button-secondary:hover,.tm-toolbar .uk-button-secondary:focus{background-color:#f2f2f2;color:#767779}.uk-light .uk-button-secondary:active,.uk-light .uk-button-secondary.uk-active,.uk-light .btn-success:active,.uk-light .btn-success.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-card-primary.uk-card-body .uk-button-secondary:active,.uk-card-primary.uk-card-body .uk-button-secondary.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary.uk-active,.uk-card-secondary.uk-card-body .uk-button-secondary:active,.uk-card-secondary.uk-card-body .uk-button-secondary.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary.uk-active,.uk-overlay-primary .uk-button-secondary:active,.uk-overlay-primary .uk-button-secondary.uk-active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-secondary:active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-secondary.uk-active,.uk-offcanvas-bar .uk-button-secondary:active,.uk-offcanvas-bar .uk-button-secondary.uk-active,.tm-toolbar .uk-button-secondary:active,.tm-toolbar .uk-button-secondary.uk-active{background-color:#e6e6e6;color:#767779}.uk-light .uk-button-text,.uk-section-primary:not(.uk-preserve-color) .uk-button-text,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text,.uk-card-primary.uk-card-body .uk-button-text,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text,.uk-card-secondary.uk-card-body .uk-button-text,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text,.uk-overlay-primary .uk-button-text,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-text,.uk-offcanvas-bar .uk-button-text,.tm-toolbar .uk-button-text{color:rgba(255,255,255,0.5)}.uk-light .uk-button-text::before,.uk-section-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-card-primary.uk-card-body .uk-button-text::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text::before,.uk-card-secondary.uk-card-body .uk-button-text::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text::before,.uk-overlay-primary .uk-button-text::before,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-text::before,.uk-offcanvas-bar .uk-button-text::before,.tm-toolbar .uk-button-text::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2223%22%20height%3D%2211%22%20viewBox%3D%220%200%2023%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.5%29%22%20points%3D%2217%201%2022%205.5%2017%2010%20%22%3E%3C%2Fpolyline%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.5%29%22%20x1%3D%220%22%20y1%3D%225.5%22%20x2%3D%2222.4%22%20y2%3D%225.5%22%3E%3C%2Fline%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-button-text:hover,.uk-light .uk-button-text:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:focus,.uk-card-primary.uk-card-body .uk-button-text:hover,.uk-card-primary.uk-card-body .uk-button-text:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:focus,.uk-card-secondary.uk-card-body .uk-button-text:hover,.uk-card-secondary.uk-card-body .uk-button-text:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:focus,.uk-overlay-primary .uk-button-text:hover,.uk-overlay-primary .uk-button-text:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-text:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-text:focus,.uk-offcanvas-bar .uk-button-text:hover,.uk-offcanvas-bar .uk-button-text:focus,.tm-toolbar .uk-button-text:hover,.tm-toolbar .uk-button-text:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-button-text:hover::before,.uk-light .uk-button-text:focus::before,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover::before,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:focus::before,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover::before,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:focus::before,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover::before,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:focus::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:focus::before,.uk-card-primary.uk-card-body .uk-button-text:hover::before,.uk-card-primary.uk-card-body .uk-button-text:focus::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:hover::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:focus::before,.uk-card-secondary.uk-card-body .uk-button-text:hover::before,.uk-card-secondary.uk-card-body .uk-button-text:focus::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:hover::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:focus::before,.uk-overlay-primary .uk-button-text:hover::before,.uk-overlay-primary .uk-button-text:focus::before,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-text:hover::before,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-text:focus::before,.uk-offcanvas-bar .uk-button-text:hover::before,.uk-offcanvas-bar .uk-button-text:focus::before,.tm-toolbar .uk-button-text:hover::before,.tm-toolbar .uk-button-text:focus::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2223%22%20height%3D%2211%22%20viewBox%3D%220%200%2023%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2217%201%2022%205.5%2017%2010%20%22%3E%3C%2Fpolyline%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20x1%3D%220%22%20y1%3D%225.5%22%20x2%3D%2222.4%22%20y2%3D%225.5%22%3E%3C%2Fline%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-button-text:disabled,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-card-primary.uk-card-body .uk-button-text:disabled,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:disabled,.uk-card-secondary.uk-card-body .uk-button-text:disabled,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:disabled,.uk-overlay-primary .uk-button-text:disabled,.uk-navbar-container:not(.uk-navbar-transparent) .uk-button-text:disabled,.uk-offcanvas-bar .uk-button-text:disabled,.tm-toolbar .uk-button-text:disabled{color:rgba(255,255,255,0.5)}.uk-light .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-grid-divider>:not(.uk-first-column)::before,.uk-overlay-primary .uk-grid-divider>:not(.uk-first-column)::before,.uk-navbar-container:not(.uk-navbar-transparent) .uk-grid-divider>:not(.uk-first-column)::before,.uk-offcanvas-bar .uk-grid-divider>:not(.uk-first-column)::before,.tm-toolbar .uk-grid-divider>:not(.uk-first-column)::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-overlay-primary .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-navbar-container:not(.uk-navbar-transparent) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-offcanvas-bar .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.tm-toolbar .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-close,.uk-section-primary:not(.uk-preserve-color) .uk-close,.uk-section-secondary:not(.uk-preserve-color) .uk-close,.uk-tile-primary:not(.uk-preserve-color) .uk-close,.uk-tile-secondary:not(.uk-preserve-color) .uk-close,.uk-card-primary.uk-card-body .uk-close,.uk-card-primary>:not([class*='uk-card-media']) .uk-close,.uk-card-secondary.uk-card-body .uk-close,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close,.uk-overlay-primary .uk-close,.uk-navbar-container:not(.uk-navbar-transparent) .uk-close,.uk-offcanvas-bar .uk-close,.tm-toolbar .uk-close{color:rgba(255,255,255,0.5)}.uk-light .uk-close:hover,.uk-light .uk-close:focus,.uk-section-primary:not(.uk-preserve-color) .uk-close:hover,.uk-section-primary:not(.uk-preserve-color) .uk-close:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-close:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-close:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:focus,.uk-card-primary.uk-card-body .uk-close:hover,.uk-card-primary.uk-card-body .uk-close:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-close:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-close:focus,.uk-card-secondary.uk-card-body .uk-close:hover,.uk-card-secondary.uk-card-body .uk-close:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close:focus,.uk-overlay-primary .uk-close:hover,.uk-overlay-primary .uk-close:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-close:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-close:focus,.uk-offcanvas-bar .uk-close:hover,.uk-offcanvas-bar .uk-close:focus,.tm-toolbar .uk-close:hover,.tm-toolbar .uk-close:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-totop,.uk-section-primary:not(.uk-preserve-color) .uk-totop,.uk-section-secondary:not(.uk-preserve-color) .uk-totop,.uk-tile-primary:not(.uk-preserve-color) .uk-totop,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop,.uk-card-primary.uk-card-body .uk-totop,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop,.uk-card-secondary.uk-card-body .uk-totop,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop,.uk-overlay-primary .uk-totop,.uk-navbar-container:not(.uk-navbar-transparent) .uk-totop,.uk-offcanvas-bar .uk-totop,.tm-toolbar .uk-totop{color:rgba(255,255,255,0.5);background-color:transparent}.uk-light .uk-totop:hover,.uk-light .uk-totop:focus,.uk-section-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-section-primary:not(.uk-preserve-color) .uk-totop:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:focus,.uk-card-primary.uk-card-body .uk-totop:hover,.uk-card-primary.uk-card-body .uk-totop:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:focus,.uk-card-secondary.uk-card-body .uk-totop:hover,.uk-card-secondary.uk-card-body .uk-totop:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:focus,.uk-overlay-primary .uk-totop:hover,.uk-overlay-primary .uk-totop:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-totop:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-totop:focus,.uk-offcanvas-bar .uk-totop:hover,.uk-offcanvas-bar .uk-totop:focus,.tm-toolbar .uk-totop:hover,.tm-toolbar .uk-totop:focus{color:rgba(255,255,255,0.7);background-color:transparent}.uk-light .uk-totop:active,.uk-section-primary:not(.uk-preserve-color) .uk-totop:active,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-card-primary.uk-card-body .uk-totop:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:active,.uk-card-secondary.uk-card-body .uk-totop:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:active,.uk-overlay-primary .uk-totop:active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-totop:active,.uk-offcanvas-bar .uk-totop:active,.tm-toolbar .uk-totop:active{color:#fff;background-color:transparent}.uk-light .uk-badge,.uk-section-primary:not(.uk-preserve-color) .uk-badge,.uk-section-secondary:not(.uk-preserve-color) .uk-badge,.uk-tile-primary:not(.uk-preserve-color) .uk-badge,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge,.uk-card-primary.uk-card-body .uk-badge,.uk-card-primary>:not([class*='uk-card-media']) .uk-badge,.uk-card-secondary.uk-card-body .uk-badge,.uk-card-secondary>:not([class*='uk-card-media']) .uk-badge,.uk-overlay-primary .uk-badge,.uk-navbar-container:not(.uk-navbar-transparent) .uk-badge,.uk-offcanvas-bar .uk-badge,.tm-toolbar .uk-badge{background-color:#fff;color:#767779}.uk-light .uk-badge:hover,.uk-light .uk-badge:focus,.uk-section-primary:not(.uk-preserve-color) .uk-badge:hover,.uk-section-primary:not(.uk-preserve-color) .uk-badge:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-badge:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-badge:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-badge:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-badge:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge:focus,.uk-card-primary.uk-card-body .uk-badge:hover,.uk-card-primary.uk-card-body .uk-badge:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-badge:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-badge:focus,.uk-card-secondary.uk-card-body .uk-badge:hover,.uk-card-secondary.uk-card-body .uk-badge:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-badge:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-badge:focus,.uk-overlay-primary .uk-badge:hover,.uk-overlay-primary .uk-badge:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-badge:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-badge:focus,.uk-offcanvas-bar .uk-badge:hover,.uk-offcanvas-bar .uk-badge:focus,.tm-toolbar .uk-badge:hover,.tm-toolbar .uk-badge:focus{color:#767779}.uk-light .uk-label,.uk-section-primary:not(.uk-preserve-color) .uk-label,.uk-section-secondary:not(.uk-preserve-color) .uk-label,.uk-tile-primary:not(.uk-preserve-color) .uk-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-label,.uk-card-primary.uk-card-body .uk-label,.uk-card-primary>:not([class*='uk-card-media']) .uk-label,.uk-card-secondary.uk-card-body .uk-label,.uk-card-secondary>:not([class*='uk-card-media']) .uk-label,.uk-overlay-primary .uk-label,.uk-navbar-container:not(.uk-navbar-transparent) .uk-label,.uk-offcanvas-bar .uk-label,.tm-toolbar .uk-label{background-color:#fff;color:#767779}.uk-light .uk-article-title,.uk-section-primary:not(.uk-preserve-color) .uk-article-title,.uk-section-secondary:not(.uk-preserve-color) .uk-article-title,.uk-tile-primary:not(.uk-preserve-color) .uk-article-title,.uk-tile-secondary:not(.uk-preserve-color) .uk-article-title,.uk-card-primary.uk-card-body .uk-article-title,.uk-card-primary>:not([class*='uk-card-media']) .uk-article-title,.uk-card-secondary.uk-card-body .uk-article-title,.uk-card-secondary>:not([class*='uk-card-media']) .uk-article-title,.uk-overlay-primary .uk-article-title,.uk-navbar-container:not(.uk-navbar-transparent) .uk-article-title,.uk-offcanvas-bar .uk-article-title,.tm-toolbar .uk-article-title{color:#fff}.uk-light .uk-article-meta,.uk-section-primary:not(.uk-preserve-color) .uk-article-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-card-primary.uk-card-body .uk-article-meta,.uk-card-primary>:not([class*='uk-card-media']) .uk-article-meta,.uk-card-secondary.uk-card-body .uk-article-meta,.uk-card-secondary>:not([class*='uk-card-media']) .uk-article-meta,.uk-overlay-primary .uk-article-meta,.uk-navbar-container:not(.uk-navbar-transparent) .uk-article-meta,.uk-offcanvas-bar .uk-article-meta,.tm-toolbar .uk-article-meta{color:rgba(255,255,255,0.5)}.uk-light .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input,.uk-card-primary.uk-card-body .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input,.uk-overlay-primary .uk-search-input,.uk-navbar-container:not(.uk-navbar-transparent) .uk-search-input,.uk-offcanvas-bar .uk-search-input,.tm-toolbar .uk-search-input{color:rgba(255,255,255,0.7)}.uk-light .uk-search-input:-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-card-primary.uk-card-body .uk-search-input:-ms-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input:-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-search-input:-ms-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input:-ms-input-placeholder,.uk-overlay-primary .uk-search-input:-ms-input-placeholder,.uk-navbar-container:not(.uk-navbar-transparent) .uk-search-input:-ms-input-placeholder,.uk-offcanvas-bar .uk-search-input:-ms-input-placeholder,.tm-toolbar .uk-search-input:-ms-input-placeholder{color:rgba(255,255,255,0.5)!important}.uk-light .uk-search-input::-moz-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input::-moz-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::-moz-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::-moz-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::-moz-placeholder,.uk-card-primary.uk-card-body .uk-search-input::-moz-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input::-moz-placeholder,.uk-card-secondary.uk-card-body .uk-search-input::-moz-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input::-moz-placeholder,.uk-overlay-primary .uk-search-input::-moz-placeholder,.uk-navbar-container:not(.uk-navbar-transparent) .uk-search-input::-moz-placeholder,.uk-offcanvas-bar .uk-search-input::-moz-placeholder,.tm-toolbar .uk-search-input::-moz-placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-search-input::-webkit-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input::-webkit-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::-webkit-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::-webkit-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::-webkit-input-placeholder,.uk-card-primary.uk-card-body .uk-search-input::-webkit-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input::-webkit-input-placeholder,.uk-card-secondary.uk-card-body .uk-search-input::-webkit-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input::-webkit-input-placeholder,.uk-overlay-primary .uk-search-input::-webkit-input-placeholder,.uk-navbar-container:not(.uk-navbar-transparent) .uk-search-input::-webkit-input-placeholder,.uk-offcanvas-bar .uk-search-input::-webkit-input-placeholder,.tm-toolbar .uk-search-input::-webkit-input-placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-search .uk-search-icon,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-card-primary.uk-card-body .uk-search .uk-search-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-search .uk-search-icon,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search .uk-search-icon,.uk-overlay-primary .uk-search .uk-search-icon,.uk-navbar-container:not(.uk-navbar-transparent) .uk-search .uk-search-icon,.uk-offcanvas-bar .uk-search .uk-search-icon,.tm-toolbar .uk-search .uk-search-icon{color:rgba(255,255,255,0.5)}.uk-light .uk-search .uk-search-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-card-primary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-search .uk-search-icon:hover,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search .uk-search-icon:hover,.uk-overlay-primary .uk-search .uk-search-icon:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-search .uk-search-icon:hover,.uk-offcanvas-bar .uk-search .uk-search-icon:hover,.tm-toolbar .uk-search .uk-search-icon:hover{color:rgba(255,255,255,0.5)}.uk-light .uk-search-default .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input,.uk-overlay-primary .uk-search-default .uk-search-input,.uk-navbar-container:not(.uk-navbar-transparent) .uk-search-default .uk-search-input,.uk-offcanvas-bar .uk-search-default .uk-search-input,.tm-toolbar .uk-search-default .uk-search-input{background-color:transparent}.uk-light .uk-search-default .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input:focus,.uk-overlay-primary .uk-search-default .uk-search-input:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-search-default .uk-search-input:focus,.uk-offcanvas-bar .uk-search-default .uk-search-input:focus,.tm-toolbar .uk-search-default .uk-search-input:focus{background-color:transparent}.uk-light .uk-search-navbar .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-navbar .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-navbar .uk-search-input,.uk-overlay-primary .uk-search-navbar .uk-search-input,.uk-navbar-container:not(.uk-navbar-transparent) .uk-search-navbar .uk-search-input,.uk-offcanvas-bar .uk-search-navbar .uk-search-input,.tm-toolbar .uk-search-navbar .uk-search-input{background-color:transparent}.uk-light .uk-search-large .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-card-primary.uk-card-body .uk-search-large .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-large .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-large .uk-search-input,.uk-overlay-primary .uk-search-large .uk-search-input,.uk-navbar-container:not(.uk-navbar-transparent) .uk-search-large .uk-search-input,.uk-offcanvas-bar .uk-search-large .uk-search-input,.tm-toolbar .uk-search-large .uk-search-input{background-color:transparent}.uk-light .uk-search-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-card-primary.uk-card-body .uk-search-toggle,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle,.uk-card-secondary.uk-card-body .uk-search-toggle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle,.uk-overlay-primary .uk-search-toggle,.uk-navbar-container:not(.uk-navbar-transparent) .uk-search-toggle,.uk-offcanvas-bar .uk-search-toggle,.tm-toolbar .uk-search-toggle{color:rgba(255,255,255,0.5)}.uk-light .uk-search-toggle:hover,.uk-light .uk-search-toggle:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-card-primary.uk-card-body .uk-search-toggle:hover,.uk-card-primary.uk-card-body .uk-search-toggle:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle:focus,.uk-card-secondary.uk-card-body .uk-search-toggle:hover,.uk-card-secondary.uk-card-body .uk-search-toggle:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle:focus,.uk-overlay-primary .uk-search-toggle:hover,.uk-overlay-primary .uk-search-toggle:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-search-toggle:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-search-toggle:focus,.uk-offcanvas-bar .uk-search-toggle:hover,.uk-offcanvas-bar .uk-search-toggle:focus,.tm-toolbar .uk-search-toggle:hover,.tm-toolbar .uk-search-toggle:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-parent-icon>.uk-parent>a::after,.uk-section-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-primary.uk-card-body .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-secondary.uk-card-body .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent>a::after,.uk-overlay-primary .uk-nav-parent-icon>.uk-parent>a::after,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-parent-icon>.uk-parent>a::after,.uk-offcanvas-bar .uk-nav-parent-icon>.uk-parent>a::after,.tm-toolbar .uk-nav-parent-icon>.uk-parent>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20stroke-width%3D%221.1%22%20points%3D%2210%201%204%207%2010%2013%22%3E%3C%2Fpolyline%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-section-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-primary.uk-card-body .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-secondary.uk-card-body .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-overlay-primary .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-offcanvas-bar .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.tm-toolbar .uk-nav-parent-icon>.uk-parent.uk-open>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20stroke-width%3D%221.1%22%20points%3D%221%204%207%2010%2013%204%22%3E%3C%2Fpolyline%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-nav-default>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-card-primary.uk-card-body .uk-nav-default>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a,.uk-card-secondary.uk-card-body .uk-nav-default>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a,.uk-overlay-primary .uk-nav-default>li>a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-default>li>a,.uk-offcanvas-bar .uk-nav-default>li>a,.tm-toolbar .uk-nav-default>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-default>li>a:hover,.uk-light .uk-nav-default>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-card-primary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-default>li>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a:focus,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a:focus,.uk-overlay-primary .uk-nav-default>li>a:hover,.uk-overlay-primary .uk-nav-default>li>a:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-default>li>a:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-default>li>a:focus,.uk-offcanvas-bar .uk-nav-default>li>a:hover,.uk-offcanvas-bar .uk-nav-default>li>a:focus,.tm-toolbar .uk-nav-default>li>a:hover,.tm-toolbar .uk-nav-default>li>a:focus{color:rgba(255,255,255,0.7);background-color:transparent}.uk-light .uk-nav-default>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li.uk-active>a,.uk-overlay-primary .uk-nav-default>li.uk-active>a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-default>li.uk-active>a,.uk-offcanvas-bar .uk-nav-default>li.uk-active>a,.tm-toolbar .uk-nav-default>li.uk-active>a{color:#fff;background-color:transparent}.uk-light .uk-nav-default .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-header,.uk-overlay-primary .uk-nav-default .uk-nav-header,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-default .uk-nav-header,.uk-offcanvas-bar .uk-nav-default .uk-nav-header,.tm-toolbar .uk-nav-default .uk-nav-header{color:#fff}.uk-light .uk-nav-default .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-divider,.uk-overlay-primary .uk-nav-default .uk-nav-divider,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-default .uk-nav-divider,.uk-offcanvas-bar .uk-nav-default .uk-nav-divider,.tm-toolbar .uk-nav-default .uk-nav-divider{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-nav-default .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a,.uk-overlay-primary .uk-nav-default .uk-nav-sub a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-default .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a,.tm-toolbar .uk-nav-default .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-default .uk-nav-sub a:hover,.uk-light .uk-nav-default .uk-nav-sub a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:focus,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:focus,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-default .uk-nav-sub a:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-default .uk-nav-sub a:focus,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:focus,.tm-toolbar .uk-nav-default .uk-nav-sub a:hover,.tm-toolbar .uk-nav-default .uk-nav-sub a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-primary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-card-primary.uk-card-body .uk-nav-primary>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a,.uk-overlay-primary .uk-nav-primary>li>a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-primary>li>a,.uk-offcanvas-bar .uk-nav-primary>li>a,.tm-toolbar .uk-nav-primary>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-primary>li>a:hover,.uk-light .uk-nav-primary>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-card-primary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-primary>li>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:focus,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:focus,.uk-overlay-primary .uk-nav-primary>li>a:hover,.uk-overlay-primary .uk-nav-primary>li>a:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-primary>li>a:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-primary>li>a:focus,.uk-offcanvas-bar .uk-nav-primary>li>a:hover,.uk-offcanvas-bar .uk-nav-primary>li>a:focus,.tm-toolbar .uk-nav-primary>li>a:hover,.tm-toolbar .uk-nav-primary>li>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-primary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li.uk-active>a,.uk-overlay-primary .uk-nav-primary>li.uk-active>a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-primary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary>li.uk-active>a,.tm-toolbar .uk-nav-primary>li.uk-active>a{color:#fff}.uk-light .uk-nav-primary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-header,.uk-overlay-primary .uk-nav-primary .uk-nav-header,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-primary .uk-nav-header,.uk-offcanvas-bar .uk-nav-primary .uk-nav-header,.tm-toolbar .uk-nav-primary .uk-nav-header{color:#fff}.uk-light .uk-nav-primary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-divider,.uk-overlay-primary .uk-nav-primary .uk-nav-divider,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-primary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-primary .uk-nav-divider,.tm-toolbar .uk-nav-primary .uk-nav-divider{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-nav-primary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-primary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a,.tm-toolbar .uk-nav-primary .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-primary .uk-nav-sub a:hover,.uk-light .uk-nav-primary .uk-nav-sub a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:focus,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:focus,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-primary .uk-nav-sub a:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-nav-primary .uk-nav-sub a:focus,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:focus,.tm-toolbar .uk-nav-primary .uk-nav-sub a:hover,.tm-toolbar .uk-nav-primary .uk-nav-sub a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-navbar-nav>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a,.uk-overlay-primary .uk-navbar-nav>li>a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a,.uk-offcanvas-bar .uk-navbar-nav>li>a,.tm-toolbar .uk-navbar-nav>li>a{color:rgba(255,255,255,0.8)}.uk-light .uk-navbar-nav>li>a::before,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a::before,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a::before,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a::before,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a::before,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a::before,.uk-overlay-primary .uk-navbar-nav>li>a::before,.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a::before,.uk-offcanvas-bar .uk-navbar-nav>li>a::before,.tm-toolbar .uk-navbar-nav>li>a::before{background-color:#fff}.uk-light .uk-navbar-nav>li:hover>a,.uk-light .uk-navbar-nav>li>a:focus,.uk-light .uk-navbar-nav>li>a.uk-open,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-card-primary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:focus,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a.uk-open,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a.uk-open,.uk-card-secondary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:focus,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a.uk-open,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a.uk-open,.uk-overlay-primary .uk-navbar-nav>li:hover>a,.uk-overlay-primary .uk-navbar-nav>li>a:focus,.uk-overlay-primary .uk-navbar-nav>li>a.uk-open,.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li:hover>a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a.uk-open,.uk-offcanvas-bar .uk-navbar-nav>li:hover>a,.uk-offcanvas-bar .uk-navbar-nav>li>a:focus,.uk-offcanvas-bar .uk-navbar-nav>li>a.uk-open,.tm-toolbar .uk-navbar-nav>li:hover>a,.tm-toolbar .uk-navbar-nav>li>a:focus,.tm-toolbar .uk-navbar-nav>li>a.uk-open{color:#fff}.uk-light .uk-navbar-nav>li>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active,.uk-overlay-primary .uk-navbar-nav>li>a:active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a:active,.uk-offcanvas-bar .uk-navbar-nav>li>a:active,.tm-toolbar .uk-navbar-nav>li>a:active{color:#fff}.uk-light .uk-navbar-nav>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a,.uk-overlay-primary .uk-navbar-nav>li.uk-active>a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li.uk-active>a,.uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a,.tm-toolbar .uk-navbar-nav>li.uk-active>a{color:#fff}.uk-light .uk-navbar-item,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-card-primary.uk-card-body .uk-navbar-item,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-item,.uk-card-secondary.uk-card-body .uk-navbar-item,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-item,.uk-overlay-primary .uk-navbar-item,.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-item,.uk-offcanvas-bar .uk-navbar-item,.tm-toolbar .uk-navbar-item{color:#fff}.uk-light .uk-navbar-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-card-primary.uk-card-body .uk-navbar-toggle,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle,.uk-card-secondary.uk-card-body .uk-navbar-toggle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle,.uk-overlay-primary .uk-navbar-toggle,.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-toggle,.uk-offcanvas-bar .uk-navbar-toggle,.tm-toolbar .uk-navbar-toggle{color:rgba(255,255,255,0.5)}.uk-light .uk-navbar-toggle:hover,.uk-light .uk-navbar-toggle:focus,.uk-light .uk-navbar-toggle.uk-open,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-card-primary.uk-card-body .uk-navbar-toggle:hover,.uk-card-primary.uk-card-body .uk-navbar-toggle:focus,.uk-card-primary.uk-card-body .uk-navbar-toggle.uk-open,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle.uk-open,.uk-card-secondary.uk-card-body .uk-navbar-toggle:hover,.uk-card-secondary.uk-card-body .uk-navbar-toggle:focus,.uk-card-secondary.uk-card-body .uk-navbar-toggle.uk-open,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle.uk-open,.uk-overlay-primary .uk-navbar-toggle:hover,.uk-overlay-primary .uk-navbar-toggle:focus,.uk-overlay-primary .uk-navbar-toggle.uk-open,.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-toggle:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-toggle:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-toggle.uk-open,.uk-offcanvas-bar .uk-navbar-toggle:hover,.uk-offcanvas-bar .uk-navbar-toggle:focus,.uk-offcanvas-bar .uk-navbar-toggle.uk-open,.tm-toolbar .uk-navbar-toggle:hover,.tm-toolbar .uk-navbar-toggle:focus,.tm-toolbar .uk-navbar-toggle.uk-open{color:rgba(255,255,255,0.7)}.uk-light .uk-subnav>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav>*>:first-child,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav>*>:first-child,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>:first-child,.uk-overlay-primary .uk-subnav>*>:first-child,.uk-navbar-container:not(.uk-navbar-transparent) .uk-subnav>*>:first-child,.uk-offcanvas-bar .uk-subnav>*>:first-child,.tm-toolbar .uk-subnav>*>:first-child{color:rgba(255,255,255,0.5)}.uk-light .uk-subnav>*>a:hover,.uk-light .uk-subnav>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-card-primary.uk-card-body .uk-subnav>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>a:focus,.uk-card-secondary.uk-card-body .uk-subnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>a:focus,.uk-overlay-primary .uk-subnav>*>a:hover,.uk-overlay-primary .uk-subnav>*>a:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-subnav>*>a:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-subnav>*>a:focus,.uk-offcanvas-bar .uk-subnav>*>a:hover,.uk-offcanvas-bar .uk-subnav>*>a:focus,.tm-toolbar .uk-subnav>*>a:hover,.tm-toolbar .uk-subnav>*>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-subnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>.uk-active>a,.uk-overlay-primary .uk-subnav>.uk-active>a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-subnav>.uk-active>a,.uk-offcanvas-bar .uk-subnav>.uk-active>a,.tm-toolbar .uk-subnav>.uk-active>a{color:#fff}.uk-light .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-navbar-container:not(.uk-navbar-transparent) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.tm-toolbar .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-subnav-pill>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>:first-child,.uk-overlay-primary .uk-subnav-pill>*>:first-child,.uk-navbar-container:not(.uk-navbar-transparent) .uk-subnav-pill>*>:first-child,.uk-offcanvas-bar .uk-subnav-pill>*>:first-child,.tm-toolbar .uk-subnav-pill>*>:first-child{background-color:transparent;color:rgba(255,255,255,0.5)}.uk-light .uk-subnav-pill>*>a:hover,.uk-light .uk-subnav-pill>*>a:focus,.uk-light .nav-pills>li>a:hover,.uk-light .nav-pills>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:focus,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:focus,.uk-overlay-primary .uk-subnav-pill>*>a:hover,.uk-overlay-primary .uk-subnav-pill>*>a:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-subnav-pill>*>a:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-subnav-pill>*>a:focus,.uk-offcanvas-bar .uk-subnav-pill>*>a:hover,.uk-offcanvas-bar .uk-subnav-pill>*>a:focus,.tm-toolbar .uk-subnav-pill>*>a:hover,.tm-toolbar .uk-subnav-pill>*>a:focus{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-subnav-pill>*>a:active,.uk-light .nav-pills>li>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:active,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:active,.uk-overlay-primary .uk-subnav-pill>*>a:active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-subnav-pill>*>a:active,.uk-offcanvas-bar .uk-subnav-pill>*>a:active,.tm-toolbar .uk-subnav-pill>*>a:active{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-subnav-pill>.uk-active>a,.uk-light .nav-pills>.active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>.uk-active>a,.uk-overlay-primary .uk-subnav-pill>.uk-active>a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-subnav-pill>.uk-active>a,.uk-offcanvas-bar .uk-subnav-pill>.uk-active>a,.tm-toolbar .uk-subnav-pill>.uk-active>a{background-color:#fff;color:#767779}.uk-light .uk-subnav>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>.uk-disabled>a,.uk-overlay-primary .uk-subnav>.uk-disabled>a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-subnav>.uk-disabled>a,.uk-offcanvas-bar .uk-subnav>.uk-disabled>a,.tm-toolbar .uk-subnav>.uk-disabled>a{color:rgba(255,255,255,0.5)}.uk-light .uk-breadcrumb>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-card-primary.uk-card-body .uk-breadcrumb>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>*,.uk-overlay-primary .uk-breadcrumb>*>*,.uk-navbar-container:not(.uk-navbar-transparent) .uk-breadcrumb>*>*,.uk-offcanvas-bar .uk-breadcrumb>*>*,.tm-toolbar .uk-breadcrumb>*>*{color:rgba(255,255,255,0.5)}.uk-light .uk-breadcrumb>*>:hover,.uk-light .uk-breadcrumb>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-card-primary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-primary.uk-card-body .uk-breadcrumb>*>:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:focus,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:focus,.uk-overlay-primary .uk-breadcrumb>*>:hover,.uk-overlay-primary .uk-breadcrumb>*>:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-breadcrumb>*>:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-breadcrumb>*>:focus,.uk-offcanvas-bar .uk-breadcrumb>*>:hover,.uk-offcanvas-bar .uk-breadcrumb>*>:focus,.tm-toolbar .uk-breadcrumb>*>:hover,.tm-toolbar .uk-breadcrumb>*>:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-breadcrumb>:last-child>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-card-primary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>:last-child>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>:last-child>*,.uk-overlay-primary .uk-breadcrumb>:last-child>*,.uk-navbar-container:not(.uk-navbar-transparent) .uk-breadcrumb>:last-child>*,.uk-offcanvas-bar .uk-breadcrumb>:last-child>*,.tm-toolbar .uk-breadcrumb>:last-child>*{color:rgba(255,255,255,0.7)}.uk-light .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-navbar-container:not(.uk-navbar-transparent) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.tm-toolbar .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{color:rgba(255,255,255,0.5)}.uk-light .uk-pagination>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-card-primary.uk-card-body .uk-pagination>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>*,.uk-card-secondary.uk-card-body .uk-pagination>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>*,.uk-overlay-primary .uk-pagination>*>*,.uk-navbar-container:not(.uk-navbar-transparent) .uk-pagination>*>*,.uk-offcanvas-bar .uk-pagination>*>*,.tm-toolbar .uk-pagination>*>*{color:rgba(255,255,255,0.5);background-color:transparent}.uk-light .uk-pagination>*>:hover,.uk-light .uk-pagination>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-card-primary.uk-card-body .uk-pagination>*>:hover,.uk-card-primary.uk-card-body .uk-pagination>*>:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>:focus,.uk-card-secondary.uk-card-body .uk-pagination>*>:hover,.uk-card-secondary.uk-card-body .uk-pagination>*>:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>:focus,.uk-overlay-primary .uk-pagination>*>:hover,.uk-overlay-primary .uk-pagination>*>:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-pagination>*>:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-pagination>*>:focus,.uk-offcanvas-bar .uk-pagination>*>:hover,.uk-offcanvas-bar .uk-pagination>*>:focus,.tm-toolbar .uk-pagination>*>:hover,.tm-toolbar .uk-pagination>*>:focus{color:rgba(255,255,255,0.7);background-color:transparent}.uk-light .uk-pagination>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>.uk-active>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>.uk-active>*,.uk-overlay-primary .uk-pagination>.uk-active>*,.uk-navbar-container:not(.uk-navbar-transparent) .uk-pagination>.uk-active>*,.uk-offcanvas-bar .uk-pagination>.uk-active>*,.tm-toolbar .uk-pagination>.uk-active>*{color:rgba(255,255,255,0.7);background-color:transparent}.uk-light .uk-pagination>.uk-disabled>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>.uk-disabled>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>.uk-disabled>*,.uk-overlay-primary .uk-pagination>.uk-disabled>*,.uk-navbar-container:not(.uk-navbar-transparent) .uk-pagination>.uk-disabled>*,.uk-offcanvas-bar .uk-pagination>.uk-disabled>*,.tm-toolbar .uk-pagination>.uk-disabled>*{color:rgba(255,255,255,0.5);background-color:transparent}.uk-light .uk-tab>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-card-primary.uk-card-body .uk-tab>*>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a,.uk-card-secondary.uk-card-body .uk-tab>*>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a,.uk-overlay-primary .uk-tab>*>a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-tab>*>a,.uk-offcanvas-bar .uk-tab>*>a,.tm-toolbar .uk-tab>*>a{color:rgba(255,255,255,0.5)}.uk-light .uk-tab>*>a:hover,.uk-light .uk-tab>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-card-primary.uk-card-body .uk-tab>*>a:hover,.uk-card-primary.uk-card-body .uk-tab>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a:focus,.uk-card-secondary.uk-card-body .uk-tab>*>a:hover,.uk-card-secondary.uk-card-body .uk-tab>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a:focus,.uk-overlay-primary .uk-tab>*>a:hover,.uk-overlay-primary .uk-tab>*>a:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-tab>*>a:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-tab>*>a:focus,.uk-offcanvas-bar .uk-tab>*>a:hover,.uk-offcanvas-bar .uk-tab>*>a:focus,.tm-toolbar .uk-tab>*>a:hover,.tm-toolbar .uk-tab>*>a:focus{color:rgba(255,255,255,0.7);border-color:transparent}.uk-light .uk-tab>.uk-active>a,.uk-light .nav-tabs>.active>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-card-primary.uk-card-body .uk-tab>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>.uk-active>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>.uk-active>a,.uk-overlay-primary .uk-tab>.uk-active>a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-tab>.uk-active>a,.uk-offcanvas-bar .uk-tab>.uk-active>a,.tm-toolbar .uk-tab>.uk-active>a{color:#fff;border-color:#fff}.uk-light .uk-tab>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>.uk-disabled>a,.uk-overlay-primary .uk-tab>.uk-disabled>a,.uk-navbar-container:not(.uk-navbar-transparent) .uk-tab>.uk-disabled>a,.uk-offcanvas-bar .uk-tab>.uk-disabled>a,.tm-toolbar .uk-tab>.uk-disabled>a{color:rgba(255,255,255,0.5)}.uk-light .uk-slidenav,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-card-primary.uk-card-body .uk-slidenav,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav,.uk-card-secondary.uk-card-body .uk-slidenav,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav,.uk-overlay-primary .uk-slidenav,.uk-navbar-container:not(.uk-navbar-transparent) .uk-slidenav,.uk-offcanvas-bar .uk-slidenav,.tm-toolbar .uk-slidenav{color:rgba(255,255,255,0.3);background-color:transparent}.uk-light .uk-slidenav:hover,.uk-light .uk-slidenav:focus,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-card-primary.uk-card-body .uk-slidenav:hover,.uk-card-primary.uk-card-body .uk-slidenav:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:focus,.uk-card-secondary.uk-card-body .uk-slidenav:hover,.uk-card-secondary.uk-card-body .uk-slidenav:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:focus,.uk-overlay-primary .uk-slidenav:hover,.uk-overlay-primary .uk-slidenav:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-slidenav:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-slidenav:focus,.uk-offcanvas-bar .uk-slidenav:hover,.uk-offcanvas-bar .uk-slidenav:focus,.tm-toolbar .uk-slidenav:hover,.tm-toolbar .uk-slidenav:focus{color:rgba(255,255,255,0.5);background-color:transparent}.uk-light .uk-slidenav:active,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-card-primary.uk-card-body .uk-slidenav:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:active,.uk-card-secondary.uk-card-body .uk-slidenav:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:active,.uk-overlay-primary .uk-slidenav:active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-slidenav:active,.uk-offcanvas-bar .uk-slidenav:active,.tm-toolbar .uk-slidenav:active{color:rgba(255,255,255,0.6);background-color:transparent}.uk-light .uk-dotnav>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-card-primary.uk-card-body .uk-dotnav>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>*,.uk-card-secondary.uk-card-body .uk-dotnav>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>*,.uk-overlay-primary .uk-dotnav>*>*,.uk-navbar-container:not(.uk-navbar-transparent) .uk-dotnav>*>*,.uk-offcanvas-bar .uk-dotnav>*>*,.tm-toolbar .uk-dotnav>*>*{background-color:rgba(255,255,255,0.1)}.uk-light .uk-dotnav>*>:hover,.uk-light .uk-dotnav>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-card-primary.uk-card-body .uk-dotnav>*>:hover,.uk-card-primary.uk-card-body .uk-dotnav>*>:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:focus,.uk-card-secondary.uk-card-body .uk-dotnav>*>:hover,.uk-card-secondary.uk-card-body .uk-dotnav>*>:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:focus,.uk-overlay-primary .uk-dotnav>*>:hover,.uk-overlay-primary .uk-dotnav>*>:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-dotnav>*>:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-dotnav>*>:focus,.uk-offcanvas-bar .uk-dotnav>*>:hover,.uk-offcanvas-bar .uk-dotnav>*>:focus,.tm-toolbar .uk-dotnav>*>:hover,.tm-toolbar .uk-dotnav>*>:focus{background-color:rgba(255,255,255,0.4)}.uk-light .uk-dotnav>*>:active,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-card-primary.uk-card-body .uk-dotnav>*>:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:active,.uk-card-secondary.uk-card-body .uk-dotnav>*>:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:active,.uk-overlay-primary .uk-dotnav>*>:active,.uk-navbar-container:not(.uk-navbar-transparent) .uk-dotnav>*>:active,.uk-offcanvas-bar .uk-dotnav>*>:active,.tm-toolbar .uk-dotnav>*>:active{background-color:rgba(255,255,255,0.6)}.uk-light .uk-dotnav>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-card-primary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>.uk-active>*,.uk-card-secondary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>.uk-active>*,.uk-overlay-primary .uk-dotnav>.uk-active>*,.uk-navbar-container:not(.uk-navbar-transparent) .uk-dotnav>.uk-active>*,.uk-offcanvas-bar .uk-dotnav>.uk-active>*,.tm-toolbar .uk-dotnav>.uk-active>*{background-color:rgba(255,255,255,0.6)}.uk-light .uk-accordion-title,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title,.uk-card-primary.uk-card-body .uk-accordion-title,.uk-card-primary>:not([class*='uk-card-media']) .uk-accordion-title,.uk-card-secondary.uk-card-body .uk-accordion-title,.uk-card-secondary>:not([class*='uk-card-media']) .uk-accordion-title,.uk-overlay-primary .uk-accordion-title,.uk-navbar-container:not(.uk-navbar-transparent) .uk-accordion-title,.uk-offcanvas-bar .uk-accordion-title,.tm-toolbar .uk-accordion-title{background-color:transparent}.uk-light .uk-iconnav>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>*,.uk-card-primary.uk-card-body .uk-iconnav>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>*,.uk-card-secondary.uk-card-body .uk-iconnav>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>*,.uk-overlay-primary .uk-iconnav>*>*,.uk-navbar-container:not(.uk-navbar-transparent) .uk-iconnav>*>*,.uk-offcanvas-bar .uk-iconnav>*>*,.tm-toolbar .uk-iconnav>*>*{color:rgba(255,255,255,0.5)}.uk-light .uk-iconnav>*>:hover,.uk-light .uk-iconnav>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>:focus,.uk-card-primary.uk-card-body .uk-iconnav>*>:hover,.uk-card-primary.uk-card-body .uk-iconnav>*>:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>:focus,.uk-card-secondary.uk-card-body .uk-iconnav>*>:hover,.uk-card-secondary.uk-card-body .uk-iconnav>*>:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>:focus,.uk-overlay-primary .uk-iconnav>*>:hover,.uk-overlay-primary .uk-iconnav>*>:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-iconnav>*>:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-iconnav>*>:focus,.uk-offcanvas-bar .uk-iconnav>*>:hover,.uk-offcanvas-bar .uk-iconnav>*>:focus,.tm-toolbar .uk-iconnav>*>:hover,.tm-toolbar .uk-iconnav>*>:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-iconnav>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>*,.uk-card-primary.uk-card-body .uk-iconnav>.uk-active>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>.uk-active>*,.uk-card-secondary.uk-card-body .uk-iconnav>.uk-active>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>.uk-active>*,.uk-overlay-primary .uk-iconnav>.uk-active>*,.uk-navbar-container:not(.uk-navbar-transparent) .uk-iconnav>.uk-active>*,.uk-offcanvas-bar .uk-iconnav>.uk-active>*,.tm-toolbar .uk-iconnav>.uk-active>*{color:rgba(255,255,255,0.7)}.uk-light .uk-countdown-number,.uk-light .uk-countdown-separator,.uk-section-primary:not(.uk-preserve-color) .uk-countdown-number,.uk-section-primary:not(.uk-preserve-color) .uk-countdown-separator,.uk-section-secondary:not(.uk-preserve-color) .uk-countdown-number,.uk-section-secondary:not(.uk-preserve-color) .uk-countdown-separator,.uk-tile-primary:not(.uk-preserve-color) .uk-countdown-number,.uk-tile-primary:not(.uk-preserve-color) .uk-countdown-separator,.uk-tile-secondary:not(.uk-preserve-color) .uk-countdown-number,.uk-tile-secondary:not(.uk-preserve-color) .uk-countdown-separator,.uk-card-primary.uk-card-body .uk-countdown-number,.uk-card-primary.uk-card-body .uk-countdown-separator,.uk-card-primary>:not([class*='uk-card-media']) .uk-countdown-number,.uk-card-primary>:not([class*='uk-card-media']) .uk-countdown-separator,.uk-card-secondary.uk-card-body .uk-countdown-number,.uk-card-secondary.uk-card-body .uk-countdown-separator,.uk-card-secondary>:not([class*='uk-card-media']) .uk-countdown-number,.uk-card-secondary>:not([class*='uk-card-media']) .uk-countdown-separator,.uk-overlay-primary .uk-countdown-number,.uk-overlay-primary .uk-countdown-separator,.uk-navbar-container:not(.uk-navbar-transparent) .uk-countdown-number,.uk-navbar-container:not(.uk-navbar-transparent) .uk-countdown-separator,.uk-offcanvas-bar .uk-countdown-number,.uk-offcanvas-bar .uk-countdown-separator,.tm-toolbar .uk-countdown-number,.tm-toolbar .uk-countdown-separator{color:#fff}.uk-light .uk-countdown-label,.uk-section-primary:not(.uk-preserve-color) .uk-countdown-label,.uk-section-secondary:not(.uk-preserve-color) .uk-countdown-label,.uk-tile-primary:not(.uk-preserve-color) .uk-countdown-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-countdown-label,.uk-card-primary.uk-card-body .uk-countdown-label,.uk-card-primary>:not([class*='uk-card-media']) .uk-countdown-label,.uk-card-secondary.uk-card-body .uk-countdown-label,.uk-card-secondary>:not([class*='uk-card-media']) .uk-countdown-label,.uk-overlay-primary .uk-countdown-label,.uk-navbar-container:not(.uk-navbar-transparent) .uk-countdown-label,.uk-offcanvas-bar .uk-countdown-label,.tm-toolbar .uk-countdown-label{color:#fff}.uk-light .uk-text-lead,.uk-section-primary:not(.uk-preserve-color) .uk-text-lead,.uk-section-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-primary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-card-primary.uk-card-body .uk-text-lead,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-lead,.uk-card-secondary.uk-card-body .uk-text-lead,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-lead,.uk-overlay-primary .uk-text-lead,.uk-navbar-container:not(.uk-navbar-transparent) .uk-text-lead,.uk-offcanvas-bar .uk-text-lead,.tm-toolbar .uk-text-lead{color:rgba(255,255,255,0.7)}.uk-light .uk-text-meta,.uk-section-primary:not(.uk-preserve-color) .uk-text-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-card-primary.uk-card-body .uk-text-meta,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-meta,.uk-card-secondary.uk-card-body .uk-text-meta,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-meta,.uk-overlay-primary .uk-text-meta,.uk-navbar-container:not(.uk-navbar-transparent) .uk-text-meta,.uk-offcanvas-bar .uk-text-meta,.tm-toolbar .uk-text-meta{color:rgba(255,255,255,0.5)}.uk-light .uk-text-muted,.uk-section-primary:not(.uk-preserve-color) .uk-text-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-card-primary.uk-card-body .uk-text-muted,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-muted,.uk-card-secondary.uk-card-body .uk-text-muted,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-muted,.uk-overlay-primary .uk-text-muted,.uk-navbar-container:not(.uk-navbar-transparent) .uk-text-muted,.uk-offcanvas-bar .uk-text-muted,.tm-toolbar .uk-text-muted{color:rgba(255,255,255,0.5)!important}.uk-light .uk-text-primary,.uk-section-primary:not(.uk-preserve-color) .uk-text-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-card-primary.uk-card-body .uk-text-primary,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-primary,.uk-card-secondary.uk-card-body .uk-text-primary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-primary,.uk-overlay-primary .uk-text-primary,.uk-navbar-container:not(.uk-navbar-transparent) .uk-text-primary,.uk-offcanvas-bar .uk-text-primary,.tm-toolbar .uk-text-primary{color:rgba(255,255,255,0.7)!important}.uk-light .uk-column-divider,.uk-section-primary:not(.uk-preserve-color) .uk-column-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-card-primary.uk-card-body .uk-column-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-column-divider,.uk-card-secondary.uk-card-body .uk-column-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-column-divider,.uk-overlay-primary .uk-column-divider,.uk-navbar-container:not(.uk-navbar-transparent) .uk-column-divider,.uk-offcanvas-bar .uk-column-divider,.tm-toolbar .uk-column-divider{-webkit-column-rule-color:rgba(255,255,255,0.2);-moz-column-rule-color:rgba(255,255,255,0.2);column-rule-color:rgba(255,255,255,0.2)}.uk-light .uk-dropcap::first-letter ,.uk-light .uk-dropcap p:first-of-type::first-letter ,.uk-section-primary:not(.uk-preserve-color) .uk-dropcap::first-letter ,.uk-section-primary:not(.uk-preserve-color) .uk-dropcap p:first-of-type::first-letter ,.uk-section-secondary:not(.uk-preserve-color) .uk-dropcap::first-letter ,.uk-section-secondary:not(.uk-preserve-color) .uk-dropcap p:first-of-type::first-letter ,.uk-tile-primary:not(.uk-preserve-color) .uk-dropcap::first-letter ,.uk-tile-primary:not(.uk-preserve-color) .uk-dropcap p:first-of-type::first-letter ,.uk-tile-secondary:not(.uk-preserve-color) .uk-dropcap::first-letter ,.uk-tile-secondary:not(.uk-preserve-color) .uk-dropcap p:first-of-type::first-letter ,.uk-card-primary.uk-card-body .uk-dropcap::first-letter ,.uk-card-primary.uk-card-body .uk-dropcap p:first-of-type::first-letter ,.uk-card-primary>:not([class*='uk-card-media']) .uk-dropcap::first-letter ,.uk-card-primary>:not([class*='uk-card-media']) .uk-dropcap p:first-of-type::first-letter ,.uk-card-secondary.uk-card-body .uk-dropcap::first-letter ,.uk-card-secondary.uk-card-body .uk-dropcap p:first-of-type::first-letter ,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dropcap::first-letter ,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dropcap p:first-of-type::first-letter ,.uk-overlay-primary .uk-dropcap::first-letter ,.uk-overlay-primary .uk-dropcap p:first-of-type::first-letter ,.uk-navbar-container:not(.uk-navbar-transparent) .uk-dropcap::first-letter ,.uk-navbar-container:not(.uk-navbar-transparent) .uk-dropcap p:first-of-type::first-letter ,.uk-offcanvas-bar .uk-dropcap::first-letter ,.uk-offcanvas-bar .uk-dropcap p:first-of-type::first-letter ,.tm-toolbar .uk-dropcap::first-letter ,.tm-toolbar .uk-dropcap p:first-of-type::first-letter {color:rgba(255,255,255,0.7)}.uk-light .uk-leader-fill,.uk-section-primary:not(.uk-preserve-color) .uk-leader-fill,.uk-section-secondary:not(.uk-preserve-color) .uk-leader-fill,.uk-tile-primary:not(.uk-preserve-color) .uk-leader-fill,.uk-tile-secondary:not(.uk-preserve-color) .uk-leader-fill,.uk-card-primary.uk-card-body .uk-leader-fill,.uk-card-primary>:not([class*='uk-card-media']) .uk-leader-fill,.uk-card-secondary.uk-card-body .uk-leader-fill,.uk-card-secondary>:not([class*='uk-card-media']) .uk-leader-fill,.uk-overlay-primary .uk-leader-fill,.uk-navbar-container:not(.uk-navbar-transparent) .uk-leader-fill,.uk-offcanvas-bar .uk-leader-fill,.tm-toolbar .uk-leader-fill{color:rgba(255,255,255,0.7)}.uk-light .uk-logo,.uk-section-primary:not(.uk-preserve-color) .uk-logo,.uk-section-secondary:not(.uk-preserve-color) .uk-logo,.uk-tile-primary:not(.uk-preserve-color) .uk-logo,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo,.uk-card-primary.uk-card-body .uk-logo,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo,.uk-card-secondary.uk-card-body .uk-logo,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo,.uk-overlay-primary .uk-logo,.uk-navbar-container:not(.uk-navbar-transparent) .uk-logo,.uk-offcanvas-bar .uk-logo,.tm-toolbar .uk-logo{color:rgba(255,255,255,0.7)}.uk-light .uk-logo:hover,.uk-light .uk-logo:focus,.uk-section-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-section-primary:not(.uk-preserve-color) .uk-logo:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:focus,.uk-card-primary.uk-card-body .uk-logo:hover,.uk-card-primary.uk-card-body .uk-logo:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo:focus,.uk-card-secondary.uk-card-body .uk-logo:hover,.uk-card-secondary.uk-card-body .uk-logo:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo:focus,.uk-overlay-primary .uk-logo:hover,.uk-overlay-primary .uk-logo:focus,.uk-navbar-container:not(.uk-navbar-transparent) .uk-logo:hover,.uk-navbar-container:not(.uk-navbar-transparent) .uk-logo:focus,.uk-offcanvas-bar .uk-logo:hover,.uk-offcanvas-bar .uk-logo:focus,.tm-toolbar .uk-logo:hover,.tm-toolbar .uk-logo:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-section-primary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-section-secondary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-tile-primary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary.uk-card-body .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary>:not([class*='uk-card-media']) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary.uk-card-body .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-overlay-primary .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-navbar-container:not(.uk-navbar-transparent) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-offcanvas-bar .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.tm-toolbar .uk-logo>:not(.uk-logo-inverse):not(:only-of-type){display:none}.uk-light .uk-logo-inverse,.uk-section-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-section-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-card-primary.uk-card-body .uk-logo-inverse,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo-inverse,.uk-card-secondary.uk-card-body .uk-logo-inverse,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo-inverse,.uk-overlay-primary .uk-logo-inverse,.uk-navbar-container:not(.uk-navbar-transparent) .uk-logo-inverse,.uk-offcanvas-bar .uk-logo-inverse,.tm-toolbar .uk-logo-inverse{display:inline}.uk-light .uk-card-badge,.uk-section-primary:not(.uk-preserve-color) .uk-card-badge,.uk-section-secondary:not(.uk-preserve-color) .uk-card-badge,.uk-tile-primary:not(.uk-preserve-color) .uk-card-badge,.uk-tile-secondary:not(.uk-preserve-color) .uk-card-badge,.uk-card-primary.uk-card-body .uk-card-badge,.uk-card-primary>:not([class*='uk-card-media']) .uk-card-badge,.uk-card-secondary.uk-card-body .uk-card-badge,.uk-card-secondary>:not([class*='uk-card-media']) .uk-card-badge,.uk-overlay-primary .uk-card-badge,.uk-navbar-container:not(.uk-navbar-transparent) .uk-card-badge,.uk-offcanvas-bar .uk-card-badge,.tm-toolbar .uk-card-badge{color:rgba(255,255,255,0.7)}.uk-light .uk-accordion-title::after,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-card-primary.uk-card-body .uk-accordion-title::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-accordion-title::after,.uk-card-secondary.uk-card-body .uk-accordion-title::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-accordion-title::after,.uk-overlay-primary .uk-accordion-title::after,.uk-navbar-container:not(.uk-navbar-transparent) .uk-accordion-title::after,.uk-offcanvas-bar .uk-accordion-title::after,.tm-toolbar .uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%3E%3C%2Frect%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-open>.uk-accordion-title::after,.uk-section-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-section-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-tile-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-card-primary.uk-card-body .uk-open>.uk-accordion-title::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-open>.uk-accordion-title::after,.uk-card-secondary.uk-card-body .uk-open>.uk-accordion-title::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-open>.uk-accordion-title::after,.uk-overlay-primary .uk-open>.uk-accordion-title::after,.uk-navbar-container:not(.uk-navbar-transparent) .uk-open>.uk-accordion-title::after,.uk-offcanvas-bar .uk-open>.uk-accordion-title::after,.tm-toolbar .uk-open>.uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E")}@media print{*,*::before,*::after{background:transparent!important;color:black!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}html{overflow-y:scroll}@media(min-width:1200px){.tm-page{background:#f2f2f2 50% 50% / cover no-repeat fixed}.tm-page>*{position:relative;max-width:1200px;background:#fff}.tm-page-padding{padding-top:70px;padding-bottom:70px}}.tm-toolbar{padding-top:10px;padding-bottom:10px;background:#1b2831;font-size:13px}.tm-headerbar-top{padding-top:40px;padding-bottom:40px;background:#00a0de}.tm-headerbar-bottom{padding-top:40px;padding-bottom:40px;background:#00a0de}.tm-headerbar-stacked{margin-top:40px}.tm-header-transparent{position:absolute;z-index:980;width:100%}.tm-header-transparent .tm-headerbar-top,.tm-header-transparent .tm-headerbar-bottom{background:transparent}.tm-header-transparent .tm-headerbar-top{border-bottom-color:transparent}@media(min-width:640px){.tm-sidebar{min-width:200px}}.uk-dropdown-navbar.uk-dropdown-stack{min-width:0!important;max-width:none!important}.tm-leading-article .uk-article:last-child{padding-bottom:20px}.tm-error-icon{font-size:250px}.tm-error-headline{font-size:100px}.tm-offline{width:300px}.uk-card-primary.uk-card-body .uk-list-divider>li:nth-child(n+2),.uk-card-primary.uk-card-body .tm-child-list-divider>ul>li:nth-child(n+2){border-top-color:rgba(255,255,255,0.2)}.uk-card-primary .uk-card-body .uk-list-divider>li:nth-child(n+2),.uk-card-primary .uk-card-body .tm-child-list-divider>ul>li:nth-child(n+2){border-top-color:rgba(255,255,255,0.2)}.uk-card-secondary.uk-card-body .uk-list-divider>li:nth-child(n+2),.uk-card-secondary.uk-card-body .tm-child-list-divider>ul>li:nth-child(n+2){border-top-color:rgba(255,255,255,0.2)}.uk-card-secondary .uk-card-body .uk-list-divider>li:nth-child(n+2),.uk-card-secondary .uk-card-body .tm-child-list-divider>ul>li:nth-child(n+2){border-top-color:rgba(255,255,255,0.2)}.uk-section-primary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-section-primary:not(.uk-preserve-color) .tm-child-list-divider>ul>li:nth-child(n+2){border-top-color:rgba(255,255,255,0.2)}.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-section-secondary:not(.uk-preserve-color) .tm-child-list-divider>ul>li:nth-child(n+2){border-top-color:rgba(255,255,255,0.2)}.hljs{padding:0;background:transparent;overflow:visible} \ No newline at end of file diff --git a/css/theme.scss b/css/theme.scss deleted file mode 100644 index 1cd5eff..0000000 --- a/css/theme.scss +++ /dev/null @@ -1,46 +0,0 @@ -/* config variables */ -@import "partials/config"; - -/* modules */ -@import "modules/mixins"; -@import "modules/elements"; - -/* snippets */ -@import "partials/snippets/custom_animations"; - -/* vendor */ -@import "../bootstrap/bootstrap.min.css"; -@import "bootstrap/bootstrap-overrides"; - -/* layout */ -@import "partials/layout"; - -/* pages */ -@import "partials/pages/index"; -@import "partials/pages/users"; -@import "partials/pages/form"; -@import "partials/pages/form_product"; -@import "partials/pages/invoice"; -@import "partials/pages/calendar"; -@import "partials/pages/sidebar"; -@import "partials/pages/datatables"; -@import "partials/pages/projects"; -@import "partials/pages/reports"; -@import "partials/pages/reports_alt"; -@import "partials/pages/pricing"; -@import "partials/pages/pricing_alt"; -@import "partials/pages/billing_form"; -@import "partials/pages/docs"; -@import "partials/pages/user_profile"; -@import "partials/pages/latest_activity"; -@import "partials/pages/status"; -@import "partials/pages/search"; -@import "partials/pages/signup"; -@import "partials/pages/signin"; -@import "partials/pages/account"; -@import "partials/pages/ui"; -@import "partials/pages/gallery"; -@import "partials/pages/steps"; -@import "partials/pages/wizard"; -@import "partials/pages/email_templates"; - diff --git a/e2e/app.e2e-spec.ts b/e2e/app.e2e-spec.ts new file mode 100644 index 0000000..c2949ad --- /dev/null +++ b/e2e/app.e2e-spec.ts @@ -0,0 +1,14 @@ +import { AppPage } from './app.po'; + +describe('admin-portal App', () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it('should display welcome message', () => { + page.navigateTo(); + expect(page.getParagraphText()).toEqual('Welcome to app!'); + }); +}); diff --git a/e2e/app.po.ts b/e2e/app.po.ts new file mode 100644 index 0000000..82ea75b --- /dev/null +++ b/e2e/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor'; + +export class AppPage { + navigateTo() { + return browser.get('/'); + } + + getParagraphText() { + return element(by.css('app-root h1')).getText(); + } +} diff --git a/e2e/tsconfig.e2e.json b/e2e/tsconfig.e2e.json new file mode 100644 index 0000000..1d9e5ed --- /dev/null +++ b/e2e/tsconfig.e2e.json @@ -0,0 +1,14 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/e2e", + "baseUrl": "./", + "module": "commonjs", + "target": "es5", + "types": [ + "jasmine", + "jasminewd2", + "node" + ] + } +} diff --git a/fonts/FontAwesome.otf b/fonts/FontAwesome.otf deleted file mode 100644 index 8b0f54e..0000000 Binary files a/fonts/FontAwesome.otf and /dev/null differ diff --git a/fonts/brankic.eot b/fonts/brankic.eot deleted file mode 100755 index f584fad..0000000 Binary files a/fonts/brankic.eot and /dev/null differ diff --git a/fonts/brankic.svg b/fonts/brankic.svg deleted file mode 100755 index 0a40ce4..0000000 --- a/fonts/brankic.svg +++ /dev/null @@ -1,360 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/fonts/brankic.ttf b/fonts/brankic.ttf deleted file mode 100755 index a9084fd..0000000 Binary files a/fonts/brankic.ttf and /dev/null differ diff --git a/fonts/brankic.woff b/fonts/brankic.woff deleted file mode 100755 index 2f237f7..0000000 Binary files a/fonts/brankic.woff and /dev/null differ diff --git a/fonts/entypo.eot b/fonts/entypo.eot deleted file mode 100755 index 3c5dda9..0000000 Binary files a/fonts/entypo.eot and /dev/null differ diff --git a/fonts/entypo.svg b/fonts/entypo.svg deleted file mode 100755 index d0b3803..0000000 --- a/fonts/entypo.svg +++ /dev/null @@ -1,294 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/fonts/entypo.ttf b/fonts/entypo.ttf deleted file mode 100755 index 083720f..0000000 Binary files a/fonts/entypo.ttf and /dev/null differ diff --git a/fonts/entypo.woff b/fonts/entypo.woff deleted file mode 100755 index 9aaab8a..0000000 Binary files a/fonts/entypo.woff and /dev/null differ diff --git a/fonts/fontawesome-webfont.eot b/fonts/fontawesome-webfont.eot deleted file mode 100755 index 7c79c6a..0000000 Binary files a/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/fonts/fontawesome-webfont.svg b/fonts/fontawesome-webfont.svg deleted file mode 100755 index 45fdf33..0000000 --- a/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,414 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/fonts/fontawesome-webfont.ttf b/fonts/fontawesome-webfont.ttf deleted file mode 100755 index e89738d..0000000 Binary files a/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/fonts/fontawesome-webfont.woff b/fonts/fontawesome-webfont.woff deleted file mode 100755 index 8c1748a..0000000 Binary files a/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/fonts/glyphicons-halflings-regular.eot b/fonts/glyphicons-halflings-regular.eot deleted file mode 100644 index 423bd5d..0000000 Binary files a/fonts/glyphicons-halflings-regular.eot and /dev/null differ diff --git a/fonts/glyphicons-halflings-regular.svg b/fonts/glyphicons-halflings-regular.svg deleted file mode 100644 index 4469488..0000000 --- a/fonts/glyphicons-halflings-regular.svg +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/fonts/glyphicons-halflings-regular.ttf b/fonts/glyphicons-halflings-regular.ttf deleted file mode 100644 index a498ef4..0000000 Binary files a/fonts/glyphicons-halflings-regular.ttf and /dev/null differ diff --git a/fonts/glyphicons-halflings-regular.woff b/fonts/glyphicons-halflings-regular.woff deleted file mode 100644 index d83c539..0000000 Binary files a/fonts/glyphicons-halflings-regular.woff and /dev/null differ diff --git a/fonts/icomoon.eot b/fonts/icomoon.eot deleted file mode 100755 index a88fdb2..0000000 Binary files a/fonts/icomoon.eot and /dev/null differ diff --git a/fonts/icomoon.svg b/fonts/icomoon.svg deleted file mode 100755 index 800ec30..0000000 --- a/fonts/icomoon.svg +++ /dev/null @@ -1,461 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/fonts/icomoon.ttf b/fonts/icomoon.ttf deleted file mode 100755 index f138a4f..0000000 Binary files a/fonts/icomoon.ttf and /dev/null differ diff --git a/fonts/icomoon.woff b/fonts/icomoon.woff deleted file mode 100755 index fd98f3e..0000000 Binary files a/fonts/icomoon.woff and /dev/null differ diff --git a/fonts/ionicons.eot b/fonts/ionicons.eot deleted file mode 100755 index 20d07a2..0000000 Binary files a/fonts/ionicons.eot and /dev/null differ diff --git a/fonts/ionicons.svg b/fonts/ionicons.svg deleted file mode 100755 index e916713..0000000 --- a/fonts/ionicons.svg +++ /dev/null @@ -1,1623 +0,0 @@ - - - - - -Created by FontForge 20120731 at Fri Dec 6 14:03:39 2013 - By Adam Bradley -Created by Adam Bradley with FontForge 2.0 (http://fontforge.sf.net) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/fonts/ionicons.ttf b/fonts/ionicons.ttf deleted file mode 100755 index e40d8e0..0000000 Binary files a/fonts/ionicons.ttf and /dev/null differ diff --git a/fonts/ionicons.woff b/fonts/ionicons.woff deleted file mode 100755 index a4f70ef..0000000 Binary files a/fonts/ionicons.woff and /dev/null differ diff --git a/index.html b/index.html deleted file mode 100644 index 48e5b04..0000000 --- a/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - OpenAIRE-Connect Admin Tools - - - - - - - - - - - - - - - - - - - - - - - Loading... - - - - diff --git a/interactiveminingv3.tgz b/interactiveminingv3.tgz new file mode 100644 index 0000000..81de013 Binary files /dev/null and b/interactiveminingv3.tgz differ diff --git a/js/jquery.js b/js/jquery.js deleted file mode 100644 index e836475..0000000 --- a/js/jquery.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; -}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="
a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("',t,e)};s.onerror=function(){return a(640,320)},s.onload=function(){120===s.width&&90===s.height?r?a(640,320):(r=!0,s.src="//img.youtube.com/vi/"+o+"/0.jpg"):a(s.width,s.height)},s.src="//img.youtube.com/vi/"+o+"/maxresdefault.jpg",t.stopImmediatePropagation()}}}},"lightbox"),t.mixin({events:{showitem:function(t){var e,i=this,o=this.getItem();if(e=o.source.match(/(\/\/.*?)vimeo\.[a-z]+\/([0-9]+).*?/)){var s=e[2],r=function(t,e){return i.setItem(o,'',t,e)};n({type:"GET",url:"http://vimeo.com/api/oembed.json?url="+encodeURI(o.source),jsonp:"callback",dataType:"jsonp"}).then(function(t){return r(t.width,t.height)}),t.stopImmediatePropagation()}}}},"lightbox")}}function qt(t){if(!qt.installed){var e=t.util,i=e.$,n=e.each,o=e.pointerEnter,s=e.pointerLeave,r=e.Transition,a={};t.component("notification",{functional:!0,args:["message","status"],defaults:{message:"",status:"",timeout:5e3,group:null,pos:"top-center",onClose:null,clsClose:"uk-notification-close"},created:function(){a[this.pos]||(a[this.pos]=i('
').appendTo(t.container)),this.$mount(i('
\n \n
'+this.message+"
\n
").appendTo(a[this.pos].show())[0])},ready:function(){var t=this,e=parseInt(this.$el.css("margin-bottom"),10);r.start(this.$el.css({opacity:0,marginTop:-1*this.$el.outerHeight(),marginBottom:0}),{opacity:1,marginTop:0,marginBottom:e}).then(function(){t.timeout&&(t.timer=setTimeout(t.close,t.timeout),t.$el.on(o,function(){return clearTimeout(t.timer)}).on(s,function(){return t.timer=setTimeout(t.close,t.timeout)}))})},events:{click:function(t){i(t.target).closest('a[href="#"]').length&&t.preventDefault(),this.close()}},methods:{close:function(t){var e=this,i=function(){e.onClose&&e.onClose(),e.$el.trigger("close",[e]).remove(),a[e.pos].children().length||a[e.pos].hide()};this.timer&&clearTimeout(this.timer),t?i():r.start(this.$el,{opacity:0,marginTop:-1*this.$el.outerHeight(),marginBottom:0}).then(i)}}}),t.notification.closeAll=function(e,i){n(t.instances,function(t,n){"notification"!==n.$options.name||e&&e!==n.group||n.close(i)})}}}function Yt(t){function e(i){return t.getComponent(i,"sortable")||i.parentNode&&e(i.parentNode)}function i(){var t=setTimeout(function(){return r.trigger("click")},0),e=function(i){i.preventDefault(),i.stopPropagation(),clearTimeout(t),u(r,"click",e,!0)};c(r,"click",e,!0)}if(!Yt.installed){var n=t.mixin,o=t.util,s=o.$,r=o.docElement,a=o.extend,l=o.getDimensions,h=o.isWithin,c=o.on,u=o.off,d=o.offsetTop,f=o.pointerDown,p=o.pointerMove,g=o.pointerUp,m=o.promise,v=o.win;t.component("sortable",{mixins:[n.class],props:{group:String,animation:Number,threshold:Number,clsItem:String,clsPlaceholder:String,clsDrag:String,clsDragState:String,clsBase:String,clsNoDrag:String,clsEmpty:String,clsCustom:String,handle:String},defaults:{group:!1,animation:150,threshold:5,clsItem:"uk-sortable-item",clsPlaceholder:"uk-sortable-placeholder",clsDrag:"uk-sortable-drag",clsDragState:"uk-drag",clsBase:"uk-sortable",clsNoDrag:"uk-sortable-nodrag",clsEmpty:"uk-sortable-empty",clsCustom:"",handle:!1},init:function(){var t=this;["init","start","move","end"].forEach(function(e){var i=t[e];t[e]=function(e){e=e.originalEvent||e,t.scrollY=window.scrollY;var n=e.touches&&e.touches[0]||e,o=n.pageX,s=n.pageY;t.pos={x:o,y:s},i(e)}})},events:(w={},w[f]="init",w),update:{write:function(){var t=this;if(this.clsEmpty&&this.$el.toggleClass(this.clsEmpty,!this.$el.children().length),this.drag){this.drag.offset({top:this.pos.y+this.origin.top,left:this.pos.x+this.origin.left});var e=d(this.drag),i=e+this.drag[0].offsetHeight;e>0&&ewindow.innerHeight+this.scrollY&&setTimeout(function(){return v.scrollTop(t.scrollY+5)},5)}}},methods:{init:function(t){var e=s(t.target),i=this.$el.children().filter(function(e,i){return h(t.target,i)});!i.length||e.is(":input")||this.handle&&!h(e,this.handle)||t.button&&0!==t.button||h(e,"."+this.clsNoDrag)||(t.preventDefault(),t.stopPropagation(),this.touched=[this],this.placeholder=i,this.origin=a({target:e,index:this.placeholder.index()},this.pos),r.on(p,this.move),r.on(g,this.end),v.on("scroll",this.scroll),this.threshold||this.start(t))},start:function(e){this.drag=s(this.placeholder[0].outerHTML.replace(/^
  • $/i,"div>")).attr("uk-no-boot","").addClass(this.clsDrag+" "+this.clsCustom).css({boxSizing:"border-box",width:this.placeholder.outerWidth(),height:this.placeholder.outerHeight()}).css(this.placeholder.css(["paddingLeft","paddingRight","paddingTop","paddingBottom"])).appendTo(t.container),this.drag.children().first().height(this.placeholder.children().height());var i=l(this.placeholder),n=i.left,o=i.top;a(this.origin,{left:n-this.pos.x,top:o-this.pos.y}),this.placeholder.addClass(this.clsPlaceholder),this.$el.children().addClass(this.clsItem),r.addClass(this.clsDragState),this.$el.trigger("start",[this,this.placeholder,this.drag]),this.move(e)},move:function(t){if(!this.drag)return void((Math.abs(this.pos.x-this.origin.x)>this.threshold||Math.abs(this.pos.y-this.origin.y)>this.threshold)&&this.start(t));this.$emit();var i="mousemove"===t.type?t.target:document.elementFromPoint(this.pos.x-document.body.scrollLeft,this.pos.y-document.body.scrollTop),n=e(i),o=e(this.placeholder[0]),r=n!==o;if(n&&!h(i,this.placeholder)&&(!r||n.group&&n.group===o.group)){if(i=n.$el.is(i.parentNode)&&s(i)||n.$el.children().has(i),r)o.remove(this.placeholder);else if(!i.length)return;n.insert(this.placeholder,i),~this.touched.indexOf(n)||this.touched.push(n)}},scroll:function(){var t=window.scrollY;t!==this.scrollY&&(this.pos.y+=t-this.scrollY,this.scrollY=t,this.$emit())},end:function(t){if(r.off(p,this.move),r.off(g,this.end),v.off("scroll",this.scroll),!this.drag)return void("mouseup"!==t.type&&h(t.target,"a[href]")&&(location.href=s(t.target).closest("a[href]").attr("href")));i();var n=e(this.placeholder[0]);this===n?this.origin.index!==this.placeholder.index()&&this.$el.trigger("change",[this,this.placeholder,"moved"]):(n.$el.trigger("change",[n,this.placeholder,"added"]),this.$el.trigger("change",[this,this.placeholder,"removed"])),this.$el.trigger("stop",[this]),this.drag.remove(),this.drag=null,this.touched.forEach(function(t){return t.$el.children().removeClass(t.clsPlaceholder+" "+t.clsItem)}),r.removeClass(this.clsDragState)},insert:function(t,e){var i=this;this.$el.children().addClass(this.clsItem);var n=function(){e.length?!i.$el.has(t).length||t.prevAll().filter(e).length?t.insertBefore(e):t.insertAfter(e):i.$el.append(t)};this.animation?this.animate(n):n()},remove:function(t){this.$el.has(t).length&&(this.animation?this.animate(function(){return t.detach()}):t.detach())},animate:function(t){var e=this,i=[],n=this.$el.children().toArray().map(function(t){return t=s(t),i.push(a({position:"absolute",pointerEvents:"none",width:t.outerWidth(),height:t.outerHeight()},t.position())),t}),o={position:"",width:"",height:"",pointerEvents:"",top:"",left:""};t(),n.forEach(function(t){return t.stop()}),this.$el.children().css(o),this.$updateSync("update",!0),this.$el.css("min-height",this.$el.height());var r=n.map(function(t){return t.position()});m.all(n.map(function(t,n){return t.css(i[n]).animate(r[n],e.animation).promise()})).then(function(){e.$el.css("min-height","").children().css(o),e.$updateSync("update",!0)})}}});var w}}function Rt(t){if(!Rt.installed){var e,i=t.util,n=t.mixin,o=i.$,s=i.doc,r=i.fastdom,a=i.flipPosition,l=i.isTouch,h=i.isWithin,c=i.pointerDown,u=i.pointerEnter,d=i.pointerLeave;t.component("tooltip",{attrs:!0,mixins:[n.togglable,n.position],props:{delay:Number,container:Boolean,title:String},defaults:{pos:"top",title:"",delay:0,animation:["uk-animation-scale-up"],duration:100,cls:"uk-active",clsPos:"uk-tooltip",container:!0},computed:{container:function(){return o(!0===this.$props.container&&t.container||this.$props.container||t.container)}},connected:function(){var t=this;r.mutate(function(){return t.$el.removeAttr("title").attr("aria-expanded",!1)})},disconnected:function(){this.hide()},methods:{show:function(){var t=this;e!==this&&(e&&e.hide(),e=this,s.on("click."+this.$options.name,function(e){h(e.target,t.$el)||t.hide()}),clearTimeout(this.showTimer),this.tooltip=o('").appendTo(this.container),this.$el.attr("aria-expanded",!0),this.positionAt(this.tooltip,this.$el),this.origin="y"===this.getAxis()?a(this.dir)+"-"+this.align:this.align+"-"+a(this.dir),this.showTimer=setTimeout(function(){t.toggleElement(t.tooltip,!0),t.hideTimer=setInterval(function(){t.$el.is(":visible")||t.hide()},150)},this.delay))},hide:function(){this.$el.is("input")&&this.$el[0]===document.activeElement||(e=e!==this&&e||!1,clearTimeout(this.showTimer),clearInterval(this.hideTimer),this.$el.attr("aria-expanded",!1),this.toggleElement(this.tooltip,!1),this.tooltip&&this.tooltip.remove(),this.tooltip=!1,s.off("click."+this.$options.name))}},events:(f={blur:"hide"},f["focus "+u+" "+c]=function(t){t.type===c&&l(t)||this.show()},f[d]=function(t){l(t)||this.hide()},f)});var f}}function Ut(t){function e(t,e){return e.match(new RegExp("^"+t.replace(/\//g,"\\/").replace(/\*\*/g,"(\\/[^\\/]+)*").replace(/\*/g,"[^\\/]+").replace(/((?!\\))\?/g,"$1.")+"$","i"))}function i(t,e){for(var i=[],n=0;ni[t]?n.ratio(e,t,i[t]):e}),e},cover:function(e,i){var n=this;return e=this.fit(e,i),t.each(e,function(t){return e=e[t]0||navigator.pointerEnabled&&navigator.maxTouchPoints>0,de=ue?le?"touchstart":"pointerdown":"mousedown",fe=ue?le?"touchmove":"pointermove":"mousemove",pe=ue?le?"touchend":"pointerup":"mouseup",ge=ue&&he?"pointerenter":"mouseenter",me=ue&&he?"pointerleave":"mouseleave",ve=ue&&le?"touchcancel":"pointercancel",we=L("transition","transition-end"),ye=L("animation","animation-start"),be=L("animation","animation-end"),$e={reads:[],writes:[],measure:function(t){return this.reads.push(t),F(this),t},mutate:function(t){return this.writes.push(t),F(this),t},clear:function(t){return q(this.reads,t)||q(this.writes,t)}};Y.prototype={positions:[],position:null,init:function(){var t=this;this.positions=[],this.position=null;var e=!1;this.handler=function(i){e||setTimeout(function(){var n=Date.now(),o=t.positions.length;o&&n-t.positions[o-1].time>100&&t.positions.splice(0,o),t.positions.push({time:n,x:i.pageX,y:i.pageY}),t.positions.length>5&&t.positions.shift(),e=!1},5),e=!0},Gt.on("mousemove",this.handler)},cancel:function(){this.handler&&Gt.off("mousemove",this.handler)},movesTo:function(t){if(this.positions.length<2)return!1;var e=X(t),i=this.positions[this.positions.length-1],n=this.positions[0];if(e.left<=i.x&&i.x<=e.right&&e.top<=i.y&&i.y<=e.bottom)return!1;var o=[[{x:e.left,y:e.top},{x:e.right,y:e.bottom}],[{x:e.right,y:e.top},{x:e.left,y:e.bottom}]];return e.right<=i.x||(e.left>=i.x?(o[0].reverse(),o[1].reverse()):e.bottom<=i.y?o[0].reverse():e.top>=i.y&&o[1].reverse()),!!o.reduce(function(t,e){return t+(R(n,e[0])R(i,e[1]))},0)}};var xe={};xe.args=xe.created=xe.events=xe.init=xe.ready=xe.connected=xe.disconnected=xe.destroy=function(e,i){return e=e&&!t.isArray(e)?[e]:e,i?e?e.concat(i):t.isArray(i)?i:[i]:e},xe.update=function(e,i){return xe.args(e,t.isFunction(i)?{write:i}:i)},xe.props=function(e,i){return t.isArray(i)&&(i=i.reduce(function(t,e){return t[e]=String,t},{})),xe.methods(e,i)},xe.computed=xe.defaults=xe.methods=function(e,i){return i?e?t.extend(!0,{},e,i):i:e};var ke,Ce,Te,_e,Se,Ee=function(t,e){return T(e)?t:e},Ae={x:["width","left","right"],y:["height","top","bottom"]},Oe={};i(function(){var e,i,o,s=0,r=0;"MSGesture"in window&&(_e=new MSGesture,_e.target=document.body),n(document,"click",function(){return Se=!0},!0);var a=function(t){var e=t.velocityX>1?"Right":t.velocityX<-1?"Left":t.velocityY>1?"Down":t.velocityY<-1?"Up":null;e&&void 0!==Oe.el&&(Oe.el.trigger("swipe"),Oe.el.trigger("swipe"+e))};n(document,"MSGestureEnd",a),n(document,"gestureend",a),n(document,de,function(t){o=t.touches?t.touches[0]:t,e=Date.now(),i=e-(Oe.last||e),Oe.el=Vt("tagName"in o.target?o.target:o.target.parentNode),ke&&clearTimeout(ke),Oe.x1=o.pageX,Oe.y1=o.pageY,i>0&&i<=250&&(Oe.isDoubleTap=!0),Oe.last=e,!_e||"pointerdown"!==t.type&&"touchstart"!==t.type||_e.addPointer(t.pointerId),Se=t.button>0}),n(document,fe,function(t){o=t.touches?t.touches[0]:t,Oe.x2=o.pageX,Oe.y2=o.pageY,s+=Math.abs(Oe.x1-Oe.x2),r+=Math.abs(Oe.y1-Oe.y2)}),n(document,pe,function(){Oe.x2&&Math.abs(Oe.x1-Oe.x2)>30||Oe.y2&&Math.abs(Oe.y1-Oe.y2)>30?Te=setTimeout(function(){void 0!==Oe.el&&(Oe.el.trigger("swipe"),Oe.el.trigger("swipe"+et(Oe.x1,Oe.x2,Oe.y1,Oe.y2))),Oe={}},0):"last"in Oe&&(isNaN(s)||s<30&&r<30?Ce=setTimeout(function(){var e=t.Event("tap");e.cancelTouch=it,void 0!==Oe.el&&Oe.el.trigger(e),Oe.isDoubleTap?(void 0!==Oe.el&&Oe.el.trigger("doubleTap"),Oe={}):ke=setTimeout(function(){ke=null,void 0!==Oe.el&&(Oe.el.trigger("singleTap"),Se||Oe.el.trigger("click")),Oe={}},300)}):Oe={},s=r=0)}),n(document,ve,it),n(window,"scroll",it)});var De=!1;n(document,"touchstart",function(){return De=!0},!0),n(document,"click",function(){De=!1}),n(document,"touchcancel",function(){return De=!1},!0);var Ie=Object.freeze({win:Xt,doc:Gt,docElement:Qt,isRtl:Jt,isReady:e,ready:i,on:n,off:o,transition:s,Transition:Zt,animate:r,Animation:Kt,isJQuery:a,isWithin:l,attrFilter:h,removeClass:c,createEvent:u,isInView:d,getIndex:f,isVoidElement:p,Dimensions:ee,query:g,Observer:re,requestAnimationFrame:ae,hasPromise:ce,hasTouch:ue,pointerDown:de,pointerMove:fe,pointerUp:pe,pointerEnter:ge,pointerLeave:me,pointerCancel:ve,transitionend:we,animationstart:ye,animationend:be,getStyle:M,getCssVar:j,fastdom:$e,$:Vt,bind:m,hasOwn:v,promise:w,classify:y,hyphenate:b,camelize:$,isString:k,isNumber:C,isUndefined:T,isContextSelector:_,getContextSelectors:S,toJQuery:E,toNode:A,toBoolean:O,toNumber:D,toList:I,toMedia:N,coerce:B,toMs:P,swap:H,ajax:t.ajax,contains:t.contains,each:t.each,Event:t.Event,extend:t.extend,map:t.map,merge:t.merge,isArray:t.isArray,isNumeric:t.isNumeric,isFunction:t.isFunction,isPlainObject:t.isPlainObject,MouseTracker:Y,mergeOptions:U,position:V,getDimensions:X,offsetTop:G,flipPosition:tt,isTouch:nt}),Ne=function(t){this._init(t)};Ne.util=Ie,Ne.data="__uikit__",Ne.prefix="uk-",Ne.options={},Ne.instances={},Ne.elements=[],function(t){var e=t.data;t.use=function(t){if(!t.installed)return t.call(null,this),t.installed=!0,this},t.mixin=function(e,i){i=(k(i)?t.components[i]:i)||this,e=U({},e),e.mixins=i.options.mixins,delete i.options.mixins,i.options=U(e,i.options)},t.extend=function(t){t=t||{};var e=this,i=t.name||e.options.name,n=ot(i||"UIkitComponent");return n.prototype=Object.create(e.prototype),n.prototype.constructor=n,n.options=U(e.options,t),n.super=e,n.extend=e.extend,n},t.update=function(i,n,o){if(void 0===o&&(o=!1),i=u(i||"update"),!n)return void rt(t.instances,i);if(n=A(n),o)do{rt(n[e],i),n=n.parentNode}while(n);else st(n,function(t){return rt(t[e],i)})};var i;Object.defineProperty(t,"container",{get:function(){return i||document.body},set:function(t){i=t}})}(Ne),function(t){t.prototype._callHook=function(t){var e=this,i=this.$options[t];i&&i.forEach(function(t){return t.call(e)})},t.prototype._callReady=function(){this._isReady||(this._isReady=!0,this._callHook("ready"),this._callUpdate())},t.prototype._callConnected=function(){var e=this;this._connected||(~t.elements.indexOf(this.$options.el)||t.elements.push(this.$options.el),t.instances[this._uid]=this,this._initEvents(),this._callHook("connected"),this._connected=!0,this._initObserver(),this._isReady||i(function(){return e._callReady()}),this._callUpdate())},t.prototype._callDisconnected=function(){if(this._connected){this._observer&&(this._observer.disconnect(),this._observer=null);var e=t.elements.indexOf(this.$options.el);~e&&t.elements.splice(e,1),delete t.instances[this._uid],this._initEvents(!0),this._callHook("disconnected"),this._connected=!1}},t.prototype._callUpdate=function(t){var e=this;t=u(t||"update"),"update"===t.type&&(this._computeds={});var i=this.$options.update;i&&i.forEach(function(i,n){if("update"===t.type||i.events&&~i.events.indexOf(t.type)){if(t.sync)return i.read&&i.read.call(e,t),void(i.write&&i.write.call(e,t));i.read&&!~$e.reads.indexOf(e._frames.reads[n])&&(e._frames.reads[n]=$e.measure(function(){i.read.call(e,t),delete e._frames.reads[n]})),i.write&&!~$e.writes.indexOf(e._frames.writes[n])&&(e._frames.writes[n]=$e.mutate(function(){i.write.call(e,t),delete e._frames.writes[n]}))}})}}(Ne),function(e){var i=0;e.prototype.props={},e.prototype._init=function(t){t=t||{},t=this.$options=U(this.constructor.options,t,this),this.$el=null,this.$name=e.prefix+b(this.$options.name),this.$props={},this._uid=i++,this._initData(),this._initMethods(),this._initComputeds(),this._callHook("created"),this._frames={reads:{},writes:{}},t.el&&this.$mount(t.el)},e.prototype._initData=function(){var e=this,i=t.extend(!0,{},this.$options.defaults),n=this.$options.data||{},o=this.$options.args||[],s=this.$options.props||{};if(i){o.length&&t.isArray(n)&&(n=n.slice(0,o.length).reduce(function(e,i,n){return t.isPlainObject(i)?t.extend(e,i):e[o[n]]=i,e},{}));for(var r in i)e.$props[r]=e[r]=v(n,r)?B(s[r],n[r],e.$options.el):i[r]}},e.prototype._initMethods=function(){var t=this,e=this.$options.methods;if(e)for(var i in e)t[i]=m(e[i],t)},e.prototype._initComputeds=function(){var t=this,e=this.$options.computed;if(this._computeds={},e)for(var i in e)at(t,i,e[i])},e.prototype._initProps=function(e){var i=this;this._computeds={},t.extend(this.$props,e||this._getProps());var n=[this.$options.computed,this.$options.methods];for(var o in i.$props)ct(n,o)&&(i[o]=i.$props[o])},e.prototype._initEvents=function(t){var e=this,i=this.$options.events;i&&i.forEach(function(i){if(v(i,"handler"))lt(e,t,i);else for(var n in i)lt(e,t,i[n],n)})},e.prototype._initObserver=function(){var e=this;if(!this._observer&&this.$options.props&&this.$options.attrs&&re){var i=t.isArray(this.$options.attrs)?this.$options.attrs:Object.keys(this.$options.props).map(function(t){return b(t)});this._observer=new re(function(){var t=e._getProps();i.some(function(i){return!ut(t[i],e.$props[i])})&&e.$reset(t)}),this._observer.observe(this.$options.el,{attributes:!0,attributeFilter:i.concat([this.$name,"data-"+this.$name])})}},e.prototype._getProps=function(){var t,e,i={},n=this.$el[0],o=this.$options.args||[],s=this.$options.props||{},r=n.getAttribute(this.$name)||n.getAttribute("data-"+this.$name);if(!s)return i;for(t in s)if(e=b(t),n.hasAttribute(e)){var a=B(s[t],n.getAttribute(e),n);if("target"===e&&(!a||0===a.lastIndexOf("_",0)))continue;i[t]=a}if(!r)return i;if("{"===r[0])try{r=JSON.parse(r)}catch(t){console.warn("Invalid JSON."),r={}}else if(o.length&&!~r.indexOf(":")){l={},l[o[0]]=r,r=l;var l}else{var h={};r.split(";").forEach(function(t){var e=t.split(/:(.+)/),i=e[0],n=e[1];i&&n&&(h[i.trim()]=n.trim())}),r=h}for(t in r||{})e=$(t),void 0!==s[e]&&(i[e]=B(s[e],r[t],n));return i}}(Ne),function(t){var e=t.data;t.prototype.$mount=function(t){var i=this.$options.name;if(t[e]||(t[e]={}),t[e][i])return void console.warn('Component "'+i+'" is already mounted on element: ',t);t[e][i]=this,this.$el=Vt(t),this._initProps(),this._callHook("init"),document.documentElement.contains(t)&&this._callConnected()},t.prototype.$emit=function(t){this._callUpdate(t)},t.prototype.$emitSync=function(t){this._callUpdate(u(t||"update",!0,!1,{sync:!0}))},t.prototype.$update=function(e,i){t.update(e,this.$el,i)},t.prototype.$updateSync=function(t,e){this.$update(u(t||"update",!0,!1,{sync:!0}),e)},t.prototype.$reset=function(t){this._callDisconnected(),this._initProps(t),this._callConnected()},t.prototype.$destroy=function(t){void 0===t&&(t=!1);var i=this.$options.el;i&&this._callDisconnected(),this._callHook("destroy"),i&&i[e]&&(delete i[e][this.$options.name],Object.keys(i[e]).length||delete i[e],t&&this.$el.remove())}}(Ne),function(e){var i=e.data;e.components={},e.component=function(i,n){var o=$(i);return t.isPlainObject(n)?(n.name=o,n=e.extend(n)):n.options.name=o,e.components[o]=n,e[o]=function(i,n){for(var s=arguments.length,r=Array(s);s--;)r[s]=arguments[s];return t.isPlainObject(i)?new e.components[o]({data:i}):e.components[o].options.functional?new e.components[o]({data:[].concat(r)}):Vt(i).toArray().map(function(t){return e.getComponent(t,o)||new e.components[o]({el:t,data:n||{}})})[0]},e._initialized&&!n.options.functional&&$e.measure(function(){return e[o]("[uk-"+i+"],[data-uk-"+i+"]")}),e.components[o]},e.getComponents=function(t){return t&&(t=a(t)?t[0]:t)&&t[i]||{}},e.getComponent=function(t,i){return e.getComponents(t)[i]},e.connect=function(t){var n;if(t[i])for(n in t[i])t[i][n]._callConnected();for(var o=0;o',We='',ze='',qe='',Ye='',Re='',Ue='',Ve='',Xe='',Ge='',Qe='',Je='',Ze='',Ke='',ti='',ei={},ii=new DOMParser;return Ne.version="3.0.0-beta.22",function(t){t.mixin.class=He,t.mixin.modal=je,t.mixin.position=Le,t.mixin.togglable=Me}(Ne),function(t){var e,i,o,s=null,r=0;Xt.on("load",t.update).on("resize",function(e){o||(ae(function(){t.update(e),o=!1}),o=!0)}).on("scroll",function(n){null===s&&(s=0),s!==window.pageYOffset&&(e=s +# cp connect-admin-beta-properties.json ./src/assets/env-properties.json; +# pico src/app/openaireLibrary/utils/properties/environment-specific.service.ts; +# npm run build; +# rm -rf dist/assets/common-assets/.svn/; +# echo 'Ready!'; +# echo 'Now copy dist to the server!' +##<-- to here + +##copy "deploy-folder/dist" in demo.openaire.eu +##coppies of previous deployments exist in "/home/argiro.kokogiannaki/uoa-portal/connect-adminYYYY-MM-DD" +##become nodejs user: "sudo su nodejs -s /bin/bash" +##go to "cd /srv/www/portal-www" +##cp files from "cp -r HOME_PATH/deploy-folder/* ." diff --git a/prepareProductionDeploy.sh b/prepareProductionDeploy.sh new file mode 100755 index 0000000..0a1d887 --- /dev/null +++ b/prepareProductionDeploy.sh @@ -0,0 +1,20 @@ +##ATTENTION +##DON'T run it in svn folder - it *REMOVES* files +##Copy project in another file "deploy-folder" +##cd "deploy-folder" +##run the script + +## uncommect from here--> +# cp connect-admin-production-properties.json ./src/assets/env-properties.json; +# pico src/app/openaireLibrary/utils/properties/environment-specific.service.ts; +# npm run build; +# rm -rf dist/assets/common-assets/.svn/; +# echo 'Ready!'; +# echo 'Now copy dist to the server!' +##<-- to here + +##copy "deploy-folder/dist" in explore.openaire.eu +##coppies of previous deployments exist in "/home/argiro.kokogiannaki/portals/adminYYYY-MM-DD" +##become nodejs user: "sudo su nodejs -s /bin/bash" +##go to "cd /srv/www/portal-www" +##cp files from "cp -r HOME_PATH/deploy-folder/* ." diff --git a/protractor.conf.js b/protractor.conf.js new file mode 100644 index 0000000..7ee3b5e --- /dev/null +++ b/protractor.conf.js @@ -0,0 +1,28 @@ +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require('jasmine-spec-reporter'); + +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './e2e/**/*.e2e-spec.ts' + ], + capabilities: { + 'browserName': 'chrome' + }, + directConnect: true, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: 'e2e/tsconfig.e2e.json' + }); + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + } +}; diff --git a/src/app/app.component.css b/src/app/app.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/app.component.html b/src/app/app.component.html new file mode 100644 index 0000000..d1e0e60 --- /dev/null +++ b/src/app/app.component.html @@ -0,0 +1,202 @@ + + + +
    +
    + + +
    + + + +
    +
    +
    + + diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts new file mode 100644 index 0000000..9510495 --- /dev/null +++ b/src/app/app.component.spec.ts @@ -0,0 +1,32 @@ +import { TestBed, async } from '@angular/core/testing'; + +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ + AppComponent + ], + }).compileComponents(); + })); + + it('should create the app', async(() => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app).toBeTruthy(); + })); + + it(`should have as title 'app'`, async(() => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app.title).toEqual('app'); + })); + + it('should render title in a h1 tag', async(() => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.debugElement.nativeElement; + expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!'); + })); +}); diff --git a/src/app/app.component.ts b/src/app/app.component.ts new file mode 100644 index 0000000..e54f06c --- /dev/null +++ b/src/app/app.component.ts @@ -0,0 +1,115 @@ +/** + * Created by stefania on 3/21/16. + */ + +import { Component } from '@angular/core'; +import{MenuItem, RootMenuItem} from './openaireLibrary/sharedComponents/menu'; +import {ActivatedRoute} from '@angular/router'; +import { EnvironmentSpecificService} from './openaireLibrary/utils/properties/environment-specific.service'; +import {CommunitiesService} from "./openaireLibrary/connect/communities/communities.service"; +import { EnvProperties} from './openaireLibrary/utils/properties/env-properties'; +import {Session} from './openaireLibrary/login/utils/helper.class'; + +declare var UIkit: any; + +@Component({ + selector: 'app', + templateUrl: './app.component.html', +}) + +export class AppComponent { + title = 'Metadata Registry Service'; + isClient:boolean = false; + + + userMenuItems:MenuItem[] = []; + + menuItems:RootMenuItem [] = []; + +logInUrl = null; +logOutUrl = null; +community: {id:string, name:string, logoUrl:string} = null; +communityId=""; +communityType=null; +properties:EnvProperties = null; +isPortalAdministrator:boolean = false; +constructor( private route: ActivatedRoute, private propertiesService:EnvironmentSpecificService, private _communitiesService:CommunitiesService) { + +} + + ngOnInit() { + this.propertiesService.loadEnvironment() + .then(es => { + this.propertiesService.setEnvProperties(es); + this.properties = this.propertiesService.envSpecific; + this.logInUrl = this.properties.loginUrl; + this.logOutUrl = this.properties.logoutUrl; + if( Session.getUser()){ + localStorage.setItem('user_id', Session.getUser().id); + localStorage.setItem('mining_backend_address', this.properties.miningBackendURL); + localStorage.setItem('isCommunityManager', Session.isCommunityCurator()+""); + + this.isPortalAdministrator = Session.isPortalAdministrator(); + } + this.route.queryParams.subscribe(data => { + this.communityId = ((data['communityId'])?data['communityId']:""); + this.communityType = null; + this.menuItems = []; + this.userMenuItems = []; + this._communitiesService.getCommunities(this.properties, this.properties.communityAPI+"communities").subscribe ( + communities => { + // this.community = community; + + this.userMenuItems =[]; + var countCommunities = 0; + var index_managerOfCommunity = null; + for(var i = 0;i { + if( ( this.communityId && this.communityId != "") || window.location.pathname == "/"){ + UIkit.notification({ + message : 'System error retrieving communities.', + status : 'warning', + timeout : 3000, + pos : 'top-center' + }) + } + } + ); + }); + }); + + + } +} diff --git a/app/app.module.ts b/src/app/app.module.ts similarity index 62% rename from app/app.module.ts rename to src/app/app.module.ts index 3dda26f..c59b11b 100644 --- a/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,6 +1,3 @@ -/** - * Created by stefania on 9/16/16. - */ import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { HttpModule, JsonpModule } from '@angular/http'; @@ -18,6 +15,8 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ModalFormComponent } from "./pages/modal-form.component"; import { QuestionsFormComponent } from "./pages/faq/questions-form.component"; import { DeleteConfirmationDialogComponent } from "./pages/delete-confirmation-dialog.component"; +//import { DeleteConfirmationDialogModule } from "./pages/delete-confirmation-dialog.module"; + // import { JWBootstrapSwitchModule } from 'jw-bootstrap-switch-ng2'; import { PagesComponent } from "./pages/page/pages.component"; import { HelpContentService } from "./services/help-content.service"; @@ -33,28 +32,57 @@ import { EntitiesComponent } from "./pages/entity/entities.component"; import { EntityFormComponent } from "./pages/entity/entity-form.component"; import { DivIdsComponent } from "./pages/divId/divIds.component"; import { DivIdFormComponent } from "./pages/divId/divId-form.component"; +//import { DivIdModule } from './pages/divId/divId.module'; import { DivHelpContentsComponent } from "./pages/divhelpcontent/div-help-contents.component"; import { NewDivHelpContentComponent } from "./pages/divhelpcontent/new-div-help-content.component"; import { DivContentFormComponent } from "./pages/divhelpcontent/div-help-content-form.component"; import { EditDivHelpContentComponent } from "./pages/divhelpcontent/edit-div-help-content.component"; +//import { DivHelpContentsModule } from './pages/divhelpcontent/divhelpcontent.module'; + +import { HtmlPageContentModule } from "./pages/htmlpagecontent/htmlpagecontent.module"; + import {ClaimsComponent} from './pages/claims/claims.component'; import {NavigationBarModule} from './openaireLibrary/sharedComponents/navigationBar.module'; import { CookieLawModule } from './openaireLibrary/sharedComponents/cookie-law/cookie-law.module'; -import {Meta} from './openaireLibrary/sharedComponents/metaService'; import {BottomModule} from './openaireLibrary/sharedComponents/bottom.module'; import {FeedbackModule} from './openaireLibrary/sharedComponents/feedback/feedback.module'; import {CommunityEditFormModule} from './pages/community/community-edit-form/community-edit-form.module'; +import {ManageZenodoCommunitiesModule} from './pages/zenodo-communities/manage-zenodo-communities.module'; +import {ManageSubscribersModule} from './pages/subscribers/manage-subscribers.module'; +import {SubjectsEditFormModule} from './pages/subjects/subjects-edit-form/subjects-edit-form.module'; +import { LoginGuard} from './openaireLibrary/login/loginGuard.guard'; import {FreeGuard} from './openaireLibrary/login/freeGuard.guard'; import { AdminLoginGuard} from './openaireLibrary/login/adminLoginGuard.guard'; -import { ConnectAdminLoginGuard} from './openaireLibrary/login/connectAdminLoginGuard.guard'; +import { ConnectAdminLoginGuard} from './openaireLibrary/connect/communityGuard/connectAdminLoginGuard.guard'; import { EnvironmentSpecificResolver} from './openaireLibrary/utils/properties/environmentSpecificResolver'; import { EnvironmentSpecificService} from './openaireLibrary/utils/properties/environment-specific.service'; -import {ClaimsAdminModule} from './openaireLibrary/claims/claimsAdmin/claimsAdmin.module'; +import{ClaimsAdminModule} from './openaireLibrary/claims/claimsAdmin/claimsAdmin.module'; import {StatsComponent} from "./pages/stats/stats.component"; //, , ErrorModule CookieLawModule +import { DataTablesModule } from 'angular-datatables'; + +import { CommunityProjectsModule } from './pages/community/projects/communityProjects.module'; +import { CommunityContentProvidersModule } from './pages/community/content-providers/communityContentProviders.module'; + +import {InteractiveMiningModule} from 'interactiveminingv3'; +import {MiningComponent} from './pages/mining/mining.component'; +import {CommunitiesService} from "./openaireLibrary/connect/communities/communities.service"; +import{CommunityErrorPageComponent} from './openaireLibrary/connect/communityGuard/communityErrorPage.component'; +import {IsCommunity} from './openaireLibrary/connect/communityGuard/isCommunity.guard'; +import {AdminErrorPageComponent} from './pages/error/errorPage.component'; +import {ErrorModule} from './openaireLibrary/error/error.module'; +import {CommonModule, TitleCasePipe} from '@angular/common'; +import {WellcomeComponent} from './pages/wellcome/wellcome.component'; + +import {AlertModalModule} from './openaireLibrary/utils/modal/alertModal.module'; +import {FABModule} from './utils/fabModule.module'; +import {SafeHtmlPipeModule} from './openaireLibrary/utils/pipes/safeHTMLPipe.module'; + +import {ManageUserNotificationsModule} from './pages/usernotifications/manage-user-notifications.module'; + @NgModule({ imports: [ BrowserModule, @@ -69,8 +97,23 @@ import {StatsComponent} from "./pages/stats/stats.component"; // JWBootstrapSwitchModule, CKEditorModule, BottomModule, FeedbackModule, NavigationBarModule, CookieLawModule, ClaimsAdminModule, + CommunityProjectsModule, + CommunityContentProvidersModule, CommunityEditFormModule, + ManageZenodoCommunitiesModule, + ManageSubscribersModule, + SubjectsEditFormModule, + DataTablesModule, + InteractiveMiningModule, + ErrorModule, + AlertModalModule, SafeHtmlPipeModule, FABModule, + + HtmlPageContentModule, + // DivIdModule, + // DivHelpContentsModule + //DeleteConfirmationDialogModule // , CookieLawModule, ErrorModule + ManageUserNotificationsModule ], declarations: [ AppComponent, @@ -98,14 +141,20 @@ import {StatsComponent} from "./pages/stats/stats.component"; EditDivHelpContentComponent, DivContentFormComponent, ClaimsComponent, - StatsComponent + StatsComponent, + MiningComponent, + CommunityErrorPageComponent, + AdminErrorPageComponent, + WellcomeComponent ], providers: [ FAQService, HelpContentService, appRoutingProviders, - FreeGuard, AdminLoginGuard,ConnectAdminLoginGuard, - EnvironmentSpecificResolver,EnvironmentSpecificService, Meta + FreeGuard, AdminLoginGuard,ConnectAdminLoginGuard,LoginGuard, + EnvironmentSpecificResolver,EnvironmentSpecificService, + IsCommunity, CommunitiesService, TitleCasePipe + ], bootstrap: [ AppComponent ] }) diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts new file mode 100644 index 0000000..05b6571 --- /dev/null +++ b/src/app/app.routing.ts @@ -0,0 +1,179 @@ +/** + * Created by stefania on 9/16/16. + */ +import { ModuleWithProviders } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { DashboardComponent } from "./dashboard.component"; +import { CommunitiesComponent } from './pages/community/communities.component'; +import { ManageZenodoCommunitiesComponent } from "./pages/zenodo-communities/manage-zenodo-communities.component"; +import { ManageSubscribersComponent } from "./pages/subscribers/manage-subscribers.component"; +import { CommunityEditFormComponent } from "./pages/community/community-edit-form/community-edit-form.component"; +import { SubjectsEditFormComponent } from "./pages/subjects/subjects-edit-form/subjects-edit-form.component"; +import { EntitiesComponent } from "./pages/entity/entities.component"; +import { PagesComponent } from "./pages/page/pages.component"; +import { PageHelpContentsComponent } from "./pages/helpcontent/page-help-contents.component"; +import { NewPageHelpContentComponent } from "./pages/helpcontent/new-page-help-content.component"; +import { EditPageHelpContentComponent } from "./pages/helpcontent/edit-page-help-content.component"; +import { DivIdsComponent } from "./pages/divId/divIds.component"; +import { DivHelpContentsComponent } from "./pages/divhelpcontent/div-help-contents.component"; +import { NewDivHelpContentComponent } from "./pages/divhelpcontent/new-div-help-content.component"; +import { EditDivHelpContentComponent } from "./pages/divhelpcontent/edit-div-help-content.component"; +import { EditHtmlPageContentComponent } from "./pages/htmlpagecontent/edit-htmlpage-content.component"; +import {ClaimsComponent} from './pages/claims/claims.component'; +import {FreeGuard} from './openaireLibrary/login/freeGuard.guard'; +import {IsCommunity} from './openaireLibrary/connect/communityGuard/isCommunity.guard'; +import { AdminLoginGuard} from './openaireLibrary/login/adminLoginGuard.guard'; +import { LoginGuard} from './openaireLibrary/login/loginGuard.guard'; +import { ConnectAdminLoginGuard} from './openaireLibrary/connect/communityGuard/connectAdminLoginGuard.guard'; + +import { EnvironmentSpecificResolver} from './openaireLibrary/utils/properties/environmentSpecificResolver'; +import { EnvironmentSpecificService} from './openaireLibrary/utils/properties/environment-specific.service'; +import{ClaimsAdminComponent} from './openaireLibrary/claims/claimsAdmin/claimsAdmin.component'; + +import {StatsComponent} from "./pages/stats/stats.component"; +import {MiningComponent} from './pages/mining/mining.component'; +import{CommunityErrorPageComponent} from './openaireLibrary/connect/communityGuard/communityErrorPage.component'; +import {AdminErrorPageComponent} from './pages/error/errorPage.component'; + +import { ManageProjectsComponent } from './pages/community/projects/manage-projects.component'; +import { ManageContentProvidersComponent } from './pages/community/content-providers/manage-content-providers.component'; +import {WellcomeComponent} from './pages/wellcome/wellcome.component'; + +import {ManageUserNotificationsComponent} from './pages/usernotifications/manage-user-notifications.component'; + +//TODO replace IsCommunity with ConnectAdminLoginGuard +//, IsCommunity +const appRoutes: Routes = [ + { + path: '', + component: WellcomeComponent, + canActivate: [FreeGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + // redirectTo: 'dashboard', + // pathMatch: 'full' + }, + { + path: 'dashboard', + component: DashboardComponent, + canActivate: [IsCommunity, ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'manage-user-notifications', + component: ManageUserNotificationsComponent, + canActivate: [IsCommunity, ConnectAdminLoginGuard], resolve: {envSpecific: EnvironmentSpecificResolver} + }, + { + path: 'communities', + component: CommunitiesComponent, + canActivate: [AdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'community-edit-form', + component: CommunityEditFormComponent, + canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'manage-zenodo-communities', + component: ManageZenodoCommunitiesComponent, + canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'manage-subscribers', + component: ManageSubscribersComponent, + canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'manage-subjects', + component: SubjectsEditFormComponent, + canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'entities', + component: EntitiesComponent, + canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'classes', + component: DivIdsComponent,canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'pages', + component: PagesComponent, + canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'pageContents', + component: PageHelpContentsComponent, + canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'pageContents/new', + component: NewPageHelpContentComponent, + canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + //path: 'pageContents/edit/:id', + path: 'pageContents/edit', + component: EditPageHelpContentComponent, + canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + + { + path: 'classContents', + component: DivHelpContentsComponent,canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'classContents/new', + component: NewDivHelpContentComponent,canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'classContents/edit', + component: EditDivHelpContentComponent,canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'htmlPageContent/edit', + component: EditHtmlPageContentComponent, canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'claims', + component: ClaimsComponent,canActivate: [IsCommunity,ConnectAdminLoginGuard],resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { path: 'reload', loadChildren: './reload/libReload.module#LibReloadModule', resolve: { envSpecific: EnvironmentSpecificResolver }}, + { path: 'user-info', loadChildren: './login/libUser.module#LibUserModule', resolve: { envSpecific: EnvironmentSpecificResolver }}, + + { + path: 'stats', + component: StatsComponent, + canActivate: [IsCommunity,ConnectAdminLoginGuard], + resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'manage-projects', + component: ManageProjectsComponent, + canActivate: [IsCommunity,ConnectAdminLoginGuard], resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'manage-content-providers', + component: ManageContentProvidersComponent, + canActivate: [IsCommunity,ConnectAdminLoginGuard], resolve: { envSpecific: EnvironmentSpecificResolver } + }, + { + path: 'mining', + component: MiningComponent,canActivate: [IsCommunity,ConnectAdminLoginGuard] + }, + { + path: 'errorcommunity', + component: CommunityErrorPageComponent,canActivate: [FreeGuard] + }, + { path: '**',pathMatch: 'full',component: AdminErrorPageComponent } + + ]; + // @NgModule({ + // imports: [RouterModule.forRoot(appRoutes)], + // exports: [RouterModule], + // providers: [EnvironmentSpecificResolver, EnvironmentSpecificService] + // }) +export const appRoutingProviders: any[] = [ +]; + +export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes/*, {onSameUrlNavigation: ‘reload’}*/); diff --git a/src/app/dashboard.component.html b/src/app/dashboard.component.html new file mode 100644 index 0000000..96bba80 --- /dev/null +++ b/src/app/dashboard.component.html @@ -0,0 +1,73 @@ +
    +
    + +
    +
    +
    +

    + + Community Profile +

    +

    Edit community information, change logo url, add community managers or subjects related to community. +

    Edit Community Profile

    +
    +
    +

    + + Manage community content +

    + Manage projects and content providers that are related to the research community. +

    + Manage projects
    + Manage content providers
    + Manage subjects
    + +

    +
    +
    +

    + + Statistics & Charts +

    + +

    Manage statistical numbers & charts that will be displayed in the dashboard and monitor pages. + Manage statistics & charts +

    +
    + + +
    +

    + + Claims +

    + Manage user claims related to the research community. +

    + Manage claims +

    +
    +
    +

    + + Help texts +

    + Add or edit help text in research community pages. +

    + Add help texts in pages
    + Add help texts in classes +

    +
    +
    +

    + + Text mining rules +

    + Manage text mining rules, test the rules and see the results, save and load mining profiles. +

    + Manage text mining rules +

    +
    +
    +
    +
    +
    diff --git a/src/app/dashboard.component.ts b/src/app/dashboard.component.ts new file mode 100644 index 0000000..f623013 --- /dev/null +++ b/src/app/dashboard.component.ts @@ -0,0 +1,40 @@ +/** + * Created by stefania on 3/21/16. + */ + +import { Component } from '@angular/core'; +import {ActivatedRoute} from '@angular/router'; +import {CommunityService} from "./openaireLibrary/connect/community/community.service"; +import {EnvProperties} from './openaireLibrary/utils/properties/env-properties'; + +@Component({ + selector: 'dashboard', + templateUrl: 'dashboard.component.html', +}) + +export class DashboardComponent { + communityId:string= null; + communityType = null; + properties:EnvProperties; + + constructor( private route: ActivatedRoute, private _communityService:CommunityService) {} + + ngOnInit() { + this.route.data.subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + this.route.queryParams.subscribe(data => { + this.communityId = ((data['communityId'])?data['communityId']:data['community']); + this._communityService.getCommunity(this.properties, this.properties.communityAPI+this.communityId).subscribe ( + community => { + this.communityType = community.type; + }, + error => { + console.error('Server responded: ' + error); + } + ); + }); + }); + + } + +} diff --git a/app/domain/active-topic-questions.ts b/src/app/domain/active-topic-questions.ts similarity index 100% rename from app/domain/active-topic-questions.ts rename to src/app/domain/active-topic-questions.ts diff --git a/app/domain/community.ts b/src/app/domain/community.ts similarity index 100% rename from app/domain/community.ts rename to src/app/domain/community.ts diff --git a/app/domain/div-help-content.ts b/src/app/domain/div-help-content.ts similarity index 83% rename from app/domain/div-help-content.ts rename to src/app/domain/div-help-content.ts index a013212..6864670 100644 --- a/app/domain/div-help-content.ts +++ b/src/app/domain/div-help-content.ts @@ -1,8 +1,10 @@ import { DivId } from "./divId"; +import {Community} from './community'; export interface DivHelpContent { _id: string; divId: DivId | string; + community: string | Community; content: string; isActive: boolean; } diff --git a/app/domain/divId.ts b/src/app/domain/divId.ts similarity index 72% rename from app/domain/divId.ts rename to src/app/domain/divId.ts index f77723e..6368f82 100644 --- a/app/domain/divId.ts +++ b/src/app/domain/divId.ts @@ -1,11 +1,9 @@ import {Page} from './page'; -import {Community} from './community'; export interface DivId { _id: string; name: string; pages: string[] | Page[]; - community: string | Community; } export interface CheckDivId { diff --git a/app/domain/entity.ts b/src/app/domain/entity.ts similarity index 100% rename from app/domain/entity.ts rename to src/app/domain/entity.ts diff --git a/src/app/domain/html-page-content.ts b/src/app/domain/html-page-content.ts new file mode 100644 index 0000000..34442db --- /dev/null +++ b/src/app/domain/html-page-content.ts @@ -0,0 +1,14 @@ +import { Page } from "./page"; +import { Community } from "./community"; + +export interface HtmlPageContent { + _id: string; + page: Page | string; + community: Community | string; + content: string; +} + +export interface CheckHtmlPageContent { + pageHelpContent : HtmlPageContent; + checked : boolean; +} diff --git a/app/domain/page-help-content.ts b/src/app/domain/page-help-content.ts similarity index 100% rename from app/domain/page-help-content.ts rename to src/app/domain/page-help-content.ts diff --git a/app/domain/page.ts b/src/app/domain/page.ts similarity index 85% rename from app/domain/page.ts rename to src/app/domain/page.ts index fb0564c..b428a9a 100644 --- a/app/domain/page.ts +++ b/src/app/domain/page.ts @@ -6,6 +6,8 @@ export interface Page { name: string; type: string; isEnabled :boolean; + connect :boolean; + openaire :boolean; entities: Entity[] | string[]; } diff --git a/app/domain/question.ts b/src/app/domain/question.ts similarity index 100% rename from app/domain/question.ts rename to src/app/domain/question.ts diff --git a/app/domain/topic.ts b/src/app/domain/topic.ts similarity index 100% rename from app/domain/topic.ts rename to src/app/domain/topic.ts diff --git a/app/login/libUser.module.ts b/src/app/login/libUser.module.ts similarity index 100% rename from app/login/libUser.module.ts rename to src/app/login/libUser.module.ts diff --git a/app/login/user-routing.module.ts b/src/app/login/user-routing.module.ts similarity index 100% rename from app/login/user-routing.module.ts rename to src/app/login/user-routing.module.ts diff --git a/app/login/user.component.ts b/src/app/login/user.component.ts similarity index 100% rename from app/login/user.component.ts rename to src/app/login/user.component.ts diff --git a/app/main.ts b/src/app/main.ts similarity index 100% rename from app/main.ts rename to src/app/main.ts diff --git a/src/app/pages/claims/claims.component.ts b/src/app/pages/claims/claims.component.ts new file mode 100644 index 0000000..b6f59e6 --- /dev/null +++ b/src/app/pages/claims/claims.component.ts @@ -0,0 +1,31 @@ + +import { Component, ViewChild, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import {EnvProperties} from '../../openaireLibrary/utils/properties/env-properties'; + +@Component({ + selector: 'claims', + template: ` + `, +}) + +export class ClaimsComponent implements OnInit { + + communityPid:string; + claimsInfoURL:string; + + ngOnInit() { + + this.route.queryParams.subscribe(params => { + this.communityPid = params['communityId']; + + }); + this.route.data.subscribe((data: { envSpecific: EnvProperties }) => { + this.claimsInfoURL = data.envSpecific.claimsInformationLink; + console.log(this.claimsInfoURL); + }); + } + + constructor(private route: ActivatedRoute) {} + +} diff --git a/app/pages/community/communities.component.html b/src/app/pages/community/communities.component.html similarity index 55% rename from app/pages/community/communities.component.html rename to src/app/pages/community/communities.component.html index 999b188..4961adb 100644 --- a/app/pages/community/communities.component.html +++ b/src/app/pages/community/communities.component.html @@ -1,40 +1,41 @@ -
    - +
    - - - + + -
    +
    - +
    -
    +
    -
    +
  • @@ -54,8 +55,8 @@ @@ -72,17 +73,30 @@ + + - + - + + + + + + + + + + + + diff --git a/src/app/pages/community/communities.component.ts b/src/app/pages/community/communities.component.ts new file mode 100644 index 0000000..621c9b3 --- /dev/null +++ b/src/app/pages/community/communities.component.ts @@ -0,0 +1,241 @@ +/** + * Created by stefania on 7/13/17. + */ +import { Component, ViewChild, OnInit } from '@angular/core'; +import { ActivatedRoute } from "@angular/router"; +import { HelpContentService } from "../../services/help-content.service"; +import { FormGroup } from "@angular/forms"; +import { ModalFormComponent } from "../modal-form.component"; +import { DeleteConfirmationDialogComponent } from "../delete-confirmation-dialog.component"; +import { CommunityFormComponent } from "./community-form.component"; +import { CheckCommunity, Community } from "../../domain/community"; +import { EnvProperties } from '../../openaireLibrary/utils/properties/env-properties'; + +@Component({ + selector: 'communities', + templateUrl: './communities.component.html', +}) + +export class CommunitiesComponent implements OnInit { + + // @ViewChild(ModalFormComponent) + // @ViewChild('saveModal') + // public modal:ModalFormComponent; + // + // @ViewChild('updateModal') + // public updateModal:ModalFormComponent; + + // @ViewChild('deleteConfirmationModal') + // public deleteConfirmationModal : DeleteConfirmationDialogComponent; + @ViewChild('AlertModalSaveCommunity') alertModalSaveCommunity; + @ViewChild('AlertModalUpdateCommunity') alertModalUpdateCommunity; + @ViewChild('AlertModalDeleteCommunities') alertModalDeleteCommunities; + private selectedCommunities: string[] = []; + + @ViewChild(CommunityFormComponent) + public formComponent : CommunityFormComponent; + + public checkboxes : CheckCommunity[] = []; + + public communities : Community[] = []; + + //public errorMessage: string; + + public formGroup : FormGroup; + + private searchText : RegExp = new RegExp(''); + public properties:EnvProperties = null; + + public showLoading: boolean = true; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + public modalErrorMessage: string = ''; + + ngOnInit() { + this.formGroup = this.formComponent.form; + + this.route.data + .subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + this.getCommunities(); + + }); + } + + constructor(private route: ActivatedRoute, private _helpContentService: HelpContentService) {} + + + getCommunities() { + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + + + this._helpContentService.getCommunitiesFull( this.properties.adminToolsAPIURL).subscribe( + communities => { + this.communities = communities; + communities.forEach(_ => { + this.checkboxes.push({community : _, checked : false}); + }); + this.showLoading = false; + }, + error => this.handleError('System error retrieving communities', error)); + } + + // public showModal():void { + // this.modal.showModal(); + // } + + public toggleCheckBoxes(event) { + this.checkboxes.forEach(_ => _.checked = event.target.checked); + } + + public applyCheck(flag : boolean) { + console.info("applyCheck "+flag); + this.checkboxes.forEach(_ => _.checked = flag); + } + + public getSelectedCommunities() : string[] { + return this.checkboxes.filter(community => community.checked == true).map(checkedCommunity => checkedCommunity.community).map(res => res._id); + } + + private deleteCommunitiesFromArray(ids : string[]) : void { + for(let id of ids) { + let i = this.checkboxes.findIndex(_ => _.community._id == id); + this.checkboxes.splice(i, 1); + } + } + + public confirmDeleteCommunity(id : string) { + //this.deleteConfirmationModal.ids = [id]; + //this.deleteConfirmationModal.showModal(); + this.selectedCommunities = [id]; + this.confirmModalOpen(); + } + + public confirmDeleteSelectedCommunities() { + //this.deleteConfirmationModal.ids = this.getSelectedCommunities(); + //this.deleteConfirmationModal.showModal(); + this.selectedCommunities = this.getSelectedCommunities(); + this.confirmModalOpen(); + } + + private confirmModalOpen() { + this.alertModalDeleteCommunities.cancelButton = true; + this.alertModalDeleteCommunities.okButton = true; + this.alertModalDeleteCommunities.alertTitle = "Delete Confirmation"; + this.alertModalDeleteCommunities.message = "Are you sure you want to delete the selected community(-ies)?"; + this.alertModalDeleteCommunities.okButtonText = "Yes"; + this.alertModalDeleteCommunities.open(); + } + + public confirmedDeleteCommunities(data: any) { + this.showLoading = true; + this.updateErrorMessage = ""; + + this._helpContentService.deleteCommunities(this.selectedCommunities, this.properties.adminToolsAPIURL).subscribe( + _ => { + this.deleteCommunitiesFromArray(this.selectedCommunities); + this.showLoading = false; + }, + error => this.handleUpdateError('System error deleting the selected communities', error) + ); + } + + public editCommunity(i : number) { + let community : Community = this.checkboxes[i].community; + this.formGroup.patchValue(community); + //this.updateModal.showModal(); + this.modalErrorMessage = ""; + this.communitiesModalOpen(this.alertModalUpdateCommunity, "Update", "Update Community"); + } + + public newCommunity() { + this.formComponent.reset(); + this.modalErrorMessage = ""; + this.communitiesModalOpen(this.alertModalSaveCommunity, "Save", "Add a new Community"); + } + + private communitiesModalOpen(modal: any, title: string, yesBtn: string) { + modal.cancelButton = true; + modal.okButton = true; + modal.alertTitle = title; + modal.okButtonText = yesBtn; + modal.open(); + } + + public communitySaveConfirmed(data: any) { + if(!this.formGroup.valid) { + this.communitiesModalOpen(this.alertModalSaveCommunity, "Save", "Add a new Community"); + this.modalErrorMessage = "Please fill in all required fields marked with *"; + } else { + this.modalErrorMessage = ""; + this._helpContentService.saveCommunity( this.formGroup.value, this.properties.adminToolsAPIURL).subscribe( + community => { + this.communitySavedSuccessfully(community); + }, + error => this.handleUpdateError("System error creating community", error) + ); + } + } + + public communityUpdateConfirmed(data: any) { + if(!this.formGroup.valid) { + this.communitiesModalOpen(this.alertModalUpdateCommunity, "Update", "Update Community"); + this.modalErrorMessage = "Please fill in all required fields marked with *"; + } else { + this._helpContentService.updateCommunity( this.formGroup.value, this.properties.adminToolsAPIURL).subscribe( + community => { + this.communityUpdatedSuccessfully(community); + }, + error => this.handleUpdateError("System error updating community", error) + ); + } + } + + public communitySavedSuccessfully(community: Community) { + this.checkboxes.push({community : community, checked : false}); + console.info("checkboxes length: "+this.checkboxes.length); + this.applyCheck(false); + } + + public communityUpdatedSuccessfully(community : Community) { + this.checkboxes.find(checkItem => checkItem.community._id==community._id).community = community; + this.applyCheck(false); + } + + public filterBySearch(text : string) { + this.searchText = new RegExp(text,'i'); + this.applyFilter(); + } + + public applyFilter() { + this.checkboxes = []; + this.communities.filter(item => this.filterCommunities(item)).forEach( + _ => this.checkboxes.push({community: _, checked: false}) + ); + } + + public filterCommunities(community : Community) : boolean { + let textFlag = this.searchText.toString() == '' || (community.name).match(this.searchText) != null; + return textFlag; + } + + handleUpdateError(message: string, error) { + if(error == null) { + this.formComponent.reset(); + } else { + this.updateErrorMessage = message; + console.log('Server responded: ' +error); + } + + this.showLoading = false; + } + + handleError(message: string, error) { + this.errorMessage = message; + console.log('Server responded: ' + error); + + this.showLoading = false; + } +} diff --git a/src/app/pages/community/community-edit-form/community-edit-form.component.html b/src/app/pages/community/community-edit-form/community-edit-form.component.html new file mode 100644 index 0000000..71222c6 --- /dev/null +++ b/src/app/pages/community/community-edit-form/community-edit-form.component.html @@ -0,0 +1,114 @@ +
    +
    Edit community profile
    + + + +
    + + +
    - - + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Name * : +
    Please add name.
    +
    Short Name: +
    Description: +
    Logo Url: +
    Status: +
    Managers: +
    +
    +
    Please add a valid email.
    + + + + +
    + + +
    +
    * Required fields
    +
    + + + + + + + + + + + + + +
    +
    + + + +
    +
    + + diff --git a/src/app/pages/community/community-edit-form/community-edit-form.component.ts b/src/app/pages/community/community-edit-form/community-edit-form.component.ts new file mode 100644 index 0000000..66b2d2b --- /dev/null +++ b/src/app/pages/community/community-edit-form/community-edit-form.component.ts @@ -0,0 +1,315 @@ +import {Component, OnInit, Input} from '@angular/core'; +import {SimpleChanges, OnChanges} from '@angular/core'; +import {FormGroup, FormArray, FormBuilder, Validators} from "@angular/forms"; +import {ActivatedRoute, Router} from '@angular/router'; + +import {HelpContentService} from "../../../services/help-content.service"; +import {CommunityService} from "../../../openaireLibrary/connect/community/community.service"; +import {SubscribeService} from "../../../openaireLibrary/utils/subscribe/subscribe.service" +import {EnvProperties} from '../../../openaireLibrary/utils/properties/env-properties'; + +import {CommunityInfo} from '../../../openaireLibrary/connect/community/communityInfo'; + +@Component({ + selector: 'community-edit-form', + templateUrl: './community-edit-form.component.html', +}) + +export class CommunityEditFormComponent implements OnInit{ + + @Input('group') + myForm: FormGroup; + + public showLoading: boolean = true; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + + public successfulSaveMessage: string = ''; + public successfulResetMessage: string = ''; + + public hasChanged: boolean = false; + + public res=[]; + + params: any; + + public communityId = null; + public community = null; + public firstVersionOfManagers: string[]; + public newManagersToSubscribe: string[]; + + public properties:EnvProperties = null; + + constructor (private route: ActivatedRoute, + private _router: Router, + public _fb: FormBuilder, + private _helpContentService: HelpContentService, + private _communityService: CommunityService, + private _subscribeService: SubscribeService){ } + + + ngOnInit() { + this.route.data.subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + this.route.queryParams.subscribe( + communityId => { + this.communityId = communityId['communityId']; + + if (this.communityId != null && this.communityId != '') { + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + + this._communityService.getCommunity(this.properties, this.properties.communityAPI+this.communityId).subscribe ( + community => { + this.community = community; + this.params = {community: encodeURIComponent('"'+community.queryId+'"')}; + this.firstVersionOfManagers = community.managers.slice(); + console.log("First version of managers " + this.firstVersionOfManagers); + console.log(community); + this.showLoading = false; + }, + error => this.handleError('System error retrieving community profile', error) + ); + } + }); + }); + } + + public addManager() { + this.community.managers.push(""); + } + + public removeManager(i : any) { + this.community.managers.splice(i,1); + } + + // public addSubject() { + // this.community.subjects.push(""); + // } + // + // public removeSubject(i : any) { + // this.community.subjects.splice(i,1); + // } + + public resetForm(communityId: string) { + if (communityId != null && communityId != '') { + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + + this._communityService.getCommunity(this.properties, this.properties.communityAPI+communityId).subscribe ( + community => { + this.community = community; + this.params = {community: encodeURIComponent('"'+community.queryId+'"')}; + this.showLoading = false; + this.handleSuccessfulReset('Form reseted!') + }, + error => this.handleError('System error retrieving community profile', error) + ); + } + this.resetChange(); + } + + public updateCommunity() { + + if (this.communityId != null && this.communityId != '') { + this.showLoading = true; + var community = this.parseUpdatedCommunity(); + + // TODO delete after testing + console.log(community); + + if (!this.hasValidEmail(community) || !this.hasFilled(community["name"])) { + this._router.navigate(['/community-edit-form'], {queryParams: { "communityId": this.communityId}}); + } else { + var newManagers = this.getNewManagers(); + this._communityService.updateCommunity(this.properties.communityAPI+this.communityId, community).subscribe( + + community => { + // TODO delete after testing + console.log("New managers in component: " + newManagers); + if (newManagers !== null) { + for (let i = 0; i < newManagers.length; i++) { + console.log(newManagers[i]); + this._subscribeService.subscribeToCommunity(this.communityId, newManagers[i], this.properties.adminToolsAPIURL).subscribe( + res => { + console.log(res); + } + ); + this._subscribeService.getCommunitySubscribers(this.communityId, this.properties.adminToolsAPIURL).subscribe( + res => { + console.log(res); + } + ); + } + } + this.handleSuccessfulSave('Community saved!') + }, + error => { + this.handleUpdateError('System error updating community profile', error) + }, + () => { this.firstVersionOfManagers = this.community["managers"].slice(); } + ); + this._router.navigate(['/community-edit-form'], {queryParams: { "communityId": this.communityId}}); + } + } + this.resetChange(); + } + + + private parseUpdatedCommunity() : {} { + var community = {}; + + community["name"] = this.community.title; + community["shortName"] = this.community.shortTitle; + community["status"] = this.community.status; + community["description"] = this.community.description; + community["logoUrl"] = this.community.logoUrl; + + community['managers'] = new Array(); + this.community.managers = this.getNonEmptyItems(this.community.managers); + community['managers'] = this.community.managers; + + return community; + } + + private getNewManagers(): Array { + + let newManagers = null; + for (let i = 0; i < this.community['managers'].length; i++) { + if (!this.firstVersionOfManagers.includes(this.community['managers'][i])) { + if(newManagers === null){ + newManagers = new Array(); + } + newManagers.push(this.community['managers'][i]); + } + } + console.log("New managers are: " + newManagers); + return newManagers; + } + + private subscribeNewManagers(newManagers: string[]): boolean { + return true; + } + + private getNonEmptyItems(data: string[]): string[] { + let length = data.length; + let arrayNonEmpty = new Array(); + + let j = 0; + for (let i = 0; i < length; i++) { + if (this.isEmpty(data[i])) { + //console.log(data[i]); + } else if (this.isNonEmpty(data[i])) { + arrayNonEmpty[j] = data[i]; + j++; + //console.log(data[i]); + } + } + return arrayNonEmpty; + } + + private hasFilled(data: any): boolean { + if (this.isNonEmpty(data) && !this.isEmpty(data)) { + // TODO remove console message after final testing + console.log("NAME IS NOT EMPTY"); + return true; + } + // TODO remove console message after final testing + console.log("NAME IS EMPTY"); + return false; + } + + private isEmpty(data: string): boolean { + if (data != undefined && !data.replace(/\s/g, '').length) + return true; + else + return false; + } + + private isNonEmpty(data: string): boolean { + if (data != undefined && data != null) + return true; + else + return false; + } + + private hasValidEmail(data: any): boolean { + let length = data['managers'].length; + + for(let i = 0; i < length; i++) { + if (!this.emailValidator(data['managers'][i])){ + // TODO remove console message after final testing + console.log("INVALID EMAIL"); + return false; + } + } + // TODO remove console message after final testing + console.log("ALL EMAILS ARE VALID"); + return true; + } + + private emailValidator(email : any): boolean { + if (email.match("^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$")) + return true; + else + return false; + } + + private change() { + this.hasChanged = true; + this.successfulSaveMessage = ''; + this.successfulResetMessage = ''; + // TODO remove after testing + console.log('I have changed: I AM TRUE'); + } + + private resetChange() { + this.hasChanged = false; + // TODO remove after testing + console.log('I have changed: I AM FALSE'); + } + + public get form() { + return this._fb.group({ + _id : '', + name : ['', Validators.required] + }); + } + + public reset() { + this.myForm.patchValue({ + name : '', + _id : '' + }); + } + + handleUpdateError(message: string, error) { + this.updateErrorMessage = message; + console.log('Server responded: ' +error); + + this.showLoading = false; + } + + handleError(message: string, error) { + this.errorMessage = message; + console.log('Server responded: ' + error); + + this.showLoading = false; + } + + handleSuccessfulSave(message) { + this.showLoading = false; + this.successfulSaveMessage = message; + } + + handleSuccessfulReset(message) { + this.showLoading = false; + this.successfulResetMessage = message; + } + + trackByFn(index: any, item: any) { + return index; + } +} diff --git a/app/pages/community/community-edit-form/community-edit-form.module.ts b/src/app/pages/community/community-edit-form/community-edit-form.module.ts similarity index 100% rename from app/pages/community/community-edit-form/community-edit-form.module.ts rename to src/app/pages/community/community-edit-form/community-edit-form.module.ts diff --git a/app/pages/community/community-edit-form/community-edit-form.service.ts b/src/app/pages/community/community-edit-form/community-edit-form.service.ts similarity index 100% rename from app/pages/community/community-edit-form/community-edit-form.service.ts rename to src/app/pages/community/community-edit-form/community-edit-form.service.ts diff --git a/app/pages/community/community-form.component.html b/src/app/pages/community/community-form.component.html similarity index 80% rename from app/pages/community/community-form.component.html rename to src/app/pages/community/community-form.component.html index e18370b..81e4058 100644 --- a/app/pages/community/community-form.component.html +++ b/src/app/pages/community/community-form.component.html @@ -1,10 +1,10 @@
    - +
    - +
    diff --git a/app/pages/community/community-form.component.ts b/src/app/pages/community/community-form.component.ts similarity index 100% rename from app/pages/community/community-form.component.ts rename to src/app/pages/community/community-form.component.ts diff --git a/src/app/pages/community/content-providers/add-content-providers.component.html b/src/app/pages/community/content-providers/add-content-providers.component.html new file mode 100644 index 0000000..4ee8acf --- /dev/null +++ b/src/app/pages/community/content-providers/add-content-providers.component.html @@ -0,0 +1,123 @@ +
    +
    + +
    + + +
    + +
    +
    + +
    + + Newly added content providers will be linked to your community on the nextfor the next run of our algorithms. +
    + + +
    + + If you wish to suggest a missing content provider, please contact us via + feedback@openaire.eu. +
    + +
    +
    + + {{openaireSearchUtils.totalResults | number}} content providers, page {{openaireSearchUtils.page | number}} of {{(totalPages()) | number}} + + + + +
    +
    + + + +
    +

    For more results please try a new, more specific query

    +
    + +
    +
    + + {{openaireSearchUtils.totalResults | number}} content providers, page {{openaireSearchUtils.page | number}} of {{(totalPages()) | number}} + + + + +
    +
    diff --git a/src/app/pages/community/content-providers/add-content-providers.component.ts b/src/app/pages/community/content-providers/add-content-providers.component.ts new file mode 100644 index 0000000..c5b4c92 --- /dev/null +++ b/src/app/pages/community/content-providers/add-content-providers.component.ts @@ -0,0 +1,214 @@ +import { Component, ViewChild, OnInit, ViewEncapsulation, Input, Output, EventEmitter } from '@angular/core'; +import { ActivatedRoute } from "@angular/router"; +import {SearchResult} from '../../../openaireLibrary/utils/entities/searchResult'; +import {ErrorCodes} from '../../../openaireLibrary/utils/properties/errorCodes'; +import {SearchFields, FieldDetails} from '../../../openaireLibrary/utils/properties/searchFields'; +import {SearchUtilsClass } from '../../../openaireLibrary/searchPages/searchUtils/searchUtils.class'; +import {EnvProperties} from '../../../openaireLibrary/utils/properties/env-properties'; +import {SearchDataprovidersService} from '../../../openaireLibrary/services/searchDataproviders.service'; +import {RouterHelper} from '../../../openaireLibrary/utils/routerHelper.class'; +import {DOI, StringUtils} from '../../../openaireLibrary/utils/string-utils.class'; +import {ManageCommunityContentProvidersService} from '../../../services/manageContentProviders.service'; + +@Component({ + selector: 'add-content-providers', + templateUrl: './add-content-providers.component.html', +}) + +export class AddContentProvidersComponent implements OnInit { + @Input() communityContentProviders = []; + + private community: string = ''; + + public openaireContentProviders = []; + public undo = {}; + public queryParameters: string = ""; + + public disableForms: boolean = false; + + public warningMessage = ""; + public infoMessage = ""; + + public rowsOnPage:number = 10; + + public routerHelper:RouterHelper = new RouterHelper(); + private errorCodes: ErrorCodes; + public openaireSearchUtils:SearchUtilsClass = new SearchUtilsClass(); + public properties:EnvProperties = null; + public pagingLimit:number = 0; + public resultsPerPage: number = 0; + + public subResults: any; subAdd: any; subRemove: any; + public body:string = "Send from page"; + + ngOnInit() { + this.route.data + .subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + this.pagingLimit = data.envSpecific.pagingLimit; + this.resultsPerPage =data.envSpecific.resultsPerPage; + + this.route.queryParams.subscribe(params => { + this.community = params['communityId']; + this._getOpenaireContentProviders("", 1, 10); + + var referrer = null; + if (typeof location !== 'undefined') { + referrer = location.href; + } + this.body = "[Please write your message here]"; + this.body = StringUtils.URIEncode(this.body); + }); + }); + } + + constructor(private route: ActivatedRoute, private _searchContentProvidersService: SearchDataprovidersService, private _manageCommunityContentProvidersService: ManageCommunityContentProvidersService) { + this.errorCodes = new ErrorCodes(); + this.openaireSearchUtils.status = this.errorCodes.LOADING; + } + + public ngOnDestroy() { + if(this.subResults){ + this.subResults.unsubscribe(); + } + if(this.subAdd) { + this.subAdd.unsubscribe(); + } + if(this.subRemove) { + this.subRemove.unsubscribe(); + } + } + + public addContentProvider(contenProvider: SearchResult) { + console.info("Add: "+ contenProvider.id); + this.subAdd = this._manageCommunityContentProvidersService.addContentProvider(this.properties, this.community, contenProvider).subscribe( + data => { + console.info("data ADD"); + console.info(data); + this.undo[contenProvider.id] = data.id; + }, + err => { + console.info("error ADD"); + console.log(err.status); + }, + () => { + console.info("completed ADD"); + } + ) + } + + public removeContentProvider(contentProviderId: string, communityContentProviderId: string) { + console.info("REMOVE: "+ contentProviderId); + this.subRemove = this._manageCommunityContentProvidersService.removeContentProvider(this.properties, this.community, contentProviderId).subscribe( + data => { + console.info("data REMOVE"); + console.info(data); + }, + err => { + console.info("error REMOVE"); + console.log(err); + }, + () => { + console.info("completed REMOVE"); + this.undo[communityContentProviderId] = ""; + } + ) + } + + public inCommunity(contentProvider: any): any { + for(let communityContentProvider of this.communityContentProviders) { + if(communityContentProvider.openaireId == contentProvider.id) { + return true; + } + } + + if(this.undo[contentProvider.id]) { + return true; + } + return false; + } + + private _getOpenaireContentProviders(parameters:string, page: number, size: number){ + console.info("_getOpenaireContentProviders"); + if(page > this.pagingLimit) { + size=0; + } + + if(this.openaireSearchUtils.status == this.errorCodes.LOADING) { + this.openaireSearchUtils.status = this.errorCodes.LOADING; + + this.disableForms = true; + this.openaireContentProviders = []; + this.openaireSearchUtils.totalResults = 0; + + this.subResults = this._searchContentProvidersService.searchDataproviders(parameters, null, page, size, [], this.properties).subscribe( + data => { + this.undo = {}; + console.info("total openaire content providers = "+data[0]); + this.openaireSearchUtils.totalResults = data[0]; + this.openaireContentProviders = data[1]; + + this.openaireSearchUtils.status = this.errorCodes.DONE; + if(this.openaireSearchUtils.totalResults == 0 ){ + this.openaireSearchUtils.status = this.errorCodes.NONE; + } + + this.disableForms = false; + + if(this.openaireSearchUtils.status == this.errorCodes.DONE) { + // Page out of limit!!! + let totalPages:any = this.openaireSearchUtils.totalResults/(this.openaireSearchUtils.size); + if(!(Number.isInteger(totalPages))) { + totalPages = (parseInt(totalPages, 10) + 1); + } + if(totalPages < page) { + this.openaireSearchUtils.totalResults = 0; + this.openaireSearchUtils.status = this.errorCodes.OUT_OF_BOUND; + } + } + }, + err => { + console.log(err); + //TODO check erros (service not available, bad request) + if(err.status == '404') { + this.openaireSearchUtils.status = this.errorCodes.NOT_FOUND; + } else if(err.status == '500') { + this.openaireSearchUtils.status = this.errorCodes.ERROR; + } else { + this.openaireSearchUtils.status = this.errorCodes.NOT_AVAILABLE; + } + + this.disableForms = false; + } + ); + } + } + + totalPages(): number { + let totalPages:any = this.openaireSearchUtils.totalResults/(this.rowsOnPage); + if(!(Number.isInteger(totalPages))) { + totalPages = (parseInt(totalPages, 10) + 1); + } + return totalPages; + } + + keywordChanged(keyword) { + this.openaireSearchUtils.keyword = keyword; + this.buildQueryParameters(); + this.goTo(1); + } + + buildQueryParameters() { + this.queryParameters = ""; + + if(this.openaireSearchUtils.keyword) { + this.queryParameters = "q="+StringUtils.URIEncode(this.openaireSearchUtils.keyword); + } + } + + goTo(page:number = 1){ + this.openaireSearchUtils.page=page; + this.openaireSearchUtils.status = this.errorCodes.LOADING; + this._getOpenaireContentProviders(this.queryParameters, page, 10); + } +} diff --git a/src/app/pages/community/content-providers/communityContentProviders.module.ts b/src/app/pages/community/content-providers/communityContentProviders.module.ts new file mode 100644 index 0000000..f780c51 --- /dev/null +++ b/src/app/pages/community/content-providers/communityContentProviders.module.ts @@ -0,0 +1,52 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { HttpModule, JsonpModule } from '@angular/http'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; + +import { EnvironmentSpecificResolver } from '../../../openaireLibrary/utils/properties/environmentSpecificResolver'; +import { EnvironmentSpecificService } from '../../../openaireLibrary/utils/properties/environment-specific.service'; + +import { DataTablesModule } from 'angular-datatables'; +import { ManageContentProvidersComponent } from './manage-content-providers.component'; +import { ManageCommunityContentProvidersService } from "../../../services/manageContentProviders.service"; +import {SearchDataprovidersServiceModule} from '../../../openaireLibrary/connect/contentProviders/searchDataprovidersService.module'; + +import { RemoveContentProvidersComponent } from './remove-content-providers.component'; +import { AddContentProvidersComponent } from './add-content-providers.component'; +import { SearchDataprovidersService } from "../../../openaireLibrary/services/searchDataproviders.service"; +import { PagingModule } from '../../../openaireLibrary/utils/paging.module'; +import { SearchPagingModule } from '../../../openaireLibrary/searchPages/searchUtils/searchPaging.module'; + +import {ErrorMessagesModule} from '../../../openaireLibrary/utils/errorMessages.module'; +import {AlertModalModule} from '../../../openaireLibrary/utils/modal/alertModal.module'; +import {FABModule} from '../../../utils/fabModule.module'; + +@NgModule({ + imports: [ + BrowserModule, + HttpModule, + JsonpModule, + FormsModule, + ReactiveFormsModule, + RouterModule, + DataTablesModule, + PagingModule, SearchPagingModule, + ErrorMessagesModule, + AlertModalModule, + SearchDataprovidersServiceModule, + FABModule + ], + declarations: [ + ManageContentProvidersComponent, + RemoveContentProvidersComponent, + AddContentProvidersComponent + ], + providers: [ + ManageCommunityContentProvidersService, + SearchDataprovidersService, + EnvironmentSpecificResolver,EnvironmentSpecificService + ] +}) + +export class CommunityContentProvidersModule { } diff --git a/src/app/pages/community/content-providers/manage-content-providers.component.ts b/src/app/pages/community/content-providers/manage-content-providers.component.ts new file mode 100644 index 0000000..1947ee4 --- /dev/null +++ b/src/app/pages/community/content-providers/manage-content-providers.component.ts @@ -0,0 +1,72 @@ +import { Component, ViewChild, OnInit, ViewEncapsulation, Input } from '@angular/core'; +import { ActivatedRoute } from "@angular/router"; + +import {RemoveContentProvidersComponent} from './remove-content-providers.component'; +import {AddContentProvidersComponent} from './add-content-providers.component'; + +@Component({ + selector: 'manage-content-providers', + template: ` +
    + + +
    + + +
    + +
    + ` +}) + +export class ManageContentProvidersComponent implements OnInit { + private community: string = ''; + + @Input() communityContentProviders =[]; + @ViewChild (RemoveContentProvidersComponent) removeContentProvidersComponent : RemoveContentProvidersComponent ; + @ViewChild (AddContentProvidersComponent) addContentProvidersComponent : AddContentProvidersComponent ; + + public warningMessage = ""; + public infoMessage = ""; + + public toggle: boolean = true; + public updateCommunityContentProvidersOnToggle: boolean = false; + public pageTitle: string = "Manage content providers"; + public toggleLinkMessage: string = "Manage content providers"; + + ngOnInit() { + this.route.queryParams.subscribe(params => { + if(params['communityId']) { + this.community = params['communityId']; + } + }); + } + + constructor(private route: ActivatedRoute) {} + + public ngOnDestroy() {} + + public updateCommunityContentProviders() { + this.toggle = !this.toggle; + if(this.toggle) { + this.pageTitle = "Manage content providers"; + //this.toggleLinkMessage = "Missing content providers?"; + + this.removeContentProvidersComponent._getCommunityContentProviders(); + this.addContentProvidersComponent.undo = {}; + } else { + this.updateCommunityContentProvidersOnToggle = false; + this.pageTitle = "Search content providers"; + //this.toggleLinkMessage = "Manage content providers"; + } + } + + public communityContentProvidersChanged($event) { + this.communityContentProviders = $event.value; + } +} diff --git a/src/app/pages/community/content-providers/remove-content-providers.component.html b/src/app/pages/community/content-providers/remove-content-providers.component.html new file mode 100644 index 0000000..c5e7ec1 --- /dev/null +++ b/src/app/pages/community/content-providers/remove-content-providers.component.html @@ -0,0 +1,79 @@ +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + This functionality is not yet fully integrated, stay tuned! +
    + +
    + + +
    +
    + + {{communitySearchUtils.totalResults | number}} content providers, page {{communitySearchUtils.page | number}} of {{(totalPages()) | number}} + + + + +
    +
    + + +
    +
    + + + + + + + + + + + + + + + + +
    NameOfficial NameAction
    + + {{result.name}} + [no name available] + + + {{result.officialname}} + - + + +
    +
    +
    + +
    +
    + + {{communitySearchUtils.totalResults | number}} content providers, page {{communitySearchUtils.page | number}} of {{(totalPages()) | number}} + + + + +
    +
    + + diff --git a/src/app/pages/community/content-providers/remove-content-providers.component.ts b/src/app/pages/community/content-providers/remove-content-providers.component.ts new file mode 100644 index 0000000..a82fa6b --- /dev/null +++ b/src/app/pages/community/content-providers/remove-content-providers.component.ts @@ -0,0 +1,300 @@ +import { Component, ViewChild, OnInit, ViewEncapsulation, Input, Output, EventEmitter } from '@angular/core'; +import { ActivatedRoute } from "@angular/router"; +import { Subject } from 'rxjs/Subject'; +import { DataTableDirective } from 'angular-datatables'; + +import {ErrorCodes} from '../../../openaireLibrary/utils/properties/errorCodes'; +import {SearchUtilsClass } from '../../../openaireLibrary/searchPages/searchUtils/searchUtils.class'; +import {EnvProperties} from '../../../openaireLibrary/utils/properties/env-properties'; +import {ManageCommunityContentProvidersService} from '../../../services/manageContentProviders.service'; +import {SearchCommunityDataprovidersService} from '../../../openaireLibrary/connect/contentProviders/searchDataproviders.service'; +import {RouterHelper} from '../../../openaireLibrary/utils/routerHelper.class'; +import {DOI, StringUtils} from '../../../openaireLibrary/utils/string-utils.class'; + +@Component({ + selector: 'remove-content-providers', + templateUrl: './remove-content-providers.component.html', + styles: [` + #dpTable_info, #dpTable_paginate, #dpTable_length, #dpTable_filter{ + display: none; + } + + `], + encapsulation: ViewEncapsulation.None // this used in order styles to work +}) + +export class RemoveContentProvidersComponent implements OnInit { + public routerHelper:RouterHelper = new RouterHelper(); + + private community: string = ''; + public communityUrl: string = "https://beta.explore.openaire.eu"; + + private errorCodes: ErrorCodes; + + @Output() communityContentProvidersChanged = new EventEmitter(); + public communityContentProviders = []; + public communitySearchUtils:SearchUtilsClass = new SearchUtilsClass(); + + public sub: any; public subResults: any; subRemove: any; + properties:EnvProperties; + + public disableForms: boolean = false; + + dtOptions: DataTables.Settings = {}; + showTable = false; filteringAdded = false; + @ViewChild(DataTableDirective) datatableElement: DataTableDirective; + dtTrigger: Subject = new Subject(); //necessary + + public rowsOnPage:number = 10; + + public queryParameters: string = ""; + + public query = ''; + public selectedContentProviders=[] ; + public elementRef; + + public contentProviders:string[]; + private triggered: boolean = false; + + private selectedCommunityContentProvider: any; + + @ViewChild('AlertModalDeleteCommunity') alertModalDeleteCommunity; + + ngOnInit() { + this.route.data.subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + }); + + this.route.queryParams.subscribe(params => { + if(params['communityId']) { + this.community = params['communityId']; + this.communityUrl = "https://beta."+this.community+".openaire.eu"; + + this._getCommunityContentProviders(); + } + }); + + this.dtOptions = { + "pageLength": this.rowsOnPage, + "language": { + "search": "", + "searchPlaceholder": "Search content providers..." + } + }; + + this.communitySearchUtils.keyword = ""; + } + + constructor(private route: ActivatedRoute, + private _manageCommunityContentProvidersService: ManageCommunityContentProvidersService, + private _searchCommunityContentProvidersService: SearchCommunityDataprovidersService) { + this.errorCodes = new ErrorCodes(); + this.communitySearchUtils.status = this.errorCodes.LOADING; + } + + public ngOnDestroy() { + if(this.sub){ + this.sub.unsubscribe(); + } + if(this.subResults){ + this.subResults.unsubscribe(); + } + if(this.subRemove){ + this.subRemove.unsubscribe(); + } + + $.fn['dataTable'].ext.search.pop(); + } + + rerender(): void { + this.datatableElement.dtInstance.then((dtInstance: DataTables.Api) => { + // Destroy the table first + dtInstance.destroy(); + + // Call the dtTrigger to rerender again + this.dtTrigger.next(); + }); + } + + ngAfterViewInit(): void { + $.fn['dataTable'].ext.search.push((settings, data, dataIndex) => { + + if (this.filterData(data, this.communitySearchUtils.keyword)) { + return true; + } + return false; + }); + + console.info("ngAfterViewInit"); + } + + filterData(row: any, query: string) { + let returnValue: boolean = false; + + if(query) { + for(var i=0; i <2; i++){ + var r= this.filterQuery(row[i], query); + if(r) { + returnValue = true; + break; + } + } + + if(!returnValue) { + return false; + } + } + + return true; + } + + filterQuery(data, query){ + if(data.toLowerCase().indexOf(query.toLowerCase()) > -1){ + return true; + }else{ + return false; + } + } + + + /* + Trigger a table draw in order to get the initial filtering + */ + triggerInitialLoad(){ + this.triggered = true; + console.info("triggerInitialLoad"); + setTimeout(function(){ + var table = ($('#dpTable')).DataTable(); + table.page( 0 ).draw( false ); + }, 500); + this.dtTrigger.next(); + } + + goTo(page:number = 1){ + this.communitySearchUtils.page=page; + + var table = $('#dpTable').DataTable(); + table.page( page - 1 ).draw( false ); + + var info = table.page.info(); + console.info("records: "+info.recordsDisplay); + this.communitySearchUtils.totalResults = info.recordsDisplay; + } + + totalPages(): number { + let totalPages:any = this.communitySearchUtils.totalResults/(this.rowsOnPage); + if(!(Number.isInteger(totalPages))) { + totalPages = (parseInt(totalPages, 10) + 1); + } + return totalPages; + } + + public confirmedDeleteContentProvider(data : any) { + console.info("REMOVE: "+ this.selectedCommunityContentProvider.id); + this.subRemove = this._manageCommunityContentProvidersService.removeContentProvider(this.properties, this.community, this.selectedCommunityContentProvider.id).subscribe( + data => { + console.info("data REMOVE"); + console.info(data); + }, + err => { + console.info("error REMOVE"); + console.log(err); + }, + () => { + console.info("completed REMOVE"); + let index = this.communityContentProviders.indexOf(this.selectedCommunityContentProvider); + this.communityContentProviders.splice(index, 1); + + this.communitySearchUtils.totalResults--; + this.communitySearchUtils.page=1; + + this.rerender(); + } + ) + } + + public removeContentProvider(communityContentProvider: any) { + this.selectedCommunityContentProvider = communityContentProvider; + this.alertModalDeleteCommunity.cancelButton = true; + this.alertModalDeleteCommunity.okButton = true; + this.alertModalDeleteCommunity.alertTitle = "Remove content provider?"; + let title = ""; + if(communityContentProvider.name) { + title = communityContentProvider.name; + } + if(communityContentProvider.name && communityContentProvider.acronym) { + title += " ("; + } + if(communityContentProvider.acronym) { + title += communityContentProvider.acronym; + } + if(communityContentProvider.name && communityContentProvider.acronym) { + title += ") "; + } + this.alertModalDeleteCommunity.message = "Content Provider"; + if(title) { + this.alertModalDeleteCommunity.message += " '"+title+"' "; + } + this.alertModalDeleteCommunity.message += "will be removed from your community. Are you sure?"; + this.alertModalDeleteCommunity.okButtonText = "Yes"; + this.alertModalDeleteCommunity.open(); + } + + public _getCommunityContentProviders(){ + this.communitySearchUtils.status = this.errorCodes.LOADING; + this.disableForms = true; + this.communityContentProviders = []; + this.communitySearchUtils.totalResults = 0; + this.communitySearchUtils.page=1; + this.communitySearchUtils.keyword = ""; + + this.subResults = this._searchCommunityContentProvidersService.searchDataproviders(this.properties, this.community).subscribe( + data => { + console.info(data); + console.info("search Content Providers [total communityContentProviders:"+data.length+"]"); + this.communityContentProviders = data; + + this.communitySearchUtils.totalResults = data.length; + this.communitySearchUtils.status = this.errorCodes.DONE; + // if(this.communitySearchUtils.totalResults == 0 ){ + // this.communitySearchUtils.status = this.errorCodes.NONE; + // } + this.disableForms = false; + if(!this.triggered) { + this.triggerInitialLoad(); + } else { + var table = $('#dpTable').DataTable(); + table.clear(); + + this.rerender(); + } + + this.communityContentProvidersChanged.emit({ + value: this.communityContentProviders, + }); + }, + err => { + console.log(err); + //TODO check erros (service not available, bad request) + + if(err.status == '404') { + this.communitySearchUtils.status = this.errorCodes.NOT_FOUND; + } else if(err.status == '500') { + this.communitySearchUtils.status = this.errorCodes.ERROR; + } else { + this.communitySearchUtils.status = this.errorCodes.NOT_AVAILABLE; + } + + this.disableForms = false; + if(!this.triggered) { + this.triggerInitialLoad(); + } else { + var table = $('#dpTable').DataTable(); + table.clear(); + + this.rerender(); + } + } + ); + } +} diff --git a/src/app/pages/community/projects/add-projects.component.html b/src/app/pages/community/projects/add-projects.component.html new file mode 100644 index 0000000..73fd9d4 --- /dev/null +++ b/src/app/pages/community/projects/add-projects.component.html @@ -0,0 +1,118 @@ +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    + +Newly added projects will be linked to your community on the next run of our algorithms. +
    + + +
    + + If you wish to suggest a new funder to include or report a missing project, please contact us via + feedback@openaire.eu. +
    + +
    +
    + + {{openaireSearchUtils.totalResults | number}} projects, page {{openaireSearchUtils.page | number}} of {{(totalPages()) | number}} + + + + +
    +
    + + + +
    +

    For more results please try a new, more specific query

    +
    + +
    +
    + + {{openaireSearchUtils.totalResults | number}} projects, page {{openaireSearchUtils.page | number}} of {{(totalPages()) | number}} + + + + +
    +
    diff --git a/src/app/pages/community/projects/add-projects.component.ts b/src/app/pages/community/projects/add-projects.component.ts new file mode 100644 index 0000000..8c39de9 --- /dev/null +++ b/src/app/pages/community/projects/add-projects.component.ts @@ -0,0 +1,254 @@ +import { Component, ViewChild, OnInit, ViewEncapsulation, Input, Output, EventEmitter } from '@angular/core'; +import { ActivatedRoute } from "@angular/router"; +//import { Subject } from 'rxjs/Subject'; +import {SearchResult} from '../../../openaireLibrary/utils/entities/searchResult'; +import {ErrorCodes} from '../../../openaireLibrary/utils/properties/errorCodes'; +import {SearchFields, FieldDetails} from '../../../openaireLibrary/utils/properties/searchFields'; +import {SearchUtilsClass } from '../../../openaireLibrary/searchPages/searchUtils/searchUtils.class'; +import {EnvProperties} from '../../../openaireLibrary/utils/properties/env-properties'; +import {SearchProjectsService} from '../../../openaireLibrary/services/searchProjects.service'; +import {RouterHelper} from '../../../openaireLibrary/utils/routerHelper.class'; +import {DOI, StringUtils} from '../../../openaireLibrary/utils/string-utils.class'; +import {ManageCommunityProjectsService} from '../../../services/manageProjects.service'; + +@Component({ + selector: 'add-projects', + templateUrl: './add-projects.component.html', +}) + +export class AddProjectsComponent implements OnInit { + @Input() communityProjects = []; + //@Output() communityProjectsChanged = new EventEmitter(); + + private community: string = ''; + + public openaireProjects = []; + public undo = {}; + public queryParameters: string = ""; + + public funders:string[]; + public selectedFunderId:string ="0"; + selectedFunderName:string ="Select funder:"; + + public disableForms: boolean = false; + + public warningMessage = ""; + public infoMessage = ""; + + public rowsOnPage:number = 10; + + public routerHelper:RouterHelper = new RouterHelper(); + private errorCodes: ErrorCodes; + public openaireSearchUtils:SearchUtilsClass = new SearchUtilsClass(); + public properties:EnvProperties = null; + public pagingLimit:number = 0; + public resultsPerPage: number = 0; + + public subFunders: any; public subResults: any; subAdd: any; subRemove: any; + public body:string = "Send from page"; + + ngOnInit() { + this.route.data + .subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + this.pagingLimit = data.envSpecific.pagingLimit; + this.resultsPerPage =data.envSpecific.resultsPerPage; + + this.route.queryParams.subscribe(params => { + this.community = params['communityId']; + this.getFunders(); + this._getOpenaireProjects("", 1, 10); + + var referrer = null; + if (typeof location !== 'undefined') { + referrer = location.href; + } + this.body = "[Please write your message here]"; + this.body = StringUtils.URIEncode(this.body); + }); + }); + } + + constructor(private route: ActivatedRoute, private _searchProjectsService: SearchProjectsService, private _manageCommunityProjectsService: ManageCommunityProjectsService) { + this.errorCodes = new ErrorCodes(); + this.openaireSearchUtils.status = this.errorCodes.LOADING; + } + + public ngOnDestroy() { + if(this.subFunders){ + this.subFunders.unsubscribe(); + } + if(this.subResults){ + this.subResults.unsubscribe(); + } + if(this.subAdd) { + this.subAdd.unsubscribe(); + } + if(this.subRemove) { + this.subRemove.unsubscribe(); + } + } + + public addProject(project: SearchResult) { + console.info("Add: "+ project.id); + this.subAdd = this._manageCommunityProjectsService.addProject(this.properties, this.community, project).subscribe( + data => { + console.info("data ADD"); + console.info(data); + this.undo[project.id] = data.id; + }, + err => { + console.info("error ADD"); + console.log(err.status); + }, + () => { + console.info("completed ADD"); + } + ) + } + + public removeProject(projectId: string, communityProjectId: string) { + console.info("REMOVE: "+ projectId); + this.subRemove = this._manageCommunityProjectsService.removeProject(this.properties, this.community, projectId).subscribe( + data => { + console.info("data REMOVE"); + console.info(data); + }, + err => { + console.info("error REMOVE"); + console.log(err); + }, + () => { + console.info("completed REMOVE"); + this.undo[communityProjectId] = ""; + } + ) + } + + public inCommunity(project: any): any { + for(let communityProject of this.communityProjects) { + if(communityProject.openaireId == project.id) { + return true; + } else if(project.code == communityProject.grantId && project.funderShortname == communityProject.funder) { + return true; + } + } + + if(this.undo[project.id]) { + console.info("true: "+ this.undo[project.id]) + return true; + } else { + console.info("false: "+ this.undo[project.id]) + } + return false; + } + + getFunders () { + console.info("Getting Funders...."); + this.subFunders = this._searchProjectsService.getFunders(this.properties).subscribe( + data => { + this.funders = data[1]; + }, + err => console.log(err) + ); + } + + private _getOpenaireProjects(parameters:string, page: number, size: number){ + console.info("_getOpenaireProjects"); + if(page > this.pagingLimit) { + size=0; + } + + if(this.openaireSearchUtils.status == this.errorCodes.LOADING) { + this.openaireSearchUtils.status = this.errorCodes.LOADING; + + this.disableForms = true; + this.openaireProjects = []; + this.openaireSearchUtils.totalResults = 0; + + this.subResults = this._searchProjectsService.searchProjects(parameters, null, page, size, [], this.properties).subscribe( + data => { + this.undo = {}; + console.info("total openaire projects = "+data[0]); + this.openaireSearchUtils.totalResults = data[0]; + this.openaireProjects = data[1]; + + //this.searchPage.checkSelectedFilters(this.filters); + + this.openaireSearchUtils.status = this.errorCodes.DONE; + if(this.openaireSearchUtils.totalResults == 0 ){ + this.openaireSearchUtils.status = this.errorCodes.NONE; + } + + this.disableForms = false; + + if(this.openaireSearchUtils.status == this.errorCodes.DONE) { + // Page out of limit!!! + let totalPages:any = this.openaireSearchUtils.totalResults/(this.openaireSearchUtils.size); + if(!(Number.isInteger(totalPages))) { + totalPages = (parseInt(totalPages, 10) + 1); + } + if(totalPages < page) { + this.openaireSearchUtils.totalResults = 0; + this.openaireSearchUtils.status = this.errorCodes.OUT_OF_BOUND; + } + } + }, + err => { + console.log(err); + //TODO check erros (service not available, bad request) + if(err.status == '404') { + this.openaireSearchUtils.status = this.errorCodes.NOT_FOUND; + } else if(err.status == '500') { + this.openaireSearchUtils.status = this.errorCodes.ERROR; + } else { + this.openaireSearchUtils.status = this.errorCodes.NOT_AVAILABLE; + } + + this.disableForms = false; + } + ); + } + } + + totalPages(): number { + let totalPages:any = this.openaireSearchUtils.totalResults/(this.rowsOnPage); + if(!(Number.isInteger(totalPages))) { + totalPages = (parseInt(totalPages, 10) + 1); + } + return totalPages; + } + + keywordChanged(keyword) { + this.openaireSearchUtils.keyword = keyword; + this.buildQueryParameters(); + this.goTo(1); + } + + funderChanged(funderId:string, funderName:string){ + this.selectedFunderId = funderId; + this.selectedFunderName = funderName; + + this.buildQueryParameters(); + this.goTo(1); + } + + buildQueryParameters() { + this.queryParameters = ""; + + if(this.openaireSearchUtils.keyword) { + this.queryParameters = "q="+StringUtils.URIEncode(this.openaireSearchUtils.keyword); + } + + if(this.selectedFunderId != "0") { + this.queryParameters += this.queryParameters ? "&" : ""; + this.queryParameters += "fq=funder exact " + '"'+StringUtils.URIEncode(this.selectedFunderId)+ '"'; + } + } + + goTo(page:number = 1){ + this.openaireSearchUtils.page=page; + this.openaireSearchUtils.status = this.errorCodes.LOADING; + this._getOpenaireProjects(this.queryParameters, page, 10); + } +} diff --git a/src/app/pages/community/projects/communityProjects.module.ts b/src/app/pages/community/projects/communityProjects.module.ts new file mode 100644 index 0000000..a335548 --- /dev/null +++ b/src/app/pages/community/projects/communityProjects.module.ts @@ -0,0 +1,53 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { HttpModule, JsonpModule } from '@angular/http'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; + + +import { EnvironmentSpecificResolver } from '../../../openaireLibrary/utils/properties/environmentSpecificResolver'; +import { EnvironmentSpecificService } from '../../../openaireLibrary/utils/properties/environment-specific.service'; + +import { DataTablesModule } from 'angular-datatables'; +import { ManageProjectsComponent } from './manage-projects.component'; +import { ManageCommunityProjectsService } from "../../../services/manageProjects.service"; +import { SearchProjectsServiceModule } from '../../../openaireLibrary/connect/projects/searchProjectsService.module'; + +import { RemoveProjectsComponent } from './remove-projects.component'; +import { AddProjectsComponent } from './add-projects.component'; +import { SearchProjectsService } from "../../../openaireLibrary/services/searchProjects.service"; +import { PagingModule } from '../../../openaireLibrary/utils/paging.module'; +import { SearchPagingModule } from '../../../openaireLibrary/searchPages/searchUtils/searchPaging.module'; + +import {ErrorMessagesModule} from '../../../openaireLibrary/utils/errorMessages.module'; +import {AlertModalModule} from '../../../openaireLibrary/utils/modal/alertModal.module'; +import {FABModule} from '../../../utils/fabModule.module'; + +@NgModule({ + imports: [ + BrowserModule, + HttpModule, + JsonpModule, + FormsModule, + ReactiveFormsModule, + RouterModule, + DataTablesModule, + PagingModule, SearchPagingModule, + ErrorMessagesModule, + AlertModalModule, + SearchProjectsServiceModule, + FABModule + ], + declarations: [ + ManageProjectsComponent, + RemoveProjectsComponent, + AddProjectsComponent + ], + providers: [ + ManageCommunityProjectsService, + SearchProjectsService, + EnvironmentSpecificResolver,EnvironmentSpecificService + ] +}) + +export class CommunityProjectsModule { } diff --git a/src/app/pages/community/projects/manage-projects.component.ts b/src/app/pages/community/projects/manage-projects.component.ts new file mode 100644 index 0000000..02caa8c --- /dev/null +++ b/src/app/pages/community/projects/manage-projects.component.ts @@ -0,0 +1,79 @@ +import { Component, ViewChild, OnInit, ViewEncapsulation, Input } from '@angular/core'; +import { ActivatedRoute } from "@angular/router"; + +import {RemoveProjectsComponent} from './remove-projects.component'; +import {AddProjectsComponent} from './add-projects.component'; + +@Component({ + selector: 'manage-projects', + template: ` +
    + + +
    + + +
    + +
    + ` +}) + +export class ManageProjectsComponent implements OnInit { + private community: string = ''; + + @Input() communityProjects =[]; + @ViewChild (RemoveProjectsComponent) removeProjectsComponent : RemoveProjectsComponent ; + @ViewChild (AddProjectsComponent) addProjectsComponent : AddProjectsComponent ; + + public warningMessage = ""; + public infoMessage = ""; + + public toggle: boolean = true; + public updateCommunityProjectsOnToggle: boolean = false; + public pageTitle: string = "Manage projects"; + public toggleLinkMessage: string = "Manage projects"; + + ngOnInit() { + this.route.queryParams.subscribe(params => { + if(params['communityId']) { + this.community = params['communityId']; + } + }); + } + + constructor(private route: ActivatedRoute) {} + + public ngOnDestroy() {} + + public updateCommunityProjects() { + this.toggle = !this.toggle; + if(this.toggle) { + this.pageTitle = "Manage projects"; + // this.toggleLinkMessage = "Missing projects?"; + + //if(this.updateCommunityProjectsOnToggle) { + this.removeProjectsComponent._getCommunityProjects(); + this.addProjectsComponent.undo = {}; + //} + } else { + this.updateCommunityProjectsOnToggle = false; + this.pageTitle = "Search projects"; + //this.toggleLinkMessage = "Manage projects"; + } + } + + public communityProjectsChanged($event) { + this.communityProjects = $event.value; + } + + // public updateCommunityProjects($event) { + // this.updateCommunityProjectsOnToggle = true; + // } +} diff --git a/src/app/pages/community/projects/remove-projects.component.html b/src/app/pages/community/projects/remove-projects.component.html new file mode 100644 index 0000000..99b608d --- /dev/null +++ b/src/app/pages/community/projects/remove-projects.component.html @@ -0,0 +1,94 @@ +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + + +
    +
    + + {{communitySearchUtils.totalResults | number}} projects, page {{communitySearchUtils.page | number}} of {{(totalPages()) | number}} + + + + +
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + +
    ProjectGrant IdFunderAction
    + + {{result.name}} + ({{result.acronym}}) + [no title available] + + + {{result.grantId}} + - + + {{result.funder}} + - + + +
    +
    +
    + +
    +
    + + {{communitySearchUtils.totalResults | number}} projects, page {{communitySearchUtils.page | number}} of {{(totalPages()) | number}} + + + + +
    +
    + + + + diff --git a/src/app/pages/community/projects/remove-projects.component.ts b/src/app/pages/community/projects/remove-projects.component.ts new file mode 100644 index 0000000..bd92dfb --- /dev/null +++ b/src/app/pages/community/projects/remove-projects.component.ts @@ -0,0 +1,341 @@ +import { Component, ViewChild, OnInit, ViewEncapsulation, Input, Output, EventEmitter } from '@angular/core'; +import { ActivatedRoute } from "@angular/router"; +import { Subject } from 'rxjs/Subject'; +import { DataTableDirective } from 'angular-datatables'; + +import {ErrorCodes} from '../../../openaireLibrary/utils/properties/errorCodes'; +import {SearchUtilsClass } from '../../../openaireLibrary/searchPages/searchUtils/searchUtils.class'; +import {EnvProperties} from '../../../openaireLibrary/utils/properties/env-properties'; +import {ManageCommunityProjectsService} from '../../../services/manageProjects.service'; +import {SearchCommunityProjectsService} from '../../../openaireLibrary/connect/projects/searchProjects.service'; +import {RouterHelper} from '../../../openaireLibrary/utils/routerHelper.class'; +import {DOI, StringUtils} from '../../../openaireLibrary/utils/string-utils.class'; + +@Component({ + selector: 'remove-projects', + templateUrl: './remove-projects.component.html', + styles: [` + #dpTable_info, #dpTable_paginate, #dpTable_length, #dpTable_filter{ + display: none; + } + + `], + encapsulation: ViewEncapsulation.None // this used in order styles to work +}) + +export class RemoveProjectsComponent implements OnInit { + public routerHelper:RouterHelper = new RouterHelper(); + + private community: string = ''; + private communityUrl = "https://beta.explore.openaire.eu"; + + private errorCodes: ErrorCodes; + + @Output() communityProjectsChanged = new EventEmitter(); + public communityProjects = []; + public communitySearchUtils:SearchUtilsClass = new SearchUtilsClass(); + + public sub: any; public subResults: any; subRemove: any; + properties:EnvProperties; + + public disableForms: boolean = false; + + dtOptions: DataTables.Settings = {}; + showTable = false; filteringAdded = false; + @ViewChild(DataTableDirective) datatableElement: DataTableDirective; + dtTrigger: Subject = new Subject(); //necessary + + public rowsOnPage:number = 10; + + public queryParameters: string = ""; + + public query = ''; + public selectedProjects=[] ; + public elementRef; + + public funders:Set; + public selectedFunder:string =""; + //@Output() projectSelected = new EventEmitter(); + //@Input() public properties:EnvProperties; + + public projects:string[]; + private triggered: boolean = false; + + private selectedCommunityProject: any; + + @ViewChild('AlertModalDeleteCommunity') alertModalDeleteCommunity; + + ngOnInit() { + this.route.data.subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + }); + + this.route.queryParams.subscribe(params => { + if(params['communityId']) { + this.community = params['communityId']; + this.communityUrl = "https://beta."+this.community+".openaire.eu"; + + this._getCommunityProjects(); + //this.getFunders(); + //this._getOpenaireProjects("", 1, 10); + } + }); + + this.dtOptions = { + // "paging": true, + // "searching": true, + // "lengthChange": false, + "pageLength": this.rowsOnPage, + "language": { + "search": "", + "searchPlaceholder": "Search projects..." + } + }; + + this.communitySearchUtils.keyword = ""; + } + + constructor(private route: ActivatedRoute, private _manageCommunityProjectsService: ManageCommunityProjectsService, private _searchCommunityProjectsService: SearchCommunityProjectsService) { + this.errorCodes = new ErrorCodes(); + this.communitySearchUtils.status = this.errorCodes.LOADING; + } + + public ngOnDestroy() { + if(this.sub){ + this.sub.unsubscribe(); + } + if(this.subResults){ + this.subResults.unsubscribe(); + } + if(this.subRemove){ + this.subRemove.unsubscribe(); + } + + $.fn['dataTable'].ext.search.pop(); + } + + rerender(): void { + this.datatableElement.dtInstance.then((dtInstance: DataTables.Api) => { + // Destroy the table first + dtInstance.destroy(); + + // Call the dtTrigger to rerender again + this.dtTrigger.next(); + }); + } + + ngAfterViewInit(): void { + $.fn['dataTable'].ext.search.push((settings, data, dataIndex) => { + + if (this.filterData(data, this.communitySearchUtils.keyword, this.selectedFunder)) { + return true; + } + return false; + }); + + console.info("ngAfterViewInit"); + } + + filterData(row: any, query: string, selectedFunder: string) { + let returnValue: boolean = false; + + if(query) { + for(var i=0; i <3; i++){ + var r= this.filterQuery(row[i], query); + if(r) { + returnValue = true; + break; + } + } + + if(!returnValue) { + return false; + } + } + + if(selectedFunder){ + return this.filterQuery(row[2], selectedFunder); + } + + return true; + } + + filterQuery(data, query){ + if(data.toLowerCase().indexOf(query.toLowerCase()) > -1){ + return true; + }else{ + return false; + } + } + + + /* + Trigger a table draw in order to get the initial filtering + */ + triggerInitialLoad(){ + this.triggered = true; + console.info("triggerInitialLoad"); + setTimeout(function(){ + var table = ($('#dpTable')).DataTable(); + table.page( 0 ).draw( false ); + }, 500); + this.dtTrigger.next(); + } + + public inCommunity(result: any): any { + let found = false; + for(let project of this.communityProjects) { + if(project.opeaireId == result.id) { + return true; + } else if(result['title'].name.search("("+project.grantId+")") != -1 && result.funderShortname == project.funder) { + return true; + } + } + return found; + + } + + goTo(page:number = 1){ + this.communitySearchUtils.page=page; + + var table = $('#dpTable').DataTable(); + table.page( page - 1 ).draw( false ); + + var info = table.page.info(); + console.info("records: "+info.recordsDisplay); + this.communitySearchUtils.totalResults = info.recordsDisplay; + } + + totalPages(): number { + let totalPages:any = this.communitySearchUtils.totalResults/(this.rowsOnPage); + if(!(Number.isInteger(totalPages))) { + totalPages = (parseInt(totalPages, 10) + 1); + } + return totalPages; + } + + public confirmedDeleteProject(data : any) { + console.info("REMOVE: "+ this.selectedCommunityProject.id); + this.subRemove = this._manageCommunityProjectsService.removeProject(this.properties, this.community, this.selectedCommunityProject.id).subscribe( + data => { + console.info("data REMOVE"); + console.info(data); + }, + err => { + console.info("error REMOVE"); + console.log(err); + }, + () => { + console.info("completed REMOVE"); + let index = this.communityProjects.indexOf(this.selectedCommunityProject); + this.communityProjects.splice(index, 1); + + this.communitySearchUtils.totalResults--; + this.communitySearchUtils.page=1; + + this.rerender(); + } + ) + } + + public removeProject(communityProject: any) { + this.selectedCommunityProject = communityProject; + this.alertModalDeleteCommunity.cancelButton = true; + this.alertModalDeleteCommunity.okButton = true; + this.alertModalDeleteCommunity.alertTitle = "Remove project?"; + let title = ""; + if(communityProject.name) { + title = communityProject.name; + } + if(communityProject.name && communityProject.acronym) { + title += " ("; + } + if(communityProject.acronym) { + title += communityProject.acronym; + } + if(communityProject.name && communityProject.acronym) { + title += ")"; + } + this.alertModalDeleteCommunity.message = "Project"; + if(title) { + this.alertModalDeleteCommunity.message += " '"+title+"' "; + } + this.alertModalDeleteCommunity.message += "will be removed from your community. Are you sure?"; + this.alertModalDeleteCommunity.okButtonText = "Yes"; + this.alertModalDeleteCommunity.open(); + } + + public _getCommunityProjects(){ + this.communitySearchUtils.status = this.errorCodes.LOADING; + this.disableForms = true; + this.communityProjects = []; + this.communitySearchUtils.totalResults = 0; + this.communitySearchUtils.page=1; + this.communitySearchUtils.keyword = ""; + this.selectedFunder = ""; + + this.subResults = this._searchCommunityProjectsService.searchProjects(this.properties, this.community).subscribe( + data => { + console.info(data); + console.info("search Projects [total communityProjects:"+data.length+"]"); + this.communityProjects = data; + + this.communitySearchUtils.totalResults = data.length; + this.communitySearchUtils.status = this.errorCodes.DONE; + // if(this.communitySearchUtils.totalResults == 0 ){ + // this.communitySearchUtils.status = this.errorCodes.NONE; + // } + this.disableForms = false; + if(!this.triggered) { + this.triggerInitialLoad(); + } else { + var table = $('#dpTable').DataTable(); + table.clear(); + + this.rerender(); + } + + this.communityProjectsChanged.emit({ + value: this.communityProjects, + }); + + this.createFunderFilter(); + }, + err => { + console.log(err); + //TODO check erros (service not available, bad request) + + if(err.status == '404') { + this.communitySearchUtils.status = this.errorCodes.NOT_FOUND; + } else if(err.status == '500') { + this.communitySearchUtils.status = this.errorCodes.ERROR; + } else { + this.communitySearchUtils.status = this.errorCodes.NOT_AVAILABLE; + } + + this.disableForms = false; + if(!this.triggered) { + this.triggerInitialLoad(); + } else { + var table = $('#dpTable').DataTable(); + table.clear(); + + this.rerender(); + } + } + ); + } + + private createFunderFilter(): Set { + this.funders = new Set(); + let i; + for(i=0; i - +
    Delete Confirmation
    - \ No newline at end of file + diff --git a/app/pages/delete-confirmation-dialog.component.ts b/src/app/pages/delete-confirmation-dialog.component.ts similarity index 100% rename from app/pages/delete-confirmation-dialog.component.ts rename to src/app/pages/delete-confirmation-dialog.component.ts diff --git a/src/app/pages/divId/divId-form.component.html b/src/app/pages/divId/divId-form.component.html new file mode 100644 index 0000000..798ecc3 --- /dev/null +++ b/src/app/pages/divId/divId-form.component.html @@ -0,0 +1,46 @@ +
    +
    + + +
    + +
    + +
    +
    {{page.name}}, 
    + + + + + + + + + +
    + + + + + + + + {{page.name}} + +
    +
    +
    +
    + + +
    diff --git a/src/app/pages/divId/divId-form.component.ts b/src/app/pages/divId/divId-form.component.ts new file mode 100644 index 0000000..db491cb --- /dev/null +++ b/src/app/pages/divId/divId-form.component.ts @@ -0,0 +1,177 @@ +import {Component, OnInit, Input} from '@angular/core'; +import { ActivatedRoute } from "@angular/router"; +import {FormGroup, FormArray, FormBuilder, Validators} from "@angular/forms"; +import { HelpContentService } from "../../services/help-content.service"; +import { Page } from "../../domain/page"; +import { EnvProperties } from '../../openaireLibrary/utils/properties/env-properties'; + +@Component({ + selector: 'divId-form', + templateUrl: './divId-form.component.html', +}) + +export class DivIdFormComponent implements OnInit{ + @Input('group') + myForm: FormGroup; + @Input('pageId') + pageId: string; + @Input('formPages') + formPages: Page[] = []; + + //public allPages : Page[] = []; + public allPages: Map = new Map(); + private gotPages: boolean = false; + + public properties:EnvProperties = null; + + public showLoading: boolean = false; + public errorMessage: string = ''; + selectedCommunityPid = null; + constructor(private route: ActivatedRoute, public _fb: FormBuilder, private _helpContentService: HelpContentService){} + + ngOnInit(): void { + this.route.data + .subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + this.route.queryParams.subscribe(params => { + this.selectedCommunityPid = params['communityId']; + }); + }); + } + + public getKeys( map) { + return Array.from(map.keys()); + } + + getPages(includedPages: Set) { + this.showLoading = true; + this.errorMessage = ""; + + this._helpContentService.getPages(this.properties.adminToolsAPIURL,this.selectedCommunityPid).subscribe( + pages => { + //this.allPages = allPages; + for(let page of pages) { + if(includedPages.has(page._id)) { + this.allPages.set(page, true); + } else { + this.allPages.set(page, false); + } + } + this.showLoading = false; + }, + error => this.handleError('System error retrieving pages', error) + ); + } + + public toggle() { + this.myForm.value.isCollapsed = !this.myForm.value.isCollapsed; +/////// + if(!this.myForm.value.isCollapsed) { + let includedPages: Set = new Set(); + for(let pageName of this.myForm.value.pages) { + includedPages.add(pageName._id); + } + + let allPages = this.allPages; + + let self = this; + allPages.forEach(function (status, page, map) { + if(includedPages.has(page._id)) { + self.allPages.set(page, true); + } else { + self.allPages.set(page, false); + } + }); + + + if(!this.gotPages) { + this.gotPages = true; + this.getPages(includedPages); + } + } +///// + } + + public get form() { + return this._fb.group({ + _id: '', + name : ['', Validators.required], + pages: this._fb.array([]), + isCollapsed: [true] + }); + } + + public reset() { + this.myForm.patchValue({ + _id : '', + name : '', + isCollapsed: [true] + }); + + this.setPages([]); + this.formPages = []; + } + + public get pages(): FormArray { + return this.myForm.get('pages') as FormArray; + }; + + setPages(pages: Page[]) { + //const pageFormArray = this._fb.array(pages); + //this.myForm.setControl('pages', pageFormArray); + + const pageFGs = pages.map(page => this._fb.group(page)); + const pageFormArray = this._fb.array(pageFGs); + this.myForm.setControl('pages', pageFormArray); + } + + indexOfPageInForm(pageId: string): number { + let index: number = -1; + for(let i=0; i= 0) { + this.formPages.splice(index, 1); + this.myForm.value.pages.splice(index, 1); + } + }*/ + + let index: number = -1; + for(let i=0; i= 0) { + this.myForm.value.pages.splice(index, 1); + } + } + } + + handleError(message: string, error) { + this.errorMessage = message; + console.log('Server responded: ' + error); + + this.showLoading = false; + } +} diff --git a/app/pages/divId/divIds.component.html b/src/app/pages/divId/divIds.component.html similarity index 57% rename from app/pages/divId/divIds.component.html rename to src/app/pages/divId/divIds.component.html index 5af57b3..a15494b 100644 --- a/app/pages/divId/divIds.component.html +++ b/src/app/pages/divId/divIds.component.html @@ -1,57 +1,58 @@ -
    - +
    - - - + + -
    +
    - +
    -
    +
    -
    +
    -
    +
    -
    +
    --> - + + @@ -62,9 +63,9 @@ - @@ -91,17 +92,30 @@ + + - - + - + + + + + + + + + + + + diff --git a/src/app/pages/divId/divIds.component.ts b/src/app/pages/divId/divIds.component.ts new file mode 100644 index 0000000..a632441 --- /dev/null +++ b/src/app/pages/divId/divIds.component.ts @@ -0,0 +1,254 @@ +import { Component, ViewChild, OnInit } from '@angular/core'; +import { ActivatedRoute } from "@angular/router"; +import { HelpContentService } from "../../services/help-content.service"; +import { FormGroup } from "@angular/forms"; +import { ModalFormComponent } from "../modal-form.component"; +import { DeleteConfirmationDialogComponent } from "../delete-confirmation-dialog.component"; +import { DivIdFormComponent } from "./divId-form.component"; +import { CheckDivId, DivId } from "../../domain/divId"; +//import { Community } from "../../domain/community"; +import { Page } from "../../domain/page"; +import { EnvProperties } from '../../openaireLibrary/utils/properties/env-properties'; + +@Component({ + selector: 'divIds', + templateUrl: './divIds.component.html', +}) + +export class DivIdsComponent implements OnInit { + + // @ViewChild(ModalFormComponent) + // @ViewChild('saveModal') + // public modal:ModalFormComponent; + // + // @ViewChild('updateModal') + // public updateModal:ModalFormComponent; + + // @ViewChild('deleteConfirmationModal') + // public deleteConfirmationModal : DeleteConfirmationDialogComponent; + @ViewChild('AlertModalSaveDivId') alertModalSaveDivId; + @ViewChild('AlertModalUpdateDivId') alertModalUpdateDivId; + @ViewChild('AlertModalDeleteDivIds') alertModalDeleteDivIds; + private selectedDivIds: string[] = []; + + @ViewChild(DivIdFormComponent) + public formComponent : DivIdFormComponent; + + public checkboxes : CheckDivId[] = []; + + public divIds : DivId[] = []; + + //public errorMessage: string; + + public formGroup : FormGroup; + + private searchText : RegExp = new RegExp(''); + + public pages: Page[] = []; + public properties:EnvProperties = null; + public formPages: Page[] = []; + + public showLoading: boolean = true; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + public modalErrorMessage: string = ''; + + ngOnInit() { + this.route.data + .subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + this.formGroup = this.formComponent.form; + + this.getDivIds(); + }); + } + + constructor(private route: ActivatedRoute, private _helpContentService: HelpContentService) {} + + getDivIds() { + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + + this._helpContentService.getDivIdsFull(null, this.properties.adminToolsAPIURL).subscribe( + divIds => { + this.divIds = divIds; + this.checkboxes = []; + + let self = this; + divIds.forEach(_ => { + self.checkboxes.push({divId : _, checked : false}); + }); + + this.showLoading = false; + }, + error => this.handleError('System error retrieving classes', error)); + } + + // public showModal():void { + // this.modal.showModal(); + // } + + public toggleCheckBoxes(event) { + this.checkboxes.forEach(_ => _.checked = event.target.checked); + } + + public applyCheck(flag : boolean) { + console.info("applyCheck "+flag); + this.checkboxes.forEach(_ => _.checked = flag); + } + + public getSelectedDivIds() : string[] { + return this.checkboxes.filter(divId => divId.checked == true).map(checkedDivId => checkedDivId.divId).map(res => res._id); + } + + private deleteDivIdsFromArray(ids : string[]) : void { + for(let id of ids) { + let i = this.checkboxes.findIndex(_ => _.divId._id == id); + this.checkboxes.splice(i, 1); + } + } + + public confirmDeleteDivId(id : string) { + //this.deleteConfirmationModal.ids = [id]; + //this.deleteConfirmationModal.showModal(); + this.selectedDivIds = [id]; + this.confirmModalOpen(); + } + + public confirmDeleteSelectedDivIds() { + //this.deleteConfirmationModal.ids = this.getSelectedDivIds(); + //this.deleteConfirmationModal.showModal(); + this.selectedDivIds = this.getSelectedDivIds(); + this.confirmModalOpen(); + } + + private confirmModalOpen() { + this.alertModalDeleteDivIds.cancelButton = true; + this.alertModalDeleteDivIds.okButton = true; + this.alertModalDeleteDivIds.alertTitle = "Delete Confirmation"; + this.alertModalDeleteDivIds.message = "Are you sure you want to delete the selected class(es)?"; + this.alertModalDeleteDivIds.okButtonText = "Yes"; + this.alertModalDeleteDivIds.open(); + } + + public confirmedDeleteDivIds(data: any) { + this.showLoading = true; + this.updateErrorMessage = ""; + + this._helpContentService.deleteDivIds(this.selectedDivIds, this.properties.adminToolsAPIURL).subscribe( + _ => { + this.deleteDivIdsFromArray(this.selectedDivIds); + this.showLoading = false; + }, + error => this.handleUpdateError('System error deleting the selected classes', error) + ); + } + + public editDivId(i : number) { + let divId : DivId = this.checkboxes[i].divId; + this.formPages = divId.pages; + + /*let pageIds: string[] = []; + let index = 0; + for(let page of divId.pages) { + pageIds[index] = page._id; + index++; + }*/ + + this.formGroup.patchValue(divId); + this.formComponent.setPages(divId.pages as Page[]);//pageIds); + + //this.updateModal.showModal(); + this.divIdsModalOpen(this.alertModalUpdateDivId, "Update", "Update Class"); + } + + public newDivId() { + this.formComponent.reset(); + this.modalErrorMessage = ""; + this.divIdsModalOpen(this.alertModalSaveDivId, "Save", "Add a new Class"); + } + + private divIdsModalOpen(modal: any, title: string, yesBtn: string) { + modal.cancelButton = true; + modal.okButton = true; + modal.alertTitle = title; + modal.okButtonText = yesBtn; + modal.open(); + } + + public divIdSaveConfirmed(data: any) { + if(!this.formGroup.valid) { + this.divIdsModalOpen(this.alertModalSaveDivId, "Save", "Add a new Class"); + this.modalErrorMessage = "Please fill in all required fields marked with *"; + } else { + this.modalErrorMessage = ""; + this._helpContentService.saveDivId( this.formGroup.value, this.properties.adminToolsAPIURL).subscribe( + divId => { + this.divIdSavedSuccessfully(divId); + }, + error => this.handleUpdateError("System error creating class", error) + ); + } + } + + public divIdUpdateConfirmed(data: any) { + if(!this.formGroup.valid) { + this.divIdsModalOpen(this.alertModalUpdateDivId, "Update", "Update Class"); + this.modalErrorMessage = "Please fill in all required fields marked with *"; + } else { + this._helpContentService.updateDivId( this.formGroup.value, this.properties.adminToolsAPIURL).subscribe( + divId => { + this.divIdUpdatedSuccessfully(divId); + }, + error => this.handleUpdateError("System error updating class", error) + ); + } + } + + public divIdSavedSuccessfully(divId: DivId) { + this.checkboxes.push({divId : divId, checked : false}); + console.info("checkboxes length: "+this.checkboxes.length); + this.applyCheck(false); + } + + public divIdUpdatedSuccessfully(divId : DivId) { + this.checkboxes.find(checkItem => checkItem.divId._id==divId._id).divId = divId; + this.applyCheck(false); + } + + public filterBySearch(text : string) { + this.searchText = new RegExp(text,'i'); + this.applyFilter(); + } + + public applyFilter() { + this.checkboxes = []; + this.divIds.filter(item => this.filterDivIds(item)).forEach( + _ => this.checkboxes.push({divId: _, checked: false}) + ); + } + + public filterDivIds(divId : DivId) : boolean { + let textFlag = this.searchText.toString() == '' || (divId.name).match(this.searchText) != null; + return textFlag; + } + + handleUpdateError(message: string, error) { + if(error == null) { + this.formComponent.reset(); + } else { + this.updateErrorMessage = message; + console.log('Server responded: ' +error); + } + + this.showLoading = false; + } + + handleError(message: string, error) { + this.errorMessage = message; + console.log('Server responded: ' + error); + + this.showLoading = false; + } +} diff --git a/src/app/pages/divhelpcontent/div-help-content-form.component.html b/src/app/pages/divhelpcontent/div-help-content-form.component.html new file mode 100644 index 0000000..0bcda21 --- /dev/null +++ b/src/app/pages/divhelpcontent/div-help-content-form.component.html @@ -0,0 +1,52 @@ + + + +
    + + Create or edit help text +
    + Select the class to be displayed, add the content and click active to make it visible to dashboard +
    + +
    +
    +
    +
    Class content displayed in page(s): {{page.name}},
    + + + + + + + +
    +
    + +
    + + + +
    +
    +
    + + +
    + + + diff --git a/app/pages/divhelpcontent/div-help-content-form.component.ts b/src/app/pages/divhelpcontent/div-help-content-form.component.ts similarity index 50% rename from app/pages/divhelpcontent/div-help-content-form.component.ts rename to src/app/pages/divhelpcontent/div-help-content-form.component.ts index 144f569..872e3d2 100644 --- a/app/pages/divhelpcontent/div-help-content-form.component.ts +++ b/src/app/pages/divhelpcontent/div-help-content-form.component.ts @@ -20,33 +20,52 @@ export class DivContentFormComponent implements OnInit{ communityPid: string; @Input('pageId') pageId: string; + @Input('editMode') + editMode: boolean = false; + + //public divIdName: string = ''; + + private communityId: string = ''; showPageSelect: boolean = true; + selectedDiv: DivId; private availablePages : Page[] = []; private availableDivs : DivId[] = []; - private errorMessage: string; - private ckeditorContent : string; - constructor(private route: ActivatedRoute, private _fb: FormBuilder, private _helpContentService: HelpContentService){} public properties:EnvProperties = null; + public showLoading: boolean = true; + public errorMessage: string = ''; + @Input() updateErrorMessage: string = ''; + + constructor(private route: ActivatedRoute, private _fb: FormBuilder, private _helpContentService: HelpContentService){} + ngOnInit() { this.myForm = this.form; this.route.data .subscribe((data: { envSpecific: EnvProperties }) => { this.properties = data.envSpecific; - if(this.pageId) { - this.showPageSelect = false; - this.getDivs(this.pageId); - } else { - this._helpContentService.getCommunityPagesWithDivId(this.communityPid, this.properties.adminToolsAPIURL).subscribe( - pages => this.availablePages = pages, - error => this.handleError('System error retrieving pages', error)); - } + this.route.queryParams.subscribe(params => { + if(this.pageId) { + this.showPageSelect = false; + this.getDivs(this.pageId); + } else { + if(!this.editMode) { + this._helpContentService.getCommunityPagesWithDivId(this.communityPid, this.properties.adminToolsAPIURL).subscribe( + pages => { + this.availablePages = pages; + this.showLoading = false; + }, + error => this.handleError('System error retrieving pages', error)); + } + } + + this.getCommunity(this.communityPid); + }); }); } @@ -55,25 +74,51 @@ export class DivContentFormComponent implements OnInit{ this.getDivs(event.target.value); } + public divIdSelected(div: DivId) { + this.selectedDiv = div; + } + + public getCommunity(communityPid: string) { + this.showLoading = true; + this.errorMessage = ''; + + this._helpContentService.getCommunity(this.communityPid, this.properties.adminToolsAPIURL).subscribe( + community => { + this.communityId = community._id; + + this.myForm.patchValue({ + community: this.communityId + }); + this.showLoading = false; + }, + error => this.handleError('System error retrieving community', error) + ); + } + public getDivs(pageId: string) { - console.info(pageId); - this._helpContentService.getDivIdsFull(this.communityPid, pageId, this.properties.adminToolsAPIURL).subscribe( + this.showLoading = true; + this.errorMessage = ''; + + this._helpContentService.getDivIdsFull(pageId, this.properties.adminToolsAPIURL).subscribe( divs => { this.availableDivs = divs; this.pageId = pageId; + + this.showLoading = false; }, error => this.handleError('System error retrieving pages', error)); } - public selectedDiv(event) { - console.info(event.target.value); - } + // public selectedDiv(event) { + // console.info(event.target.value); + // } public get form() { return this._fb.group({ divId: ['', Validators.required], content: ['', Validators.required], isActive: true, + community: '', _id : '', }); } @@ -83,12 +128,16 @@ export class DivContentFormComponent implements OnInit{ divId: '', content: '', isActive: true, + community: '', _id : '' }); this.myForm.markAsPristine(); } handleError(message: string, error) { - this.errorMessage = message + ' (Server responded: ' + error + ')'; + this.errorMessage = message; + console.log('Server responded: ' + error); + + this.showLoading = false; } } diff --git a/app/pages/divhelpcontent/div-help-contents.component.html b/src/app/pages/divhelpcontent/div-help-contents.component.html similarity index 51% rename from app/pages/divhelpcontent/div-help-contents.component.html rename to src/app/pages/divhelpcontent/div-help-contents.component.html index 645a4c1..70a5a2d 100644 --- a/app/pages/divhelpcontent/div-help-contents.component.html +++ b/src/app/pages/divhelpcontent/div-help-contents.component.html @@ -1,75 +1,84 @@ -
    +
    - - - + + -
    -
    -
    - - -
    -
    -
    - -
    +
    -
    +
    -
    + +
    + + Enable or disable help text to show or hide it from the dashboard + +
    - Filter page contents: @@ -78,10 +87,10 @@
    - + - + @@ -96,27 +105,27 @@ {{page.name}}, - + @@ -124,18 +133,20 @@
    NameCommunity PageActions
    {{check.divId.name}}
    +
    @@ -73,8 +74,8 @@
    - - + +
    PageCommunity Class ContentActiveChange status Actions
    -
    {{check.divHelpContent.divId.community.name}}
    -
    {{check.divHelpContent.divId.name}}
    -
    {{check.divHelpContent.content}}
    +
    - +
    - +
    - - + +
    -
    No page contents found
    +
    No class help texts found
    - Go back to {{page.type}} pages + Go back to {{page.type}} pages
    +
    - - Are you sure you want to delete the selected page content(s)? - + + diff --git a/app/pages/divhelpcontent/div-help-contents.component.ts b/src/app/pages/divhelpcontent/div-help-contents.component.ts similarity index 63% rename from app/pages/divhelpcontent/div-help-contents.component.ts rename to src/app/pages/divhelpcontent/div-help-contents.component.ts index 7346460..22c94eb 100644 --- a/app/pages/divhelpcontent/div-help-contents.component.ts +++ b/src/app/pages/divhelpcontent/div-help-contents.component.ts @@ -8,6 +8,7 @@ import { Page } from "../../domain/page"; import { Community } from "../../domain/community"; import { DivId } from "../../domain/divId"; import { EnvProperties } from '../../openaireLibrary/utils/properties/env-properties'; +import {SafeHtmlPipe} from '../../openaireLibrary/utils/pipes/safeHTML.pipe'; @Component({ selector: 'div-help-contents', @@ -15,25 +16,16 @@ import { EnvProperties } from '../../openaireLibrary/utils/properties/env-proper }) export class DivHelpContentsComponent implements OnInit { - - // @ViewChild(ModalFormComponent) - // @ViewChild('saveModal') - // public modal:ModalFormComponent; - // - // @ViewChild('updateModal') - // public updateModal:ModalFormComponent; - // - // @ViewChild(PageHelpContentsFormComponent) - // public formComponent : PageHelpContentsFormComponent; - - @ViewChild('deleteConfirmationModal') - public deleteConfirmationModal : DeleteConfirmationDialogComponent; + // @ViewChild('deleteConfirmationModal') + // public deleteConfirmationModal : DeleteConfirmationDialogComponent; + @ViewChild('AlertModalDeleteDivHelpContents') alertModalDeleteDivHelpContents; + private selectedDivContents: string[] = []; public checkboxes : CheckDivHelpContent[] = []; public divHelpContents : DivHelpContent[] = []; - public errorMessage: string; + //public errorMessage: string; public formGroup : FormGroup; @@ -56,6 +48,10 @@ export class DivHelpContentsComponent implements OnInit { public page: Page; public properties:EnvProperties = null; + public showLoading: boolean = true; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + ngOnInit() { this.route.data .subscribe((data: { envSpecific: EnvProperties }) => { @@ -63,57 +59,44 @@ export class DivHelpContentsComponent implements OnInit { this.route.queryParams.subscribe(params => { - this.selectedCommunityPid = params['community']; - this.selectedPageId = params['page']; + this.selectedCommunityPid = params['communityId']; + this.selectedPageId = params['pageId']; if(this.selectedCommunityPid && this.selectedPageId) { - this.getDivHelpContents(this.selectedCommunityPid); this.getPage(this.selectedPageId); - this.getCommunity(this.selectedCommunityPid); - } else { + } else if(this.selectedCommunityPid){ this.selectedPageId = ""; - this.getCommunities(); + this.getPages(this.selectedCommunityPid); } }); }); - // this.formGroup = this.formComponent.form; } constructor(private route: ActivatedRoute, private _helpService: HelpContentService, private router : Router) {} getPage(pageId: string) { - let self = this; + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + this._helpService.getPage(pageId, this.properties.adminToolsAPIURL).subscribe( page => { - self.page = page; - } - ); - } - - getCommunity(communityPid: string) { - let self = this; - this._helpService.getCommunity(communityPid, this.properties.adminToolsAPIURL).subscribe( - community => { - self.community = community; - } - ); - } - - getCommunities() { - let self = this; - this._helpService.getCommunitiesWithDivId(this.properties.adminToolsAPIURL).subscribe( - communities => { - self.communities = communities; - self.selectedCommunityPid = self.communities[0].pid; - this.getPages(self.selectedCommunityPid); - this.getDivHelpContents(self.selectedCommunityPid); - }, - error => this.handleError('System error retrieving communities', error)); + this.page = page; + this.getDivHelpContents(this.selectedCommunityPid); + }, + error => this.handleError('System error retrieving page', error)); } getPages(community_pid: string) { + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + this._helpService.getCommunityPagesWithDivId(community_pid, this.properties.adminToolsAPIURL).subscribe( - pages => this.pages = pages, + pages => { + this.pages = pages; + this.getDivHelpContents(this.selectedCommunityPid); + }, error => this.handleError('System error retrieving pages', error)); } @@ -131,39 +114,31 @@ export class DivHelpContentsComponent implements OnInit { } getDivHelpContents(community_pid: string) { - let self = this; this._helpService.getCommunityDivHelpContents(community_pid, this.properties.adminToolsAPIURL).subscribe( divHelpContents => { - self.divHelpContents = divHelpContents as Array; - self.counter.all = self.divHelpContents.length; - self.checkboxes = []; - /*self.pageHelpContents.forEach(_ => { - let page: Page = _.page as Page; - if(!self.selectedPageId || (page._id == self.selectedPageId)) { - self.checkboxes.push({pageHelpContent : _, checked : false}); - } - });*/ - for (let i = self.divHelpContents.length - 1; i >= 0; i -= 1) { - let divId: DivId = self.divHelpContents[i].divId as DivId; + this.divHelpContents = divHelpContents as Array; + this.counter.all = this.divHelpContents.length; + this.checkboxes = []; + + for (let i = this.divHelpContents.length - 1; i >= 0; i -= 1) { + let divId: DivId = this.divHelpContents[i].divId as DivId; let pages: Page[] = divId.pages as Page[]; const pageIds = pages.map(x => x._id); - if(!self.selectedPageId || pageIds.includes(self.selectedPageId)/*(page._id == self.selectedPageId)*/) { - self.checkboxes.push({divHelpContent : self.divHelpContents[i], checked : false}); + if(!this.selectedPageId || pageIds.includes(this.selectedPageId)) { + this.checkboxes.push({divHelpContent : this.divHelpContents[i], checked : false}); } else { - self.divHelpContents.splice(i, 1); + this.divHelpContents.splice(i, 1); } } - self.countDivHelpContents(); + this.countDivHelpContents(); + + this.showLoading = false; }, error => this.handleError('System error retrieving page contents', error)); } - // public showModal():void { - // this.modal.showModal(); - // } - public toggleCheckBoxes(event) { this.checkboxes.forEach(_ => _.checked = event.target.checked); this.checkboxAll = event.target.checked; @@ -180,19 +155,38 @@ export class DivHelpContentsComponent implements OnInit { } public confirmDeleteDivHelpContent(id : string) { - this.deleteConfirmationModal.ids = [id]; - this.deleteConfirmationModal.showModal(); + //this.deleteConfirmationModal.ids = [id]; + //this.deleteConfirmationModal.showModal(); + this.selectedDivContents = [id]; + this.confirmModalOpen(); } public confirmDeleteSelectedDivHelpContents() { - this.deleteConfirmationModal.ids = this.getSelectedDivHelpContents(); - this.deleteConfirmationModal.showModal(); + //this.deleteConfirmationModal.ids = this.getSelectedDivHelpContents(); + //this.deleteConfirmationModal.showModal(); + this.selectedDivContents = this.getSelectedDivHelpContents(); + this.confirmModalOpen(); } - public confirmedDeleteDivHelpContents(ids : string[]) { - this._helpService.deleteDivHelpContents(ids, this.properties.adminToolsAPIURL).subscribe( - _ => this.deleteDivHelpContentsFromArray(ids), - error => this.handleError('System error deleting the selected class content(s)', error) + private confirmModalOpen() { + this.alertModalDeleteDivHelpContents.cancelButton = true; + this.alertModalDeleteDivHelpContents.okButton = true; + this.alertModalDeleteDivHelpContents.alertTitle = "Delete Confirmation"; + this.alertModalDeleteDivHelpContents.message = "Are you sure you want to delete the help text(s)?"; + this.alertModalDeleteDivHelpContents.okButtonText = "Yes"; + this.alertModalDeleteDivHelpContents.open(); + } + + public confirmedDeleteDivHelpContents(data: any) { + this.showLoading = true; + this.updateErrorMessage = ""; + + this._helpService.deleteDivHelpContents(this.selectedDivContents, this.properties.adminToolsAPIURL).subscribe( + _ => { + this.deleteDivHelpContentsFromArray(this.selectedDivContents); + this.showLoading = false; + }, + error => this.handleUpdateError('System error deleting the selected class content(s)', error) ); } @@ -209,13 +203,16 @@ export class DivHelpContentsComponent implements OnInit { public editDivHelpContent(id : string) { //this.router.navigate(['/pageContents/edit/', _id]); if(this.selectedPageId) { - this.router.navigate( ['/classContents/edit/'], { queryParams: { "classContentId": id, "community": this.selectedCommunityPid, "pageId": this.selectedPageId } } ); + this.router.navigate( ['/classContents/edit/'], { queryParams: { "classContentId": id, "communityId": this.selectedCommunityPid, "pageId": this.selectedPageId } } ); } else { - this.router.navigate( ['/classContents/edit/'], { queryParams: { "classContentId": id, "community": this.selectedCommunityPid } } ); + this.router.navigate( ['/classContents/edit/'], { queryParams: { "classContentId": id, "communityId": this.selectedCommunityPid } } ); } } public toggleDivHelpContents(status : boolean, ids : string[]) { + this.showLoading = true; + this.updateErrorMessage = ""; + this._helpService.toggleDivHelpContents(ids,status, this.properties.adminToolsAPIURL).subscribe( () => { for(let id of ids) { @@ -224,19 +221,13 @@ export class DivHelpContentsComponent implements OnInit { } this.countDivHelpContents(); this.applyCheck(false); + + this.showLoading = false; }, - error => this.handleError('System error changing the status of the selected page content(s)', error) + error => this.handleUpdateError('System error changing the status of the selected page content(s)', error) ); } - public saveDivHelpContent(data : any):void { - this._helpService.insertOrUpdateDivHelpContent(data, this.properties.adminToolsAPIURL).subscribe( - divHelpContent => this.divHelpContentSavedSuccessfully(divHelpContent), - error => this.handleError('System error saving the specified help content', error) - ); - - } - public divHelpContentSavedSuccessfully(divHelpContent: DivHelpContent) { this.checkboxes.push({divHelpContent : divHelpContent, checked : false}); this.divHelpContents.push(divHelpContent); @@ -298,19 +289,24 @@ export class DivHelpContentsComponent implements OnInit { } handleError(message: string, error) { - if(error == null) { - // this.formComponent.reset(); - } - this.errorMessage = message + ' (Server responded: ' + error + ')'; + this.errorMessage = message; + console.log('Server responded: ' + error); + + this.showLoading = false; } - public filterByCommunity(event: any) { - this.selectedCommunityPid = event.target.value; - this.applyCommunityFilter(this.selectedCommunityPid); + handleUpdateError(message: string, error) { + this.updateErrorMessage = message; + console.log('Server responded: ' +error); + + this.showLoading = false; } - public applyCommunityFilter(community_pid: string) { - this.getPages(community_pid); - this.getDivHelpContents(community_pid); + public newClassContent() { + if(this.selectedPageId) { + this.router.navigate( ['/classContents/new'], { queryParams: {communityId: this.selectedCommunityPid, pageId: this.selectedPageId} } ); + } else { + this.router.navigate( ['/classContents/new'], { queryParams: {communityId: this.selectedCommunityPid} } ); + } } } diff --git a/src/app/pages/divhelpcontent/edit-div-help-content.component.html b/src/app/pages/divhelpcontent/edit-div-help-content.component.html new file mode 100644 index 0000000..03d985a --- /dev/null +++ b/src/app/pages/divhelpcontent/edit-div-help-content.component.html @@ -0,0 +1,23 @@ +
    +
    + + +
    + +
    + + + + + + +
    +
    +
    +
    diff --git a/app/pages/divhelpcontent/edit-div-help-content.component.ts b/src/app/pages/divhelpcontent/edit-div-help-content.component.ts similarity index 52% rename from app/pages/divhelpcontent/edit-div-help-content.component.ts rename to src/app/pages/divhelpcontent/edit-div-help-content.component.ts index 38aa87b..7f15e3c 100644 --- a/app/pages/divhelpcontent/edit-div-help-content.component.ts +++ b/src/app/pages/divhelpcontent/edit-div-help-content.component.ts @@ -16,17 +16,19 @@ export class EditDivHelpContentComponent implements OnInit, OnDestroy{ @ViewChild(DivContentFormComponent) public formComponent : DivContentFormComponent; - private communityPid: string; - - private pageId: string; + public communityPid: string; + public pageId: string; private sub: Subscription; private divHelpContent: DivHelpContent; - private errorMessage : string = null; public properties:EnvProperties = null; + public showLoading: boolean = true; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + constructor( private route: ActivatedRoute, private router: Router, @@ -36,15 +38,14 @@ export class EditDivHelpContentComponent implements OnInit, OnDestroy{ this.route.data .subscribe((data: { envSpecific: EnvProperties }) => { this.properties = data.envSpecific; - this.sub = this.route.queryParams.subscribe(params => { + this.sub = this.route.queryParams.subscribe(params => { //let id = params['id']; let divContentId = params['classContentId']; - this.communityPid = params['community']; + this.communityPid = params['communityId']; this.pageId = params['pageId']; - this._helpContentService.getDivHelpContent(divContentId as string, this.properties.adminToolsAPIURL).subscribe( - divHelpContent => this.updateForm(divHelpContent), - error => this.handleError('System error retrieving class help content', error)); - }); + + this.getDivHelpContent(divContentId); + }); }); } ngOnDestroy() { @@ -52,14 +53,42 @@ export class EditDivHelpContentComponent implements OnInit, OnDestroy{ } handleError(message: string, error) { - this.errorMessage = message + ' (Server responded: ' + error + ')'; + this.errorMessage = message; + console.log('Server responded: ' + error); + this.showLoading = false; + } + + handleUpdateError(message: string, error) { + this.updateErrorMessage = message; + console.log('Server responded: ' + error); + this.showLoading = false; + } + + private getDivHelpContent(divContentId: string) { + this.showLoading = true; + this.errorMessage = ""; + this.updateErrorMessage = ""; + + this._helpContentService.getDivHelpContent(divContentId, this.properties.adminToolsAPIURL).subscribe( + divHelpContent => { + this.updateForm(divHelpContent); + this.showLoading = false; + }, + error => this.handleError('System error retrieving class help content', error)); } getDivId(divId: string) { - this._helpContentService.getDivId(divId, this.properties.adminToolsAPIURL).subscribe( - divId => { - this.formComponent.pageId = divId.page; - this.formComponent.getDivs(this.formComponent.pageId); + this.showLoading = true; + + this._helpContentService.getDivIdFull(divId, this.properties.adminToolsAPIURL).subscribe( + div => { + this.formComponent.selectedDiv = div; + + if(!this.pageId) { + this.formComponent.getDivs(""); + } + + this.showLoading = false; }, error => this.handleError('System error retrieving class', error) ); @@ -67,27 +96,30 @@ export class EditDivHelpContentComponent implements OnInit, OnDestroy{ private updateForm(divHelpContent : DivHelpContent) { this.divHelpContent = divHelpContent; - console.info(divHelpContent); - if(!this.pageId) { - this.getDivId(divHelpContent.divId as string); - } + this.getDivId(divHelpContent.divId as string); + this.formComponent.myForm.patchValue((divHelpContent)); - // console.log("patching",pageHelpContent); } private saveCustom() { if(this.formComponent.myForm.valid) { + this.showLoading = true; + this.updateErrorMessage = ""; + let divHelpContent : DivHelpContent = this.formComponent.myForm.value; + console.info(divHelpContent); + this._helpContentService.insertOrUpdateDivHelpContent(divHelpContent, this.properties.adminToolsAPIURL).subscribe( _ => { if(this.pageId) { - this.router.navigate( ['/classContents/'], { queryParams: { "community": this.communityPid, "page": this.pageId } } ); + this.router.navigate( ['/classContents/'], { queryParams: { "communityId": this.communityPid, "pageId": this.pageId } } ); } else { - this.router.navigate(['/classContents']); + this.router.navigate(['/classContents'], { queryParams: { "communityId": this.communityPid } } ); } + this.showLoading = false; }, - err => this.handleError('System error updating class content', err) + err => this.handleUpdateError('System error updating class content', err) ); } else { this.errorMessage = "Please fill all required fields"; @@ -95,10 +127,13 @@ export class EditDivHelpContentComponent implements OnInit, OnDestroy{ } private cancelCustom() { + this.errorMessage = ""; + this.updateErrorMessage = ""; + if(this.pageId) { - this.router.navigate( ['/classContents/'], { queryParams: { "community": this.communityPid, "page": this.pageId } } ); + this.router.navigate( ['/classContents/'], { queryParams: { "communityId": this.communityPid, "pageId": this.pageId } } ); } else { - this.router.navigate(['/classContents']); + this.router.navigate(['/classContents'], { queryParams: { "communityId": this.communityPid } } ); } } } diff --git a/src/app/pages/divhelpcontent/new-div-help-content.component.html b/src/app/pages/divhelpcontent/new-div-help-content.component.html new file mode 100644 index 0000000..7fb3461 --- /dev/null +++ b/src/app/pages/divhelpcontent/new-div-help-content.component.html @@ -0,0 +1,23 @@ +
    +
    + + +
    + +
    + + + + + + +
    +
    +
    +
    diff --git a/app/pages/divhelpcontent/new-div-help-content.component.ts b/src/app/pages/divhelpcontent/new-div-help-content.component.ts similarity index 61% rename from app/pages/divhelpcontent/new-div-help-content.component.ts rename to src/app/pages/divhelpcontent/new-div-help-content.component.ts index df90b9a..4995754 100644 --- a/app/pages/divhelpcontent/new-div-help-content.component.ts +++ b/src/app/pages/divhelpcontent/new-div-help-content.component.ts @@ -15,13 +15,17 @@ export class NewDivHelpContentComponent { @ViewChild(DivContentFormComponent) public formComponent : DivContentFormComponent; - private errorMessage : string = null; + //private errorMessage : string = null; private communityPid: string; private pageId: string; public properties:EnvProperties = null; + public showLoading: boolean = false; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + constructor( private route: ActivatedRoute, private router: Router, @@ -31,29 +35,31 @@ export class NewDivHelpContentComponent { this.route.data .subscribe((data: { envSpecific: EnvProperties }) => { this.properties = data.envSpecific; - this.route.queryParams.subscribe(params => { - this.communityPid = params['community']; - this.pageId = params['pageId']; + this.route.queryParams.subscribe(params => { + this.communityPid = params['communityId']; + this.pageId = params['pageId']; + }); }); - }); } private saveCustom() { - - this.errorMessage = null; - if(this.formComponent.myForm.valid) { + this.showLoading = true; + this.updateErrorMessage = ""; + let divHelpContent : DivHelpContent = this.formComponent.myForm.value; + console.info(divHelpContent); this._helpContentService.insertOrUpdateDivHelpContent(divHelpContent, this.properties.adminToolsAPIURL).subscribe( _ => { if(this.pageId) { - this.router.navigate( ['/classContents/'], { queryParams: { "community": this.communityPid, "page": this.pageId } } ); + this.router.navigate( ['/classContents/'], { queryParams: { "communityId": this.communityPid, "pageId": this.pageId } } ); } else { - this.router.navigate(['/classContents']); + this.router.navigate(['/classContents'], { queryParams: { "communityId": this.communityPid } } ); } + this.showLoading = false; }, - err => this.handleError('System error saving page content', err) + err => this.handleUpdateError('System error saving page content', err) ); } else { this.errorMessage = "Please fill all required fields"; @@ -62,14 +68,15 @@ export class NewDivHelpContentComponent { private cancelCustom() { if(this.pageId) { - this.router.navigate( ['/classContents/'], { queryParams: { "community": this.communityPid, "page": this.pageId } } ); + this.router.navigate( ['/classContents/'], { queryParams: { "communityId": this.communityPid, "pageId": this.pageId } } ); } else { - this.router.navigate(['/classContents']); + this.router.navigate(['/classContents'], { queryParams: { "communityId": this.communityPid } } ); } } - handleError(message: string, error) { - this.errorMessage = message + ' (Server responded: ' + error + ')'; - + handleUpdateError(message: string, error) { + this.errorMessage = message; + console.log('Server responded: ' + error); + this.showLoading = false; } } diff --git a/src/app/pages/entity/entities.component.html b/src/app/pages/entity/entities.component.html new file mode 100644 index 0000000..13e10ac --- /dev/null +++ b/src/app/pages/entity/entities.component.html @@ -0,0 +1,121 @@ +
    + + + +
    +
    +
    +
    +
    + + Disable an entity to hide it from community dashboard portal.
    +
    If an entity is disabled, all related search and advanced search pages will be hidden from the community dashborad and a message "Can't find that page" will appear in case the url of that page is loaded. If the related page belongs to the menu the link will be removed from menu, too.
    + +
    + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + +
    NameChange statusActions
    + +
    {{check.entity.name}}
    +
    +
    + +
    +
    + +
    +
    +
    + + +
    +
    + +
    +
    No entities found
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    + + + + + + + + + + + + + + + diff --git a/src/app/pages/entity/entities.component.ts b/src/app/pages/entity/entities.component.ts new file mode 100644 index 0000000..f302253 --- /dev/null +++ b/src/app/pages/entity/entities.component.ts @@ -0,0 +1,285 @@ +import { Component, ViewChild, OnInit } from '@angular/core'; +import { ActivatedRoute } from "@angular/router"; +import { HelpContentService } from "../../services/help-content.service"; +import { FormGroup } from "@angular/forms"; +import { ModalFormComponent } from "../modal-form.component"; +import { DeleteConfirmationDialogComponent } from "../delete-confirmation-dialog.component"; +import { EntityFormComponent } from "./entity-form.component"; +import { CheckEntity, Entity } from "../../domain/entity"; +import { Community } from "../../domain/community"; +import { EnvProperties } from '../../openaireLibrary/utils/properties/env-properties'; +import {Session} from '../../openaireLibrary/login/utils/helper.class'; + +@Component({ + selector: 'entities', + templateUrl: './entities.component.html', +}) + +export class EntitiesComponent implements OnInit { + + // @ViewChild(ModalFormComponent) + // @ViewChild('saveModal') + // public modal:ModalFormComponent; + // + // @ViewChild('updateModal') + // public updateModal:ModalFormComponent; + @ViewChild('AlertModalSaveEntity') alertModalSaveEntity; + @ViewChild('AlertModalUpdateEntity') alertModalUpdateEntity; + @ViewChild('AlertModalDeleteEntities') alertModalDeleteEntities; + private selectedEntities: string[] = []; + + @ViewChild(EntityFormComponent) + public formComponent : EntityFormComponent; + + public checkboxes : CheckEntity[] = []; + + public entities : Entity[] = []; + + public formGroup : FormGroup; + + private searchText : RegExp = new RegExp(''); + + public communities: Community[] = []; + public selectedCommunityPid: string; + + @ViewChild('AlertModalRelatedPages') alertModalRelatedPages; + + public toggleIds: string[]; + public toggleStatus: boolean; + public properties:EnvProperties = null; + + public showLoading: boolean = true; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + public modalErrorMessage: string = ''; + public isPortalAdministrator = null; + ngOnInit() { + this.formGroup = this.formComponent.form; + this.route.data + .subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + + this.route.queryParams.subscribe(params => { + this.selectedCommunityPid = params['communityId']; + this.applyCommunityFilter(this.selectedCommunityPid); + this.isPortalAdministrator = Session.isPortalAdministrator(); + }); + }); + + } + + constructor(private route: ActivatedRoute, private _helpContentService: HelpContentService) {} + getEntities(community_pid: string) { + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + + this._helpContentService.getCommunityEntities(community_pid, this.properties.adminToolsAPIURL).subscribe( + entities => { + this.entities = entities; + this.checkboxes = []; + + let self = this; + entities.forEach(_ => { + self.checkboxes.push({entity : _, checked : false}); + }); + + this.showLoading = false; + }, + error => this.handleError('System error retrieving entities', error)); + } + + // public showModal():void { + // this.modal.showModal(); + // } + + public toggleCheckBoxes(event) { + this.checkboxes.forEach(_ => _.checked = event.target.checked); + } + + public applyCheck(flag : boolean) { + console.info("applyCheck "+flag); + this.checkboxes.forEach(_ => _.checked = flag); + } + + public getSelectedEntities() : string[] { + return this.checkboxes.filter(entity => entity.checked == true).map(checkedEntity => checkedEntity.entity).map(res => res._id); + } + + private deleteEntitiesFromArray(ids : string[]) : void { + for(let id of ids) { + let i = this.checkboxes.findIndex(_ => _.entity._id == id); + this.checkboxes.splice(i, 1); + } + } + + public confirmDeleteEntity(id : string) { + //this.deleteConfirmationModal.ids = [id]; + //this.deleteConfirmationModal.showModal(); + this.selectedEntities = [id]; + this.confirmDeleteEntitiesModalOpen(); + } + + public confirmDeleteSelectedEntities() { + //this.deleteConfirmationModal.ids = this.getSelectedEntities(); + //this.deleteConfirmationModal.showModal(); + this.selectedEntities = this.getSelectedEntities(); + this.confirmDeleteEntitiesModalOpen(); + } + + private confirmDeleteEntitiesModalOpen() { + this.alertModalDeleteEntities.cancelButton = true; + this.alertModalDeleteEntities.okButton = true; + this.alertModalDeleteEntities.alertTitle = "Delete Confirmation"; + this.alertModalDeleteEntities.message = "Are you sure you want to delete the selected entity(-ies)?"; + this.alertModalDeleteEntities.okButtonText = "Yes"; + this.alertModalDeleteEntities.open(); + } + + public confirmedDeleteEntities(data: any) { + this.showLoading = true; + this.updateErrorMessage = ""; + + this._helpContentService.deleteEntities(this.selectedEntities, this.properties.adminToolsAPIURL).subscribe( + _ => { + this.deleteEntitiesFromArray(this.selectedEntities); + this.showLoading = false; + }, + error => this.handleUpdateError('System error deleting the selected entities', error) + ); + } + + public editEntity(i : number) { + let entity : Entity = this.checkboxes[i].entity; + this.formGroup.patchValue(entity); + //this.updateModal.showModal(); + this.modalErrorMessage = ""; + this.entitiesModalOpen(this.alertModalUpdateEntity, "Update", "Update Entity"); + } + + public newEntity() { + this.formComponent.reset(); + this.modalErrorMessage = ""; + this.entitiesModalOpen(this.alertModalSaveEntity, "Save", "Add a new Entity"); + } + + private entitiesModalOpen(modal: any, title: string, yesBtn: string) { + modal.cancelButton = true; + modal.okButton = true; + modal.alertTitle = title; + modal.okButtonText = yesBtn; + modal.open(); + } + + public entitySaveConfirmed(data: any) { + if(!this.formGroup.valid) { + this.entitiesModalOpen(this.alertModalSaveEntity, "Save", "Add a new Entity"); + this.modalErrorMessage = "Please fill in all required fields marked with *"; + } else { + this.modalErrorMessage = ""; + this._helpContentService.saveEntity( this.formGroup.value, this.properties.adminToolsAPIURL).subscribe( + entity => { + this.entitySavedSuccessfully(entity); + }, + error => this.handleUpdateError("System error creating entity", error) + ); + } + } + + public entityUpdateConfirmed(data: any) { + if(!this.formGroup.valid) { + this.entitiesModalOpen(this.alertModalUpdateEntity, "Update", "Update Entity"); + this.modalErrorMessage = "Please fill in all required fields marked with *"; + } else { + this._helpContentService.updateEntity( this.formGroup.value, this.properties.adminToolsAPIURL).subscribe( + entity => { + this.entityUpdatedSuccessfully(entity); + }, + error => this.handleUpdateError("System error updating entity", error) + ); + } + } + + public entitySavedSuccessfully(entity: Entity) { + this.checkboxes.push({entity : entity, checked : false}); + this.applyCheck(false); + } + + public entityUpdatedSuccessfully(entity : Entity) { + this.checkboxes.find(checkItem => checkItem.entity._id==entity._id).entity = entity; + this.applyCheck(false); + } + + public filterBySearch(text : string) { + this.searchText = new RegExp(text,'i'); + this.applyFilter(); + } + + public applyFilter() { + this.checkboxes = []; + this.entities.filter(item => this.filterEntities(item)).forEach( + _ => this.checkboxes.push({entity: _, checked: false}) + ); + } + + public filterEntities(entity : Entity) : boolean { + let textFlag = this.searchText.toString() == '' || (entity.name).match(this.searchText) != null; + return textFlag; + } + + handleError(message: string, error) { + this.errorMessage = message; + console.log('Server responded: ' + error); + + this.showLoading = false; + } + + handleUpdateError(message: string, error) { + if(error == null) { + this.formComponent.reset(); + } else { + this.updateErrorMessage = message; + console.log('Server responded: ' +error); + } + + this.showLoading = false; + } + + public applyCommunityFilter(community_pid: string) { + this.getEntities(community_pid); + } + + public toggleEntities(status : boolean, ids : string[]) { + //this.okModal.showModal(); + this.toggleIds = ids; + this.toggleStatus = status; + this.confirmRelatedPagesModalOpen(); + } + + private confirmRelatedPagesModalOpen() { + this.alertModalRelatedPages.cancelButton = true; + this.alertModalRelatedPages.okButton = true; + this.alertModalRelatedPages.alertTitle = "Warning"; + this.alertModalRelatedPages.message = "This action will affect all search pages related to this entity! Pages' status will change to entity's status! Do you want to continue?"; + this.alertModalRelatedPages.okButtonText = "Yes"; + this.alertModalRelatedPages.open(); + } + + public continueToggling(event: any) { + this.showLoading = true; + this.updateErrorMessage = ""; + + this._helpContentService.toggleEntities(this.selectedCommunityPid,this.toggleIds,this.toggleStatus, this.properties.adminToolsAPIURL).subscribe( + () => { + for(let id of this.toggleIds) { + let i = this.checkboxes.findIndex(_ => _.entity._id == id); + this.checkboxes[i].entity.isEnabled=this.toggleStatus; + } + this.applyCheck(false); + this.showLoading = false; + }, + error => this.handleUpdateError('System error changing the status of the selected entity(-ies)', error) + ); + } + + } diff --git a/src/app/pages/entity/entity-form.component.html b/src/app/pages/entity/entity-form.component.html new file mode 100644 index 0000000..755f540 --- /dev/null +++ b/src/app/pages/entity/entity-form.component.html @@ -0,0 +1,11 @@ +
    +
    + + +
    +
    + + +
    + +
    diff --git a/app/pages/entity/entity-form.component.ts b/src/app/pages/entity/entity-form.component.ts similarity index 100% rename from app/pages/entity/entity-form.component.ts rename to src/app/pages/entity/entity-form.component.ts diff --git a/src/app/pages/error/errorPage.component.ts b/src/app/pages/error/errorPage.component.ts new file mode 100644 index 0000000..a7e50f5 --- /dev/null +++ b/src/app/pages/error/errorPage.component.ts @@ -0,0 +1,13 @@ +import { Component, Input } from '@angular/core'; +import { Location } from '@angular/common'; + +@Component({ + selector: 'openaire-error', + template: ` + + ` +}) + +export class AdminErrorPageComponent { + +} diff --git a/app/pages/faq/questions-form.component.html b/src/app/pages/faq/questions-form.component.html similarity index 100% rename from app/pages/faq/questions-form.component.html rename to src/app/pages/faq/questions-form.component.html diff --git a/app/pages/faq/questions-form.component.ts b/src/app/pages/faq/questions-form.component.ts similarity index 100% rename from app/pages/faq/questions-form.component.ts rename to src/app/pages/faq/questions-form.component.ts diff --git a/app/pages/faq/questions.component.html b/src/app/pages/faq/questions.component.html similarity index 93% rename from app/pages/faq/questions.component.html rename to src/app/pages/faq/questions.component.html index 12e67c9..f690006 100644 --- a/app/pages/faq/questions.component.html +++ b/src/app/pages/faq/questions.component.html @@ -24,7 +24,7 @@ {{successMessage}}
    -
    +
    -
    +
    -
    +
    @@ -78,7 +78,7 @@
    -
    +
    @@ -105,10 +105,10 @@
    - +
    - +
    @@ -120,8 +120,8 @@
    - - + +
    diff --git a/app/pages/faq/questions.component.ts b/src/app/pages/faq/questions.component.ts similarity index 100% rename from app/pages/faq/questions.component.ts rename to src/app/pages/faq/questions.component.ts diff --git a/app/pages/faq/topics-form.component.html b/src/app/pages/faq/topics-form.component.html similarity index 100% rename from app/pages/faq/topics-form.component.html rename to src/app/pages/faq/topics-form.component.html diff --git a/app/pages/faq/topics-form.component.ts b/src/app/pages/faq/topics-form.component.ts similarity index 100% rename from app/pages/faq/topics-form.component.ts rename to src/app/pages/faq/topics-form.component.ts diff --git a/app/pages/faq/topics.component.html b/src/app/pages/faq/topics.component.html similarity index 93% rename from app/pages/faq/topics.component.html rename to src/app/pages/faq/topics.component.html index 6df4c0d..106c534 100644 --- a/app/pages/faq/topics.component.html +++ b/src/app/pages/faq/topics.component.html @@ -24,7 +24,7 @@ {{successMessage}}
    -
    +
    -
    +
    -
    + -
    +
    @@ -78,8 +78,8 @@
    - - + +
    diff --git a/app/pages/faq/topics.components.ts b/src/app/pages/faq/topics.components.ts similarity index 100% rename from app/pages/faq/topics.components.ts rename to src/app/pages/faq/topics.components.ts diff --git a/src/app/pages/helpcontent/edit-page-help-content.component.html b/src/app/pages/helpcontent/edit-page-help-content.component.html new file mode 100644 index 0000000..903fcc9 --- /dev/null +++ b/src/app/pages/helpcontent/edit-page-help-content.component.html @@ -0,0 +1,23 @@ +
    +
    + + +
    + +
    + + + + + + +
    +
    +
    +
    diff --git a/app/pages/helpcontent/edit-page-help-content.component.ts b/src/app/pages/helpcontent/edit-page-help-content.component.ts similarity index 60% rename from app/pages/helpcontent/edit-page-help-content.component.ts rename to src/app/pages/helpcontent/edit-page-help-content.component.ts index e4670b9..6b9de4b 100644 --- a/app/pages/helpcontent/edit-page-help-content.component.ts +++ b/src/app/pages/helpcontent/edit-page-help-content.component.ts @@ -27,9 +27,13 @@ export class EditPageHelpContentComponent implements OnInit, OnDestroy{ private pageHelpContent: PageHelpContent; - private errorMessage : string = null; + //private errorMessage : string = null; public properties:EnvProperties = null; + public showLoading: boolean = true; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + constructor( private route: ActivatedRoute, private router: Router, @@ -40,14 +44,12 @@ export class EditPageHelpContentComponent implements OnInit, OnDestroy{ .subscribe((data: { envSpecific: EnvProperties }) => { this.properties = data.envSpecific; this.sub = this.route.queryParams.subscribe(params => { - //let id = params['id']; let pageContentId = params['pageContentId']; - this.communityPid = params['community']; + this.communityPid = params['communityId']; this.pageId = params['pageId']; - this._helpContentService.getPageHelpContent(pageContentId as string, this.properties.adminToolsAPIURL).subscribe( - pageHelpContent => this.updateForm(pageHelpContent), - error => this.handleError('System error retrieving page help content', error)); - }); + + this.getPageHelpContent(pageContentId); + }); }); } ngOnDestroy() { @@ -55,7 +57,28 @@ export class EditPageHelpContentComponent implements OnInit, OnDestroy{ } handleError(message: string, error) { - this.errorMessage = message + ' (Server responded: ' + error + ')'; + this.errorMessage = message; + console.log('Server responded: ' + error); + this.showLoading = false; + } + + handleUpdateError(message: string, error) { + this.updateErrorMessage = message; + console.log('Server responded: ' + error); + this.showLoading = false; + } + + private getPageHelpContent(pageContentId: string) { + this.showLoading = true; + this.errorMessage = ""; + this.updateErrorMessage = ""; + + this._helpContentService.getPageHelpContent(pageContentId as string, this.properties.adminToolsAPIURL).subscribe( + pageHelpContent => { + this.updateForm(pageHelpContent); + this.showLoading = false; + }, + error => this.handleError('System error retrieving page help content', error)); } private updateForm(pageHelpContent : PageHelpContent) { @@ -67,17 +90,21 @@ export class EditPageHelpContentComponent implements OnInit, OnDestroy{ private saveCustom() { if(this.formComponent.myForm.valid) { + this.showLoading = true; + this.updateErrorMessage = ""; + let pageHelpContent : PageHelpContent = this.formComponent.myForm.value; console.info(pageHelpContent.community); this._helpContentService.updatePageHelpContent(pageHelpContent, this.properties.adminToolsAPIURL).subscribe( _ => { if(this.pageId) { - this.router.navigate( ['/pageContents/'], { queryParams: { "community": this.communityPid, "page": this.pageId } } ); + this.router.navigate( ['/pageContents/'], { queryParams: { "communityId": this.communityPid, "pageId": this.pageId } } ); } else { - this.router.navigate(['/pageContents']); + this.router.navigate(['/pageContents'], { queryParams: { "communityId": this.communityPid} } ); } + this.showLoading = false; }, - err => this.handleError('System error updating page content', err) + err => this.handleUpdateError('System error updating page content', err) ); } else { this.errorMessage = "Please fill all required fields"; @@ -85,10 +112,13 @@ export class EditPageHelpContentComponent implements OnInit, OnDestroy{ } private cancelCustom() { + this.errorMessage = ""; + this.updateErrorMessage = ""; + if(this.pageId) { - this.router.navigate( ['/pageContents/'], { queryParams: { "community": this.communityPid, "page": this.pageId } } ); + this.router.navigate( ['/pageContents/'], { queryParams: { "communityId": this.communityPid, "pageId": this.pageId } } ); } else { - this.router.navigate(['/pageContents']); + this.router.navigate(['/pageContents'], { queryParams: { "communityId": this.communityPid} } ); } } } diff --git a/src/app/pages/helpcontent/new-page-help-content.component.html b/src/app/pages/helpcontent/new-page-help-content.component.html new file mode 100644 index 0000000..9e8860d --- /dev/null +++ b/src/app/pages/helpcontent/new-page-help-content.component.html @@ -0,0 +1,24 @@ +
    +
    + + +
    + +
    + + + + + + + +
    +
    +
    +
    diff --git a/app/pages/helpcontent/new-page-help-content.component.ts b/src/app/pages/helpcontent/new-page-help-content.component.ts similarity index 66% rename from app/pages/helpcontent/new-page-help-content.component.ts rename to src/app/pages/helpcontent/new-page-help-content.component.ts index 20ad56a..d18d4c7 100644 --- a/app/pages/helpcontent/new-page-help-content.component.ts +++ b/src/app/pages/helpcontent/new-page-help-content.component.ts @@ -18,13 +18,17 @@ export class NewPageHelpContentComponent { @ViewChild(PageContentFormComponent) public formComponent : PageContentFormComponent; - private errorMessage : string = null; + //private errorMessage : string = null; private communityPid: string; private pageId: string; public properties:EnvProperties = null; + public showLoading: boolean = false; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + constructor( private route: ActivatedRoute, private router: Router, @@ -35,7 +39,7 @@ export class NewPageHelpContentComponent { .subscribe((data: { envSpecific: EnvProperties }) => { this.properties = data.envSpecific; this.route.queryParams.subscribe(params => { - this.communityPid = params['community']; + this.communityPid = params['communityId']; this.pageId = params['pageId']; }); }); @@ -43,20 +47,24 @@ export class NewPageHelpContentComponent { private saveCustom() { - this.errorMessage = null; + //this.errorMessage = null; if(this.formComponent.myForm.valid) { + this.showLoading = true; + this.updateErrorMessage = ""; + let pageHelpContent : PageHelpContent = this.formComponent.myForm.value; this._helpContentService.savePageHelpContent(pageHelpContent, this.properties.adminToolsAPIURL).subscribe( _ => { if(this.pageId) { - this.router.navigate( ['/pageContents/'], { queryParams: { "community": this.communityPid, "page": this.pageId } } ); + this.router.navigate( ['/pageContents/'], { queryParams: { "communityId": this.communityPid, "pageId": this.pageId } } ); } else { - this.router.navigate(['/pageContents']); + this.router.navigate(['/pageContents'], { queryParams: { "communityId": this.communityPid} }); } + this.showLoading = false; }, - err => this.handleError('System error saving page content', err) + err => this.handleUpdateError('System error saving page content', err) ); } else { this.errorMessage = "Please fill all required fields"; @@ -65,14 +73,16 @@ export class NewPageHelpContentComponent { private cancelCustom() { if(this.pageId) { - this.router.navigate( ['/pageContents/'], { queryParams: { "community": this.communityPid, "page": this.pageId } } ); + this.router.navigate( ['/pageContents/'], { queryParams: { "communityId": this.communityPid, "pageId": this.pageId } } ); } else { - this.router.navigate(['/pageContents']); + this.router.navigate(['/pageContents'], { queryParams: { "communityId": this.communityPid} } ); } } - handleError(message: string, error) { - this.errorMessage = message + ' (Server responded: ' + error + ')'; + handleUpdateError(message: string, error) { + this.updateErrorMessage = message; + console.log('Server responded: ' + error); + this.showLoading = false; } } diff --git a/app/pages/helpcontent/page-help-content-form.component.html b/src/app/pages/helpcontent/page-help-content-form.component.html similarity index 64% rename from app/pages/helpcontent/page-help-content-form.component.html rename to src/app/pages/helpcontent/page-help-content-form.component.html index 88ee02d..79c6a57 100644 --- a/app/pages/helpcontent/page-help-content-form.component.html +++ b/src/app/pages/helpcontent/page-help-content-form.component.html @@ -1,5 +1,15 @@ -
    {{errorMessage}}
    -
    + + + +
    + + Create or edit help text +
    + Select the page to be displayed, select position of the page +
    + +
    +
    - +
    + + +
    +
    +
    + + + + + +
    +
    +
    +
    + + +
    + + Enable or disable help text to show or hide it from the dashboard + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PageCommunityContentPlacementOrderBeforeChange statusActions
    + +
    {{check.pageHelpContent.page.name}}
    +
    +
    {{check.pageHelpContent.community.name}}
    +
    +
    +
    +
    {{check.pageHelpContent.placement}}
    +
    +
    {{check.pageHelpContent.order}} +
    +
    +
    {{check.pageHelpContent.isPriorTo}} +
    +
    +
    + +
    +
    + +
    +
    +
    + + +
    +
    + +
    +
    No page contents found
    +
    +
    +
    +
    + Go back to {{page.type}} pages +
    +
    +
    +
    + +
    + + + diff --git a/app/pages/helpcontent/page-help-contents.component.ts b/src/app/pages/helpcontent/page-help-contents.component.ts similarity index 63% rename from app/pages/helpcontent/page-help-contents.component.ts rename to src/app/pages/helpcontent/page-help-contents.component.ts index 820bc1a..6ffe902 100644 --- a/app/pages/helpcontent/page-help-contents.component.ts +++ b/src/app/pages/helpcontent/page-help-contents.component.ts @@ -11,6 +11,7 @@ import { Page } from "../../domain/page"; import {Router} from "@angular/router"; import { Community } from "../../domain/community"; import { EnvProperties } from '../../openaireLibrary/utils/properties/env-properties'; +import {SafeHtmlPipe} from '../../openaireLibrary/utils/pipes/safeHTML.pipe'; @Component({ selector: 'page-help-contents', @@ -29,14 +30,16 @@ export class PageHelpContentsComponent implements OnInit { // @ViewChild(PageHelpContentsFormComponent) // public formComponent : PageHelpContentsFormComponent; - @ViewChild('deleteConfirmationModal') - public deleteConfirmationModal : DeleteConfirmationDialogComponent; + // @ViewChild('deleteConfirmationModal') + // public deleteConfirmationModal : DeleteConfirmationDialogComponent; + @ViewChild('AlertModalDeletePageHelpContents') alertModalDeletePageHelpContents; + private selectedPageContents: string[] = []; public checkboxes : CheckPageHelpContent[] = []; public pageHelpContents : PageHelpContent[] = []; - public errorMessage: string; + //public errorMessage: string; public formGroup : FormGroup; @@ -59,22 +62,24 @@ export class PageHelpContentsComponent implements OnInit { public page: Page; public properties:EnvProperties = null; + public showLoading: boolean = true; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + ngOnInit() { this.route.data .subscribe((data: { envSpecific: EnvProperties }) => { this.properties = data.envSpecific; this.route.queryParams.subscribe(params => { - this.selectedCommunityPid = params['community']; - this.selectedPageId = params['page']; + this.selectedCommunityPid = params['communityId']; + this.selectedPageId = params['pageId']; if(this.selectedCommunityPid && this.selectedPageId) { - this.getPageHelpContents(this.selectedCommunityPid); this.getPage(this.selectedPageId); - this.getCommunity(this.selectedCommunityPid); - } else { + } else if(this.selectedCommunityPid) { this.selectedPageId = ""; - this.getCommunities(); + this.getPages(this.selectedCommunityPid); } }); }); @@ -84,39 +89,29 @@ export class PageHelpContentsComponent implements OnInit { constructor(private route: ActivatedRoute, private _helpService: HelpContentService, private router : Router) {} getPage(pageId: string) { - let self = this; + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + this._helpService.getPage(pageId, this.properties.adminToolsAPIURL).subscribe( page => { - self.page = page; - } - ); - } - - getCommunity(communityPid: string) { - let self = this; - this._helpService.getCommunity(communityPid, this.properties.adminToolsAPIURL).subscribe( - community => { - self.community = community; - } - ); - } - - getCommunities() { - let self = this; - this._helpService.getCommunities(this.properties.adminToolsAPIURL).subscribe( - communities => { - self.communities = communities; - self.selectedCommunityPid = self.communities[0].pid; - this.getPages(self.selectedCommunityPid); - this.getPageHelpContents(self.selectedCommunityPid); - }, - error => this.handleError('System error retrieving communities', error)); + this.page = page; + this.getPageHelpContents(this.selectedCommunityPid); + }, + error => this.handleError('System error retrieving page', error)); } getPages(community_pid: string) { - this._helpService.getCommunityPages(community_pid, this.properties.adminToolsAPIURL).subscribe( - pages => this.pages = pages, - error => this.handleError('System error retrieving pages', error)); + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + + this._helpService.getCommunityPages(community_pid, "", this.properties.adminToolsAPIURL).subscribe( + pages => { + this.pages = pages; + this.getPageHelpContents(this.selectedCommunityPid); + }, + error => this.handleError('System error retrieving pages', error)); } public countPageHelpContents() { @@ -133,28 +128,24 @@ export class PageHelpContentsComponent implements OnInit { } getPageHelpContents(community_pid: string) { - let self = this; this._helpService.getCommunityPageHelpContents(community_pid, this.properties.adminToolsAPIURL).subscribe( pageHelpContents => { - self.pageHelpContents = pageHelpContents as Array; - self.counter.all = self.pageHelpContents.length; - self.checkboxes = []; - /*self.pageHelpContents.forEach(_ => { - let page: Page = _.page as Page; - if(!self.selectedPageId || (page._id == self.selectedPageId)) { - self.checkboxes.push({pageHelpContent : _, checked : false}); - } - });*/ - for (let i = self.pageHelpContents.length - 1; i >= 0; i -= 1) { - let page: Page = self.pageHelpContents[i].page as Page; - if(!self.selectedPageId || (page._id == self.selectedPageId)) { - self.checkboxes.push({pageHelpContent : self.pageHelpContents[i], checked : false}); + this.pageHelpContents = pageHelpContents as Array; + this.counter.all = this.pageHelpContents.length; + this.checkboxes = []; + + for (let i = this.pageHelpContents.length - 1; i >= 0; i -= 1) { + let page: Page = this.pageHelpContents[i].page as Page; + if(!this.selectedPageId || (page._id == this.selectedPageId)) { + this.checkboxes.push({pageHelpContent : this.pageHelpContents[i], checked : false}); } else { - self.pageHelpContents.splice(i, 1); + this.pageHelpContents.splice(i, 1); } } - self.countPageHelpContents(); + this.countPageHelpContents(); + + this.showLoading = false; }, error => this.handleError('System error retrieving page contents', error)); } @@ -179,19 +170,38 @@ export class PageHelpContentsComponent implements OnInit { } public confirmDeletePageHelpContent(id : string) { - this.deleteConfirmationModal.ids = [id]; - this.deleteConfirmationModal.showModal(); + //this.deleteConfirmationModal.ids = [id]; + //this.deleteConfirmationModal.showModal(); + this.selectedPageContents = [id]; + this.confirmModalOpen(); } public confirmDeleteSelectedPageHelpContents() { - this.deleteConfirmationModal.ids = this.getSelectedPageHelpContents(); - this.deleteConfirmationModal.showModal(); + //this.deleteConfirmationModal.ids = this.getSelectedPageHelpContents(); + //this.deleteConfirmationModal.showModal(); + this.selectedPageContents = this.getSelectedPageHelpContents(); + this.confirmModalOpen(); } - public confirmedDeletePageHelpContents(ids : string[]) { - this._helpService.deletePageHelpContents(ids, this.properties.adminToolsAPIURL).subscribe( - _ => this.deletePageHelpContentsFromArray(ids), - error => this.handleError('System error deleting the selected page content(s)', error) + private confirmModalOpen() { + this.alertModalDeletePageHelpContents.cancelButton = true; + this.alertModalDeletePageHelpContents.okButton = true; + this.alertModalDeletePageHelpContents.alertTitle = "Delete Confirmation"; + this.alertModalDeletePageHelpContents.message = "Are you sure you want to delete the selected page content(s)?"; + this.alertModalDeletePageHelpContents.okButtonText = "Yes"; + this.alertModalDeletePageHelpContents.open(); + } + + public confirmedDeletePageHelpContents(data: any) { + this.showLoading = true; + this.updateErrorMessage = ""; + + this._helpService.deletePageHelpContents(this.selectedPageContents, this.properties.adminToolsAPIURL).subscribe( + _ => { + this.deletePageHelpContentsFromArray(this.selectedPageContents); + this.showLoading = false; + }, + error => this.handleUpdateError('System error deleting the selected page content(s)', error) ); } @@ -208,13 +218,16 @@ export class PageHelpContentsComponent implements OnInit { public editPageHelpContent(id : string) { //this.router.navigate(['/pageContents/edit/', _id]); if(this.selectedPageId) { - this.router.navigate( ['/pageContents/edit/'], { queryParams: { "pageContentId": id, "community": this.selectedCommunityPid, "pageId": this.selectedPageId } } ); + this.router.navigate( ['/pageContents/edit/'], { queryParams: { "pageContentId": id, "communityId": this.selectedCommunityPid, "pageId": this.selectedPageId } } ); } else { - this.router.navigate( ['/pageContents/edit/'], { queryParams: { "pageContentId": id, "community": this.selectedCommunityPid } } ); + this.router.navigate( ['/pageContents/edit/'], { queryParams: { "pageContentId": id, "communityId": this.selectedCommunityPid } } ); } } public togglePageHelpContents(status : boolean, ids : string[]) { + this.showLoading = true; + this.updateErrorMessage = ""; + this._helpService.togglePageHelpContents(ids,status, this.properties.adminToolsAPIURL).subscribe( () => { for(let id of ids) { @@ -224,16 +237,10 @@ export class PageHelpContentsComponent implements OnInit { } this.countPageHelpContents(); this.applyCheck(false); - }, - error => this.handleError('System error changing the status of the selected page content(s)', error) - ); - } - public savePageHelpContent(data : any):void { - console.log(data); - this._helpService.savePageHelpContent(data, this.properties.adminToolsAPIURL).subscribe( - pageHelpContent => this.pageHelpContentSavedSuccessfully(pageHelpContent), - error => this.handleError('System error saving the specified help content', error) + this.showLoading = false; + }, + error => this.handleUpdateError('System error changing the status of the selected page content(s)', error) ); } @@ -294,19 +301,24 @@ export class PageHelpContentsComponent implements OnInit { } handleError(message: string, error) { - if(error == null) { - // this.formComponent.reset(); - } - this.errorMessage = message + ' (Server responded: ' + error + ')'; + this.errorMessage = message; + console.log('Server responded: ' + error); + + this.showLoading = false; } - public filterByCommunity(event: any) { - this.selectedCommunityPid = event.target.value; - this.applyCommunityFilter(this.selectedCommunityPid); + handleUpdateError(message: string, error) { + this.updateErrorMessage = message; + console.log('Server responded: ' +error); + + this.showLoading = false; } - public applyCommunityFilter(community_pid: string) { - this.getPages(community_pid); - this.getPageHelpContents(community_pid); + public newPageContent() { + if(this.selectedPageId) { + this.router.navigate( ['/pageContents/new'], { queryParams: {communityId: this.selectedCommunityPid, pageId: this.selectedPageId} } ); + } else { + this.router.navigate( ['/pageContents/new'], { queryParams: {communityId: this.selectedCommunityPid} } ); + } } } diff --git a/src/app/pages/htmlpagecontent/edit-htmlpage-content.component.html b/src/app/pages/htmlpagecontent/edit-htmlpage-content.component.html new file mode 100644 index 0000000..1f8905f --- /dev/null +++ b/src/app/pages/htmlpagecontent/edit-htmlpage-content.component.html @@ -0,0 +1,23 @@ +
    +
    + + +
    + +
    + + + + + + +
    +
    +
    +
    diff --git a/src/app/pages/htmlpagecontent/edit-htmlpage-content.component.ts b/src/app/pages/htmlpagecontent/edit-htmlpage-content.component.ts new file mode 100644 index 0000000..463e200 --- /dev/null +++ b/src/app/pages/htmlpagecontent/edit-htmlpage-content.component.ts @@ -0,0 +1,137 @@ +import { Component, ViewChild, OnInit } from '@angular/core'; +import { FormGroup } from "@angular/forms"; +import { ActivatedRoute, Router } from "@angular/router"; +//import { Location } from "@angular/common"; +import { HelpContentService } from "../../services/help-content.service"; +import { HtmlPageContentService } from "./html-page-content.service"; +import { HtmlPageContent, CheckHtmlPageContent } from "../../domain/html-page-content"; +import { HtmlPageContentFormComponent } from "./html-page-content-form.component"; + +import { EnvProperties } from '../../openaireLibrary/utils/properties/env-properties'; +import { Subscription } from "rxjs/Subscription"; + +@Component({ + selector: 'edit-htmlpage-content', + templateUrl: './edit-htmlpage-content.component.html', +}) + +export class EditHtmlPageContentComponent implements OnInit { + @ViewChild(HtmlPageContentFormComponent) + public formComponent : HtmlPageContentFormComponent; + + private communityPid: string; + private pageId: string; + private pageName: string = ""; + public mode: string = "edit"; + + private sub: Subscription; + + private htmlPageContent: HtmlPageContent; + + public properties:EnvProperties = null; + + public showLoading: boolean = true; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + + constructor( + private route: ActivatedRoute, + private router: Router, + //private location: Location, + private _helpContentService: HelpContentService, + private _htmlContentService: HtmlPageContentService) { + this.router.routeReuseStrategy.shouldReuseRoute = function(){ + return false; + } + } + + ngOnInit() { + this.route.data + .subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + this.sub = this.route.queryParams.subscribe(params => { + this.communityPid = params['communityId']; + this.pageId = params['pageId']; + + this.getPage(this.communityPid, this.pageId); + }); + }); + } + ngOnDestroy() { + this.sub.unsubscribe(); + } + + handleError(message: string, error) { + this.errorMessage = message; + console.log('Server responded: ' + error); + this.showLoading = false; + } + + handleUpdateError(message: string, error) { + this.updateErrorMessage = message; + console.log('Server responded: ' + error); + this.showLoading = false; + } + + private getPage(communityId: string, pageId: string) { + this._helpContentService.getPage(pageId, this.properties.adminToolsAPIURL).subscribe( + page => { + this.pageName = page.name; + this.getHtmlPageContent(communityId, page.route); + }, + error => this.handleError('System error retrieving page', error)); + } + + private getHtmlPageContent(communityId: string, pageRoute: string) { + this.showLoading = true; + this.errorMessage = ""; + this.updateErrorMessage = ""; + + this._htmlContentService.getHtmlPageContent(communityId, pageRoute, this.properties.adminToolsAPIURL).subscribe( + htmlPageContent => { + if(htmlPageContent.length > 0) { + this.updateForm(htmlPageContent[0]); + } + this.showLoading = false; + }, + error => this.handleError('System error retrieving page help content', error)); + } + + private updateForm(htmlPageContent : HtmlPageContent) { + this.htmlPageContent = htmlPageContent; + this.formComponent.myForm.patchValue((htmlPageContent)); + } + + private saveCustom() { + if(this.formComponent.myForm.valid) { + this.showLoading = true; + this.updateErrorMessage = ""; + this.mode = ""; + + let htmlPageContent : HtmlPageContent = this.formComponent.myForm.value; + console.info(htmlPageContent.community); + this._htmlContentService.updateHtmlPageContent(htmlPageContent, this.properties.adminToolsAPIURL).subscribe( + _ => { + this.mode = "preview"; + this.showLoading = false; + }, + err => { + this.mode = "edit"; + this.handleUpdateError('System error updating page content', err); + } + ); + } else { + this.mode = "edit"; + this.errorMessage = "Please fill all required fields"; + } + } + + private cancelCustom() { + this.errorMessage = ""; + this.updateErrorMessage = ""; + this.router.navigate(['/pages'], { queryParams: { "type": "html", "communityId": this.communityPid}}); + //this.location.back(); + //this.router.navigated = false; + //this.router.navigate( ['/htmlPageContent/edit'], { queryParams: { "communityId": this.communityPid, "pageId": this.pageId } } ); + } +} diff --git a/src/app/pages/htmlpagecontent/html-page-content-form.component.html b/src/app/pages/htmlpagecontent/html-page-content-form.component.html new file mode 100644 index 0000000..1498c4c --- /dev/null +++ b/src/app/pages/htmlpagecontent/html-page-content-form.component.html @@ -0,0 +1,30 @@ + + + +
    + + Edit html page content +
    +
    +
    + +
      +
    • + + +
    • +
    • +
      
      +          
    • +
    +
    + +
    diff --git a/src/app/pages/htmlpagecontent/html-page-content-form.component.ts b/src/app/pages/htmlpagecontent/html-page-content-form.component.ts new file mode 100644 index 0000000..8ac0876 --- /dev/null +++ b/src/app/pages/htmlpagecontent/html-page-content-form.component.ts @@ -0,0 +1,61 @@ +import { Component, OnInit, Input } from '@angular/core'; +import { ActivatedRoute } from "@angular/router"; +import { FormGroup, FormBuilder, Validators } from "@angular/forms"; +import { EnvProperties } from '../../openaireLibrary/utils/properties/env-properties'; +import { SafeHtmlPipe } from '../../openaireLibrary/utils/pipes/safeHTML.pipe'; + +@Component({ + selector: 'html-page-content-form', + templateUrl: './html-page-content-form.component.html', +}) + +export class HtmlPageContentFormComponent implements OnInit{ + + @Input('group') + myForm: FormGroup; + @Input('communityPid') + communityPid: string; + @Input('pageId') + pageId: string; + @Input('mode') + mode: string; + + public properties:EnvProperties = null; + + public errorMessage: string = ''; + @Input() updateErrorMessage: string = ''; + + constructor(private route: ActivatedRoute,private _fb: FormBuilder){} + + ngOnInit() { + this.myForm = this.form; + this.route.data + .subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + }); + } + + public get form() { + return this._fb.group({ + page : [this.pageId,Validators.required], + community : this.communityPid, + content : ['', Validators.required], + _id : '', + }); + } + + public reset() { + this.myForm.patchValue({ + page : '', + community : this.communityPid, + content : '', + _id : '' + }); + this.myForm.markAsPristine(); + } + + handleError(message: string, error) { + this.errorMessage = message; + console.log('Server responded: ' + error); + } +} diff --git a/src/app/pages/htmlpagecontent/html-page-content.service.ts b/src/app/pages/htmlpagecontent/html-page-content.service.ts new file mode 100644 index 0000000..90e52cb --- /dev/null +++ b/src/app/pages/htmlpagecontent/html-page-content.service.ts @@ -0,0 +1,45 @@ +import { Injectable } from '@angular/core'; +import { Http, Response, Headers, RequestOptions } from '@angular/http'; +import { Observable } from 'rxjs/Rx'; +import {COOKIE} from "../../openaireLibrary/login/utils/helper.class" +import { HtmlPageContent } from "../../domain/html-page-content"; + +@Injectable() +export class HtmlPageContentService { + + constructor(private http:Http) { + } + + static removeNulls(obj){ + var isArray = obj instanceof Array; + for (var k in obj){ + if (obj[k]===null || obj[k]==='') isArray ? obj.splice(k,1) : delete obj[k]; + else if (typeof obj[k]=="object") HtmlPageContentService.removeNulls(obj[k]); + } + } + + getHtmlPageContent(community : string, page: string, adminToolsAPIURL:string) { + return this.http.get(adminToolsAPIURL + 'htmlpagecontent?community=' + community + "&page="+page) + .map(res => res.json()) + .catch(this.handleError); + } + + updateHtmlPageContent(htmlPageContent: HtmlPageContent, adminToolsAPIURL:string) { + let headers = new Headers({'Content-Type': 'application/json'}); + let options = new RequestOptions({headers: headers}); + + HtmlPageContentService.removeNulls(htmlPageContent); + + return this.http.post(adminToolsAPIURL + 'htmlpagecontent/update', JSON.stringify(htmlPageContent), options) + .map(res => res.json()) + .catch(this.handleError); + } + + private handleError(error: Response) { + // in a real world app, we may send the error to some remote logging infrastructure + // instead of just logging it to the console + console.error(error); + return Observable.throw(error.json().error || 'Server error'); + } + +} diff --git a/src/app/pages/htmlpagecontent/htmlpagecontent.module.ts b/src/app/pages/htmlpagecontent/htmlpagecontent.module.ts new file mode 100644 index 0000000..4cb743c --- /dev/null +++ b/src/app/pages/htmlpagecontent/htmlpagecontent.module.ts @@ -0,0 +1,43 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { HttpModule, JsonpModule } from '@angular/http'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; + +import { CKEditorModule } from 'ng2-ckeditor'; + +import { EnvironmentSpecificResolver } from '../../openaireLibrary/utils/properties/environmentSpecificResolver'; +import { EnvironmentSpecificService } from '../../openaireLibrary/utils/properties/environment-specific.service'; + +import {ErrorMessagesModule} from '../../openaireLibrary/utils/errorMessages.module'; +import {AlertModalModule} from '../../openaireLibrary/utils/modal/alertModal.module'; +import {SafeHtmlPipeModule} from '../../openaireLibrary/utils/pipes/safeHTMLPipe.module'; + +import { HtmlPageContentFormComponent } from "./html-page-content-form.component"; +import { EditHtmlPageContentComponent } from "./edit-htmlpage-content.component"; +import { HtmlPageContentService } from "./html-page-content.service"; + +@NgModule({ + imports: [ + BrowserModule, + HttpModule, + JsonpModule, + FormsModule, + ReactiveFormsModule, + RouterModule, + CKEditorModule, + ErrorMessagesModule, + AlertModalModule, + SafeHtmlPipeModule + ], + declarations: [ + HtmlPageContentFormComponent, + EditHtmlPageContentComponent, + ], + providers: [ + HtmlPageContentService, + EnvironmentSpecificResolver,EnvironmentSpecificService + ] +}) + +export class HtmlPageContentModule { } diff --git a/src/app/pages/mining/mining.component.ts b/src/app/pages/mining/mining.component.ts new file mode 100644 index 0000000..52fdb0f --- /dev/null +++ b/src/app/pages/mining/mining.component.ts @@ -0,0 +1,12 @@ +import {Component, OnInit} from "@angular/core"; + +@Component({ + selector: 'mining', + template: ` +

    import mining here

    +` +}) + +export class MiningComponent { + +} diff --git a/app/pages/modal-form.component.html b/src/app/pages/modal-form.component.html similarity index 85% rename from app/pages/modal-form.component.html rename to src/app/pages/modal-form.component.html index 67a88d7..c2d6fed 100644 --- a/app/pages/modal-form.component.html +++ b/src/app/pages/modal-form.component.html @@ -5,7 +5,7 @@ - +
    {{titleText}}
    diff --git a/app/pages/modal-form.component.ts b/src/app/pages/modal-form.component.ts similarity index 97% rename from app/pages/modal-form.component.ts rename to src/app/pages/modal-form.component.ts index 64e75bc..605815b 100644 --- a/app/pages/modal-form.component.ts +++ b/src/app/pages/modal-form.component.ts @@ -72,10 +72,6 @@ export class ModalFormComponent { } public saveCustom(obj : any) { - if (this.type == 'none') { - this.emmitObject.emit(true); - this.hideModal(); - } else { if(!this.formGroup.valid) { this.errorMessage = "Please fill in all required fields marked with *" } else { @@ -144,6 +140,5 @@ export class ModalFormComponent { } this.hideModal(); } - } } } diff --git a/src/app/pages/page/page-form.component.html b/src/app/pages/page/page-form.component.html new file mode 100644 index 0000000..a9008c6 --- /dev/null +++ b/src/app/pages/page/page-form.component.html @@ -0,0 +1,65 @@ +
    +
    + + +
    +
    + + +
    +
    + + +
    + +
    + +
    +
    {{entity.name}}, 
    + + + + + + + +
    + + + + + + + + {{entity.name}} + +
    +
    +
    +
    + +
    + + +
    + +
    + + +
    + + +
    diff --git a/app/pages/page/page-form.component.ts b/src/app/pages/page/page-form.component.ts similarity index 81% rename from app/pages/page/page-form.component.ts rename to src/app/pages/page/page-form.component.ts index eef96b2..c69715f 100644 --- a/app/pages/page/page-form.component.ts +++ b/src/app/pages/page/page-form.component.ts @@ -20,12 +20,15 @@ export class PageFormComponent implements OnInit{ @Input('type') public type: string; - public errorMessage: string; + //public errorMessage: string; public allEntities: Map = new Map(); private gotEntities: boolean = false; public properties:EnvProperties = null; + public showLoading: boolean = false; + public errorMessage: string = ''; + constructor(private route: ActivatedRoute,public _fb: FormBuilder, private _helpContentService: HelpContentService){} ngOnInit(): void { @@ -64,16 +67,19 @@ export class PageFormComponent implements OnInit{ } public getEntities(includedEntities: Set) { - let self = this; + this.showLoading = true; + this.errorMessage = ""; + this._helpContentService.getEntities(this.properties.adminToolsAPIURL).subscribe( entities => { for(let entity of entities) { if(includedEntities.has(entity._id)) { - self.allEntities.set(entity, true); + this.allEntities.set(entity, true); } else { - self.allEntities.set(entity, false); + this.allEntities.set(entity, false); } } + this.showLoading = false; }, error => this.handleError('System error retrieving community entities', error)); } @@ -87,6 +93,8 @@ export class PageFormComponent implements OnInit{ route : ['', Validators.required], name : ['', Validators.required], isEnabled: '', + openaire: true, + connect: true, type: ['', Validators.required], entities: this._fb.array([]), _id : '', @@ -100,7 +108,8 @@ export class PageFormComponent implements OnInit{ name : '', type: '', isEnabled: '', - //entities: this._fb.array([]), + openaire: true, + connect: true, _id : '', isCollapsed: [true] }); @@ -118,10 +127,6 @@ export class PageFormComponent implements OnInit{ this.myForm.setControl('entities', entityFormArray); } - addEntity() { - this.myForm.value.entities.push(this._fb.group(new Entity())); - } - public toggleEntity(status : boolean, id : string, entity: Entity) { let index: number = -1; for(let i=0; i= 0) { this.myForm.value.entities.splice(index, 1); - console.info("delete : "+this.myForm.value.entities.length); } } -/* - this._helpContentService.toggleEntityOfPage(this.myForm.value._id,id,status).subscribe( - () => { - - }, - error => this.handleError('System error changing the status of the enity of page', error) - ); -*/ } handleError(message: string, error) { - if(error == null) { - this.reset(); - } - this.errorMessage = message + ' (Server responded: ' + error + ')'; + this.errorMessage = message; + console.log('Server responded: ' + error); + this.showLoading = false; } } diff --git a/src/app/pages/page/pages.component.html b/src/app/pages/page/pages.component.html new file mode 100644 index 0000000..0002c6e --- /dev/null +++ b/src/app/pages/page/pages.component.html @@ -0,0 +1,160 @@ +
    + + +
    +
    +
    + + +
    +
    + + Disable a page to hide it from community dashboard portal.
    +
    If the page is disabled, a message "Can't find that page" will appear in case the url of that page is loaded. If the disabled page belongs to the menu, the link will be removed from menu, too.
    + +
    + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameChange statusTypeRelated EntitiesRouteActionsPage help textsClass help textsHtml Content
    + +
    {{check.page.name}}
    +
    +
    + +
    +
    + +
    +
    +
    {{check.page.type}}
    +
    +
    + {{entity.name}}, +
    +
    +
    {{check.page.route}}
    +
    +
    + + +
    +
    + add page contents + - + + add class contents + - + + edit html contents + - +
    + +
    +
    No pages found
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    + + + + + + + + + + + + + + + + + + diff --git a/src/app/pages/page/pages.component.ts b/src/app/pages/page/pages.component.ts new file mode 100644 index 0000000..71fb032 --- /dev/null +++ b/src/app/pages/page/pages.component.ts @@ -0,0 +1,339 @@ +/** + * Created by stefania on 7/13/17. + */ +import { Component, ViewChild, OnInit } from '@angular/core'; +import { ActivatedRoute } from "@angular/router"; +import { HelpContentService } from "../../services/help-content.service"; +import { FormGroup } from "@angular/forms"; +import { ModalFormComponent } from "../modal-form.component"; +import { DeleteConfirmationDialogComponent } from "../delete-confirmation-dialog.component"; +import { PageFormComponent } from "./page-form.component"; +import { CheckPage, Page } from "../../domain/page"; +import { Community } from "../../domain/community"; +import { Entity } from "../../domain/entity"; +import { EnvProperties } from '../../openaireLibrary/utils/properties/env-properties'; +import {Session} from '../../openaireLibrary/login/utils/helper.class'; + +@Component({ + selector: 'pages', + templateUrl: './pages.component.html', +}) + +export class PagesComponent implements OnInit { + + // @ViewChild(ModalFormComponent) + @ViewChild('saveModal') + public modal:ModalFormComponent; + // + // @ViewChild('updateModal') + // public updateModal:ModalFormComponent; + + // @ViewChild('deleteConfirmationModal') + // public deleteConfirmationModal : DeleteConfirmationDialogComponent; + @ViewChild('AlertModalSavePage') alertModalSavePage; + @ViewChild('AlertModalUpdatePage') alertModalUpdatePage; + @ViewChild('AlertModalDeletePages') alertModalDeletePages; + private selectedPages: string[] = []; + + @ViewChild(PageFormComponent) + public formComponent : PageFormComponent; + + public checkboxes : CheckPage[] = []; + + public pages : Page[] = []; + public pageWithDivIds: string[] = []; + + //public errorMessage: string; + + public formGroup : FormGroup; + + private searchText : RegExp = new RegExp(''); + + public communities: Community[] = []; + + public selectedCommunityPid: string; + + public pagesType: string; + public properties:EnvProperties = null; + + public showLoading: boolean = true; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + public modalErrorMessage: string = ''; + public isPortalAdministrator = null; + + ngOnInit() { + this.formGroup = this.formComponent.form; + this.route.data + .subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + + this.route.queryParams.subscribe(params => { + this.pagesType = ""; + if(params['type']) { + this.pagesType = params['type']; + } + + this.selectedCommunityPid = params['communityId']; + this.applyCommunityFilter(this.selectedCommunityPid); + this.isPortalAdministrator = Session.isPortalAdministrator(); + + //this.getCommunities(); + }); + }); + } + + constructor(private route: ActivatedRoute, private _helpContentService: HelpContentService) {} + + getPages(community_pid: string) { + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + + this.pageWithDivIds = []; + + let parameters = ""; + if(this.pagesType) { + parameters = "?page_type="+this.pagesType; + } + this._helpContentService.getCommunityPages(community_pid, parameters, this.properties.adminToolsAPIURL).subscribe( + pages => { + this.pagesReturned(pages); + if(!this.pagesType || this.pagesType == "link") { + this.getPagesWithDivIds(community_pid); + } else { + this.showLoading = false; + } + }, + error => this.handleError('System error retrieving pages', error) + ); + } + + getPagesWithDivIds(community_pid: string) { + this._helpContentService.getPagesWithDivIds(community_pid, this.properties.adminToolsAPIURL).subscribe( + pages => { + this.pageWithDivIds = pages; + this.showLoading = false; + }, + error => this.handleError('System error retrieving information about pages\' classes', error)); + } + + pagesReturned(pages: Page[]) { + this.pages = pages; + this.checkboxes = []; + + if(pages) { + pages.forEach(_ => { + this.checkboxes.push({page : _, checked : false}); + }); + } + } +/* + getCommunities() { + this._helpContentService.getCommunities(this.properties.adminToolsAPIURL).subscribe( + communities => { + this.communities = communities; + this.selectedCommunityPid = this.communities[0].pid; + this.getPages(this.selectedCommunityPid); + this.getPagesWithDivIds(this.selectedCommunityPid); + }, + error => this.handleError('System error retrieving communities', error)); + } +*/ + public showModal():void { + this.modal.showModal(); + } + + public toggleCheckBoxes(event) { + this.checkboxes.forEach(_ => _.checked = event.target.checked); + } + + public applyCheck(flag : boolean) { + console.info("applyCheck "+flag); + this.checkboxes.forEach(_ => _.checked = flag); + } + + public getSelectedPages() : string[] { + return this.checkboxes.filter(page => page.checked == true).map(checkedPage => checkedPage.page).map(res => res._id); + } + + private deletePagesFromArray(ids : string[]) : void { + for(let id of ids) { + let i = this.checkboxes.findIndex(_ => _.page._id == id); + this.checkboxes.splice(i, 1); + } + } + + public confirmDeletePage(id : string) { + //this.deleteConfirmationModal.ids = [id]; + //this.deleteConfirmationModal.showModal(); + this.selectedPages = [id]; + this.confirmModalOpen(); + } + + public confirmDeleteSelectedPages() { + //this.deleteConfirmationModal.ids = this.getSelectedPages(); + //this.deleteConfirmationModal.showModal(); + this.selectedPages = this.getSelectedPages(); + this.confirmModalOpen(); + } + + private confirmModalOpen() { + this.alertModalDeletePages.cancelButton = true; + this.alertModalDeletePages.okButton = true; + this.alertModalDeletePages.alertTitle = "Delete Confirmation"; + this.alertModalDeletePages.message = "Are you sure you want to delete the selected page(s)?"; + this.alertModalDeletePages.okButtonText = "Yes"; + this.alertModalDeletePages.open(); + } + + public confirmedDeletePages(data: any) { + this.showLoading = true; + this.updateErrorMessage = ""; + + this._helpContentService.deletePages(this.selectedPages, this.properties.adminToolsAPIURL).subscribe( + _ => { + this.deletePagesFromArray(this.selectedPages); + this.showLoading = false; + }, + error => this.handleUpdateError('System error deleting the selected pages', error) + ); + } + + public editPage(i : number) { + let page : Page = this.checkboxes[i].page; + this.formGroup.patchValue(page); + this.formComponent.setEntities(page.entities as Entity[]); + + console.info(this.formGroup.value); + //this.updateModal.showModal(); + this.modalErrorMessage = ""; + this.pagesModalOpen(this.alertModalUpdatePage, "Update", "Update Page"); + } + + public newPage() { + this.formComponent.reset(); + this.modalErrorMessage = ""; + this.pagesModalOpen(this.alertModalSavePage, "Save", "Add a new Page"); + } + + private pagesModalOpen(modal: any, title: string, yesBtn: string) { + modal.cancelButton = true; + modal.okButton = true; + modal.alertTitle = title; + modal.okButtonText = yesBtn; + modal.open(); + } + + public pageSaveConfirmed(data: any) { + if(!this.formGroup.valid) { + this.pagesModalOpen(this.alertModalSavePage, "Save", "Add a new Page"); + this.modalErrorMessage = "Please fill in all required fields marked with *"; + } else { + this.modalErrorMessage = ""; + this._helpContentService.savePage( this.formGroup.value, this.properties.adminToolsAPIURL).subscribe( + page => { + this.pageSavedSuccessfully(page); + }, + error => this.handleUpdateError("System error creating page", error) + ); + } + } + + public pageUpdateConfirmed(data: any) { + if(!this.formGroup.valid) { + this.pagesModalOpen(this.alertModalUpdatePage, "Update", "Update Page"); + this.modalErrorMessage = "Please fill in all required fields marked with *"; + } else { + this._helpContentService.updatePage( this.formGroup.value, this.properties.adminToolsAPIURL).subscribe( + page => { + this.pageUpdatedSuccessfully(page); + }, + error => this.handleUpdateError("System error updating page", error) + ); + } + } + + public pageSavedSuccessfully(page: Page) { + this.checkboxes.push({page : page, checked : false}); + console.info("checkboxes length: "+this.checkboxes.length); + this.applyCheck(false); + } + + public pageUpdatedSuccessfully(page : Page) { + console.info(page._id); + console.info(this.checkboxes.find(checkItem => (checkItem.page._id == page._id))); + console.info(page.entities); + this.checkboxes.find(checkItem => checkItem.page._id==page._id).page = page; + this.applyCheck(false); + } + + public filterBySearch(text : string) { + this.searchText = new RegExp(text,'i'); + this.applyFilter(); + } + + public applyFilter() { + this.checkboxes = []; + this.pages.filter(item => this.filterPages(item)).forEach( + _ => this.checkboxes.push({page: _, checked: false}) + ); + } + + public filterPages(page : Page) : boolean { + let textFlag = this.searchText.toString() == '' || (page.route + ' ' +page.name).match(this.searchText) != null; + return textFlag; + } + + handleError(message: string, error) { + // if(error == null) { + // this.formComponent.reset(); + // } else { + this.errorMessage = message;// + ' (Server responded: ' + error + ')'; + console.log('Server responded: ' +error); + //} + + this.showLoading = false; + } + + handleUpdateError(message: string, error) { + if(error == null) { + this.formComponent.reset(); + } else { + this.updateErrorMessage = message;// + ' (Server responded: ' + error + ')'; + console.log('Server responded: ' +error); + } + + this.showLoading = false; + } + + // public filterByCommunity(event: any) { + // this.selectedCommunityPid = event.target.value; + // this.applyCommunityFilter(this.selectedCommunityPid); + // } + + public applyCommunityFilter(community_pid: string) { + this.getPages(community_pid); + } + + public togglePages(status : boolean, ids : string[]) { + this.showLoading = true; + this.updateErrorMessage = ""; + + this._helpContentService.togglePages(this.selectedCommunityPid,ids,status, this.properties.adminToolsAPIURL).subscribe( + () => { + for(let id of ids) { + let i = this.checkboxes.findIndex(_ => _.page._id == id); + this.checkboxes[i].page.isEnabled=status; + } + this.applyCheck(false); + this.showLoading = false; + }, + error => this.handleUpdateError('System error changing the status of the selected page(s)', error) + ); + } + + public capitalizeFirstLetter(str: string) { + return str.charAt(0).toUpperCase() + str.slice(1); + } +} diff --git a/src/app/pages/stats/stats.component.html b/src/app/pages/stats/stats.component.html new file mode 100644 index 0000000..8e36f9f --- /dev/null +++ b/src/app/pages/stats/stats.component.html @@ -0,0 +1,349 @@ +
    + + +
    +
    +
    + + + + + +
    +
    + + + Options for showing/hiding statistics from the community Monitor and Dashboard pages.
    + Regardless of the administrator's choices, numbers equal to 0 will not appear in the community Monitor.
    + Also, statistics of deactivated entities will not appear in either the community Monitor or Dashboard. +
    +
    +
    +
    +
    +
    +
    +
    + No statistics are available yet for {{ communityId.toUpperCase() }} +
    + +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/src/app/pages/stats/stats.component.ts b/src/app/pages/stats/stats.component.ts new file mode 100644 index 0000000..f3b45c7 --- /dev/null +++ b/src/app/pages/stats/stats.component.ts @@ -0,0 +1,441 @@ +import {Component, OnInit} from '@angular/core'; +import {HelpContentService} from '../../services/help-content.service'; +import {ActivatedRoute} from '@angular/router'; +import {EnvProperties} from '../../openaireLibrary/utils/properties/env-properties'; +import { Community } from '../../domain/community'; +import { DomSanitizer } from '@angular/platform-browser'; +import {TitleCasePipe} from '@angular/common'; +import {availableEntitiesMap, StatisticsDisplay, StatisticsSummary} from '../../openaireLibrary/connect/statistics/statisticsEntities'; +import {Observable} from 'rxjs/Observable'; +import {ConfigurationService} from '../../openaireLibrary/utils/configuration/configuration.service'; + +@Component({ + selector: 'stats', + templateUrl: 'stats.component.html' +}) + +export class StatsComponent implements OnInit { + // errorMessage: string; + // loadingMessage: string; + public showLoading: boolean = true; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + + communities: Community[] = []; + communityId: string; + communityInfo = null; + deactivatedEntity: boolean; + + displayedTimeline: string; + displayedGraph: string; + displayedProjectChart: string; + displayedEntity: string; + + entitiesList: string[] = []; + entitiesMap: Map = availableEntitiesMap; + + statisticsSum: StatisticsSummary; + statisticsDisplay: StatisticsDisplay; + chartsUrlMap: {}; + + showAllInMonitor: boolean = false; + showAllInDashboard: boolean = false; + + public properties: EnvProperties = null; + + constructor(private contentService: HelpContentService, + private configService: ConfigurationService, + private route: ActivatedRoute, + private sanitizer: DomSanitizer, + private titleCase: TitleCasePipe) {} + + ngOnInit() { + this.route.data + .subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + this.route.queryParams.subscribe( + params => { + this.communityId = params['communityId']; + this.getStatistics(); + }); + }, + error => console.log(`E R R O R!!`) + ); + } + + getStatistics() { + // this.loadingMessage = 'Retrieving statistics'; + // this.errorMessage = ''; + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + + this.statisticsSum = null; + this.statisticsDisplay = null; + this.contentService.getCommunityStatistics(this.properties.statisticsAPIURL, this.communityId).subscribe( + stats => { + + this.statisticsSum = stats; + if(stats["other"]){ //hack because in stats API the entity name is "other" while in admin API is "orp". This component uses also "orp" name + this.statisticsSum["orp"]=stats["other"]; + } + }, + error => { + //this.loadingMessage = ''; + //this.errorMessage = 'Failed to retrieve statistics for the chosen community!'; + //console.log(error); + this.handleError('Failed to retrieve statistics for the chosen community!', error); + }, + () => { + console.log(`I have statistics!`); + //this.loadingMessage = ''; + this.getDisplayOptions(); + } + ); + } + + getDisplayOptions() { + this.contentService.getCommunityAdminStatisticsChoices(this.properties.adminToolsAPIURL, this.communityId) + .subscribe( + res => { + this.statisticsDisplay = res; + }, + error => { + //console.log(error); + this.handleError('Failed to retrieve statistics\' choices for the chosen community!', error); + }, + () => { + this.getCommunityInfo(); + } + ); + } + + getCommunityInfo() { + console.log(`calling ${this.properties.adminToolsAPIURL}/communityFull/${this.communityId}`); + this.configService.getCommunityInformation(this.properties.adminToolsAPIURL, this.communityId).subscribe( + res => { + this.communityInfo = res; + }, + error => this.handleError('Failed to retrieve information for the chosen community!', error),//console.log(error), + () => { + this.createChartUrlMap(); + this.entitiesList = Array.from( this.entitiesMap.keys() ); + this.onChangeEntity(this.entitiesList[0]); + } + ); + } + + onChangeEntity (entity: string) { + this.showLoading = true; + + this.deactivatedEntity = false; + this.displayedEntity = entity; + console.log(`displayed entity is ${entity}`); + console.log(`statisticsSum[${entity}].total is ${this.statisticsSum[entity].total}`); + + console.log(`found ${entity} in allowedEntities`); + this.displayedTimeline = `${entity}Timeline`; + console.log(`displayed Timeline is: ${this.displayedTimeline}`); + this.displayedGraph = `${entity}Graph`; + console.log(`displayed Graph is: ${this.displayedGraph}`); + this.changeDisplayedProjectChart(`${entity}Projectcolumn`); + if (this.statisticsDisplay.entities[entity].charts.map['projectColumn'].showInMonitor && + this.statisticsDisplay.entities[entity].charts.map['projectPie'].showInMonitor && + this.statisticsDisplay.entities[entity].charts.map['projectTable'].showInMonitor) { + this.showAllInMonitor = true; + } + if (this.statisticsDisplay.entities[entity].charts.map['projectColumn'].showInDashboard && + this.statisticsDisplay.entities[entity].charts.map['projectPie'].showInDashboard && + this.statisticsDisplay.entities[entity].charts.map['projectTable'].showInDashboard) { + this.showAllInDashboard = true; + } + + const activatedEntities = this.communityInfo['entities']; + if ( !activatedEntities.some(item => item.pid === entity) ) { + this.deactivatedEntity = true; + } + + this.showLoading = false; + } + + changeDisplayedProjectChart(chartName: string) { + this.displayedProjectChart = chartName; + console.log(`displayed ProjectChart is: ${this.displayedProjectChart}`); + } + + createChartUrlMap() { + this.chartsUrlMap = { + publicationTimeline : this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&persistent=false&data=com=query&data={"query":"comTimelinePubs","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":["Publications"],"fieldsheaders":["publications"],"in":[{"f":0,"text":"Yearly"}],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"Publications through the years","subtitle":"","xaxistitle":"Year"}&w=70%&h=83%`), + publicationGraph: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comOAPubs","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"pie","yaxis":1,"c":false}],"xaxis":{"name":"bestlicense","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"order":"d","yaxisheaders":[""],"fieldsheaders":[""],"in":[],"filters":[],"having":[],"incfilters":[],"inchaving":[],"title":"Publications by access mode","subtitle":"","xaxistitle":"","nulls":true}&w=70%&h=70%`), + publicationProjectcolumn: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comProjectPubs","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"bar","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":["publications"],"fieldsheaders":["publications"],"in":[],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"Publications per project","subtitle":"","xaxistitle":"Project"}&w=70%&h=90%`), + publicationProjectpie: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comProjectPubs","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"pie","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":[""],"fieldsheaders":["publications"],"in":[],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"Publications per project","subtitle":"","xaxistitle":"Project"}&w=91%&h=90%`), + publicationProjecttable: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}gtable.php?com=query&data={"query":"comProjectPubs","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"bar","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":["Publications"],"fieldsheaders":["Publications"],"in":[],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"","subtitle":"","xaxistitle":"Project"}&w=90%&h=83%`), + datasetTimeline: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comTimelineData","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":["Datasets"],"fieldsheaders":["datasets"],"in":[{"f":0,"text":"Yearly"}],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"Research data through the years","subtitle":"","xaxistitle":"Year"}&w=70%&h=83%`), + datasetGraph: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comOAData","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"pie","yaxis":1,"c":false}],"xaxis":{"name":"bestlicense","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"order":"d","yaxisheaders":[""],"fieldsheaders":[""],"in":[],"filters":[],"having":[],"incfilters":[],"inchaving":[],"title":"Research data by access mode","subtitle":"","xaxistitle":"","nulls":true}&w=70%&h=70%`), + datasetProjectcolumn: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comProjectData","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"bar","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":["Datasets"],"fieldsheaders":["datasets"],"in":[],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"Research data per project","subtitle":"","xaxistitle":"Project"}&w=70%&h=90%`), + datasetProjectpie: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comProjectData","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"pie","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":[""],"fieldsheaders":["datasets"],"in":[],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"Research data per project","subtitle":"","xaxistitle":"Project"}&w=91%&h=90%`), + datasetProjecttable: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}gtable.php?com=query&data={"query":"comProjectData","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"bar","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":["Datasets"],"fieldsheaders":["Datasets"],"in":[],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"","subtitle":"","xaxistitle":"Project"}&w=90%&h=83%`), + softwareTimeline: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comTimelineSoft","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":["Software"],"fieldsheaders":["software"],"in":[{"f":0,"text":"Yearly"}],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"Software through the years","subtitle":"","xaxistitle":"Year"}&w=70%&h=83%`), + softwareGraph: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comOASoft","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"pie","yaxis":1,"c":false}],"xaxis":{"name":"bestlicense","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"order":"d","yaxisheaders":[""],"fieldsheaders":[""],"in":[],"filters":[],"having":[],"incfilters":[],"inchaving":[],"title":"Software by access mode","subtitle":"","xaxistitle":"","nulls":true}&w=70%&h=70%`), + softwareProjectcolumn: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comProjectSoft","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"bar","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":["Software"],"fieldsheaders":["software"],"in":[],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"Software per project","subtitle":"","xaxistitle":"Project"}&w=70%&h=90%`), + softwareProjectpie: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comProjectSoft","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"pie","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":[""],"fieldsheaders":["software"],"in":[],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"Software per project","subtitle":"","xaxistitle":"Project"}&w=91%&h=90%`), + softwareProjecttable: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}gtable.php?com=query&data={"query":"comProjectSoft","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"bar","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":["Software"],"fieldsheaders":["Software"],"in":[],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"","subtitle":"","xaxistitle":"Project"}&w=90%&h=83%`), + + orpTimeline: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comTimelineOther","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":["Other Research products"],"fieldsheaders":["Other Research products"],"in":[{"f":0,"text":"Yearly"}],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"Other Research products through the years","subtitle":"","xaxistitle":"Year"}&w=70%&h=83%`), + orpGraph: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comOAOther","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"pie","yaxis":1,"c":false}],"xaxis":{"name":"bestlicense","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"order":"d","yaxisheaders":[""],"fieldsheaders":[""],"in":[],"filters":[],"having":[],"incfilters":[],"inchaving":[],"title":"Other Research products by access mode","subtitle":"","xaxistitle":"","nulls":true}&w=70%&h=70%`), + orpProjectcolumn: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comProjectOther","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"bar","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":["Other Research products"],"fieldsheaders":["Other Research products"],"in":[],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"Other Research products per project","subtitle":"","xaxistitle":"Project"}&w=70%&h=90%`), + orpProjectpie: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}chart.php?com=query&data={"query":"comProjectOther","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"pie","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":[""],"fieldsheaders":["Other Research products"],"in":[],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"Other Research products per project","subtitle":"","xaxistitle":"Project"}&w=91%&h=90%`), + orpProjecttable: this.sanitizer.bypassSecurityTrustResourceUrl(`${this.properties.statisticsFrameAPIURL}gtable.php?com=query&data={"query":"comProjectOther","comId":"${this.communityId}","table":"result","fields":[{"fld":"number","agg":"count","type":"bar","yaxis":1,"c":false}],"xaxis":{"name":"year","agg":"avg"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":"-","s":"-","l":"-","ft":"-","wt":"-"},"yaxisheaders":["Other Research products"],"fieldsheaders":["Other Research products"],"in":[],"filters":[{"name":"year","max":"2013","min":"2007","to":-1},{"name":"result_projects-project-funding_lvl0","values":["FP7"],"to":"-1"},{"name":"type","values":["publication"],"to":"-1"},{"name":"result_projects-project-funding_lvl2","values":["ERC"],"to":"-1"}],"having":[],"incfilters":[],"inchaving":[],"title":"","subtitle":"","xaxistitle":"Project"}&w=90%&h=83%`) + }; + } + + toggleShowAllInMonitor(entity: string) { + this.showLoading = true; + this.updateErrorMessage = ""; + + //this.loadingMessage = 'Saving changes'; + this.showAllInMonitor = !this.showAllInMonitor; + + this.contentService.postCommunityAdminStatisticsChoices( + this.properties.adminToolsAPIURL, + this.communityId, + entity, + 'charts', + 'projectColumn', + !this.showAllInMonitor, + true).subscribe( + response => console.log(JSON.stringify(response)), + error => { + console.log(error); + //this.loadingMessage = ''; + //this.errorMessage = 'The changes could not be saved'; + + this.handleUpdateError('The changes could not be saved', error); + }, + () => { + + this.contentService.postCommunityAdminStatisticsChoices( + this.properties.adminToolsAPIURL, + this.communityId, + entity, + 'charts', + 'projectPie', + !this.showAllInMonitor, + true).subscribe( + response => console.log(JSON.stringify(response)), + error => { + console.log(error); + //this.loadingMessage = ''; + //this.errorMessage = 'The changes could not be saved'; + + this.handleUpdateError('The changes could not be saved', error); + }, + () => { + + this.contentService.postCommunityAdminStatisticsChoices( + this.properties.adminToolsAPIURL, + this.communityId, + entity, + 'charts', + 'projectTable', + !this.showAllInMonitor, + true).subscribe( + response => console.log(JSON.stringify(response)), + error => { + console.log(error); + //this.loadingMessage = ''; + //this.errorMessage = 'The changes could not be saved'; + + this.handleUpdateError('The changes could not be saved' ,error); + }, + () => { + + this.statisticsDisplay.entities[entity]['charts'].map['projectColumn'].showInMonitor = this.showAllInMonitor; + this.statisticsDisplay.entities[entity]['charts'].map['projectPie'].showInMonitor = this.showAllInMonitor; + this.statisticsDisplay.entities[entity]['charts'].map['projectTable'].showInMonitor = this.showAllInMonitor; + //this.loadingMessage = ''; + + this.showLoading = false; + } + ); + } + ); + } + ); + + /*forkJoin didn't work properly - maybe try another way*/ + /*Observable.forkJoin( + this.contentService.postCommunityAdminStatisticsChoices( + this.properties.adminToolsAPIURL, + this.communityId, + entity, + 'charts', + 'projectColumn', + this.showAllInMonitor, + true), + this.contentService.postCommunityAdminStatisticsChoices( + this.properties.adminToolsAPIURL, + this.communityId, + entity, + 'charts', + 'projectPie', + this.showAllInMonitor, + true), + this.contentService.postCommunityAdminStatisticsChoices( + this.properties.adminToolsAPIURL, + this.communityId, + entity, + 'charts', + 'projectTable', + this.showAllInMonitor, + true) + + ).subscribe( + response => console.log('All went well in forkJoin!'), + error => { + console.log(error); + this.loadingMessage = ''; + this.errorMessage = 'The changes could not be saved'; + }, + () => { + this.statisticsDisplay.entities[entity]['charts'].map['projectColumn'].showInMonitor = this.showAllInMonitor; + this.statisticsDisplay.entities[entity]['charts'].map['projectPie'].showInMonitor = this.showAllInMonitor; + this.statisticsDisplay.entities[entity]['charts'].map['projectTable'].showInMonitor = this.showAllInMonitor; + this.loadingMessage = ''; + } + );*/ + + } + + toggleShowAllInDashboard(entity: string) { + this.showLoading = true; + this.updateErrorMessage = ""; + + //this.loadingMessage = 'Saving changes'; + this.contentService.postCommunityAdminStatisticsChoices( + this.properties.adminToolsAPIURL, + this.communityId, + entity, + 'charts', + 'projectColumn', + !this.showAllInDashboard, + false).subscribe( + response => console.log(JSON.stringify(response)), + error => { + console.log(error); + //this.loadingMessage = ''; + //this.errorMessage = 'The changes could not be saved'; + this.handleUpdateError('The changed could not be saved', error); + }, + () => { + + this.contentService.postCommunityAdminStatisticsChoices( + this.properties.adminToolsAPIURL, + this.communityId, + entity, + 'charts', + 'projectPie', + !this.showAllInDashboard, + false).subscribe( + response => console.log(JSON.stringify(response)), + error => { + console.log(error); + //this.loadingMessage = ''; + //this.errorMessage = 'The changes could not be saved'; + this.handleUpdateError('The changes could not be saved', error); + }, + () => { + + this.contentService.postCommunityAdminStatisticsChoices( + this.properties.adminToolsAPIURL, + this.communityId, + entity, + 'charts', + 'projectTable', + !this.showAllInDashboard, + false).subscribe( + response => console.log(JSON.stringify(response)), + error => { + console.log(error); + //this.loadingMessage = ''; + //this.errorMessage = 'The changes could not be saved'; + this.handleUpdateError('The changes could not be saved', error); + }, + () => { + + this.showAllInDashboard = !this.showAllInDashboard; + this.statisticsDisplay.entities[entity]['charts'].map['projectColumn'].showInDashboard = this.showAllInDashboard; + this.statisticsDisplay.entities[entity]['charts'].map['projectPie'].showInDashboard = this.showAllInDashboard; + this.statisticsDisplay.entities[entity]['charts'].map['projectTable'].showInDashboard = this.showAllInDashboard; + //this.loadingMessage = ''; + + this.showLoading = false; + } + ); + } + ); + } + ); + } + + toggleShowInMonitor(entity: string, chartsOrNumbers: string, title: string) { + this.showLoading = true; + this.updateErrorMessage = ""; + + this.contentService.postCommunityAdminStatisticsChoices( + this.properties.adminToolsAPIURL, + this.communityId, + entity, + chartsOrNumbers, + title, + !this.statisticsDisplay.entities[entity][chartsOrNumbers].map[title].showInMonitor, + true).subscribe( + response => console.log(JSON.stringify(response)), + error => this.handleUpdateError('The changes could not be saved', error),//console.log(error), + () => { + this.statisticsDisplay.entities[entity][chartsOrNumbers].map[title].showInMonitor = !this.statisticsDisplay.entities[entity][chartsOrNumbers].map[title].showInMonitor; + this.showLoading = false; + } + ); + } + + toggleShowInDashboard(entity: string, chartsOrNumbers: string, title: string) { + this.showLoading = true; + this.updateErrorMessage = ""; + + this.contentService.postCommunityAdminStatisticsChoices( + this.properties.adminToolsAPIURL, + this.communityId, + entity, + chartsOrNumbers, + title, + !this.statisticsDisplay.entities[entity][chartsOrNumbers].map[title].showInDashboard, + false).subscribe( + response => console.log(JSON.stringify(response)), + error => this.handleUpdateError('The changes could not be saved', error),//console.log(error), + () => { + this.statisticsDisplay.entities[entity][chartsOrNumbers].map[title].showInDashboard = !this.statisticsDisplay.entities[entity][chartsOrNumbers].map[title].showInDashboard; + this.showLoading = false; + } + ); + } + + getCamelCaseString (inputString: string) { + return this.titleCase.transform(inputString); + } + + + handleUpdateError(message: string, error) { + this.updateErrorMessage = message; + console.log('Server responded: ' +error); + + this.showLoading = false; + } + + handleError(message: string, error) { + this.errorMessage = message; + console.log('Server responded: ' + error); + + this.showLoading = false; + } +} diff --git a/src/app/pages/subjects/subjects-edit-form/subjects-edit-form.component.html b/src/app/pages/subjects/subjects-edit-form/subjects-edit-form.component.html new file mode 100644 index 0000000..c5ccea1 --- /dev/null +++ b/src/app/pages/subjects/subjects-edit-form/subjects-edit-form.component.html @@ -0,0 +1,40 @@ +
    +
    Manage subjects
    +
    +
    + + All the research results associated to the subjects specified here will be automatically linked to the community dashboard. +
    +
    + +
    + + +
    + + + + + + +
    + +
    +
    + + + +
    + + +
    + +
    + + + +
    +
    +
    +
    diff --git a/src/app/pages/subjects/subjects-edit-form/subjects-edit-form.component.ts b/src/app/pages/subjects/subjects-edit-form/subjects-edit-form.component.ts new file mode 100644 index 0000000..ca748c3 --- /dev/null +++ b/src/app/pages/subjects/subjects-edit-form/subjects-edit-form.component.ts @@ -0,0 +1,325 @@ +import {Component, OnInit, Input} from '@angular/core'; +import {SimpleChanges, OnChanges} from '@angular/core'; +import {FormGroup, FormArray, FormBuilder, Validators} from "@angular/forms"; +import {ActivatedRoute, Router} from '@angular/router'; + +import {HelpContentService} from "../../../services/help-content.service"; +import {CommunityService} from "../../../openaireLibrary/connect/community/community.service"; +import {SubjectsService} from "../subjects.service" +import {EnvProperties} from '../../../openaireLibrary/utils/properties/env-properties'; + +import {CommunityInfo} from '../../../openaireLibrary/connect/community/communityInfo'; +import { concat } from 'rxjs/observable/concat'; +@Component({ + selector: 'subjects-edit-form', + templateUrl: './subjects-edit-form.component.html', +}) + +export class SubjectsEditFormComponent implements OnInit{ + + @Input('group') + myForm: FormGroup; + + public showLoading: boolean = true; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + + public successfulSaveMessage: string = ''; + public successfulResetMessage: string = ''; + + public hasChanged: boolean = false; + + public res=[]; + + params: any; + + public communityId = null; + public community = null; + public properties: EnvProperties = null; + public newsubject =""; + public edit = null; + public editSubjectOriginalValue = null; + public originalSubjects = []; + + constructor (private route: ActivatedRoute, + private _router: Router, + public _fb: FormBuilder, + private _helpContentService: HelpContentService, + private _communityService: CommunityService, + private _subjectsService: SubjectsService){ } + + + ngOnInit() { + this.route.data.subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + this.route.queryParams.subscribe( + communityId => { + this.communityId = communityId['communityId']; + + if (this.communityId != null && this.communityId != '') { + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + + this._communityService.getCommunity(this.properties, this.properties.communityAPI+this.communityId).subscribe ( + community => { + this.community = community; + this.params = {community: encodeURIComponent('"' + community.queryId + '"')}; + this.originalSubjects = []; + for (var i = 0; i < this.community.subjects.length; i++) { + this.originalSubjects.push(this.community.subjects[i]); + } + if (this.community.subjects.length == 0) { + this.community.subjects.push(""); + } + this.showLoading = false; + }, + error => this.handleError('System error retrieving community profile', error) + ); + } + }); + }); + } + + + + public addSubject() { + this.community.subjects.push(""); + } + + public removeSubject(i: any) { + this.community.subjects.splice(i, 1); + } + + public resetForm(communityId: string) { + if (communityId != null && communityId != '') { + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + + this._communityService.getCommunity(this.properties, this.properties.communityAPI + communityId).subscribe ( + community => { + this.community = community; + this.params = {community: encodeURIComponent('"' + community.queryId + '"')}; + this.showLoading = false; + this.handleSuccessfulReset('Form reseted!'); + }, + error => this.handleError('System error retrieving community profile', error) + ); + } + this.resetChange(); + } + + // save(newValue){ + // this.edit=null; + // console.log(this.editSubjectOriginalValue + "-->"+newValue) + // if (this.communityId != null && this.communityId != '' && this.editSubjectOriginalValue != newValue) { + // this.showLoading = true; + // var subjectsToDelete = this.parseUpdatedSubjects([this.editSubjectOriginalValue]); + // var subjectsToAdd = this.parseUpdatedSubjects([newValue]); + // let obs = concat(this._subjectsService.addSubjects(this.properties.communityAPI+this.communityId+"/subjects", subjectsToAdd), + // this._subjectsService.removeSubjects(this.properties.communityAPI+this.communityId+"/subjects", subjectsToDelete)); + // obs.subscribe(res => { + // console.log(res); + // this.community.subjects = res[1]["subjects"]; + // this.originalSubjects = this.community.subjects; + // this.handleSuccessfulSave('Subjects updated!') + // this.showLoading = false; + // }); + // } + // this.editSubjectOriginalValue = null; + // } + public getSubjectsExistOnlyInFirst(firstArray: string[], secondArray: string[]): string[] { + + var difference = []; + for (var i = 0; i < firstArray.length; i++) { + if (secondArray.indexOf(firstArray[i]) == -1) { + difference.push(firstArray[i]); + } + + } + return difference; + + } + public updateSubjects() { + + if (this.communityId != null && this.communityId != '') { + this.showLoading = true; + var subjectsToDeleteAr = this.getSubjectsExistOnlyInFirst(this.originalSubjects, this.community.subjects); + var subjectsToAddAr = this.getSubjectsExistOnlyInFirst(this.community.subjects, this.originalSubjects); + + var subjectsToDelete = this.parseUpdatedSubjects(subjectsToDeleteAr); + var subjectsToAdd = this.parseUpdatedSubjects(subjectsToAddAr); + if(subjectsToAddAr.length > 0 && subjectsToDeleteAr.length > 0){ + let obs = concat(this._subjectsService.addSubjects(this.properties.communityAPI + this.communityId + "/subjects", subjectsToAdd), + this._subjectsService.removeSubjects(this.properties.communityAPI + this.communityId + "/subjects", subjectsToDelete)); + obs.subscribe(res => { + console.log(res); + if (res["method"] == "delete") { + this.afterUpdateActions(res); + } + }, + error => this.handleUpdateError('System error updating subjects', error) + ); + }else if (subjectsToAddAr.length > 0){ + this._subjectsService.addSubjects(this.properties.communityAPI + this.communityId +"/subjects", subjectsToAdd).subscribe(res => { + console.log(res); + this.afterUpdateActions(res); + + }, + error => this.handleUpdateError('System error updating subjects', error) + ); + }else if (subjectsToDeleteAr.length > 0) { + this._subjectsService.removeSubjects(this.properties.communityAPI + this.communityId + "/subjects", subjectsToDelete).subscribe(res => { + console.log(res); + this.afterUpdateActions(res); + + }, + error => this.handleUpdateError('System error updating subjects', error) + ); + } + // this._router.navigate(['/manage-subjects'], {queryParams: { "communityId": this.communityId}}); + + } + this.resetChange(); + } + afterUpdateActions(res){ + this.community.subjects = res["subjects"]; + this.originalSubjects = []; + for (var i = 0; i < this.community.subjects.length; i++) { + this.originalSubjects.push(this.community.subjects[i]); + } + if (this.community.subjects.length == 0) { + this.community.subjects.push(""); + } + this.handleSuccessfulSave('Subjects updated!') + this.showLoading = false; + } + private parseUpdatedSubjects(subjects): {} { + var parsedSubjects = this.getNonEmptyItems(subjects); + return parsedSubjects; + } + + + + private getNonEmptyItems(data: string[]): string[] { + let length = data.length; + let arrayNonEmpty = new Array(); + + let j = 0; + for (let i = 0; i < length; i++) { + if (this.isEmpty(data[i])) { + // console.log(data[i]); + } else if (this.isNonEmpty(data[i])) { + arrayNonEmpty[j] = data[i]; + j++; + // console.log(data[i]); + } + } + return arrayNonEmpty; + } + + private hasFilled(data: any): boolean { + if (this.isNonEmpty(data) && !this.isEmpty(data)) { + // TODO remove console message after final testing + console.log("NAME IS NOT EMPTY"); + return true; + } + // TODO remove console message after final testing + console.log("NAME IS EMPTY"); + return false; + } + + private isEmpty(data: string): boolean { + if (data != undefined && !data.replace(/\s/g, '').length) + return true; + else + return false; + } + + private isNonEmpty(data: string): boolean { + if (data != undefined && data != null) + return true; + else + return false; + } + + private hasValidEmail(data: any): boolean { + let length = data['managers'].length; + + for (let i = 0; i < length; i++) { + if (!this.emailValidator(data['managers'][i])){ + // TODO remove console message after final testing + console.log("INVALID EMAIL"); + return false; + } + } + // TODO remove console message after final testing + console.log("ALL EMAILS ARE VALID"); + return true; + } + + private emailValidator(email: any): boolean { + if (email.match("^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$")) + return true; + else + return false; + } + + private change() { + this.hasChanged = true; + this.successfulSaveMessage = ''; + this.successfulResetMessage = ''; + // TODO remove after testing + console.log('I have changed: I AM TRUE'); + } + + private resetChange() { + this.hasChanged = false; + // TODO remove after testing + console.log('I have changed: I AM FALSE'); + } + + public get form() { + return this._fb.group({ + _id : '', + name : ['', Validators.required] + }); + } + + public reset() { + this.myForm.patchValue({ + name : '', + _id : '' + }); + } + + handleUpdateError(message: string, error) { + this.updateErrorMessage = message; + console.log('Server responded: ' +error); + + this.showLoading = false; + } + + handleError(message: string, error) { + this.errorMessage = message; + console.log('Server responded: ' + error); + + this.showLoading = false; + } + + handleSuccessfulSave(message) { + this.showLoading = false; + this.successfulSaveMessage = message; + } + + handleSuccessfulReset(message) { + this.showLoading = false; + this.successfulResetMessage = message; + } + + trackByFn(index: any, item: any) { + return index; + } + +} diff --git a/src/app/pages/subjects/subjects-edit-form/subjects-edit-form.module.ts b/src/app/pages/subjects/subjects-edit-form/subjects-edit-form.module.ts new file mode 100644 index 0000000..adda574 --- /dev/null +++ b/src/app/pages/subjects/subjects-edit-form/subjects-edit-form.module.ts @@ -0,0 +1,27 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {RouterModule} from '@angular/router'; + +import {SubjectsEditFormComponent} from './subjects-edit-form.component'; + +import {SubjectsService} from '../subjects.service'; +import {CommunityService} from '../../../openaireLibrary/connect/community/community.service'; + +@NgModule({ + imports:[ + CommonModule, FormsModule, RouterModule + ], + declarations:[ + SubjectsEditFormComponent + ], + providers:[ + SubjectsService, + CommunityService + ], + exports: [ + SubjectsEditFormComponent + ] +}) + +export class SubjectsEditFormModule { } diff --git a/src/app/pages/subjects/subjects-edit-form/subjects-edit-form.service.ts b/src/app/pages/subjects/subjects-edit-form/subjects-edit-form.service.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/subjects/subjects.service.ts b/src/app/pages/subjects/subjects.service.ts new file mode 100644 index 0000000..346ec56 --- /dev/null +++ b/src/app/pages/subjects/subjects.service.ts @@ -0,0 +1,46 @@ +import { Injectable } from '@angular/core'; +import { Http, Response, Headers, RequestOptions } from '@angular/http'; +import { Observable } from 'rxjs/Rx'; + +@Injectable() +export class SubjectsService { + + constructor(private http:Http) { + + } + + addSubjects(url: string, subjects:any) { + let headers = new Headers({'Content-Type': 'application/json'}); + let options = new RequestOptions({headers: headers}); + + let body = JSON.stringify(subjects); + + console.log(body); + + return this.http.post(url, body, options) + .do(request => console.log("Insert Response:"+request.status)) + .map(res => res.json()) + .map(res => { + res["method"]="post"; + return res; + }); + } + + removeSubjects(url: string, subjects:any) { + let headers = new Headers({'Content-Type': 'application/json'}); + + let body = JSON.stringify(subjects); + let options = new RequestOptions({headers: headers,body:body}); + + + console.log(body); + + return this.http.delete(url, options) + .do(request => console.log("Delete Response:"+request.status)) + .map(res => res.json()) + .map(res => { + res["method"]="delete"; + return res; + }); + } +} diff --git a/src/app/pages/subscribers/manage-subscribers.component.html b/src/app/pages/subscribers/manage-subscribers.component.html new file mode 100644 index 0000000..34937fb --- /dev/null +++ b/src/app/pages/subscribers/manage-subscribers.component.html @@ -0,0 +1,61 @@ +
    +
    Manage subscribers
    +
    +
    + + +
    +
    + +
    +
    + + {{subscribersSearchUtils.totalResults | number}} subscribers, page {{subscribersSearchUtils.page | number}} of {{(totalPages()) | number}} + + + + +
    +
    + +
    +
    + + + + + + + + + + + + + +
    EmailAction
    + {{item.email}} + + +
    +
    +
    + +
    +
    + + {{subscribersSearchUtils.totalResults | number}} subscribers, page {{subscribersSearchUtils.page | number}} of {{(totalPages()) | number}} + + + + +
    +
    + +
    + + diff --git a/src/app/pages/subscribers/manage-subscribers.component.ts b/src/app/pages/subscribers/manage-subscribers.component.ts new file mode 100644 index 0000000..378790b --- /dev/null +++ b/src/app/pages/subscribers/manage-subscribers.component.ts @@ -0,0 +1,290 @@ +import {Component, ViewChild, OnInit, Input, Output} from '@angular/core'; +import {ViewEncapsulation, EventEmitter} from '@angular/core'; +import {SimpleChanges, OnChanges} from '@angular/core'; +import {FormGroup, FormArray, FormBuilder, Validators} from '@angular/forms'; +import {ActivatedRoute, Router} from '@angular/router'; +import {Subject} from 'rxjs/Subject'; +import {DataTableDirective} from 'angular-datatables'; + +import {EnvProperties} from '../../openaireLibrary/utils/properties/env-properties'; +import {SubscribeService} from '../../openaireLibrary/utils/subscribe/subscribe.service'; +import {RouterHelper} from '../../openaireLibrary/utils/routerHelper.class'; + +import {ErrorCodes} from '../../openaireLibrary/utils/properties/errorCodes'; +import {SearchUtilsClass} from '../../openaireLibrary/searchPages/searchUtils/searchUtils.class'; + + +@Component({ + selector: 'manage-subscribers', + templateUrl: './manage-subscribers.component.html', + styles: [` + #dpTable_info, #dpTable_paginate, #dpTable_length, #dpTable_filter{ + display: none; + } + `], + encapsulation: ViewEncapsulation.None // this used in order styles to work +}) + +export class ManageSubscribersComponent implements OnInit { + public routerHelper:RouterHelper = new RouterHelper(); + + private errorCodes: ErrorCodes; + + @Output() commmunitySubscribersChanged = new EventEmitter(); + public communitySubscribers = []; + public subscribersSearchUtils: SearchUtilsClass = new SearchUtilsClass(); + + public sub: any; public subResults: any; subRemove: any; + public properties: EnvProperties; + + public disableForms: boolean = false; + + dtOptions: DataTables.Settings = {}; + showTable = false; filteringAdded = false; + @ViewChild(DataTableDirective) datatableElement: DataTableDirective; + dtTrigger: Subject = new Subject(); //necessary + + public rowsOnPage:number = 10; + + public queryParameters: string = ""; + + public query = ''; + public selectedSubscribersEmail=[]; + public elementRef; + + public subscribers:string[]; + private triggered: boolean = false; + + private selectedSubscriberEmail: any; + + public communityId = null; + + @ViewChild('AlertModalDeleteSubscriber') alertModalDeleteSubscriber; + + constructor (private route: ActivatedRoute, + private _router: Router, + public _fb: FormBuilder, + private _subscribeService: SubscribeService) { + + this.errorCodes = new ErrorCodes(); + this.subscribersSearchUtils.status = this.errorCodes.LOADING; + } + + ngOnInit() { + this.route.data.subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + this.route.queryParams.subscribe( + + communityId => { + this.communityId = communityId['communityId']; + + if (this.communityId != null && this.communityId != '') { + this._getCommunitySubscribers(); + } + }); + }); + + this.dtOptions = { + "pageLength": this.rowsOnPage, + "language": { + "search": "", + "searchPlaceholder": "Search subscribers..." + } + }; + + this.subscribersSearchUtils.keyword = ""; + } + + public ngOnDestroy() { + if(this.sub){ + this.sub.unsubscribe(); + } + if(this.subResults) { + this.subResults.unsubscribe(); + } + if(this.subRemove) { + this.subRemove.unsubscribe(); + } + + $.fn['dataTable'].ext.search.pop(); + } + + rerender(): void { + this.datatableElement.dtInstance.then((dtInstance: DataTables.Api) => { + // Destroy the table first + dtInstance.destroy(); + + // Call the dtTrigger to rerender again + this.dtTrigger.next(); + }); + } + + ngAfterViewInit(): void { + $.fn['dataTable'].ext.search.push((settings, data, dataIndex) => { + + if (this.filterData(data, this.subscribersSearchUtils.keyword)) { + return true; + } + return false; + }); + + console.info("ngAfterViewInit"); + } + + filterData(row: any, query: string) { + let returnValue: boolean = false; + + if(query) { + for(var i = 0; i < 2; i++) { + var r= this.filterQuery(row[i], query); + if(r) { + returnValue = true; + break; + } + } + + if(!returnValue) { + return false; + } + } + return true; + } + + filterQuery(data, query){ + if(data.toLowerCase().indexOf(query.toLowerCase()) > -1) { + return true; + } else { + return false; + } + } + + /* + Trigger a table draw in order to get the initial filtering + */ + triggerInitialLoad(){ + this.triggered = true; + console.info("triggerInitialLoad"); + setTimeout(function() { + var table = ($('#dpTable')).DataTable(); + table.page( 0 ).draw( false ); + }, 500); + this.dtTrigger.next(); + } + + public goTo(page:number = 1) { + this.subscribersSearchUtils.page=page; + + var table = $('#dpTable').DataTable(); + table.page( page - 1 ).draw( false ); + + var info = table.page.info(); + console.info("records: "+info.recordsDisplay); + this.subscribersSearchUtils.totalResults = info.recordsDisplay; + } + + totalPages(): number { + let totalPages:any = this.subscribersSearchUtils.totalResults/(this.rowsOnPage); + if(!(Number.isInteger(totalPages))) { + totalPages = (parseInt(totalPages, 10) + 1); + } + return totalPages; + } + + public removeSubscriber(email:string) { + this.selectedSubscriberEmail = email; + this.alertModalDeleteSubscriber.cancelButton = true; + this.alertModalDeleteSubscriber.okButton = true; + this.alertModalDeleteSubscriber.alertTitle = "Remove subscriber?"; + + this.alertModalDeleteSubscriber.message = "Subscriber with email "; + if (email) { + this.alertModalDeleteSubscriber.message += " '"+email+"' "; + } + + this.alertModalDeleteSubscriber.message += "will be removed from your community. Are you sure?"; + this.alertModalDeleteSubscriber.okButtonText = "Yes"; + this.alertModalDeleteSubscriber.open(); + } + + public confirmedDeleteSubscriber() { + console.info("REMOVE: "+ this.selectedSubscriberEmail); + this.subRemove = this._subscribeService.unSubscribeToCommunity(this.communityId, this.selectedSubscriberEmail, this.properties.adminToolsAPIURL).subscribe( + result => { + console.log(result); + console.info("email REMOVE"); + console.log(this.selectedSubscriberEmail); + this.communitySubscribers = result; + }, + err => { + console.info("error REMOVE"); + console.log(err); + }, + () => { + console.info("completed REMOVE"); + console.log(this.selectedSubscriberEmail); + console.log(this.communitySubscribers["subscribers"]); + this.subscribersSearchUtils.totalResults--; + this.subscribersSearchUtils.page=1; + + this.rerender(); + } + ) + } + + public _getCommunitySubscribers(){ + this.subscribersSearchUtils.status = this.errorCodes.LOADING; + this.disableForms = true; + this.communitySubscribers = []; + this.subscribersSearchUtils.totalResults = 0; + this.subscribersSearchUtils.page=1; + this.subscribersSearchUtils.keyword = ""; + + this.subResults = this._subscribeService.getCommunitySubscribers(this.communityId, this.properties.adminToolsAPIURL).subscribe( + + res => { + console.info(res); + console.info("search Subscribers [total communitySubscribers:"+res.subscribers.length+"]"); + this.communitySubscribers = res; + + this.subscribersSearchUtils.totalResults = res.subscribers.length; + this.subscribersSearchUtils.status = this.errorCodes.DONE; + + this.disableForms = false; + if(!this.triggered) { + this.triggerInitialLoad(); + } else { + var table = $('#dpTable').DataTable(); + table.clear(); + + this.rerender(); + } + + this.commmunitySubscribersChanged.emit({ + value: this.communitySubscribers, + }); + }, + err => { + console.log(err); + //TODO check erros (service not available, bad request) + + if(err.status == '404') { + this.subscribersSearchUtils.status = this.errorCodes.NOT_FOUND; + } else if(err.status == '500') { + this.subscribersSearchUtils.status = this.errorCodes.ERROR; + } else { + this.subscribersSearchUtils.status = this.errorCodes.NOT_AVAILABLE; + } + + this.disableForms = false; + if(!this.triggered) { + this.triggerInitialLoad(); + } else { + var table = $('#dpTable').DataTable(); + table.clear(); + + this.rerender(); + } + } + ); + } +} diff --git a/src/app/pages/subscribers/manage-subscribers.module.ts b/src/app/pages/subscribers/manage-subscribers.module.ts new file mode 100644 index 0000000..0d98a43 --- /dev/null +++ b/src/app/pages/subscribers/manage-subscribers.module.ts @@ -0,0 +1,28 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {RouterModule} from '@angular/router'; +import {DataTablesModule} from 'angular-datatables'; + +import {AlertModalModule} from '../../openaireLibrary/utils/modal/alertModal.module'; +import {PagingModule} from '../../openaireLibrary/utils/paging.module'; +import {ManageSubscribersComponent} from './manage-subscribers.component'; +import {SubscribeService} from '../../openaireLibrary/utils/subscribe/subscribe.service'; + +@NgModule({ + imports:[ + CommonModule, FormsModule, RouterModule, + PagingModule, DataTablesModule, AlertModalModule + ], + declarations:[ + ManageSubscribersComponent + ], + providers:[ + SubscribeService + ], + exports: [ + ManageSubscribersComponent + ] +}) + +export class ManageSubscribersModule { } diff --git a/src/app/pages/subscribers/remove-subscriber.component.html b/src/app/pages/subscribers/remove-subscriber.component.html new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/subscribers/remove-subscriber.component.ts b/src/app/pages/subscribers/remove-subscriber.component.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/usernotifications/manage-user-notifications.component.html b/src/app/pages/usernotifications/manage-user-notifications.component.html new file mode 100644 index 0000000..b5cd20e --- /dev/null +++ b/src/app/pages/usernotifications/manage-user-notifications.component.html @@ -0,0 +1,56 @@ +
    +
    Manage User Notifications
    +
    +
    + + + + + + + +
    +
    + + + + + + + + + +
    +

    Notify for new managers:

    +
    +
    + + + + +
    +
    +

    Notify for new subscribers:

    +
    +
    + + + + +
    +
    +
    + + + +
    +
    + diff --git a/src/app/pages/usernotifications/manage-user-notifications.component.ts b/src/app/pages/usernotifications/manage-user-notifications.component.ts new file mode 100644 index 0000000..2ca8cb7 --- /dev/null +++ b/src/app/pages/usernotifications/manage-user-notifications.component.ts @@ -0,0 +1,194 @@ +import {Component, OnInit, Input} from '@angular/core'; +import {FormGroup, FormBuilder} from '@angular/forms'; +import {ActivatedRoute, Router} from '@angular/router'; +import {CommonModule} from "@angular/common"; + +import {EnvProperties} from '../../openaireLibrary/utils/properties/env-properties'; + +import {Session} from '../../openaireLibrary/login/utils/helper.class'; + +import {ManageUserNotificationsService} from './manage-user-notifications.service'; + +import {UserNotificationsRights} from './userNotificationsRights'; + +@Component({ + selector: 'manage-user-notifications', + templateUrl: './manage-user-notifications.component.html', +}) + +export class ManageUserNotificationsComponent implements OnInit { + + @Input('group') + myForm: FormGroup; + + public properties: EnvProperties = null; + public communityId = null; + public userNotifications = null; + public userEmail = null; + + public showLoading: boolean = true; + public errorMessage: string = ''; + public updateErrorMessage: string = ''; + + public successfulSaveMessage: string = ''; + public successfulResetMessage: string = ''; + + public hasChanged: boolean = false; + + constructor (private route: ActivatedRoute, private _router: Router, public _fb: FormBuilder, + private _manageUserNotificationsService: ManageUserNotificationsService) { + } + + ngOnInit() { + this.route.data.subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + this.route.queryParams.subscribe( + communityId => { + this.communityId = communityId['communityId']; + if (this.communityId != null && this.communityId != '') { + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + + if (Session.getUser()) { + this.userEmail = Session.getUserEmail(); + + this._manageUserNotificationsService.getUserNotifications(this.properties.adminToolsAPIURL + "community/" + this.communityId + "/notifications", this.userEmail).subscribe( + userNotifications => { + this.userNotifications = userNotifications; + + if (this.userNotifications['notifyForNewManagers'] == null || this.userNotifications['notifyForNewSubscribers'] == null) { + this.userNotifications = this.initiateUserNotifications(); + } + + //TODO remove after final testing + console.log("Before: ", userNotifications); + console.log("After: ", this.userNotifications); + this.showLoading = false; + }, + error => { + console.log(error.status); + if (error.status == '404') { + this.userNotifications = this.initiateUserNotifications(); + console.log(this.userNotifications); + this.showLoading = false; + } else { + this.handleError('System error retrieving user notifications', error) + } + } + ); + } + } + } + ); + }); + } + + public initiateUserNotifications() : UserNotificationsRights { + var notificationRights: UserNotificationsRights = new UserNotificationsRights(); + + notificationRights['notifyForNewManagers'] = true; + notificationRights['notifyForNewSubscribers'] = true; + notificationRights['managerEmail'] = this.userEmail; + + return notificationRights; + } + + public updateUserNotifications() { + if (this.communityId != null && this.communityId != '') { + this.showLoading = true; + var userNotifications = this.parseUpdatedUserNotifications(); + console.log(userNotifications); + + this._manageUserNotificationsService.updateUserNotifications(this.properties.adminToolsAPIURL + "community/" + this.communityId + "/notifications", userNotifications).subscribe( + userNotifications => { + this.handleSuccessfulSave('Notification settings saved!') + }, + error => this.handleUpdateError('System error updating user notifications', error) + ); + } + this.resetChange(); + } + + private parseUpdatedUserNotifications() : {} { + var userNotifications = {}; + + userNotifications["notifyForNewManagers"] = this.userNotifications.notifyForNewManagers; + userNotifications["notifyForNewSubscribers"] = this.userNotifications.notifyForNewSubscribers; + + if (this.userNotifications.managerEmail) { + userNotifications["managerEmail"] = this.userNotifications.managerEmail; + } else { + if (Session.getUser()) { + userNotifications["managerEmail"] = Session.getUserEmail(); + } + } + return userNotifications; + } + + public resetForm(communityId:string) { + if (communityId != null && communityId != '') { + this.showLoading = true; + this.updateErrorMessage = ""; + this.errorMessage = ""; + + this._manageUserNotificationsService.getUserNotifications(this.properties.adminToolsAPIURL + "community/" + this.communityId + "/notifications", this.userEmail).subscribe( + userNotifications => { + this.userNotifications = userNotifications; + this.showLoading = false; + console.log(userNotifications); + }, + error => this.handleError('System error retrieving user notifications', error) + ); + } + this.resetChange(); + } + + public changeValueForNewManagers(notifyForManagers : any) { + this.userNotifications.notifyForNewManagers = !notifyForManagers; + this.change(); + } + + public changeValueForNewSubscribers(notifyForSubscribers : any) { + this.userNotifications.notifyForNewSubscribers = !notifyForSubscribers; + this.change(); + } + + private change() { + this.hasChanged = true; + this.successfulSaveMessage = ''; + this.successfulResetMessage = ''; + // TODO remove after testing + console.log('I have changed: I AM TRUE'); + } + + private resetChange() { + this.hasChanged = false; + // TODO remove after testing + console.log('I have changed: I AM FALSE'); + } + + handleUpdateError(message: string, error) { + this.updateErrorMessage = message; + console.log('Server responded: ' +error); + + this.showLoading = false; + } + + handleError(message: string, error) { + this.errorMessage = message; + console.log('Server responded: ' + error); + + this.showLoading = false; + } + + handleSuccessfulSave(message) { + this.showLoading = false; + this.successfulSaveMessage = message; + } + + handleSuccessfulReset(message) { + this.showLoading = false; + this.successfulResetMessage = message; + } +} diff --git a/src/app/pages/usernotifications/manage-user-notifications.module.ts b/src/app/pages/usernotifications/manage-user-notifications.module.ts new file mode 100644 index 0000000..c94979b --- /dev/null +++ b/src/app/pages/usernotifications/manage-user-notifications.module.ts @@ -0,0 +1,26 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; + +import {ManageUserNotificationsComponent} from './manage-user-notifications.component'; +import {ManageUserNotificationsService} from './manage-user-notifications.service'; +import { MailPrefsModule } from '../../openaireLibrary/connect/userEmailPreferences/mailsPrefs.module'; + +@NgModule({ + imports: [ + RouterModule, CommonModule, FormsModule, MailPrefsModule + ], + declarations: [ + ManageUserNotificationsComponent + ], + providers: [ + ManageUserNotificationsService + ], + exports: [ + ManageUserNotificationsComponent + ] +}) + +export class ManageUserNotificationsModule { +} diff --git a/src/app/pages/usernotifications/manage-user-notifications.service.ts b/src/app/pages/usernotifications/manage-user-notifications.service.ts new file mode 100644 index 0000000..a781efb --- /dev/null +++ b/src/app/pages/usernotifications/manage-user-notifications.service.ts @@ -0,0 +1,43 @@ +import {Injectable} from '@angular/core'; +import {Http, Response, Headers, RequestOptions} from '@angular/http'; + +import {EnvProperties} from '../../openaireLibrary/utils/properties/env-properties'; + +import {UserNotificationsRights} from './userNotificationsRights'; + +@Injectable() +export class ManageUserNotificationsService { + + constructor(private http: Http) { + } + + getUserNotifications(url: string, email: string) { + return this.http.get(url).map(res => res.json()) + .map(res => this.parseUserNotifications(res, email)); + } + + updateUserNotifications(url: string, userNotificationsRights: any) { + let headers = new Headers({'Content-Type': 'application/json'}); + let options = new RequestOptions({headers: headers}); + let body = JSON.stringify(userNotificationsRights); + + console.log(body); + + return this.http.post(url, body, options) + .do(request => console.log("Insert Response:"+request.status)); + } + + parseUserNotifications(data:any, email:string): UserNotificationsRights { + + var notificationRights: UserNotificationsRights = new UserNotificationsRights(); + + for (let i = 0; i < data.length; i++) { + if (email == data[i].managerEmail) { + notificationRights['notifyForNewManagers'] = data[i].notifyForNewManagers; + notificationRights['notifyForNewSubscribers'] = data[i].notifyForNewSubscribers; + notificationRights['managerEmail'] = data[i].managerEmail; + } + } + return notificationRights; + } + } diff --git a/src/app/pages/usernotifications/userNotificationsRights.ts b/src/app/pages/usernotifications/userNotificationsRights.ts new file mode 100644 index 0000000..ba4493d --- /dev/null +++ b/src/app/pages/usernotifications/userNotificationsRights.ts @@ -0,0 +1,5 @@ +export class UserNotificationsRights { + notifyForNewManagers:boolean; + notifyForNewSubscribers:boolean; + managerEmail:string; +} diff --git a/src/app/pages/wellcome/wellcome.component.ts b/src/app/pages/wellcome/wellcome.component.ts new file mode 100644 index 0000000..f5e6644 --- /dev/null +++ b/src/app/pages/wellcome/wellcome.component.ts @@ -0,0 +1,36 @@ +import { Component, Input } from '@angular/core'; +import { Location } from '@angular/common'; + +@Component({ + selector: 'wellcome', + template: ` +
    +
    +
    +
    +
    +
    +
    + +
    +

    + Research Community
    Administration Dashboard +

    +

    + Are you a community manager?
    Configure your Research Community Dashboard +

    +
    + +
    +
    + +
    +
    +
    +
    + ` +}) + +export class WellcomeComponent { + +} diff --git a/src/app/pages/zenodo-communities/manage-zenodo-communities.component.html b/src/app/pages/zenodo-communities/manage-zenodo-communities.component.html new file mode 100644 index 0000000..76bc9df --- /dev/null +++ b/src/app/pages/zenodo-communities/manage-zenodo-communities.component.html @@ -0,0 +1,74 @@ +
    +
    Manage zenodo communities
    +
    +
    + + +
    +
    + +
    +
    + + {{zenodoCommunitySearchUtils.totalResults | number}} zenodo communities, page {{zenodoCommunitySearchUtils.page | number}} of {{(totalPages()) | number}} + + + + +
    +
    + + + + + + + + + +
    + +
    + +
    +
    + + {{zenodoCommunitySearchUtils.totalResults | number}} zenodo communities, page {{zenodoCommunitySearchUtils.page | number}} of {{(totalPages()) | number}} + + + + +
    +
    + +
    diff --git a/src/app/pages/zenodo-communities/manage-zenodo-communities.component.ts b/src/app/pages/zenodo-communities/manage-zenodo-communities.component.ts new file mode 100644 index 0000000..95c6ec5 --- /dev/null +++ b/src/app/pages/zenodo-communities/manage-zenodo-communities.component.ts @@ -0,0 +1,96 @@ +import {Component, OnInit, Input} from '@angular/core'; +import {SimpleChanges, OnChanges} from '@angular/core'; +import {FormGroup, FormArray, FormBuilder, Validators} from '@angular/forms'; +import {ActivatedRoute, Router} from '@angular/router'; + +import {HelpContentService} from '../../services/help-content.service'; +import {EnvProperties} from '../../openaireLibrary/utils/properties/env-properties'; + +import {ErrorCodes} from '../../openaireLibrary/utils/properties/errorCodes'; +import {SearchUtilsClass} from '../../openaireLibrary/searchPages/searchUtils/searchUtils.class'; +import {ManageZenodoCommunitiesService} from './manage-zenodo-communities.service'; +import {ZenodoCommunityInfo} from './zenodoCommunity/zenodoCommunityInfo'; + +@Component({ + selector: 'manage-zenodo-communities', + templateUrl: './manage-zenodo-communities.component.html', +}) + +export class ManageZenodoCommunitiesComponent implements OnInit { + + public zenodoCommunities = null; + public totalZenodoCommunities = null; + public properties:EnvProperties = null; + public communityId = null; + + public zenodoCommunitySearchUtils:SearchUtilsClass = new SearchUtilsClass(); + + private errorCodes: ErrorCodes; + public rowsOnPage = 10; + + constructor (private route: ActivatedRoute, + private _router: Router, + public _fb: FormBuilder, + private _helpContentService: HelpContentService, + private _manageΖenodoCommunitieService: ManageZenodoCommunitiesService) { + + this.errorCodes = new ErrorCodes(); + this.zenodoCommunitySearchUtils.status = this.errorCodes.LOADING; + } + + ngOnInit() { + this.route.data.subscribe((data: { envSpecific: EnvProperties }) => { + this.properties = data.envSpecific; + this.route.queryParams.subscribe( + communityId => { + this.communityId = communityId['communityId']; + if (this.communityId != null && this.communityId != '') { + this._manageΖenodoCommunitieService.getZenodoCommunities(this.properties, this.properties.zenodoCommunities+"?page="+this.zenodoCommunitySearchUtils.page+"&size="+this.rowsOnPage).subscribe( + zenodoCommunities => { + this.zenodoCommunities = zenodoCommunities; + console.log(zenodoCommunities); + console.log(this.zenodoCommunitySearchUtils.page); + }); + this._manageΖenodoCommunitieService.getTotalZenodoCommunities(this.properties, this.properties.zenodoCommunities).subscribe( + totalZenodoCommunities => { + this.totalZenodoCommunities = totalZenodoCommunities; + this.zenodoCommunitySearchUtils.totalResults = totalZenodoCommunities; + console.log(totalZenodoCommunities); + }); + } + }); + }); + + this.zenodoCommunitySearchUtils.keyword = ""; + } + + public search() { + this.zenodoCommunitySearchUtils.page = 1; + if (this.communityId != null && this.communityId != '') { + this._manageΖenodoCommunitieService.getZenodoCommunities(this.properties, this.properties.zenodoCommunities+"?q="+this.zenodoCommunitySearchUtils.keyword+"&page="+this.zenodoCommunitySearchUtils.page+"&size="+this.rowsOnPage).subscribe( + zenodoCommunities => { + this.zenodoCommunities = zenodoCommunities; + console.log(zenodoCommunities); + }); + } + } + + public goTo(page:number = 1) { + this.zenodoCommunitySearchUtils.page=page; + console.log("Page is: "+page); + this._manageΖenodoCommunitieService.getZenodoCommunities(this.properties, this.properties.zenodoCommunities+"?page="+this.zenodoCommunitySearchUtils.page+"&size="+this.rowsOnPage).subscribe( + zenodoCommunities => { + this.zenodoCommunities = zenodoCommunities; + console.log(zenodoCommunities); + console.log(this.zenodoCommunitySearchUtils.page); + }); + } + + totalPages(): number { + let totalPages:any = this.zenodoCommunitySearchUtils.totalResults/(this.rowsOnPage); + if(!(Number.isInteger(totalPages))) { + totalPages = (parseInt(totalPages, 10) + 1); + } + return totalPages; + } +} diff --git a/src/app/pages/zenodo-communities/manage-zenodo-communities.module.ts b/src/app/pages/zenodo-communities/manage-zenodo-communities.module.ts new file mode 100644 index 0000000..03bb93b --- /dev/null +++ b/src/app/pages/zenodo-communities/manage-zenodo-communities.module.ts @@ -0,0 +1,26 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {RouterModule} from '@angular/router'; + +import {PagingModule} from '../../openaireLibrary/utils/paging.module'; +import {ManageZenodoCommunitiesComponent} from './manage-zenodo-communities.component'; +import {ManageZenodoCommunitiesService} from './manage-zenodo-communities.service'; + +@NgModule({ + imports:[ + CommonModule, FormsModule, RouterModule, + PagingModule + ], + declarations:[ + ManageZenodoCommunitiesComponent + ], + providers:[ + ManageZenodoCommunitiesService + ], + exports: [ + ManageZenodoCommunitiesComponent + ] +}) + +export class ManageZenodoCommunitiesModule { } diff --git a/src/app/pages/zenodo-communities/manage-zenodo-communities.service.ts b/src/app/pages/zenodo-communities/manage-zenodo-communities.service.ts new file mode 100644 index 0000000..d5a04a3 --- /dev/null +++ b/src/app/pages/zenodo-communities/manage-zenodo-communities.service.ts @@ -0,0 +1,44 @@ +import {Injectable} from '@angular/core'; +import {Http, Response} from '@angular/http'; +import {Headers, RequestOptions} from '@angular/http'; +import {Observable} from 'rxjs/Rx'; + +import {ZenodoCommunityInfo} from './zenodoCommunity/zenodoCommunityInfo'; +import {EnvProperties} from '../../openaireLibrary/utils/properties/env-properties'; + +@Injectable() +export class ManageZenodoCommunitiesService { + + constructor(private http:Http) { + } + + getZenodoCommunities(properties:EnvProperties, url: string) { + return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)) : url) + .map(res => res.json()).map(res => this.parseZenodoCommunities(res.hits.hits)); + } + + parseZenodoCommunities(data: any): ZenodoCommunityInfo[] { + let zenodoCommunities: ZenodoCommunityInfo[] = []; + + for (let i=0; i res.json()).map(res => res.hits.total); + } +} diff --git a/src/app/pages/zenodo-communities/zenodoCommunity/zenodoCommunityInfo.ts b/src/app/pages/zenodo-communities/zenodoCommunity/zenodoCommunityInfo.ts new file mode 100644 index 0000000..5fb7df3 --- /dev/null +++ b/src/app/pages/zenodo-communities/zenodoCommunity/zenodoCommunityInfo.ts @@ -0,0 +1,9 @@ +export class ZenodoCommunityInfo { + title: string; + id: string; + description: string; + link: string; + logoUrl: string; + date: Date; + page: string; +} diff --git a/app/polyfills.ts b/src/app/polyfills.ts similarity index 100% rename from app/polyfills.ts rename to src/app/polyfills.ts diff --git a/app/reload/libReload.module.ts b/src/app/reload/libReload.module.ts similarity index 100% rename from app/reload/libReload.module.ts rename to src/app/reload/libReload.module.ts diff --git a/app/services/faq.service.ts b/src/app/services/faq.service.ts similarity index 100% rename from app/services/faq.service.ts rename to src/app/services/faq.service.ts diff --git a/app/services/help-content.service.ts b/src/app/services/help-content.service.ts similarity index 86% rename from app/services/help-content.service.ts rename to src/app/services/help-content.service.ts index 6b1d3f1..fa6cd8c 100644 --- a/app/services/help-content.service.ts +++ b/src/app/services/help-content.service.ts @@ -11,8 +11,8 @@ import { Entity } from "../domain/entity"; import { DivId } from "../domain/divId"; import { DivHelpContent } from "../domain/div-help-content"; import {COOKIE} from "../openaireLibrary/login/utils/helper.class" +import {StatisticsDisplay, StatisticsSummary} from '../openaireLibrary/connect/statistics/statisticsEntities'; -import {CommunityStatistics} from "../domain/statistics-classes"; @Injectable() export class HelpContentService { @@ -28,13 +28,13 @@ export class HelpContentService { } } - getDivIdsFull(community_pid: string, page_id: string, helpContentUrl:string) { + getDivIdsFull(page_id: string, helpContentUrl:string) { if(page_id) { - return this.http.get(helpContentUrl + 'divFull?community='+community_pid+'&page='+page_id) + return this.http.get(helpContentUrl + 'divFull?&page='+page_id) .map(res => > res.json()) .catch(this.handleError); } else { - return this.http.get(helpContentUrl + 'divFull?community='+community_pid) + return this.http.get(helpContentUrl + 'divFull') .map(res => > res.json()) .catch(this.handleError); } @@ -57,6 +57,12 @@ export class HelpContentService { .catch(this.handleError); } + getDivIdFull(divId: string, helpContentUrl:string) { + return this.http.get(helpContentUrl + 'divFull/'+divId) + .map(res => res.json()) + .catch(this.handleError); + } + saveDivId(divId: DivId, helpContentUrl:string) { let headers = new Headers({'Content-Type': 'application/json'}); let options = new RequestOptions({headers: headers}); @@ -67,13 +73,13 @@ export class HelpContentService { .map(res => res.json()) .catch(this.handleError); } - +/* getCommunitiesWithDivId(helpContentUrl:string) { return this.http.get(helpContentUrl + 'community?div=true') .map(res => > res.json()) .catch(this.handleError); } - +*/ getCommunityPagesWithDivId(community_pid: string, helpContentUrl:string) { return this.http.get(helpContentUrl + 'community/'+community_pid+'/pages?div=true') .map(res => > res.json()) @@ -130,13 +136,13 @@ export class HelpContentService { } getPagesWithDivIds(community_pid: string, helpContentUrl:string) { - return this.http.get(helpContentUrl + 'div/pages?communtity='+community_pid) + return this.http.get(helpContentUrl + 'div/pages') .map(res => >> res.json()) .catch(this.handleError); } - getPages(helpContentUrl:string) { - return this.http.get(helpContentUrl + 'page') + getPages(helpContentUrl:string,pid:string) { + return this.http.get(helpContentUrl + 'page'+(pid?("?pid="+pid):"")) .map(res => > res.json()) .catch(this.handleError); } @@ -201,13 +207,7 @@ export class HelpContentService { .catch(this.handleError); } - getCommunityPages(community_pid: string, helpContentUrl:string) { - return this.http.get(helpContentUrl + 'community/'+community_pid+'/pages') - .map(res => > res.json()) - .catch(this.handleError); - } - - getCommunityPagesByType(community_pid: string, params: string, helpContentUrl:string) { + getCommunityPages(community_pid: string, params: string, helpContentUrl:string) { return this.http.get(helpContentUrl + 'community/'+community_pid+'/pages'+params) .map(res => > res.json()) .catch(this.handleError); @@ -396,10 +396,39 @@ export class HelpContentService { return this.http.get('https://beta.services.openaire.eu/search/v2/api/datasources?format=json').map(res => res.json()).map(res => res.results).do(res => {console.log(res)}).catch(this.handleError); } - getStatistics(community_pid: string, helpContentUrl:string) { - return this.http.get(helpContentUrl + 'statistics/'+community_pid) - .map(res => res.json()) + getCommunityStatistics(apiUrl: string, communityId: string): Observable { + const url = `${apiUrl}communities/${communityId}`; + console.log(`getting statistics summary from: ${url}`); + return this.http.get(url) + .map(res => res.json()) + .do(res => { console.log(res); }) + .map(res => res.statistics) + .do(res => { console.log(res); }); + } + + getCommunityAdminStatisticsChoices(apiUrl: string, communityId: string): Observable { + const url = `${apiUrl}statistics/${communityId}`; + console.log(`getting admin choices for statistics from: ${url}`); + return this.http.get(url) + .map(stats => stats.json()) .catch(this.handleError); } + postCommunityAdminStatisticsChoices(apiUrl: string, + communityId: string, + entity: string, + chartsOrNumbers: string, + title: string, + status: boolean, + monitor: boolean): Observable { + const url = `${apiUrl}statistics/${communityId}/${entity}/${chartsOrNumbers}?status=${status.toString()}&monitor=${monitor.toString()}`; + console.log(`getting admin choices for statistics from: ${url}`); + + const headers = new Headers({'Content-Type': 'application/json'}); + const options = new RequestOptions({headers: headers}); + + return this.http.post(url, title, options) + .map(stats => stats.json()) + .catch(this.handleError); + } } diff --git a/src/app/services/manageContentProviders.service.ts b/src/app/services/manageContentProviders.service.ts new file mode 100644 index 0000000..cfe62b1 --- /dev/null +++ b/src/app/services/manageContentProviders.service.ts @@ -0,0 +1,54 @@ +import {Injectable} from '@angular/core'; +import {Http, Response, Headers, RequestOptions} from '@angular/http'; +import {Observable} from 'rxjs/Observable'; +import{EnvProperties} from '../openaireLibrary/utils/properties/env-properties'; + +import { HttpErrorResponse, HttpResponse } from '@angular/common/http'; +import { ErrorObservable } from 'rxjs/observable/ErrorObservable'; +import { catchError } from 'rxjs/operators'; + +@Injectable() +export class ManageCommunityContentProvidersService { + constructor(private http: Http ) {} + + removeContentProvider (properties:EnvProperties, communityId: string, id: string):any { + let headers = new Headers({'Content-Type': 'application/json', 'accept': 'application/json'}); + let options = new RequestOptions({headers: headers, body: id}); + + let url = properties.communityAPI+communityId+"/contentproviders"; + console.info(url); + + return this.http.delete(url, options) + } + + addContentProvider(properties:EnvProperties, communityId: string, contentProvider: any) { + let headers = new Headers({'Content-Type': 'application/json'}); + let options = new RequestOptions({headers: headers}); + + let url = properties.communityAPI+communityId+"/contentproviders"; + console.info(url); + + let communityContentProvider = this.convertSearchContentProviderToCommunityContentProvider(contentProvider, communityId); + console.info(contentProvider); + console.info(communityContentProvider); + + return this.http.post(url, JSON.stringify(communityContentProvider), options) + .map(res => res.json()) + } + + convertSearchContentProviderToCommunityContentProvider(contentProvider: any, community: string) : any { + let communityContentProvider = { + "communityId": community, + "officialname": "", + "name": "", + "openaireId": "" + } + + communityContentProvider.officialname = contentProvider.title.name; + communityContentProvider.name = contentProvider.englishname; + communityContentProvider.openaireId = contentProvider.id; + + return communityContentProvider; + } + +} diff --git a/src/app/services/manageProjects.service.ts b/src/app/services/manageProjects.service.ts new file mode 100644 index 0000000..65f8ca8 --- /dev/null +++ b/src/app/services/manageProjects.service.ts @@ -0,0 +1,66 @@ +import {Injectable} from '@angular/core'; +import {Http, Response, Headers, RequestOptions} from '@angular/http'; +import {Observable} from 'rxjs/Observable'; +import{EnvProperties} from '../openaireLibrary/utils/properties/env-properties'; + +import { HttpErrorResponse, HttpResponse } from '@angular/common/http'; +import { ErrorObservable } from 'rxjs/observable/ErrorObservable'; +import { catchError } from 'rxjs/operators'; + +@Injectable() +export class ManageCommunityProjectsService { + constructor(private http: Http ) {} + + removeProject (properties:EnvProperties, communityId: string, id: string):any { + let headers = new Headers({'Content-Type': 'application/json', 'accept': 'application/json'}); + let options = new RequestOptions({headers: headers, body: id}); + + let url = properties.communityAPI+communityId+"/projects"; + console.info(url); + + return this.http.delete(url, options) + } + + addProject(properties:EnvProperties, communityId: string, project: any) { + let headers = new Headers({'Content-Type': 'application/json'}); + let options = new RequestOptions({headers: headers}); + + let url = properties.communityAPI+communityId+"/projects"; + console.info(url); + + let communityProject = this.convertSearchProjectToCommunityProject(project, communityId); + console.info(project); + console.info(communityProject); + let testProject: any = { + "acronym": "test", + "communityId": "egi", + "funder": "test", + "grantId": "test", + "name": "test", + "openaireId": "test" + }; + + return this.http.post(url, JSON.stringify(communityProject), options) + .map(res => res.json()) + } + + convertSearchProjectToCommunityProject(project: any, community: string) : any { + let communityProject = { + "acronym": "", + "communityId": community, + "funder": "", + "grantId": "", + "name": "", + "openaireId": "" + } + + communityProject.acronym = project.acronym; + communityProject.name = project.title.name; + communityProject.funder = project.funderShortname; + communityProject.grantId = project.code; + communityProject.openaireId = project.id; + + return communityProject; + } + +} diff --git a/src/app/utils/fab.component.ts b/src/app/utils/fab.component.ts new file mode 100644 index 0000000..28e3052 --- /dev/null +++ b/src/app/utils/fab.component.ts @@ -0,0 +1,26 @@ +import { Component, EventEmitter, Output } from '@angular/core'; + +@Component({ + selector: 'fab', + template: ` + + ` +}) + +export class FABComponent { + @Output() public clicked:EventEmitter = new EventEmitter(); + + constructor () {} + + public ngOnInit() {} + + public onClick() { + this.clicked.emit(true); + } + +} diff --git a/src/app/utils/fabModule.module.ts b/src/app/utils/fabModule.module.ts new file mode 100644 index 0000000..5d2b8f6 --- /dev/null +++ b/src/app/utils/fabModule.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { CommonModule} from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import {FABComponent} from './fab.component'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule + ], + declarations: [ + FABComponent + ], + exports: [ + FABComponent + ] +}) + +export class FABModule { } diff --git a/src/assets/css/connect-custom.css b/src/assets/css/connect-custom.css new file mode 100644 index 0000000..4ab152a --- /dev/null +++ b/src/assets/css/connect-custom.css @@ -0,0 +1,96 @@ +:root { + +--portal-main-color: #222080; +/* --portal-main-contrast: #2E2E2E; */ +--portal-main-contrast: white; +--portal-dark-color: #4687E6; + +--openaire-main-color: #313179; + +--explore-portal-color: #D95F2D; +--provide-portal-color: #37C7E9; +--monitor-portal-color: #9ABB55; +--connect-portal-color: #EBB13E; +--develop-portal-color: #DA65AB; + +--explore-portal-lower-tone: #a0462c; +--provide-portal-lower-tone: #3A8FA3; +--monitor-portal-lower-tone: #7c9144; +--connect-portal-lower-tone: #b48536; +--develop-portal-lower-tone: #9f4e7e; +} +.tm-toolbar .uk-subnav-line .custom-connect-li, .tm-toolbar .uk-subnav-line .custom-connect-admin-li { + display: block; + background:#DEAF50 !important; color:#fff !important; + +} +.custom-connect-toolbar ul.uk-subnav.uk-subnav-line, .custom-connect-admin-toolbar ul.uk-subnav.uk-subnav-line{ + background-color: #FFC700 !important; + } + + .custom-connect-toolbar .inner, .custom-connect-admin-toolbar .inner { + background-color: #FFC700 !important; + } + +.custom-connect-toolbar,.custom-connect-admin-toolbar{ + border-top-color:#FFC700 !important; + } + +.red_color { + color: #FF3030; +} + +.red_background_color:hover { + background-color: #FF3030; + border-color: #FF3030; + color: #767779 !important; +} + +.green_color { + color: lightgreen; +} + +.green_background_color:hover { + background-color: lightgreen; + border-color: lightgreen; + color: #767779 !important; +} + +.wellcomePage{ + background-image: url("../imgs/wellcome.jpg"); background-color: rgb(255, 255, 255); box-sizing: border-box; min-height: calc(100vh - 412.767px); +} +.sidebar{ + background-color: #9C9C9C; +} +.uk-button-default:hover,.uk-button-default:focus,.btn:hover,.btn:focus { + background-color:#fff !important; + color:#5b5b5b !important; + box-shadow:0 6px 50px rgba(0,0,0,0.05) +} + + +.connect-admin-menu{ + background-color: var(--portal-main-color); !important; +} + +.connect-admin-menu .uk-navbar-nav > li > a{ + color: white !important; +} + +.connect-admin-menu .uk-logo{ + background-color: white !important; + margin: 5px; +} + +.sidebar .uk-nav>li>a{ + font-weight: 400 !important; + color: rgb(255,255,255); +} + +.uk-button:disabled, .uk-button:disabled:hover { + background-color: #f7f7fa; + color: #cbcbcb; + background-image: none; + box-shadow: none; + cursor: not-allowed; +} diff --git a/src/assets/env-properties.json b/src/assets/env-properties.json new file mode 100644 index 0000000..e43147a --- /dev/null +++ b/src/assets/env-properties.json @@ -0,0 +1,106 @@ +{ + "enablePiwikTrack" : false, + "enableHelper" : false, + "useCache" : false, + "metricsAPIURL" : "https://beta.services.openaire.eu/usagestats/", + "framesAPIURL" : "https://beta.openaire.eu/stats3/", + "claimsAPIURL" : "http://duffy.di.uoa.gr:8080/dnet-claims-service-2.0.0-SNAPSHOT/rest/claimsService/", + "statisticsAPIURL" : "https://beta.services.openaire.eu/stats-api/", + "statisticsFrameAPIURL":"https://beta.openaire.eu/stats/", + "searchAPIURLLAst" : "https://beta.services.openaire.eu/search/v2/api/", + + "searchResourcesAPIURL" : "https://beta.services.openaire.eu/search/v2/api/resources", + + + + "csvAPIURL" : "http://rudie.di.uoa.gr:8080/dnet-functionality-services-2.0.0-SNAPSHOT/rest/v2/reports", + + "searchCrossrefAPIURL" : "https://api.crossref.org/works", + "searchDataciteAPIURL" : "https://api.datacite.org/works", + + "searchOrcidURL" : "https://pub.orcid.org/", + + "pmidURL" : "http://www.ncbi.nlm.nih.gov/pubmed/", + "doiURL" : "https://dx.doi.org/", + "cordisURL" : "http://cordis.europa.eu/projects/", + "pmcURL" : "http://europepmc.org/articles/", + "handleURL" : "http://hdl.handle.net/", + + "zenodo" : "https://zenodo.org/", + "zenodoCommunities" : "https://zenodo.org/api/communities/", + "openAccess" : "https://www.openaire.eu/support/faq#article-id-234", + "openAccessRepo" : "https://www.openaire.eu/support/faq#article-id-310", + "fp7Guidlines" : "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme", + "h2020Guidlines" : "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020", + "ercGuidlines" : "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf", + "helpdesk" : "https://www.openaire.eu/support/helpdesk", + + "uploadService" : "http://scoobydoo.di.uoa.gr:8000/upload", + + "vocabulariesAPI" :"https://beta.services.openaire.eu/provision/mvc/vocabularies/", + + "piwikBaseUrl" :" https://analytics.openaire.eu/piwik.php?idsite=6", + + + "loginUrl" :"http://scoobydoo.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/openid_connect_login", + + "logoutUrl" :"https://aai.openaire.eu/proxy/saml2/idp/SingleLogoutService.php?ReturnTo=", + + "logoutOpenaireUrl" :"http://dl067.madgik.di.uoa.gr/idp/profile/Logout", + + "cookieDomain" :".di.uoa.gr", + + "feedbackmail" :"openaire.test@gmail.com", + "feedbackmailForMissingEntities" :"feedback@openaire.eu", + + "helperPageUrl" :"http://scoobydoo.di.uoa.gr:16000/api/page/route", + + "cacheUrl" :"http://scoobydoo.di.uoa.gr:3000/get?url=", + + "adminToolsAPIURL" :"http://scoobydoo.di.uoa.gr:8080/uoa-admin-tools/", + + "adminToolsCommunity" :"openaire", + "communityAPI": "https://dev-openaire.d4science.org/openaire/community/", + + "miningBackendURL": "https://beta.services.openaire.eu/interactive-mining", + + "csvLimit": 2000, + "pagingLimit": 20, + "resultsPerPage": 10, + + "baseLink" : "https://demo.openaire.eu", + "baseOpenaireLink" : "https://beta.explore.openaire.eu", + + "searchLinkToPublication" : "/search/publication?articleId=", + "searchLinkToProject" : "/search/project?projectId=", + "searchLinkToDataProvider" : "/search/dataprovider?datasourceId=", + "searchLinkToDataset" : "/search/dataset?datasetId=", + "searchLinkToOrganization" : "/search/organization?organizationId=", + + "searchLinkToPublications" : "/search/find/publications", + "searchLinkToDataProviders" : "/search/find/dataproviders", + "searchLinkToProjects" : "/search/find/projects", + "searchLinkToDatasets" : "/search/find/datasets", + "searchLinkToSoftware" : "/search/find/software", + "searchLinkToOrganizations" : "/search/find/organizations", + "searchLinkToCompatibleDataProviders" : "/search/content-providers", + "searchLinkToCompatibleDataProvidersTable" : "/search/content-providers-table", + "searchLinkToEntityRegistriesDataProviders" : "/search/entity-registries", + "searchLinkToEntityRegistriesDataProvidersTable" : "/search/entity-registries-table", + "searchLinkToJournals" : "/search/journals", + "searchLinkToJournalsTable" : "/search/journals-table", + + "searchLinkToAdvancedPublications" : "/search/advanced/publications", + "searchLinkToAdvancedProjects" : "/search/advanced/projects", + "searchLinkToAdvancedDatasets" : "/search/advanced/datasets", + "searchLinkToAdvancedSoftware" : "/search/advanced/software", + "searchLinkToAdvancedDataProviders" : "/search/advanced/dataproviders", + "searchLinkToAdvancedOrganizations" : "/search/advanced/organizations", + "searchLinkToAdvancedPeople" : "/search/advanced/people", + + "lastIndexInformationLink" : "https://www.openaire.eu/aggregation-and-content-provision-workflows", + "showLastIndexInformationLink" : false, + + "widgetLink" : "https://beta.openaire.eu/index.php?option=com_openaire&view=widget&format=raw&projectId=", + "claimsInformationLink": "https://www.openaire.eu/linking-beta" +} diff --git a/src/assets/external-link.svg b/src/assets/external-link.svg new file mode 100644 index 0000000..c291d7e --- /dev/null +++ b/src/assets/external-link.svg @@ -0,0 +1 @@ + diff --git a/imgs/add-icon.png b/src/assets/imgs/add-icon.png similarity index 100% rename from imgs/add-icon.png rename to src/assets/imgs/add-icon.png diff --git a/imgs/check-icon.png b/src/assets/imgs/check-icon.png similarity index 100% rename from imgs/check-icon.png rename to src/assets/imgs/check-icon.png diff --git a/imgs/delete-icon.png b/src/assets/imgs/delete-icon.png similarity index 100% rename from imgs/delete-icon.png rename to src/assets/imgs/delete-icon.png diff --git a/imgs/icn_edit.png b/src/assets/imgs/icn_edit.png similarity index 100% rename from imgs/icn_edit.png rename to src/assets/imgs/icn_edit.png diff --git a/imgs/icn_search.png b/src/assets/imgs/icn_search.png similarity index 100% rename from imgs/icn_search.png rename to src/assets/imgs/icn_search.png diff --git a/imgs/icn_trash.png b/src/assets/imgs/icn_trash.png similarity index 100% rename from imgs/icn_trash.png rename to src/assets/imgs/icn_trash.png diff --git a/imgs/logo-large-connect.png b/src/assets/imgs/logo-large-connect-admin.png similarity index 100% rename from imgs/logo-large-connect.png rename to src/assets/imgs/logo-large-connect-admin.png diff --git a/imgs/logo-small-connect.png b/src/assets/imgs/logo-small-connect-admin.png similarity index 100% rename from imgs/logo-small-connect.png rename to src/assets/imgs/logo-small-connect-admin.png diff --git a/src/assets/imgs/wellcome.jpg b/src/assets/imgs/wellcome.jpg new file mode 100644 index 0000000..5f1de67 Binary files /dev/null and b/src/assets/imgs/wellcome.jpg differ diff --git a/imgs/x-icon.png b/src/assets/imgs/x-icon.png similarity index 100% rename from imgs/x-icon.png rename to src/assets/imgs/x-icon.png diff --git a/src/assets/loading.gif b/src/assets/loading.gif new file mode 100644 index 0000000..b36a2b6 Binary files /dev/null and b/src/assets/loading.gif differ diff --git a/styles.css b/src/assets/styles.css similarity index 99% rename from styles.css rename to src/assets/styles.css index 23949b4..4a7c5d1 100644 --- a/styles.css +++ b/src/assets/styles.css @@ -177,7 +177,7 @@ body { } .loader { - background: url("imgs/loader-small.gif") no-repeat center; + background: url("assets/imgs/loader-small.gif") no-repeat center; z-index: 10; width: 100%; height: 100%; @@ -187,7 +187,7 @@ body { } .loader-big { - background: url("imgs/loader-big.gif") no-repeat center; + background: url("assets/imgs/loader-big.gif") no-repeat center; z-index: 10; width: 100%; height: 100%; @@ -284,7 +284,7 @@ body { #signin .bg { - background: #3f4c5b url("./imgs/fotoInteraWithOpacity.jpg") no-repeat fixed 50% 50% / 100% auto !important; + background: #3f4c5b url("./assets/imgs/fotoInteraWithOpacity.jpg") no-repeat fixed 50% 50% / 100% auto !important; padding-top: 70px; } @@ -1026,7 +1026,7 @@ a { width: 100%; height: 35px !important; box-shadow: none !important; - background-image: url("imgs/icn_search.png"); + background-image: url("assets/imgs/icn_search.png"); background-position: 2% 40%; background-repeat: no-repeat; background-size: 20px auto; diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts new file mode 100644 index 0000000..3612073 --- /dev/null +++ b/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/src/environments/environment.ts b/src/environments/environment.ts new file mode 100644 index 0000000..b7f639a --- /dev/null +++ b/src/environments/environment.ts @@ -0,0 +1,8 @@ +// The file contents for the current environment will overwrite these during build. +// The build system defaults to the dev environment which uses `environment.ts`, but if you do +// `ng build --env=prod` then `environment.prod.ts` will be used instead. +// The list of which env maps to which file can be found in `.angular-cli.json`. + +export const environment = { + production: false +}; diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..1820e53 --- /dev/null +++ b/src/index.html @@ -0,0 +1,47 @@ + + + + + + Administration Dashboard | OpenAIRE-Connect + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..a9ca1ca --- /dev/null +++ b/src/main.ts @@ -0,0 +1,11 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/src/polyfills.ts b/src/polyfills.ts new file mode 100644 index 0000000..98fd841 --- /dev/null +++ b/src/polyfills.ts @@ -0,0 +1,72 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** IE9, IE10 and IE11 requires all of the following polyfills. **/ +import 'core-js/es6/symbol'; +import 'core-js/es6/object'; +import 'core-js/es6/function'; +import 'core-js/es6/parse-int'; +import 'core-js/es6/parse-float'; +import 'core-js/es6/number'; +import 'core-js/es6/math'; +import 'core-js/es6/string'; +import 'core-js/es6/date'; +import 'core-js/es6/array'; +import 'core-js/es6/regexp'; +import 'core-js/es6/map'; +import 'core-js/es6/weak-map'; +import 'core-js/es6/set'; + +/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** Evergreen browsers require these. **/ +import 'core-js/es6/reflect'; +import 'core-js/es7/reflect'; + + +/** + * Required to support Web Animations `@angular/animation`. + * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation + **/ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + + + +/*************************************************************************************************** + * Zone JS is required by Angular itself. + */ +import 'zone.js/dist/zone'; // Included with Angular CLI. + + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ + +/** + * Date, currency, decimal and percent pipes. + * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 + */ +// import 'intl'; // Run `npm install --save intl`. +/** + * Need to import at least one locale-data with intl. + */ +// import 'intl/locale-data/jsonp/en'; diff --git a/src/robots.txt b/src/robots.txt new file mode 100644 index 0000000..e44c1d4 --- /dev/null +++ b/src/robots.txt @@ -0,0 +1,4 @@ +User-Agent: * +Disallow: /cache +Disallow: /upload +Disallow: / diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 0000000..90d4ee0 --- /dev/null +++ b/src/styles.css @@ -0,0 +1 @@ +/* You can add global styles to this file, and also import other style files */ diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 0000000..cd612ee --- /dev/null +++ b/src/test.ts @@ -0,0 +1,32 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/long-stack-trace-zone'; +import 'zone.js/dist/proxy.js'; +import 'zone.js/dist/sync-test'; +import 'zone.js/dist/jasmine-patch'; +import 'zone.js/dist/async-test'; +import 'zone.js/dist/fake-async-test'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. +declare const __karma__: any; +declare const require: any; + +// Prevent Karma from running prematurely. +__karma__.loaded = function () {}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); +// Finally, start Karma to run the tests. +__karma__.start(); diff --git a/src/tsconfig.app.json b/src/tsconfig.app.json new file mode 100644 index 0000000..2ac34b0 --- /dev/null +++ b/src/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/app", + "baseUrl": "./", + "module": "es2015", + "types": ["node"] + }, + "exclude": [ + "test.ts", + "**/*.spec.ts" + ] +} diff --git a/src/tsconfig.spec.json b/src/tsconfig.spec.json new file mode 100644 index 0000000..63d89ff --- /dev/null +++ b/src/tsconfig.spec.json @@ -0,0 +1,20 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/spec", + "baseUrl": "./", + "module": "commonjs", + "target": "es5", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "test.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/src/typings.d.ts b/src/typings.d.ts new file mode 100644 index 0000000..ef5c7bd --- /dev/null +++ b/src/typings.d.ts @@ -0,0 +1,5 @@ +/* SystemJS module definition */ +declare var module: NodeModule; +interface NodeModule { + id: string; +} diff --git a/tsconfig.json b/tsconfig.json index f0da534..a6c016b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,29 +1,19 @@ { + "compileOnSave": false, "compilerOptions": { - "target": "es5", - "module": "commonjs", - "outDir": "dist", - "rootDir": ".", + "outDir": "./dist/out-tsc", "sourceMap": true, + "declaration": false, + "moduleResolution": "node", "emitDecoratorMetadata": true, "experimentalDecorators": true, - "moduleResolution": "node", + "target": "es5", "typeRoots": [ - "typings/global", - "typings/modules" + "node_modules/@types" ], - "lib": ["es5", "dom"] - }, - "exclude": [ - "node_modules" - ], - "awesomeTypescriptLoaderOptions": { - "useWebpackText": true - }, - "angularCompilerOptions": { - "debug": false - }, - "compileOnSave": false, - "buildOnSave": false, - "atom": { "rewriteTsconfig": false } -} \ No newline at end of file + "lib": [ + "es2017", + "dom" + ] + } +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..0db5751 --- /dev/null +++ b/tslint.json @@ -0,0 +1,142 @@ +{ + "rulesDirectory": [ + "node_modules/codelyzer" + ], + "rules": { + "arrow-return-shorthand": true, + "callable-types": true, + "class-name": true, + "comment-format": [ + true, + "check-space" + ], + "curly": true, + "eofline": true, + "forin": true, + "import-blacklist": [ + true, + "rxjs" + ], + "import-spacing": true, + "indent": [ + true, + "spaces" + ], + "interface-over-type-literal": true, + "label-position": true, + "max-line-length": [ + true, + 140 + ], + "member-access": false, + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-arg": true, + "no-bitwise": true, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-construct": true, + "no-debugger": true, + "no-duplicate-super": true, + "no-empty": false, + "no-empty-interface": true, + "no-eval": true, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-misused-new": true, + "no-non-null-assertion": true, + "no-shadowed-variable": true, + "no-string-literal": false, + "no-string-throw": true, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": true, + "no-unnecessary-initializer": true, + "no-unused-expression": true, + "no-use-before-declare": true, + "no-var-keyword": true, + "object-literal-sort-keys": false, + "one-line": [ + true, + "check-open-brace", + "check-catch", + "check-else", + "check-whitespace" + ], + "prefer-const": true, + "quotemark": [ + true, + "single" + ], + "radix": true, + "semicolon": [ + true, + "always" + ], + "triple-equals": [ + true, + "allow-null-check" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "typeof-compare": true, + "unified-signatures": true, + "variable-name": false, + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ], + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ], + "use-input-property-decorator": true, + "use-output-property-decorator": true, + "use-host-property-decorator": true, + "no-input-rename": true, + "no-output-rename": true, + "use-life-cycle-interface": true, + "use-pipe-transform-interface": true, + "component-class-suffix": true, + "directive-class-suffix": true, + "no-access-missing-member": true, + "templates-use-public": true, + "invoke-injectable": true + } +} diff --git a/typings.json b/typings.json deleted file mode 100644 index ceaab15..0000000 --- a/typings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "globalDependencies": { - "core-js": "registry:dt/core-js#0.0.0+20160725163759", - "jasmine": "registry:dt/jasmine#2.2.0+20160621224255", - "node": "registry:dt/node#6.0.0+20160909174046" - } -} \ No newline at end of file diff --git a/typings/globals/core-js/index.d.ts b/typings/globals/core-js/index.d.ts deleted file mode 100644 index c007965..0000000 --- a/typings/globals/core-js/index.d.ts +++ /dev/null @@ -1,3052 +0,0 @@ -// Generated by typings -// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/25e18b592470e3dddccc826fde2bb8e7610ef863/core-js/core-js.d.ts -declare type PropertyKey = string | number | symbol; - -// ############################################################################################# -// ECMAScript 6: Object & Function -// Modules: es6.object.assign, es6.object.is, es6.object.set-prototype-of, -// es6.object.to-string, es6.function.name and es6.function.has-instance. -// ############################################################################################# - -interface ObjectConstructor { - /** - * Copy the values of all of the enumerable own properties from one or more source objects to a - * target object. Returns the target object. - * @param target The target object to copy to. - * @param source The source object from which to copy properties. - */ - assign(target: T, source: U): T & U; - - /** - * Copy the values of all of the enumerable own properties from one or more source objects to a - * target object. Returns the target object. - * @param target The target object to copy to. - * @param source1 The first source object from which to copy properties. - * @param source2 The second source object from which to copy properties. - */ - assign(target: T, source1: U, source2: V): T & U & V; - - /** - * Copy the values of all of the enumerable own properties from one or more source objects to a - * target object. Returns the target object. - * @param target The target object to copy to. - * @param source1 The first source object from which to copy properties. - * @param source2 The second source object from which to copy properties. - * @param source3 The third source object from which to copy properties. - */ - assign(target: T, source1: U, source2: V, source3: W): T & U & V & W; - - /** - * Copy the values of all of the enumerable own properties from one or more source objects to a - * target object. Returns the target object. - * @param target The target object to copy to. - * @param sources One or more source objects from which to copy properties - */ - assign(target: any, ...sources: any[]): any; - - /** - * Returns true if the values are the same value, false otherwise. - * @param value1 The first value. - * @param value2 The second value. - */ - is(value1: any, value2: any): boolean; - - /** - * Sets the prototype of a specified object o to object proto or null. Returns the object o. - * @param o The object to change its prototype. - * @param proto The value of the new prototype or null. - * @remarks Requires `__proto__` support. - */ - setPrototypeOf(o: any, proto: any): any; -} - -interface Function { - /** - * Returns the name of the function. Function names are read-only and can not be changed. - */ - name: string; - - /** - * Determines if a constructor object recognizes an object as one of the - * constructor’s instances. - * @param value The object to test. - */ - [Symbol.hasInstance](value: any): boolean; -} - -// ############################################################################################# -// ECMAScript 6: Array -// Modules: es6.array.from, es6.array.of, es6.array.copy-within, es6.array.fill, es6.array.find, -// and es6.array.find-index -// ############################################################################################# - -interface Array { - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(predicate: (value: T, index: number, obj: Array) => boolean, thisArg?: any): T; - - /** - * Returns the index of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(predicate: (value: T) => boolean, thisArg?: any): number; - - /** - * Returns the this object after filling the section identified by start and end with value - * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as - * length+end. - */ - fill(value: T, start?: number, end?: number): T[]; - - /** - * Returns the this object after copying a section of the array identified by start and end - * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it - * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. - */ - copyWithin(target: number, start: number, end?: number): T[]; - - [Symbol.unscopables]: any; -} - -interface ArrayConstructor { - /** - * Creates an array from an array-like object. - * @param arrayLike An array-like object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => U, thisArg?: any): Array; - - /** - * Creates an array from an iterable object. - * @param iterable An iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - from(iterable: Iterable, mapfn: (v: T, k: number) => U, thisArg?: any): Array; - - /** - * Creates an array from an array-like object. - * @param arrayLike An array-like object to convert to an array. - */ - from(arrayLike: ArrayLike): Array; - - /** - * Creates an array from an iterable object. - * @param iterable An iterable object to convert to an array. - */ - from(iterable: Iterable): Array; - - /** - * Returns a new array from a set of elements. - * @param items A set of elements to include in the new array object. - */ - of(...items: T[]): Array; -} - -// ############################################################################################# -// ECMAScript 6: String & RegExp -// Modules: es6.string.from-code-point, es6.string.raw, es6.string.code-point-at, -// es6.string.ends-with, es6.string.includes, es6.string.repeat, -// es6.string.starts-with, and es6.regexp -// ############################################################################################# - -interface String { - /** - * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point - * value of the UTF-16 encoded code point starting at the string element at position pos in - * the String resulting from converting this object to a String. - * If there is no element at that position, the result is undefined. - * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos. - */ - codePointAt(pos: number): number; - - /** - * Returns true if searchString appears as a substring of the result of converting this - * object to a String, at one or more positions that are - * greater than or equal to position; otherwise, returns false. - * @param searchString search string - * @param position If position is undefined, 0 is assumed, so as to search all of the String. - */ - includes(searchString: string, position?: number): boolean; - - /** - * Returns true if the sequence of elements of searchString converted to a String is the - * same as the corresponding elements of this object (converted to a String) starting at - * endPosition – length(this). Otherwise returns false. - */ - endsWith(searchString: string, endPosition?: number): boolean; - - /** - * Returns a String value that is made from count copies appended together. If count is 0, - * T is the empty String is returned. - * @param count number of copies to append - */ - repeat(count: number): string; - - /** - * Returns true if the sequence of elements of searchString converted to a String is the - * same as the corresponding elements of this object (converted to a String) starting at - * position. Otherwise returns false. - */ - startsWith(searchString: string, position?: number): boolean; -} - -interface StringConstructor { - /** - * Return the String value whose elements are, in order, the elements in the List elements. - * If length is 0, the empty string is returned. - */ - fromCodePoint(...codePoints: number[]): string; - - /** - * String.raw is intended for use as a tag function of a Tagged Template String. When called - * as such the first argument will be a well formed template call site object and the rest - * parameter will contain the substitution values. - * @param template A well-formed template string call site representation. - * @param substitutions A set of substitution values. - */ - raw(template: TemplateStringsArray, ...substitutions: any[]): string; -} - -interface RegExp { - /** - * Returns a string indicating the flags of the regular expression in question. This field is read-only. - * The characters in this string are sequenced and concatenated in the following order: - * - * - "g" for global - * - "i" for ignoreCase - * - "m" for multiline - * - "u" for unicode - * - "y" for sticky - * - * If no flags are set, the value is the empty string. - */ - flags: string; -} - -// ############################################################################################# -// ECMAScript 6: Number & Math -// Modules: es6.number.constructor, es6.number.statics, and es6.math -// ############################################################################################# - -interface NumberConstructor { - /** - * The value of Number.EPSILON is the difference between 1 and the smallest value greater than 1 - * that is representable as a Number value, which is approximately: - * 2.2204460492503130808472633361816 x 10‍−‍16. - */ - EPSILON: number; - - /** - * Returns true if passed value is finite. - * Unlike the global isFininte, Number.isFinite doesn't forcibly convert the parameter to a - * number. Only finite values of the type number, result in true. - * @param number A numeric value. - */ - isFinite(number: number): boolean; - - /** - * Returns true if the value passed is an integer, false otherwise. - * @param number A numeric value. - */ - isInteger(number: number): boolean; - - /** - * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a - * number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter - * to a number. Only values of the type number, that are also NaN, result in true. - * @param number A numeric value. - */ - isNaN(number: number): boolean; - - /** - * Returns true if the value passed is a safe integer. - * @param number A numeric value. - */ - isSafeInteger(number: number): boolean; - - /** - * The value of the largest integer n such that n and n + 1 are both exactly representable as - * a Number value. - * The value of Number.MIN_SAFE_INTEGER is 9007199254740991 2^53 − 1. - */ - MAX_SAFE_INTEGER: number; - - /** - * The value of the smallest integer n such that n and n − 1 are both exactly representable as - * a Number value. - * The value of Number.MIN_SAFE_INTEGER is −9007199254740991 (−(2^53 − 1)). - */ - MIN_SAFE_INTEGER: number; - - /** - * Converts a string to a floating-point number. - * @param string A string that contains a floating-point number. - */ - parseFloat(string: string): number; - - /** - * Converts A string to an integer. - * @param s A string to convert into a number. - * @param radix A value between 2 and 36 that specifies the base of the number in numString. - * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. - * All other strings are considered decimal. - */ - parseInt(string: string, radix?: number): number; -} - -interface Math { - /** - * Returns the number of leading zero bits in the 32-bit binary representation of a number. - * @param x A numeric expression. - */ - clz32(x: number): number; - - /** - * Returns the result of 32-bit multiplication of two numbers. - * @param x First number - * @param y Second number - */ - imul(x: number, y: number): number; - - /** - * Returns the sign of the x, indicating whether x is positive, negative or zero. - * @param x The numeric expression to test - */ - sign(x: number): number; - - /** - * Returns the base 10 logarithm of a number. - * @param x A numeric expression. - */ - log10(x: number): number; - - /** - * Returns the base 2 logarithm of a number. - * @param x A numeric expression. - */ - log2(x: number): number; - - /** - * Returns the natural logarithm of 1 + x. - * @param x A numeric expression. - */ - log1p(x: number): number; - - /** - * Returns the result of (e^x - 1) of x (e raised to the power of x, where e is the base of - * the natural logarithms). - * @param x A numeric expression. - */ - expm1(x: number): number; - - /** - * Returns the hyperbolic cosine of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - cosh(x: number): number; - - /** - * Returns the hyperbolic sine of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - sinh(x: number): number; - - /** - * Returns the hyperbolic tangent of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - tanh(x: number): number; - - /** - * Returns the inverse hyperbolic cosine of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - acosh(x: number): number; - - /** - * Returns the inverse hyperbolic sine of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - asinh(x: number): number; - - /** - * Returns the inverse hyperbolic tangent of a number. - * @param x A numeric expression that contains an angle measured in radians. - */ - atanh(x: number): number; - - /** - * Returns the square root of the sum of squares of its arguments. - * @param values Values to compute the square root for. - * If no arguments are passed, the result is +0. - * If there is only one argument, the result is the absolute value. - * If any argument is +Infinity or -Infinity, the result is +Infinity. - * If any argument is NaN, the result is NaN. - * If all arguments are either +0 or −0, the result is +0. - */ - hypot(...values: number[]): number; - - /** - * Returns the integral part of the a numeric expression, x, removing any fractional digits. - * If x is already an integer, the result is x. - * @param x A numeric expression. - */ - trunc(x: number): number; - - /** - * Returns the nearest single precision float representation of a number. - * @param x A numeric expression. - */ - fround(x: number): number; - - /** - * Returns an implementation-dependent approximation to the cube root of number. - * @param x A numeric expression. - */ - cbrt(x: number): number; -} - -// ############################################################################################# -// ECMAScript 6: Symbols -// Modules: es6.symbol -// ############################################################################################# - -interface Symbol { - /** Returns a string representation of an object. */ - toString(): string; - - [Symbol.toStringTag]: string; -} - -interface SymbolConstructor { - /** - * A reference to the prototype. - */ - prototype: Symbol; - - /** - * Returns a new unique Symbol value. - * @param description Description of the new Symbol object. - */ - (description?: string|number): symbol; - - /** - * Returns a Symbol object from the global symbol registry matching the given key if found. - * Otherwise, returns a new symbol with this key. - * @param key key to search for. - */ - for(key: string): symbol; - - /** - * Returns a key from the global symbol registry matching the given Symbol if found. - * Otherwise, returns a undefined. - * @param sym Symbol to find the key for. - */ - keyFor(sym: symbol): string; - - // Well-known Symbols - - /** - * A method that determines if a constructor object recognizes an object as one of the - * constructor’s instances. Called by the semantics of the instanceof operator. - */ - hasInstance: symbol; - - /** - * A Boolean value that if true indicates that an object should flatten to its array elements - * by Array.prototype.concat. - */ - isConcatSpreadable: symbol; - - /** - * A method that returns the default iterator for an object. Called by the semantics of the - * for-of statement. - */ - iterator: symbol; - - /** - * A regular expression method that matches the regular expression against a string. Called - * by the String.prototype.match method. - */ - match: symbol; - - /** - * A regular expression method that replaces matched substrings of a string. Called by the - * String.prototype.replace method. - */ - replace: symbol; - - /** - * A regular expression method that returns the index within a string that matches the - * regular expression. Called by the String.prototype.search method. - */ - search: symbol; - - /** - * A function valued property that is the constructor function that is used to create - * derived objects. - */ - species: symbol; - - /** - * A regular expression method that splits a string at the indices that match the regular - * expression. Called by the String.prototype.split method. - */ - split: symbol; - - /** - * A method that converts an object to a corresponding primitive value.Called by the ToPrimitive - * abstract operation. - */ - toPrimitive: symbol; - - /** - * A String value that is used in the creation of the default string description of an object. - * Called by the built-in method Object.prototype.toString. - */ - toStringTag: symbol; - - /** - * An Object whose own property names are property names that are excluded from the with - * environment bindings of the associated objects. - */ - unscopables: symbol; - - /** - * Non-standard. Use simple mode for core-js symbols. See https://github.com/zloirock/core-js/#caveats-when-using-symbol-polyfill - */ - useSimple(): void; - - /** - * Non-standard. Use setter mode for core-js symbols. See https://github.com/zloirock/core-js/#caveats-when-using-symbol-polyfill - */ - userSetter(): void; -} - -declare var Symbol: SymbolConstructor; - -interface Object { - /** - * Determines whether an object has a property with the specified name. - * @param v A property name. - */ - hasOwnProperty(v: PropertyKey): boolean; - - /** - * Determines whether a specified property is enumerable. - * @param v A property name. - */ - propertyIsEnumerable(v: PropertyKey): boolean; -} - -interface ObjectConstructor { - /** - * Returns an array of all symbol properties found directly on object o. - * @param o Object to retrieve the symbols from. - */ - getOwnPropertySymbols(o: any): symbol[]; - - /** - * Gets the own property descriptor of the specified object. - * An own property descriptor is one that is defined directly on the object and is not - * inherited from the object's prototype. - * @param o Object that contains the property. - * @param p Name of the property. - */ - getOwnPropertyDescriptor(o: any, propertyKey: PropertyKey): PropertyDescriptor; - - /** - * Adds a property to an object, or modifies attributes of an existing property. - * @param o Object on which to add or modify the property. This can be a native JavaScript - * object (that is, a user-defined object or a built in object) or a DOM object. - * @param p The property name. - * @param attributes Descriptor for the property. It can be for a data property or an accessor - * property. - */ - defineProperty(o: any, propertyKey: PropertyKey, attributes: PropertyDescriptor): any; -} - -interface Math { - [Symbol.toStringTag]: string; -} - -interface JSON { - [Symbol.toStringTag]: string; -} - -// ############################################################################################# -// ECMAScript 6: Collections -// Modules: es6.map, es6.set, es6.weak-map, and es6.weak-set -// ############################################################################################# - -interface Map { - clear(): void; - delete(key: K): boolean; - forEach(callbackfn: (value: V, index: K, map: Map) => void, thisArg?: any): void; - get(key: K): V; - has(key: K): boolean; - set(key: K, value?: V): Map; - size: number; -} - -interface MapConstructor { - new (): Map; - new (iterable: Iterable<[K, V]>): Map; - prototype: Map; -} - -declare var Map: MapConstructor; - -interface Set { - add(value: T): Set; - clear(): void; - delete(value: T): boolean; - forEach(callbackfn: (value: T, index: T, set: Set) => void, thisArg?: any): void; - has(value: T): boolean; - size: number; -} - -interface SetConstructor { - new (): Set; - new (iterable: Iterable): Set; - prototype: Set; -} - -declare var Set: SetConstructor; - -interface WeakMap { - delete(key: K): boolean; - get(key: K): V; - has(key: K): boolean; - set(key: K, value?: V): WeakMap; -} - -interface WeakMapConstructor { - new (): WeakMap; - new (iterable: Iterable<[K, V]>): WeakMap; - prototype: WeakMap; -} - -declare var WeakMap: WeakMapConstructor; - -interface WeakSet { - add(value: T): WeakSet; - delete(value: T): boolean; - has(value: T): boolean; -} - -interface WeakSetConstructor { - new (): WeakSet; - new (iterable: Iterable): WeakSet; - prototype: WeakSet; -} - -declare var WeakSet: WeakSetConstructor; - -// ############################################################################################# -// ECMAScript 6: Iterators -// Modules: es6.string.iterator, es6.array.iterator, es6.map, es6.set, web.dom.iterable -// ############################################################################################# - -interface IteratorResult { - done: boolean; - value?: T; -} - -interface Iterator { - next(value?: any): IteratorResult; - return?(value?: any): IteratorResult; - throw?(e?: any): IteratorResult; -} - -interface Iterable { - [Symbol.iterator](): Iterator; -} - -interface IterableIterator extends Iterator { - [Symbol.iterator](): IterableIterator; -} - -interface String { - /** Iterator */ - [Symbol.iterator](): IterableIterator; -} - -interface Array { - /** Iterator */ - [Symbol.iterator](): IterableIterator; - - /** - * Returns an array of key, value pairs for every entry in the array - */ - entries(): IterableIterator<[number, T]>; - - /** - * Returns an list of keys in the array - */ - keys(): IterableIterator; - - /** - * Returns an list of values in the array - */ - values(): IterableIterator; -} - -interface Map { - entries(): IterableIterator<[K, V]>; - keys(): IterableIterator; - values(): IterableIterator; - [Symbol.iterator](): IterableIterator<[K, V]>; -} - -interface Set { - entries(): IterableIterator<[T, T]>; - keys(): IterableIterator; - values(): IterableIterator; - [Symbol.iterator](): IterableIterator; -} - -interface NodeList { - [Symbol.iterator](): IterableIterator; -} - -interface $for extends IterableIterator { - of(callbackfn: (value: T, key: any) => void, thisArg?: any): void; - array(): T[]; - array(callbackfn: (value: T, key: any) => U, thisArg?: any): U[]; - filter(callbackfn: (value: T, key: any) => boolean, thisArg?: any): $for; - map(callbackfn: (value: T, key: any) => U, thisArg?: any): $for; -} - -declare function $for(iterable: Iterable): $for; - -// ############################################################################################# -// ECMAScript 6: Promises -// Modules: es6.promise -// ############################################################################################# - -interface PromiseLike { - /** - * Attaches callbacks for the resolution and/or rejection of the Promise. - * @param onfulfilled The callback to execute when the Promise is resolved. - * @param onrejected The callback to execute when the Promise is rejected. - * @returns A Promise for the completion of which ever callback is executed. - */ - then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): PromiseLike; - then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => void): PromiseLike; -} - -/** - * Represents the completion of an asynchronous operation - */ -interface Promise { - /** - * Attaches callbacks for the resolution and/or rejection of the Promise. - * @param onfulfilled The callback to execute when the Promise is resolved. - * @param onrejected The callback to execute when the Promise is rejected. - * @returns A Promise for the completion of which ever callback is executed. - */ - then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; - then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; - - /** - * Attaches a callback for only the rejection of the Promise. - * @param onrejected The callback to execute when the Promise is rejected. - * @returns A Promise for the completion of the callback. - */ - catch(onrejected?: (reason: any) => T | PromiseLike): Promise; - catch(onrejected?: (reason: any) => void): Promise; -} - -interface PromiseConstructor { - /** - * A reference to the prototype. - */ - prototype: Promise; - - /** - * Creates a new Promise. - * @param executor A callback used to initialize the promise. This callback is passed two arguments: - * a resolve callback used resolve the promise with a value or the result of another promise, - * and a reject callback used to reject the promise with a provided reason or error. - */ - new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void): Promise; - - /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises - * resolve, or rejected when any Promise is rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike, T10 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6]>; - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike]): Promise<[T1, T2, T3, T4, T5]>; - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike ]): Promise<[T1, T2, T3, T4]>; - all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike]): Promise<[T1, T2, T3]>; - all(values: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; - all(values: Iterable>): Promise; - - /** - * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved - * or rejected. - * @param values An array of Promises. - * @returns A new Promise. - */ - race(values: Iterable>): Promise; - - /** - * Creates a new rejected promise for the provided reason. - * @param reason The reason the promise was rejected. - * @returns A new rejected Promise. - */ - reject(reason: any): Promise; - - /** - * Creates a new rejected promise for the provided reason. - * @param reason The reason the promise was rejected. - * @returns A new rejected Promise. - */ - reject(reason: any): Promise; - - /** - * Creates a new resolved promise for the provided value. - * @param value A promise. - * @returns A promise whose internal state matches the provided promise. - */ - resolve(value: T | PromiseLike): Promise; - - /** - * Creates a new resolved promise . - * @returns A resolved promise. - */ - resolve(): Promise; -} - -declare var Promise: PromiseConstructor; - -// ############################################################################################# -// ECMAScript 6: Reflect -// Modules: es6.reflect -// ############################################################################################# - -declare namespace Reflect { - function apply(target: Function, thisArgument: any, argumentsList: ArrayLike): any; - function construct(target: Function, argumentsList: ArrayLike, newTarget?: any): any; - function defineProperty(target: any, propertyKey: PropertyKey, attributes: PropertyDescriptor): boolean; - function deleteProperty(target: any, propertyKey: PropertyKey): boolean; - function enumerate(target: any): IterableIterator; - function get(target: any, propertyKey: PropertyKey, receiver?: any): any; - function getOwnPropertyDescriptor(target: any, propertyKey: PropertyKey): PropertyDescriptor; - function getPrototypeOf(target: any): any; - function has(target: any, propertyKey: PropertyKey): boolean; - function isExtensible(target: any): boolean; - function ownKeys(target: any): Array; - function preventExtensions(target: any): boolean; - function set(target: any, propertyKey: PropertyKey, value: any, receiver?: any): boolean; - function setPrototypeOf(target: any, proto: any): boolean; -} - -// ############################################################################################# -// ECMAScript 7 -// Modules: es7.array.includes, es7.string.at, es7.string.lpad, es7.string.rpad, -// es7.object.to-array, es7.object.get-own-property-descriptors, es7.regexp.escape, -// es7.map.to-json, and es7.set.to-json -// ############################################################################################# - -interface Array { - includes(value: T, fromIndex?: number): boolean; -} - -interface String { - at(index: number): string; - lpad(length: number, fillStr?: string): string; - rpad(length: number, fillStr?: string): string; -} - -interface ObjectConstructor { - values(object: any): any[]; - entries(object: any): [string, any][]; - getOwnPropertyDescriptors(object: any): PropertyDescriptorMap; -} - -interface RegExpConstructor { - escape(str: string): string; -} - -interface Map { - toJSON(): any; -} - -interface Set { - toJSON(): any; -} - -// ############################################################################################# -// Mozilla JavaScript: Array generics -// Modules: js.array.statics -// ############################################################################################# - -interface ArrayConstructor { - /** - * Appends new elements to an array, and returns the new length of the array. - * @param items New elements of the Array. - */ - push(array: ArrayLike, ...items: T[]): number; - /** - * Removes the last element from an array and returns it. - */ - pop(array: ArrayLike): T; - /** - * Combines two or more arrays. - * @param items Additional items to add to the end of array1. - */ - concat(array: ArrayLike, ...items: (T[]| T)[]): T[]; - /** - * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma. - */ - join(array: ArrayLike, separator?: string): string; - /** - * Reverses the elements in an Array. - */ - reverse(array: ArrayLike): T[]; - /** - * Removes the first element from an array and returns it. - */ - shift(array: ArrayLike): T; - /** - * Returns a section of an array. - * @param start The beginning of the specified portion of the array. - * @param end The end of the specified portion of the array. - */ - slice(array: ArrayLike, start?: number, end?: number): T[]; - - /** - * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If omitted, the elements are sorted in ascending, ASCII character order. - */ - sort(array: ArrayLike, compareFn?: (a: T, b: T) => number): T[]; - - /** - * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. - * @param start The zero-based location in the array from which to start removing elements. - */ - splice(array: ArrayLike, start: number): T[]; - - /** - * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. - * @param start The zero-based location in the array from which to start removing elements. - * @param deleteCount The number of elements to remove. - * @param items Elements to insert into the array in place of the deleted elements. - */ - splice(array: ArrayLike, start: number, deleteCount: number, ...items: T[]): T[]; - - /** - * Inserts new elements at the start of an array. - * @param items Elements to insert at the start of the Array. - */ - unshift(array: ArrayLike, ...items: T[]): number; - - /** - * Returns the index of the first occurrence of a value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0. - */ - indexOf(array: ArrayLike, searchElement: T, fromIndex?: number): number; - - /** - * Returns the index of the last occurrence of a specified value in an array. - * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array. - */ - lastIndexOf(array: ArrayLike, earchElement: T, fromIndex?: number): number; - - /** - * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls the callbackfn function for each element in array1 until the callbackfn returns false, or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - every(array: ArrayLike, callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean; - - /** - * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the callbackfn function for each element in array1 until the callbackfn returns true, or until the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - some(array: ArrayLike, callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean; - - /** - * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - forEach(array: ArrayLike, callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; - - /** - * Calls a defined callback function on each element of an array, and returns an array that contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - map(array: ArrayLike, callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; - - /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. - */ - filter(array: ArrayLike, callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): T[]; - - /** - * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. - */ - reduce(array: ArrayLike, callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; - - /** - * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. - */ - reduce(array: ArrayLike, callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. - */ - reduceRight(array: ArrayLike, callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; - - /** - * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. - */ - reduceRight(array: ArrayLike, callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; - - /** - * Returns an array of key, value pairs for every entry in the array - */ - entries(array: ArrayLike): IterableIterator<[number, T]>; - - /** - * Returns an list of keys in the array - */ - keys(array: ArrayLike): IterableIterator; - - /** - * Returns an list of values in the array - */ - values(array: ArrayLike): IterableIterator; - - /** - * Returns the value of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - find(array: ArrayLike, predicate: (value: T, index: number, obj: Array) => boolean, thisArg?: any): T; - - /** - * Returns the index of the first element in the array where predicate is true, and undefined - * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of - * predicate. If it is not provided, undefined is used instead. - */ - findIndex(array: ArrayLike, predicate: (value: T) => boolean, thisArg?: any): number; - - /** - * Returns the this object after filling the section identified by start and end with value - * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as - * length+end. - */ - fill(array: ArrayLike, value: T, start?: number, end?: number): T[]; - - /** - * Returns the this object after copying a section of the array identified by start and end - * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it - * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. - */ - copyWithin(array: ArrayLike, target: number, start: number, end?: number): T[]; - - includes(array: ArrayLike, value: T, fromIndex?: number): boolean; - turn(array: ArrayLike, callbackfn: (memo: U, value: T, index: number, array: Array) => void, memo?: U): U; - turn(array: ArrayLike, callbackfn: (memo: Array, value: T, index: number, array: Array) => void, memo?: Array): Array; -} - -// ############################################################################################# -// Object - https://github.com/zloirock/core-js/#object -// Modules: core.object -// ############################################################################################# - -interface ObjectConstructor { - /** - * Non-standard. - */ - isObject(value: any): boolean; - - /** - * Non-standard. - */ - classof(value: any): string; - - /** - * Non-standard. - */ - define(target: T, mixin: any): T; - - /** - * Non-standard. - */ - make(proto: T, mixin?: any): T; -} - -// ############################################################################################# -// Console - https://github.com/zloirock/core-js/#console -// Modules: core.log -// ############################################################################################# - -interface Log extends Console { - (message?: any, ...optionalParams: any[]): void; - enable(): void; - disable(): void; -} - -/** - * Non-standard. - */ -declare var log: Log; - -// ############################################################################################# -// Dict - https://github.com/zloirock/core-js/#dict -// Modules: core.dict -// ############################################################################################# - -interface Dict { - [key: string]: T; - [key: number]: T; - //[key: symbol]: T; -} - -interface DictConstructor { - prototype: Dict; - - new (value?: Dict): Dict; - new (value?: any): Dict; - (value?: Dict): Dict; - (value?: any): Dict; - - isDict(value: any): boolean; - values(object: Dict): IterableIterator; - keys(object: Dict): IterableIterator; - entries(object: Dict): IterableIterator<[PropertyKey, T]>; - has(object: Dict, key: PropertyKey): boolean; - get(object: Dict, key: PropertyKey): T; - set(object: Dict, key: PropertyKey, value: T): Dict; - forEach(object: Dict, callbackfn: (value: T, key: PropertyKey, dict: Dict) => void, thisArg?: any): void; - map(object: Dict, callbackfn: (value: T, key: PropertyKey, dict: Dict) => U, thisArg?: any): Dict; - mapPairs(object: Dict, callbackfn: (value: T, key: PropertyKey, dict: Dict) => [PropertyKey, U], thisArg?: any): Dict; - filter(object: Dict, callbackfn: (value: T, key: PropertyKey, dict: Dict) => boolean, thisArg?: any): Dict; - some(object: Dict, callbackfn: (value: T, key: PropertyKey, dict: Dict) => boolean, thisArg?: any): boolean; - every(object: Dict, callbackfn: (value: T, key: PropertyKey, dict: Dict) => boolean, thisArg?: any): boolean; - find(object: Dict, callbackfn: (value: T, key: PropertyKey, dict: Dict) => boolean, thisArg?: any): T; - findKey(object: Dict, callbackfn: (value: T, key: PropertyKey, dict: Dict) => boolean, thisArg?: any): PropertyKey; - keyOf(object: Dict, value: T): PropertyKey; - includes(object: Dict, value: T): boolean; - reduce(object: Dict, callbackfn: (previousValue: U, value: T, key: PropertyKey, dict: Dict) => U, initialValue: U): U; - reduce(object: Dict, callbackfn: (previousValue: T, value: T, key: PropertyKey, dict: Dict) => T, initialValue?: T): T; - turn(object: Dict, callbackfn: (memo: Dict, value: T, key: PropertyKey, dict: Dict) => void, memo: Dict): Dict; - turn(object: Dict, callbackfn: (memo: Dict, value: T, key: PropertyKey, dict: Dict) => void, memo?: Dict): Dict; -} - -/** - * Non-standard. - */ -declare var Dict: DictConstructor; - -// ############################################################################################# -// Partial application - https://github.com/zloirock/core-js/#partial-application -// Modules: core.function.part -// ############################################################################################# - -interface Function { - /** - * Non-standard. - */ - part(...args: any[]): any; -} - -// ############################################################################################# -// Date formatting - https://github.com/zloirock/core-js/#date-formatting -// Modules: core.date -// ############################################################################################# - -interface Date { - /** - * Non-standard. - */ - format(template: string, locale?: string): string; - - /** - * Non-standard. - */ - formatUTC(template: string, locale?: string): string; -} - -// ############################################################################################# -// Array - https://github.com/zloirock/core-js/#array -// Modules: core.array.turn -// ############################################################################################# - -interface Array { - /** - * Non-standard. - */ - turn(callbackfn: (memo: U, value: T, index: number, array: Array) => void, memo?: U): U; - - /** - * Non-standard. - */ - turn(callbackfn: (memo: Array, value: T, index: number, array: Array) => void, memo?: Array): Array; -} - -// ############################################################################################# -// Number - https://github.com/zloirock/core-js/#number -// Modules: core.number.iterator -// ############################################################################################# - -interface Number { - /** - * Non-standard. - */ - [Symbol.iterator](): IterableIterator; -} - -// ############################################################################################# -// Escaping characters - https://github.com/zloirock/core-js/#escaping-characters -// Modules: core.string.escape-html -// ############################################################################################# - -interface String { - /** - * Non-standard. - */ - escapeHTML(): string; - - /** - * Non-standard. - */ - unescapeHTML(): string; -} - -// ############################################################################################# -// delay - https://github.com/zloirock/core-js/#delay -// Modules: core.delay -// ############################################################################################# - -declare function delay(msec: number): Promise; - -declare namespace core { - var version: string; - - namespace Reflect { - function apply(target: Function, thisArgument: any, argumentsList: ArrayLike): any; - function construct(target: Function, argumentsList: ArrayLike): any; - function defineProperty(target: any, propertyKey: PropertyKey, attributes: PropertyDescriptor): boolean; - function deleteProperty(target: any, propertyKey: PropertyKey): boolean; - function enumerate(target: any): IterableIterator; - function get(target: any, propertyKey: PropertyKey, receiver?: any): any; - function getOwnPropertyDescriptor(target: any, propertyKey: PropertyKey): PropertyDescriptor; - function getPrototypeOf(target: any): any; - function has(target: any, propertyKey: string): boolean; - function has(target: any, propertyKey: symbol): boolean; - function isExtensible(target: any): boolean; - function ownKeys(target: any): Array; - function preventExtensions(target: any): boolean; - function set(target: any, propertyKey: PropertyKey, value: any, receiver?: any): boolean; - function setPrototypeOf(target: any, proto: any): boolean; - } - - var Object: { - getPrototypeOf(o: any): any; - getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; - getOwnPropertyNames(o: any): string[]; - create(o: any, properties?: PropertyDescriptorMap): any; - defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; - defineProperties(o: any, properties: PropertyDescriptorMap): any; - seal(o: T): T; - freeze(o: T): T; - preventExtensions(o: T): T; - isSealed(o: any): boolean; - isFrozen(o: any): boolean; - isExtensible(o: any): boolean; - keys(o: any): string[]; - assign(target: any, ...sources: any[]): any; - is(value1: any, value2: any): boolean; - setPrototypeOf(o: any, proto: any): any; - getOwnPropertySymbols(o: any): symbol[]; - getOwnPropertyDescriptor(o: any, propertyKey: PropertyKey): PropertyDescriptor; - defineProperty(o: any, propertyKey: PropertyKey, attributes: PropertyDescriptor): any; - values(object: any): any[]; - entries(object: any): any[]; - getOwnPropertyDescriptors(object: any): PropertyDescriptorMap; - isObject(value: any): boolean; - classof(value: any): string; - define(target: T, mixin: any): T; - make(proto: T, mixin?: any): T; - }; - - var Function: { - bind(target: Function, thisArg: any, ...argArray: any[]): any; - part(target: Function, ...args: any[]): any; - }; - - var Array: { - from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => U, thisArg?: any): Array; - from(iterable: Iterable, mapfn: (v: T, k: number) => U, thisArg?: any): Array; - from(arrayLike: ArrayLike): Array; - from(iterable: Iterable): Array; - of(...items: T[]): Array; - push(array: ArrayLike, ...items: T[]): number; - pop(array: ArrayLike): T; - concat(array: ArrayLike, ...items: (T[]| T)[]): T[]; - join(array: ArrayLike, separator?: string): string; - reverse(array: ArrayLike): T[]; - shift(array: ArrayLike): T; - slice(array: ArrayLike, start?: number, end?: number): T[]; - sort(array: ArrayLike, compareFn?: (a: T, b: T) => number): T[]; - splice(array: ArrayLike, start: number): T[]; - splice(array: ArrayLike, start: number, deleteCount: number, ...items: T[]): T[]; - unshift(array: ArrayLike, ...items: T[]): number; - indexOf(array: ArrayLike, searchElement: T, fromIndex?: number): number; - lastIndexOf(array: ArrayLike, earchElement: T, fromIndex?: number): number; - every(array: ArrayLike, callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean; - some(array: ArrayLike, callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean; - forEach(array: ArrayLike, callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; - map(array: ArrayLike, callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; - filter(array: ArrayLike, callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): T[]; - reduce(array: ArrayLike, callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; - reduce(array: ArrayLike, callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; - reduceRight(array: ArrayLike, callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; - reduceRight(array: ArrayLike, callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; - entries(array: ArrayLike): IterableIterator<[number, T]>; - keys(array: ArrayLike): IterableIterator; - values(array: ArrayLike): IterableIterator; - find(array: ArrayLike, predicate: (value: T, index: number, obj: Array) => boolean, thisArg?: any): T; - findIndex(array: ArrayLike, predicate: (value: T) => boolean, thisArg?: any): number; - fill(array: ArrayLike, value: T, start?: number, end?: number): T[]; - copyWithin(array: ArrayLike, target: number, start: number, end?: number): T[]; - includes(array: ArrayLike, value: T, fromIndex?: number): boolean; - turn(array: ArrayLike, callbackfn: (memo: Array, value: T, index: number, array: Array) => void, memo?: Array): Array; - turn(array: ArrayLike, callbackfn: (memo: U, value: T, index: number, array: Array) => void, memo?: U): U; - }; - - var String: { - codePointAt(text: string, pos: number): number; - includes(text: string, searchString: string, position?: number): boolean; - endsWith(text: string, searchString: string, endPosition?: number): boolean; - repeat(text: string, count: number): string; - fromCodePoint(...codePoints: number[]): string; - raw(template: TemplateStringsArray, ...substitutions: any[]): string; - startsWith(text: string, searchString: string, position?: number): boolean; - at(text: string, index: number): string; - lpad(text: string, length: number, fillStr?: string): string; - rpad(text: string, length: number, fillStr?: string): string; - escapeHTML(text: string): string; - unescapeHTML(text: string): string; - }; - - var Date: { - now(): number; - toISOString(date: Date): string; - format(date: Date, template: string, locale?: string): string; - formatUTC(date: Date, template: string, locale?: string): string; - }; - - var Number: { - EPSILON: number; - isFinite(number: number): boolean; - isInteger(number: number): boolean; - isNaN(number: number): boolean; - isSafeInteger(number: number): boolean; - MAX_SAFE_INTEGER: number; - MIN_SAFE_INTEGER: number; - parseFloat(string: string): number; - parseInt(string: string, radix?: number): number; - clz32(x: number): number; - imul(x: number, y: number): number; - sign(x: number): number; - log10(x: number): number; - log2(x: number): number; - log1p(x: number): number; - expm1(x: number): number; - cosh(x: number): number; - sinh(x: number): number; - tanh(x: number): number; - acosh(x: number): number; - asinh(x: number): number; - atanh(x: number): number; - hypot(...values: number[]): number; - trunc(x: number): number; - fround(x: number): number; - cbrt(x: number): number; - random(lim?: number): number; - }; - - var Math: { - clz32(x: number): number; - imul(x: number, y: number): number; - sign(x: number): number; - log10(x: number): number; - log2(x: number): number; - log1p(x: number): number; - expm1(x: number): number; - cosh(x: number): number; - sinh(x: number): number; - tanh(x: number): number; - acosh(x: number): number; - asinh(x: number): number; - atanh(x: number): number; - hypot(...values: number[]): number; - trunc(x: number): number; - fround(x: number): number; - cbrt(x: number): number; - }; - - var RegExp: { - escape(str: string): string; - }; - - var Map: MapConstructor; - var Set: SetConstructor; - var WeakMap: WeakMapConstructor; - var WeakSet: WeakSetConstructor; - var Promise: PromiseConstructor; - var Symbol: SymbolConstructor; - var Dict: DictConstructor; - var global: any; - var log: Log; - var _: boolean; - - function setTimeout(handler: any, timeout?: any, ...args: any[]): number; - - function setInterval(handler: any, timeout?: any, ...args: any[]): number; - - function setImmediate(expression: any, ...args: any[]): number; - - function clearImmediate(handle: number): void; - - function $for(iterable: Iterable): $for; - - function isIterable(value: any): boolean; - - function getIterator(iterable: Iterable): Iterator; - - interface Locale { - weekdays: string; - months: string; - } - - function addLocale(lang: string, locale: Locale): typeof core; - - function locale(lang?: string): string; - - function delay(msec: number): Promise; -} - -declare module "core-js" { - export = core; -} -declare module "core-js/shim" { - export = core; -} -declare module "core-js/core" { - export = core; -} -declare module "core-js/core/$for" { - import $for = core.$for; - export = $for; -} -declare module "core-js/core/_" { - var _: typeof core._; - export = _; -} -declare module "core-js/core/array" { - var Array: typeof core.Array; - export = Array; -} -declare module "core-js/core/date" { - var Date: typeof core.Date; - export = Date; -} -declare module "core-js/core/delay" { - var delay: typeof core.delay; - export = delay; -} -declare module "core-js/core/dict" { - var Dict: typeof core.Dict; - export = Dict; -} -declare module "core-js/core/function" { - var Function: typeof core.Function; - export = Function; -} -declare module "core-js/core/global" { - var global: typeof core.global; - export = global; -} -declare module "core-js/core/log" { - var log: typeof core.log; - export = log; -} -declare module "core-js/core/number" { - var Number: typeof core.Number; - export = Number; -} -declare module "core-js/core/object" { - var Object: typeof core.Object; - export = Object; -} -declare module "core-js/core/string" { - var String: typeof core.String; - export = String; -} -declare module "core-js/fn/$for" { - import $for = core.$for; - export = $for; -} -declare module "core-js/fn/_" { - var _: typeof core._; - export = _; -} -declare module "core-js/fn/clear-immediate" { - var clearImmediate: typeof core.clearImmediate; - export = clearImmediate; -} -declare module "core-js/fn/delay" { - var delay: typeof core.delay; - export = delay; -} -declare module "core-js/fn/dict" { - var Dict: typeof core.Dict; - export = Dict; -} -declare module "core-js/fn/get-iterator" { - var getIterator: typeof core.getIterator; - export = getIterator; -} -declare module "core-js/fn/global" { - var global: typeof core.global; - export = global; -} -declare module "core-js/fn/is-iterable" { - var isIterable: typeof core.isIterable; - export = isIterable; -} -declare module "core-js/fn/log" { - var log: typeof core.log; - export = log; -} -declare module "core-js/fn/map" { - var Map: typeof core.Map; - export = Map; -} -declare module "core-js/fn/promise" { - var Promise: typeof core.Promise; - export = Promise; -} -declare module "core-js/fn/set" { - var Set: typeof core.Set; - export = Set; -} -declare module "core-js/fn/set-immediate" { - var setImmediate: typeof core.setImmediate; - export = setImmediate; -} -declare module "core-js/fn/set-interval" { - var setInterval: typeof core.setInterval; - export = setInterval; -} -declare module "core-js/fn/set-timeout" { - var setTimeout: typeof core.setTimeout; - export = setTimeout; -} -declare module "core-js/fn/weak-map" { - var WeakMap: typeof core.WeakMap; - export = WeakMap; -} -declare module "core-js/fn/weak-set" { - var WeakSet: typeof core.WeakSet; - export = WeakSet; -} -declare module "core-js/fn/array" { - var Array: typeof core.Array; - export = Array; -} -declare module "core-js/fn/array/concat" { - var concat: typeof core.Array.concat; - export = concat; -} -declare module "core-js/fn/array/copy-within" { - var copyWithin: typeof core.Array.copyWithin; - export = copyWithin; -} -declare module "core-js/fn/array/entries" { - var entries: typeof core.Array.entries; - export = entries; -} -declare module "core-js/fn/array/every" { - var every: typeof core.Array.every; - export = every; -} -declare module "core-js/fn/array/fill" { - var fill: typeof core.Array.fill; - export = fill; -} -declare module "core-js/fn/array/filter" { - var filter: typeof core.Array.filter; - export = filter; -} -declare module "core-js/fn/array/find" { - var find: typeof core.Array.find; - export = find; -} -declare module "core-js/fn/array/find-index" { - var findIndex: typeof core.Array.findIndex; - export = findIndex; -} -declare module "core-js/fn/array/for-each" { - var forEach: typeof core.Array.forEach; - export = forEach; -} -declare module "core-js/fn/array/from" { - var from: typeof core.Array.from; - export = from; -} -declare module "core-js/fn/array/includes" { - var includes: typeof core.Array.includes; - export = includes; -} -declare module "core-js/fn/array/index-of" { - var indexOf: typeof core.Array.indexOf; - export = indexOf; -} -declare module "core-js/fn/array/join" { - var join: typeof core.Array.join; - export = join; -} -declare module "core-js/fn/array/keys" { - var keys: typeof core.Array.keys; - export = keys; -} -declare module "core-js/fn/array/last-index-of" { - var lastIndexOf: typeof core.Array.lastIndexOf; - export = lastIndexOf; -} -declare module "core-js/fn/array/map" { - var map: typeof core.Array.map; - export = map; -} -declare module "core-js/fn/array/of" { - var of: typeof core.Array.of; - export = of; -} -declare module "core-js/fn/array/pop" { - var pop: typeof core.Array.pop; - export = pop; -} -declare module "core-js/fn/array/push" { - var push: typeof core.Array.push; - export = push; -} -declare module "core-js/fn/array/reduce" { - var reduce: typeof core.Array.reduce; - export = reduce; -} -declare module "core-js/fn/array/reduce-right" { - var reduceRight: typeof core.Array.reduceRight; - export = reduceRight; -} -declare module "core-js/fn/array/reverse" { - var reverse: typeof core.Array.reverse; - export = reverse; -} -declare module "core-js/fn/array/shift" { - var shift: typeof core.Array.shift; - export = shift; -} -declare module "core-js/fn/array/slice" { - var slice: typeof core.Array.slice; - export = slice; -} -declare module "core-js/fn/array/some" { - var some: typeof core.Array.some; - export = some; -} -declare module "core-js/fn/array/sort" { - var sort: typeof core.Array.sort; - export = sort; -} -declare module "core-js/fn/array/splice" { - var splice: typeof core.Array.splice; - export = splice; -} -declare module "core-js/fn/array/turn" { - var turn: typeof core.Array.turn; - export = turn; -} -declare module "core-js/fn/array/unshift" { - var unshift: typeof core.Array.unshift; - export = unshift; -} -declare module "core-js/fn/array/values" { - var values: typeof core.Array.values; - export = values; -} -declare module "core-js/fn/date" { - var Date: typeof core.Date; - export = Date; -} -declare module "core-js/fn/date/add-locale" { - var addLocale: typeof core.addLocale; - export = addLocale; -} -declare module "core-js/fn/date/format" { - var format: typeof core.Date.format; - export = format; -} -declare module "core-js/fn/date/formatUTC" { - var formatUTC: typeof core.Date.formatUTC; - export = formatUTC; -} -declare module "core-js/fn/function" { - var Function: typeof core.Function; - export = Function; -} -declare module "core-js/fn/function/has-instance" { - var hasInstance: (value: any) => boolean; - export = hasInstance; -} -declare module "core-js/fn/function/name" -{ -} -declare module "core-js/fn/function/part" { - var part: typeof core.Function.part; - export = part; -} -declare module "core-js/fn/math" { - var Math: typeof core.Math; - export = Math; -} -declare module "core-js/fn/math/acosh" { - var acosh: typeof core.Math.acosh; - export = acosh; -} -declare module "core-js/fn/math/asinh" { - var asinh: typeof core.Math.asinh; - export = asinh; -} -declare module "core-js/fn/math/atanh" { - var atanh: typeof core.Math.atanh; - export = atanh; -} -declare module "core-js/fn/math/cbrt" { - var cbrt: typeof core.Math.cbrt; - export = cbrt; -} -declare module "core-js/fn/math/clz32" { - var clz32: typeof core.Math.clz32; - export = clz32; -} -declare module "core-js/fn/math/cosh" { - var cosh: typeof core.Math.cosh; - export = cosh; -} -declare module "core-js/fn/math/expm1" { - var expm1: typeof core.Math.expm1; - export = expm1; -} -declare module "core-js/fn/math/fround" { - var fround: typeof core.Math.fround; - export = fround; -} -declare module "core-js/fn/math/hypot" { - var hypot: typeof core.Math.hypot; - export = hypot; -} -declare module "core-js/fn/math/imul" { - var imul: typeof core.Math.imul; - export = imul; -} -declare module "core-js/fn/math/log10" { - var log10: typeof core.Math.log10; - export = log10; -} -declare module "core-js/fn/math/log1p" { - var log1p: typeof core.Math.log1p; - export = log1p; -} -declare module "core-js/fn/math/log2" { - var log2: typeof core.Math.log2; - export = log2; -} -declare module "core-js/fn/math/sign" { - var sign: typeof core.Math.sign; - export = sign; -} -declare module "core-js/fn/math/sinh" { - var sinh: typeof core.Math.sinh; - export = sinh; -} -declare module "core-js/fn/math/tanh" { - var tanh: typeof core.Math.tanh; - export = tanh; -} -declare module "core-js/fn/math/trunc" { - var trunc: typeof core.Math.trunc; - export = trunc; -} -declare module "core-js/fn/number" { - var Number: typeof core.Number; - export = Number; -} -declare module "core-js/fn/number/epsilon" { - var EPSILON: typeof core.Number.EPSILON; - export = EPSILON; -} -declare module "core-js/fn/number/is-finite" { - var isFinite: typeof core.Number.isFinite; - export = isFinite; -} -declare module "core-js/fn/number/is-integer" { - var isInteger: typeof core.Number.isInteger; - export = isInteger; -} -declare module "core-js/fn/number/is-nan" { - var isNaN: typeof core.Number.isNaN; - export = isNaN; -} -declare module "core-js/fn/number/is-safe-integer" { - var isSafeInteger: typeof core.Number.isSafeInteger; - export = isSafeInteger; -} -declare module "core-js/fn/number/max-safe-integer" { - var MAX_SAFE_INTEGER: typeof core.Number.MAX_SAFE_INTEGER; - export = MAX_SAFE_INTEGER; -} -declare module "core-js/fn/number/min-safe-interger" { - var MIN_SAFE_INTEGER: typeof core.Number.MIN_SAFE_INTEGER; - export = MIN_SAFE_INTEGER; -} -declare module "core-js/fn/number/parse-float" { - var parseFloat: typeof core.Number.parseFloat; - export = parseFloat; -} -declare module "core-js/fn/number/parse-int" { - var parseInt: typeof core.Number.parseInt; - export = parseInt; -} -declare module "core-js/fn/number/random" { - var random: typeof core.Number.random; - export = random; -} -declare module "core-js/fn/object" { - var Object: typeof core.Object; - export = Object; -} -declare module "core-js/fn/object/assign" { - var assign: typeof core.Object.assign; - export = assign; -} -declare module "core-js/fn/object/classof" { - var classof: typeof core.Object.classof; - export = classof; -} -declare module "core-js/fn/object/create" { - var create: typeof core.Object.create; - export = create; -} -declare module "core-js/fn/object/define" { - var define: typeof core.Object.define; - export = define; -} -declare module "core-js/fn/object/define-properties" { - var defineProperties: typeof core.Object.defineProperties; - export = defineProperties; -} -declare module "core-js/fn/object/define-property" { - var defineProperty: typeof core.Object.defineProperty; - export = defineProperty; -} -declare module "core-js/fn/object/entries" { - var entries: typeof core.Object.entries; - export = entries; -} -declare module "core-js/fn/object/freeze" { - var freeze: typeof core.Object.freeze; - export = freeze; -} -declare module "core-js/fn/object/get-own-property-descriptor" { - var getOwnPropertyDescriptor: typeof core.Object.getOwnPropertyDescriptor; - export = getOwnPropertyDescriptor; -} -declare module "core-js/fn/object/get-own-property-descriptors" { - var getOwnPropertyDescriptors: typeof core.Object.getOwnPropertyDescriptors; - export = getOwnPropertyDescriptors; -} -declare module "core-js/fn/object/get-own-property-names" { - var getOwnPropertyNames: typeof core.Object.getOwnPropertyNames; - export = getOwnPropertyNames; -} -declare module "core-js/fn/object/get-own-property-symbols" { - var getOwnPropertySymbols: typeof core.Object.getOwnPropertySymbols; - export = getOwnPropertySymbols; -} -declare module "core-js/fn/object/get-prototype-of" { - var getPrototypeOf: typeof core.Object.getPrototypeOf; - export = getPrototypeOf; -} -declare module "core-js/fn/object/is" { - var is: typeof core.Object.is; - export = is; -} -declare module "core-js/fn/object/is-extensible" { - var isExtensible: typeof core.Object.isExtensible; - export = isExtensible; -} -declare module "core-js/fn/object/is-frozen" { - var isFrozen: typeof core.Object.isFrozen; - export = isFrozen; -} -declare module "core-js/fn/object/is-object" { - var isObject: typeof core.Object.isObject; - export = isObject; -} -declare module "core-js/fn/object/is-sealed" { - var isSealed: typeof core.Object.isSealed; - export = isSealed; -} -declare module "core-js/fn/object/keys" { - var keys: typeof core.Object.keys; - export = keys; -} -declare module "core-js/fn/object/make" { - var make: typeof core.Object.make; - export = make; -} -declare module "core-js/fn/object/prevent-extensions" { - var preventExtensions: typeof core.Object.preventExtensions; - export = preventExtensions; -} -declare module "core-js/fn/object/seal" { - var seal: typeof core.Object.seal; - export = seal; -} -declare module "core-js/fn/object/set-prototype-of" { - var setPrototypeOf: typeof core.Object.setPrototypeOf; - export = setPrototypeOf; -} -declare module "core-js/fn/object/values" { - var values: typeof core.Object.values; - export = values; -} -declare module "core-js/fn/reflect" { - var Reflect: typeof core.Reflect; - export = Reflect; -} -declare module "core-js/fn/reflect/apply" { - var apply: typeof core.Reflect.apply; - export = apply; -} -declare module "core-js/fn/reflect/construct" { - var construct: typeof core.Reflect.construct; - export = construct; -} -declare module "core-js/fn/reflect/define-property" { - var defineProperty: typeof core.Reflect.defineProperty; - export = defineProperty; -} -declare module "core-js/fn/reflect/delete-property" { - var deleteProperty: typeof core.Reflect.deleteProperty; - export = deleteProperty; -} -declare module "core-js/fn/reflect/enumerate" { - var enumerate: typeof core.Reflect.enumerate; - export = enumerate; -} -declare module "core-js/fn/reflect/get" { - var get: typeof core.Reflect.get; - export = get; -} -declare module "core-js/fn/reflect/get-own-property-descriptor" { - var getOwnPropertyDescriptor: typeof core.Reflect.getOwnPropertyDescriptor; - export = getOwnPropertyDescriptor; -} -declare module "core-js/fn/reflect/get-prototype-of" { - var getPrototypeOf: typeof core.Reflect.getPrototypeOf; - export = getPrototypeOf; -} -declare module "core-js/fn/reflect/has" { - var has: typeof core.Reflect.has; - export = has; -} -declare module "core-js/fn/reflect/is-extensible" { - var isExtensible: typeof core.Reflect.isExtensible; - export = isExtensible; -} -declare module "core-js/fn/reflect/own-keys" { - var ownKeys: typeof core.Reflect.ownKeys; - export = ownKeys; -} -declare module "core-js/fn/reflect/prevent-extensions" { - var preventExtensions: typeof core.Reflect.preventExtensions; - export = preventExtensions; -} -declare module "core-js/fn/reflect/set" { - var set: typeof core.Reflect.set; - export = set; -} -declare module "core-js/fn/reflect/set-prototype-of" { - var setPrototypeOf: typeof core.Reflect.setPrototypeOf; - export = setPrototypeOf; -} -declare module "core-js/fn/regexp" { - var RegExp: typeof core.RegExp; - export = RegExp; -} -declare module "core-js/fn/regexp/escape" { - var escape: typeof core.RegExp.escape; - export = escape; -} -declare module "core-js/fn/string" { - var String: typeof core.String; - export = String; -} -declare module "core-js/fn/string/at" { - var at: typeof core.String.at; - export = at; -} -declare module "core-js/fn/string/code-point-at" { - var codePointAt: typeof core.String.codePointAt; - export = codePointAt; -} -declare module "core-js/fn/string/ends-with" { - var endsWith: typeof core.String.endsWith; - export = endsWith; -} -declare module "core-js/fn/string/escape-html" { - var escapeHTML: typeof core.String.escapeHTML; - export = escapeHTML; -} -declare module "core-js/fn/string/from-code-point" { - var fromCodePoint: typeof core.String.fromCodePoint; - export = fromCodePoint; -} -declare module "core-js/fn/string/includes" { - var includes: typeof core.String.includes; - export = includes; -} -declare module "core-js/fn/string/lpad" { - var lpad: typeof core.String.lpad; - export = lpad; -} -declare module "core-js/fn/string/raw" { - var raw: typeof core.String.raw; - export = raw; -} -declare module "core-js/fn/string/repeat" { - var repeat: typeof core.String.repeat; - export = repeat; -} -declare module "core-js/fn/string/rpad" { - var rpad: typeof core.String.rpad; - export = rpad; -} -declare module "core-js/fn/string/starts-with" { - var startsWith: typeof core.String.startsWith; - export = startsWith; -} -declare module "core-js/fn/string/unescape-html" { - var unescapeHTML: typeof core.String.unescapeHTML; - export = unescapeHTML; -} -declare module "core-js/fn/symbol" { - var Symbol: typeof core.Symbol; - export = Symbol; -} -declare module "core-js/fn/symbol/for" { - var _for: typeof core.Symbol.for; - export = _for; -} -declare module "core-js/fn/symbol/has-instance" { - var hasInstance: typeof core.Symbol.hasInstance; - export = hasInstance; -} -declare module "core-js/fn/symbol/is-concat-spreadable" { - var isConcatSpreadable: typeof core.Symbol.isConcatSpreadable; - export = isConcatSpreadable; -} -declare module "core-js/fn/symbol/iterator" { - var iterator: typeof core.Symbol.iterator; - export = iterator; -} -declare module "core-js/fn/symbol/key-for" { - var keyFor: typeof core.Symbol.keyFor; - export = keyFor; -} -declare module "core-js/fn/symbol/match" { - var match: typeof core.Symbol.match; - export = match; -} -declare module "core-js/fn/symbol/replace" { - var replace: typeof core.Symbol.replace; - export = replace; -} -declare module "core-js/fn/symbol/search" { - var search: typeof core.Symbol.search; - export = search; -} -declare module "core-js/fn/symbol/species" { - var species: typeof core.Symbol.species; - export = species; -} -declare module "core-js/fn/symbol/split" { - var split: typeof core.Symbol.split; - export = split; -} -declare module "core-js/fn/symbol/to-primitive" { - var toPrimitive: typeof core.Symbol.toPrimitive; - export = toPrimitive; -} -declare module "core-js/fn/symbol/to-string-tag" { - var toStringTag: typeof core.Symbol.toStringTag; - export = toStringTag; -} -declare module "core-js/fn/symbol/unscopables" { - var unscopables: typeof core.Symbol.unscopables; - export = unscopables; -} -declare module "core-js/es5" { - export = core; -} -declare module "core-js/es6" { - export = core; -} -declare module "core-js/es6/array" { - var Array: typeof core.Array; - export = Array; -} -declare module "core-js/es6/function" { - var Function: typeof core.Function; - export = Function; -} -declare module "core-js/es6/map" { - var Map: typeof core.Map; - export = Map; -} -declare module "core-js/es6/math" { - var Math: typeof core.Math; - export = Math; -} -declare module "core-js/es6/number" { - var Number: typeof core.Number; - export = Number; -} -declare module "core-js/es6/object" { - var Object: typeof core.Object; - export = Object; -} -declare module "core-js/es6/promise" { - var Promise: typeof core.Promise; - export = Promise; -} -declare module "core-js/es6/reflect" { - var Reflect: typeof core.Reflect; - export = Reflect; -} -declare module "core-js/es6/regexp" { - var RegExp: typeof core.RegExp; - export = RegExp; -} -declare module "core-js/es6/set" { - var Set: typeof core.Set; - export = Set; -} -declare module "core-js/es6/string" { - var String: typeof core.String; - export = String; -} -declare module "core-js/es6/symbol" { - var Symbol: typeof core.Symbol; - export = Symbol; -} -declare module "core-js/es6/weak-map" { - var WeakMap: typeof core.WeakMap; - export = WeakMap; -} -declare module "core-js/es6/weak-set" { - var WeakSet: typeof core.WeakSet; - export = WeakSet; -} -declare module "core-js/es7" { - export = core; -} -declare module "core-js/es7/array" { - var Array: typeof core.Array; - export = Array; -} -declare module "core-js/es7/map" { - var Map: typeof core.Map; - export = Map; -} -declare module "core-js/es7/object" { - var Object: typeof core.Object; - export = Object; -} -declare module "core-js/es7/regexp" { - var RegExp: typeof core.RegExp; - export = RegExp; -} -declare module "core-js/es7/set" { - var Set: typeof core.Set; - export = Set; -} -declare module "core-js/es7/string" { - var String: typeof core.String; - export = String; -} -declare module "core-js/js" { - export = core; -} -declare module "core-js/js/array" { - var Array: typeof core.Array; - export = Array; -} -declare module "core-js/web" { - export = core; -} -declare module "core-js/web/dom" { - export = core; -} -declare module "core-js/web/immediate" { - export = core; -} -declare module "core-js/web/timers" { - export = core; -} -declare module "core-js/library" { - export = core; -} -declare module "core-js/library/shim" { - export = core; -} -declare module "core-js/library/core" { - export = core; -} -declare module "core-js/library/core/$for" { - import $for = core.$for; - export = $for; -} -declare module "core-js/library/core/_" { - var _: typeof core._; - export = _; -} -declare module "core-js/library/core/array" { - var Array: typeof core.Array; - export = Array; -} -declare module "core-js/library/core/date" { - var Date: typeof core.Date; - export = Date; -} -declare module "core-js/library/core/delay" { - var delay: typeof core.delay; - export = delay; -} -declare module "core-js/library/core/dict" { - var Dict: typeof core.Dict; - export = Dict; -} -declare module "core-js/library/core/function" { - var Function: typeof core.Function; - export = Function; -} -declare module "core-js/library/core/global" { - var global: typeof core.global; - export = global; -} -declare module "core-js/library/core/log" { - var log: typeof core.log; - export = log; -} -declare module "core-js/library/core/number" { - var Number: typeof core.Number; - export = Number; -} -declare module "core-js/library/core/object" { - var Object: typeof core.Object; - export = Object; -} -declare module "core-js/library/core/string" { - var String: typeof core.String; - export = String; -} -declare module "core-js/library/fn/$for" { - import $for = core.$for; - export = $for; -} -declare module "core-js/library/fn/_" { - var _: typeof core._; - export = _; -} -declare module "core-js/library/fn/clear-immediate" { - var clearImmediate: typeof core.clearImmediate; - export = clearImmediate; -} -declare module "core-js/library/fn/delay" { - var delay: typeof core.delay; - export = delay; -} -declare module "core-js/library/fn/dict" { - var Dict: typeof core.Dict; - export = Dict; -} -declare module "core-js/library/fn/get-iterator" { - var getIterator: typeof core.getIterator; - export = getIterator; -} -declare module "core-js/library/fn/global" { - var global: typeof core.global; - export = global; -} -declare module "core-js/library/fn/is-iterable" { - var isIterable: typeof core.isIterable; - export = isIterable; -} -declare module "core-js/library/fn/log" { - var log: typeof core.log; - export = log; -} -declare module "core-js/library/fn/map" { - var Map: typeof core.Map; - export = Map; -} -declare module "core-js/library/fn/promise" { - var Promise: typeof core.Promise; - export = Promise; -} -declare module "core-js/library/fn/set" { - var Set: typeof core.Set; - export = Set; -} -declare module "core-js/library/fn/set-immediate" { - var setImmediate: typeof core.setImmediate; - export = setImmediate; -} -declare module "core-js/library/fn/set-interval" { - var setInterval: typeof core.setInterval; - export = setInterval; -} -declare module "core-js/library/fn/set-timeout" { - var setTimeout: typeof core.setTimeout; - export = setTimeout; -} -declare module "core-js/library/fn/weak-map" { - var WeakMap: typeof core.WeakMap; - export = WeakMap; -} -declare module "core-js/library/fn/weak-set" { - var WeakSet: typeof core.WeakSet; - export = WeakSet; -} -declare module "core-js/library/fn/array" { - var Array: typeof core.Array; - export = Array; -} -declare module "core-js/library/fn/array/concat" { - var concat: typeof core.Array.concat; - export = concat; -} -declare module "core-js/library/fn/array/copy-within" { - var copyWithin: typeof core.Array.copyWithin; - export = copyWithin; -} -declare module "core-js/library/fn/array/entries" { - var entries: typeof core.Array.entries; - export = entries; -} -declare module "core-js/library/fn/array/every" { - var every: typeof core.Array.every; - export = every; -} -declare module "core-js/library/fn/array/fill" { - var fill: typeof core.Array.fill; - export = fill; -} -declare module "core-js/library/fn/array/filter" { - var filter: typeof core.Array.filter; - export = filter; -} -declare module "core-js/library/fn/array/find" { - var find: typeof core.Array.find; - export = find; -} -declare module "core-js/library/fn/array/find-index" { - var findIndex: typeof core.Array.findIndex; - export = findIndex; -} -declare module "core-js/library/fn/array/for-each" { - var forEach: typeof core.Array.forEach; - export = forEach; -} -declare module "core-js/library/fn/array/from" { - var from: typeof core.Array.from; - export = from; -} -declare module "core-js/library/fn/array/includes" { - var includes: typeof core.Array.includes; - export = includes; -} -declare module "core-js/library/fn/array/index-of" { - var indexOf: typeof core.Array.indexOf; - export = indexOf; -} -declare module "core-js/library/fn/array/join" { - var join: typeof core.Array.join; - export = join; -} -declare module "core-js/library/fn/array/keys" { - var keys: typeof core.Array.keys; - export = keys; -} -declare module "core-js/library/fn/array/last-index-of" { - var lastIndexOf: typeof core.Array.lastIndexOf; - export = lastIndexOf; -} -declare module "core-js/library/fn/array/map" { - var map: typeof core.Array.map; - export = map; -} -declare module "core-js/library/fn/array/of" { - var of: typeof core.Array.of; - export = of; -} -declare module "core-js/library/fn/array/pop" { - var pop: typeof core.Array.pop; - export = pop; -} -declare module "core-js/library/fn/array/push" { - var push: typeof core.Array.push; - export = push; -} -declare module "core-js/library/fn/array/reduce" { - var reduce: typeof core.Array.reduce; - export = reduce; -} -declare module "core-js/library/fn/array/reduce-right" { - var reduceRight: typeof core.Array.reduceRight; - export = reduceRight; -} -declare module "core-js/library/fn/array/reverse" { - var reverse: typeof core.Array.reverse; - export = reverse; -} -declare module "core-js/library/fn/array/shift" { - var shift: typeof core.Array.shift; - export = shift; -} -declare module "core-js/library/fn/array/slice" { - var slice: typeof core.Array.slice; - export = slice; -} -declare module "core-js/library/fn/array/some" { - var some: typeof core.Array.some; - export = some; -} -declare module "core-js/library/fn/array/sort" { - var sort: typeof core.Array.sort; - export = sort; -} -declare module "core-js/library/fn/array/splice" { - var splice: typeof core.Array.splice; - export = splice; -} -declare module "core-js/library/fn/array/turn" { - var turn: typeof core.Array.turn; - export = turn; -} -declare module "core-js/library/fn/array/unshift" { - var unshift: typeof core.Array.unshift; - export = unshift; -} -declare module "core-js/library/fn/array/values" { - var values: typeof core.Array.values; - export = values; -} -declare module "core-js/library/fn/date" { - var Date: typeof core.Date; - export = Date; -} -declare module "core-js/library/fn/date/add-locale" { - var addLocale: typeof core.addLocale; - export = addLocale; -} -declare module "core-js/library/fn/date/format" { - var format: typeof core.Date.format; - export = format; -} -declare module "core-js/library/fn/date/formatUTC" { - var formatUTC: typeof core.Date.formatUTC; - export = formatUTC; -} -declare module "core-js/library/fn/function" { - var Function: typeof core.Function; - export = Function; -} -declare module "core-js/library/fn/function/has-instance" { - var hasInstance: (value: any) => boolean; - export = hasInstance; -} -declare module "core-js/library/fn/function/name" { -} -declare module "core-js/library/fn/function/part" { - var part: typeof core.Function.part; - export = part; -} -declare module "core-js/library/fn/math" { - var Math: typeof core.Math; - export = Math; -} -declare module "core-js/library/fn/math/acosh" { - var acosh: typeof core.Math.acosh; - export = acosh; -} -declare module "core-js/library/fn/math/asinh" { - var asinh: typeof core.Math.asinh; - export = asinh; -} -declare module "core-js/library/fn/math/atanh" { - var atanh: typeof core.Math.atanh; - export = atanh; -} -declare module "core-js/library/fn/math/cbrt" { - var cbrt: typeof core.Math.cbrt; - export = cbrt; -} -declare module "core-js/library/fn/math/clz32" { - var clz32: typeof core.Math.clz32; - export = clz32; -} -declare module "core-js/library/fn/math/cosh" { - var cosh: typeof core.Math.cosh; - export = cosh; -} -declare module "core-js/library/fn/math/expm1" { - var expm1: typeof core.Math.expm1; - export = expm1; -} -declare module "core-js/library/fn/math/fround" { - var fround: typeof core.Math.fround; - export = fround; -} -declare module "core-js/library/fn/math/hypot" { - var hypot: typeof core.Math.hypot; - export = hypot; -} -declare module "core-js/library/fn/math/imul" { - var imul: typeof core.Math.imul; - export = imul; -} -declare module "core-js/library/fn/math/log10" { - var log10: typeof core.Math.log10; - export = log10; -} -declare module "core-js/library/fn/math/log1p" { - var log1p: typeof core.Math.log1p; - export = log1p; -} -declare module "core-js/library/fn/math/log2" { - var log2: typeof core.Math.log2; - export = log2; -} -declare module "core-js/library/fn/math/sign" { - var sign: typeof core.Math.sign; - export = sign; -} -declare module "core-js/library/fn/math/sinh" { - var sinh: typeof core.Math.sinh; - export = sinh; -} -declare module "core-js/library/fn/math/tanh" { - var tanh: typeof core.Math.tanh; - export = tanh; -} -declare module "core-js/library/fn/math/trunc" { - var trunc: typeof core.Math.trunc; - export = trunc; -} -declare module "core-js/library/fn/number" { - var Number: typeof core.Number; - export = Number; -} -declare module "core-js/library/fn/number/epsilon" { - var EPSILON: typeof core.Number.EPSILON; - export = EPSILON; -} -declare module "core-js/library/fn/number/is-finite" { - var isFinite: typeof core.Number.isFinite; - export = isFinite; -} -declare module "core-js/library/fn/number/is-integer" { - var isInteger: typeof core.Number.isInteger; - export = isInteger; -} -declare module "core-js/library/fn/number/is-nan" { - var isNaN: typeof core.Number.isNaN; - export = isNaN; -} -declare module "core-js/library/fn/number/is-safe-integer" { - var isSafeInteger: typeof core.Number.isSafeInteger; - export = isSafeInteger; -} -declare module "core-js/library/fn/number/max-safe-integer" { - var MAX_SAFE_INTEGER: typeof core.Number.MAX_SAFE_INTEGER; - export = MAX_SAFE_INTEGER; -} -declare module "core-js/library/fn/number/min-safe-interger" { - var MIN_SAFE_INTEGER: typeof core.Number.MIN_SAFE_INTEGER; - export = MIN_SAFE_INTEGER; -} -declare module "core-js/library/fn/number/parse-float" { - var parseFloat: typeof core.Number.parseFloat; - export = parseFloat; -} -declare module "core-js/library/fn/number/parse-int" { - var parseInt: typeof core.Number.parseInt; - export = parseInt; -} -declare module "core-js/library/fn/number/random" { - var random: typeof core.Number.random; - export = random; -} -declare module "core-js/library/fn/object" { - var Object: typeof core.Object; - export = Object; -} -declare module "core-js/library/fn/object/assign" { - var assign: typeof core.Object.assign; - export = assign; -} -declare module "core-js/library/fn/object/classof" { - var classof: typeof core.Object.classof; - export = classof; -} -declare module "core-js/library/fn/object/create" { - var create: typeof core.Object.create; - export = create; -} -declare module "core-js/library/fn/object/define" { - var define: typeof core.Object.define; - export = define; -} -declare module "core-js/library/fn/object/define-properties" { - var defineProperties: typeof core.Object.defineProperties; - export = defineProperties; -} -declare module "core-js/library/fn/object/define-property" { - var defineProperty: typeof core.Object.defineProperty; - export = defineProperty; -} -declare module "core-js/library/fn/object/entries" { - var entries: typeof core.Object.entries; - export = entries; -} -declare module "core-js/library/fn/object/freeze" { - var freeze: typeof core.Object.freeze; - export = freeze; -} -declare module "core-js/library/fn/object/get-own-property-descriptor" { - var getOwnPropertyDescriptor: typeof core.Object.getOwnPropertyDescriptor; - export = getOwnPropertyDescriptor; -} -declare module "core-js/library/fn/object/get-own-property-descriptors" { - var getOwnPropertyDescriptors: typeof core.Object.getOwnPropertyDescriptors; - export = getOwnPropertyDescriptors; -} -declare module "core-js/library/fn/object/get-own-property-names" { - var getOwnPropertyNames: typeof core.Object.getOwnPropertyNames; - export = getOwnPropertyNames; -} -declare module "core-js/library/fn/object/get-own-property-symbols" { - var getOwnPropertySymbols: typeof core.Object.getOwnPropertySymbols; - export = getOwnPropertySymbols; -} -declare module "core-js/library/fn/object/get-prototype-of" { - var getPrototypeOf: typeof core.Object.getPrototypeOf; - export = getPrototypeOf; -} -declare module "core-js/library/fn/object/is" { - var is: typeof core.Object.is; - export = is; -} -declare module "core-js/library/fn/object/is-extensible" { - var isExtensible: typeof core.Object.isExtensible; - export = isExtensible; -} -declare module "core-js/library/fn/object/is-frozen" { - var isFrozen: typeof core.Object.isFrozen; - export = isFrozen; -} -declare module "core-js/library/fn/object/is-object" { - var isObject: typeof core.Object.isObject; - export = isObject; -} -declare module "core-js/library/fn/object/is-sealed" { - var isSealed: typeof core.Object.isSealed; - export = isSealed; -} -declare module "core-js/library/fn/object/keys" { - var keys: typeof core.Object.keys; - export = keys; -} -declare module "core-js/library/fn/object/make" { - var make: typeof core.Object.make; - export = make; -} -declare module "core-js/library/fn/object/prevent-extensions" { - var preventExtensions: typeof core.Object.preventExtensions; - export = preventExtensions; -} -declare module "core-js/library/fn/object/seal" { - var seal: typeof core.Object.seal; - export = seal; -} -declare module "core-js/library/fn/object/set-prototype-of" { - var setPrototypeOf: typeof core.Object.setPrototypeOf; - export = setPrototypeOf; -} -declare module "core-js/library/fn/object/values" { - var values: typeof core.Object.values; - export = values; -} -declare module "core-js/library/fn/reflect" { - var Reflect: typeof core.Reflect; - export = Reflect; -} -declare module "core-js/library/fn/reflect/apply" { - var apply: typeof core.Reflect.apply; - export = apply; -} -declare module "core-js/library/fn/reflect/construct" { - var construct: typeof core.Reflect.construct; - export = construct; -} -declare module "core-js/library/fn/reflect/define-property" { - var defineProperty: typeof core.Reflect.defineProperty; - export = defineProperty; -} -declare module "core-js/library/fn/reflect/delete-property" { - var deleteProperty: typeof core.Reflect.deleteProperty; - export = deleteProperty; -} -declare module "core-js/library/fn/reflect/enumerate" { - var enumerate: typeof core.Reflect.enumerate; - export = enumerate; -} -declare module "core-js/library/fn/reflect/get" { - var get: typeof core.Reflect.get; - export = get; -} -declare module "core-js/library/fn/reflect/get-own-property-descriptor" { - var getOwnPropertyDescriptor: typeof core.Reflect.getOwnPropertyDescriptor; - export = getOwnPropertyDescriptor; -} -declare module "core-js/library/fn/reflect/get-prototype-of" { - var getPrototypeOf: typeof core.Reflect.getPrototypeOf; - export = getPrototypeOf; -} -declare module "core-js/library/fn/reflect/has" { - var has: typeof core.Reflect.has; - export = has; -} -declare module "core-js/library/fn/reflect/is-extensible" { - var isExtensible: typeof core.Reflect.isExtensible; - export = isExtensible; -} -declare module "core-js/library/fn/reflect/own-keys" { - var ownKeys: typeof core.Reflect.ownKeys; - export = ownKeys; -} -declare module "core-js/library/fn/reflect/prevent-extensions" { - var preventExtensions: typeof core.Reflect.preventExtensions; - export = preventExtensions; -} -declare module "core-js/library/fn/reflect/set" { - var set: typeof core.Reflect.set; - export = set; -} -declare module "core-js/library/fn/reflect/set-prototype-of" { - var setPrototypeOf: typeof core.Reflect.setPrototypeOf; - export = setPrototypeOf; -} -declare module "core-js/library/fn/regexp" { - var RegExp: typeof core.RegExp; - export = RegExp; -} -declare module "core-js/library/fn/regexp/escape" { - var escape: typeof core.RegExp.escape; - export = escape; -} -declare module "core-js/library/fn/string" { - var String: typeof core.String; - export = String; -} -declare module "core-js/library/fn/string/at" { - var at: typeof core.String.at; - export = at; -} -declare module "core-js/library/fn/string/code-point-at" { - var codePointAt: typeof core.String.codePointAt; - export = codePointAt; -} -declare module "core-js/library/fn/string/ends-with" { - var endsWith: typeof core.String.endsWith; - export = endsWith; -} -declare module "core-js/library/fn/string/escape-html" { - var escapeHTML: typeof core.String.escapeHTML; - export = escapeHTML; -} -declare module "core-js/library/fn/string/from-code-point" { - var fromCodePoint: typeof core.String.fromCodePoint; - export = fromCodePoint; -} -declare module "core-js/library/fn/string/includes" { - var includes: typeof core.String.includes; - export = includes; -} -declare module "core-js/library/fn/string/lpad" { - var lpad: typeof core.String.lpad; - export = lpad; -} -declare module "core-js/library/fn/string/raw" { - var raw: typeof core.String.raw; - export = raw; -} -declare module "core-js/library/fn/string/repeat" { - var repeat: typeof core.String.repeat; - export = repeat; -} -declare module "core-js/library/fn/string/rpad" { - var rpad: typeof core.String.rpad; - export = rpad; -} -declare module "core-js/library/fn/string/starts-with" { - var startsWith: typeof core.String.startsWith; - export = startsWith; -} -declare module "core-js/library/fn/string/unescape-html" { - var unescapeHTML: typeof core.String.unescapeHTML; - export = unescapeHTML; -} -declare module "core-js/library/fn/symbol" { - var Symbol: typeof core.Symbol; - export = Symbol; -} -declare module "core-js/library/fn/symbol/for" { - var _for: typeof core.Symbol.for; - export = _for; -} -declare module "core-js/library/fn/symbol/has-instance" { - var hasInstance: typeof core.Symbol.hasInstance; - export = hasInstance; -} -declare module "core-js/library/fn/symbol/is-concat-spreadable" { - var isConcatSpreadable: typeof core.Symbol.isConcatSpreadable; - export = isConcatSpreadable; -} -declare module "core-js/library/fn/symbol/iterator" { - var iterator: typeof core.Symbol.iterator; - export = iterator; -} -declare module "core-js/library/fn/symbol/key-for" { - var keyFor: typeof core.Symbol.keyFor; - export = keyFor; -} -declare module "core-js/library/fn/symbol/match" { - var match: typeof core.Symbol.match; - export = match; -} -declare module "core-js/library/fn/symbol/replace" { - var replace: typeof core.Symbol.replace; - export = replace; -} -declare module "core-js/library/fn/symbol/search" { - var search: typeof core.Symbol.search; - export = search; -} -declare module "core-js/library/fn/symbol/species" { - var species: typeof core.Symbol.species; - export = species; -} -declare module "core-js/library/fn/symbol/split" { - var split: typeof core.Symbol.split; - export = split; -} -declare module "core-js/library/fn/symbol/to-primitive" { - var toPrimitive: typeof core.Symbol.toPrimitive; - export = toPrimitive; -} -declare module "core-js/library/fn/symbol/to-string-tag" { - var toStringTag: typeof core.Symbol.toStringTag; - export = toStringTag; -} -declare module "core-js/library/fn/symbol/unscopables" { - var unscopables: typeof core.Symbol.unscopables; - export = unscopables; -} -declare module "core-js/library/es5" { - export = core; -} -declare module "core-js/library/es6" { - export = core; -} -declare module "core-js/library/es6/array" { - var Array: typeof core.Array; - export = Array; -} -declare module "core-js/library/es6/function" { - var Function: typeof core.Function; - export = Function; -} -declare module "core-js/library/es6/map" { - var Map: typeof core.Map; - export = Map; -} -declare module "core-js/library/es6/math" { - var Math: typeof core.Math; - export = Math; -} -declare module "core-js/library/es6/number" { - var Number: typeof core.Number; - export = Number; -} -declare module "core-js/library/es6/object" { - var Object: typeof core.Object; - export = Object; -} -declare module "core-js/library/es6/promise" { - var Promise: typeof core.Promise; - export = Promise; -} -declare module "core-js/library/es6/reflect" { - var Reflect: typeof core.Reflect; - export = Reflect; -} -declare module "core-js/library/es6/regexp" { - var RegExp: typeof core.RegExp; - export = RegExp; -} -declare module "core-js/library/es6/set" { - var Set: typeof core.Set; - export = Set; -} -declare module "core-js/library/es6/string" { - var String: typeof core.String; - export = String; -} -declare module "core-js/library/es6/symbol" { - var Symbol: typeof core.Symbol; - export = Symbol; -} -declare module "core-js/library/es6/weak-map" { - var WeakMap: typeof core.WeakMap; - export = WeakMap; -} -declare module "core-js/library/es6/weak-set" { - var WeakSet: typeof core.WeakSet; - export = WeakSet; -} -declare module "core-js/library/es7" { - export = core; -} -declare module "core-js/library/es7/array" { - var Array: typeof core.Array; - export = Array; -} -declare module "core-js/library/es7/map" { - var Map: typeof core.Map; - export = Map; -} -declare module "core-js/library/es7/object" { - var Object: typeof core.Object; - export = Object; -} -declare module "core-js/library/es7/regexp" { - var RegExp: typeof core.RegExp; - export = RegExp; -} -declare module "core-js/library/es7/set" { - var Set: typeof core.Set; - export = Set; -} -declare module "core-js/library/es7/string" { - var String: typeof core.String; - export = String; -} -declare module "core-js/library/js" { - export = core; -} -declare module "core-js/library/js/array" { - var Array: typeof core.Array; - export = Array; -} -declare module "core-js/library/web" { - export = core; -} -declare module "core-js/library/web/dom" { - export = core; -} -declare module "core-js/library/web/immediate" { - export = core; -} -declare module "core-js/library/web/timers" { - export = core; -} diff --git a/typings/globals/core-js/typings.json b/typings/globals/core-js/typings.json deleted file mode 100644 index 7f628d0..0000000 --- a/typings/globals/core-js/typings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "resolution": "main", - "tree": { - "src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/25e18b592470e3dddccc826fde2bb8e7610ef863/core-js/core-js.d.ts", - "raw": "registry:dt/core-js#0.0.0+20160725163759", - "typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/25e18b592470e3dddccc826fde2bb8e7610ef863/core-js/core-js.d.ts" - } -} diff --git a/typings/globals/jasmine/index.d.ts b/typings/globals/jasmine/index.d.ts deleted file mode 100644 index 31e2dd7..0000000 --- a/typings/globals/jasmine/index.d.ts +++ /dev/null @@ -1,502 +0,0 @@ -// Generated by typings -// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/c49913aa9ea419ea46c1c684e488cf2a10303b1a/jasmine/jasmine.d.ts -declare function describe(description: string, specDefinitions: () => void): void; -declare function fdescribe(description: string, specDefinitions: () => void): void; -declare function xdescribe(description: string, specDefinitions: () => void): void; - -declare function it(expectation: string, assertion?: () => void, timeout?: number): void; -declare function it(expectation: string, assertion?: (done: DoneFn) => void, timeout?: number): void; -declare function fit(expectation: string, assertion?: () => void, timeout?: number): void; -declare function fit(expectation: string, assertion?: (done: DoneFn) => void, timeout?: number): void; -declare function xit(expectation: string, assertion?: () => void, timeout?: number): void; -declare function xit(expectation: string, assertion?: (done: DoneFn) => void, timeout?: number): void; - -/** If you call the function pending anywhere in the spec body, no matter the expectations, the spec will be marked pending. */ -declare function pending(reason?: string): void; - -declare function beforeEach(action: () => void, timeout?: number): void; -declare function beforeEach(action: (done: DoneFn) => void, timeout?: number): void; -declare function afterEach(action: () => void, timeout?: number): void; -declare function afterEach(action: (done: DoneFn) => void, timeout?: number): void; - -declare function beforeAll(action: () => void, timeout?: number): void; -declare function beforeAll(action: (done: DoneFn) => void, timeout?: number): void; -declare function afterAll(action: () => void, timeout?: number): void; -declare function afterAll(action: (done: DoneFn) => void, timeout?: number): void; - -declare function expect(spy: Function): jasmine.Matchers; -declare function expect(actual: any): jasmine.Matchers; - -declare function fail(e?: any): void; -/** Action method that should be called when the async work is complete */ -interface DoneFn extends Function { - (): void; - - /** fails the spec and indicates that it has completed. If the message is an Error, Error.message is used */ - fail: (message?: Error|string) => void; -} - -declare function spyOn(object: any, method: string): jasmine.Spy; - -declare function runs(asyncMethod: Function): void; -declare function waitsFor(latchMethod: () => boolean, failureMessage?: string, timeout?: number): void; -declare function waits(timeout?: number): void; - -declare namespace jasmine { - - var clock: () => Clock; - - function any(aclass: any): Any; - function anything(): Any; - function arrayContaining(sample: any[]): ArrayContaining; - function objectContaining(sample: any): ObjectContaining; - function createSpy(name: string, originalFn?: Function): Spy; - function createSpyObj(baseName: string, methodNames: any[]): any; - function createSpyObj(baseName: string, methodNames: any[]): T; - function pp(value: any): string; - function getEnv(): Env; - function addCustomEqualityTester(equalityTester: CustomEqualityTester): void; - function addMatchers(matchers: CustomMatcherFactories): void; - function stringMatching(str: string): Any; - function stringMatching(str: RegExp): Any; - - interface Any { - - new (expectedClass: any): any; - - jasmineMatches(other: any): boolean; - jasmineToString(): string; - } - - // taken from TypeScript lib.core.es6.d.ts, applicable to CustomMatchers.contains() - interface ArrayLike { - length: number; - [n: number]: T; - } - - interface ArrayContaining { - new (sample: any[]): any; - - asymmetricMatch(other: any): boolean; - jasmineToString(): string; - } - - interface ObjectContaining { - new (sample: any): any; - - jasmineMatches(other: any, mismatchKeys: any[], mismatchValues: any[]): boolean; - jasmineToString(): string; - } - - interface Block { - - new (env: Env, func: SpecFunction, spec: Spec): any; - - execute(onComplete: () => void): void; - } - - interface WaitsBlock extends Block { - new (env: Env, timeout: number, spec: Spec): any; - } - - interface WaitsForBlock extends Block { - new (env: Env, timeout: number, latchFunction: SpecFunction, message: string, spec: Spec): any; - } - - interface Clock { - install(): void; - uninstall(): void; - /** Calls to any registered callback are triggered when the clock is ticked forward via the jasmine.clock().tick function, which takes a number of milliseconds. */ - tick(ms: number): void; - mockDate(date?: Date): void; - } - - interface CustomEqualityTester { - (first: any, second: any): boolean; - } - - interface CustomMatcher { - compare(actual: T, expected: T): CustomMatcherResult; - compare(actual: any, expected: any): CustomMatcherResult; - } - - interface CustomMatcherFactory { - (util: MatchersUtil, customEqualityTesters: Array): CustomMatcher; - } - - interface CustomMatcherFactories { - [index: string]: CustomMatcherFactory; - } - - interface CustomMatcherResult { - pass: boolean; - message?: string; - } - - interface MatchersUtil { - equals(a: any, b: any, customTesters?: Array): boolean; - contains(haystack: ArrayLike | string, needle: any, customTesters?: Array): boolean; - buildFailureMessage(matcherName: string, isNot: boolean, actual: any, ...expected: Array): string; - } - - interface Env { - setTimeout: any; - clearTimeout: void; - setInterval: any; - clearInterval: void; - updateInterval: number; - - currentSpec: Spec; - - matchersClass: Matchers; - - version(): any; - versionString(): string; - nextSpecId(): number; - addReporter(reporter: Reporter): void; - execute(): void; - describe(description: string, specDefinitions: () => void): Suite; - // ddescribe(description: string, specDefinitions: () => void): Suite; Not a part of jasmine. Angular team adds these - beforeEach(beforeEachFunction: () => void): void; - beforeAll(beforeAllFunction: () => void): void; - currentRunner(): Runner; - afterEach(afterEachFunction: () => void): void; - afterAll(afterAllFunction: () => void): void; - xdescribe(desc: string, specDefinitions: () => void): XSuite; - it(description: string, func: () => void): Spec; - // iit(description: string, func: () => void): Spec; Not a part of jasmine. Angular team adds these - xit(desc: string, func: () => void): XSpec; - compareRegExps_(a: RegExp, b: RegExp, mismatchKeys: string[], mismatchValues: string[]): boolean; - compareObjects_(a: any, b: any, mismatchKeys: string[], mismatchValues: string[]): boolean; - equals_(a: any, b: any, mismatchKeys: string[], mismatchValues: string[]): boolean; - contains_(haystack: any, needle: any): boolean; - addCustomEqualityTester(equalityTester: CustomEqualityTester): void; - addMatchers(matchers: CustomMatcherFactories): void; - specFilter(spec: Spec): boolean; - throwOnExpectationFailure(value: boolean): void; - } - - interface FakeTimer { - - new (): any; - - reset(): void; - tick(millis: number): void; - runFunctionsWithinRange(oldMillis: number, nowMillis: number): void; - scheduleFunction(timeoutKey: any, funcToCall: () => void, millis: number, recurring: boolean): void; - } - - interface HtmlReporter { - new (): any; - } - - interface HtmlSpecFilter { - new (): any; - } - - interface Result { - type: string; - } - - interface NestedResults extends Result { - description: string; - - totalCount: number; - passedCount: number; - failedCount: number; - - skipped: boolean; - - rollupCounts(result: NestedResults): void; - log(values: any): void; - getItems(): Result[]; - addResult(result: Result): void; - passed(): boolean; - } - - interface MessageResult extends Result { - values: any; - trace: Trace; - } - - interface ExpectationResult extends Result { - matcherName: string; - passed(): boolean; - expected: any; - actual: any; - message: string; - trace: Trace; - } - - interface Trace { - name: string; - message: string; - stack: any; - } - - interface PrettyPrinter { - - new (): any; - - format(value: any): void; - iterateObject(obj: any, fn: (property: string, isGetter: boolean) => void): void; - emitScalar(value: any): void; - emitString(value: string): void; - emitArray(array: any[]): void; - emitObject(obj: any): void; - append(value: any): void; - } - - interface StringPrettyPrinter extends PrettyPrinter { - } - - interface Queue { - - new (env: any): any; - - env: Env; - ensured: boolean[]; - blocks: Block[]; - running: boolean; - index: number; - offset: number; - abort: boolean; - - addBefore(block: Block, ensure?: boolean): void; - add(block: any, ensure?: boolean): void; - insertNext(block: any, ensure?: boolean): void; - start(onComplete?: () => void): void; - isRunning(): boolean; - next_(): void; - results(): NestedResults; - } - - interface Matchers { - - new (env: Env, actual: any, spec: Env, isNot?: boolean): any; - - env: Env; - actual: any; - spec: Env; - isNot?: boolean; - message(): any; - - toBe(expected: any, expectationFailOutput?: any): boolean; - toEqual(expected: any, expectationFailOutput?: any): boolean; - toMatch(expected: string | RegExp, expectationFailOutput?: any): boolean; - toBeDefined(expectationFailOutput?: any): boolean; - toBeUndefined(expectationFailOutput?: any): boolean; - toBeNull(expectationFailOutput?: any): boolean; - toBeNaN(): boolean; - toBeTruthy(expectationFailOutput?: any): boolean; - toBeFalsy(expectationFailOutput?: any): boolean; - toHaveBeenCalled(): boolean; - toHaveBeenCalledWith(...params: any[]): boolean; - toHaveBeenCalledTimes(expected: number): boolean; - toContain(expected: any, expectationFailOutput?: any): boolean; - toBeLessThan(expected: number, expectationFailOutput?: any): boolean; - toBeGreaterThan(expected: number, expectationFailOutput?: any): boolean; - toBeCloseTo(expected: number, precision?: any, expectationFailOutput?: any): boolean; - toThrow(expected?: any): boolean; - toThrowError(message?: string | RegExp): boolean; - toThrowError(expected?: new (...args: any[]) => Error, message?: string | RegExp): boolean; - not: Matchers; - - Any: Any; - } - - interface Reporter { - reportRunnerStarting(runner: Runner): void; - reportRunnerResults(runner: Runner): void; - reportSuiteResults(suite: Suite): void; - reportSpecStarting(spec: Spec): void; - reportSpecResults(spec: Spec): void; - log(str: string): void; - } - - interface MultiReporter extends Reporter { - addReporter(reporter: Reporter): void; - } - - interface Runner { - - new (env: Env): any; - - execute(): void; - beforeEach(beforeEachFunction: SpecFunction): void; - afterEach(afterEachFunction: SpecFunction): void; - beforeAll(beforeAllFunction: SpecFunction): void; - afterAll(afterAllFunction: SpecFunction): void; - finishCallback(): void; - addSuite(suite: Suite): void; - add(block: Block): void; - specs(): Spec[]; - suites(): Suite[]; - topLevelSuites(): Suite[]; - results(): NestedResults; - } - - interface SpecFunction { - (spec?: Spec): void; - } - - interface SuiteOrSpec { - id: number; - env: Env; - description: string; - queue: Queue; - } - - interface Spec extends SuiteOrSpec { - - new (env: Env, suite: Suite, description: string): any; - - suite: Suite; - - afterCallbacks: SpecFunction[]; - spies_: Spy[]; - - results_: NestedResults; - matchersClass: Matchers; - - getFullName(): string; - results(): NestedResults; - log(arguments: any): any; - runs(func: SpecFunction): Spec; - addToQueue(block: Block): void; - addMatcherResult(result: Result): void; - expect(actual: any): any; - waits(timeout: number): Spec; - waitsFor(latchFunction: SpecFunction, timeoutMessage?: string, timeout?: number): Spec; - fail(e?: any): void; - getMatchersClass_(): Matchers; - addMatchers(matchersPrototype: CustomMatcherFactories): void; - finishCallback(): void; - finish(onComplete?: () => void): void; - after(doAfter: SpecFunction): void; - execute(onComplete?: () => void): any; - addBeforesAndAftersToQueue(): void; - explodes(): void; - spyOn(obj: any, methodName: string, ignoreMethodDoesntExist: boolean): Spy; - removeAllSpies(): void; - } - - interface XSpec { - id: number; - runs(): void; - } - - interface Suite extends SuiteOrSpec { - - new (env: Env, description: string, specDefinitions: () => void, parentSuite: Suite): any; - - parentSuite: Suite; - - getFullName(): string; - finish(onComplete?: () => void): void; - beforeEach(beforeEachFunction: SpecFunction): void; - afterEach(afterEachFunction: SpecFunction): void; - beforeAll(beforeAllFunction: SpecFunction): void; - afterAll(afterAllFunction: SpecFunction): void; - results(): NestedResults; - add(suiteOrSpec: SuiteOrSpec): void; - specs(): Spec[]; - suites(): Suite[]; - children(): any[]; - execute(onComplete?: () => void): void; - } - - interface XSuite { - execute(): void; - } - - interface Spy { - (...params: any[]): any; - - identity: string; - and: SpyAnd; - calls: Calls; - mostRecentCall: { args: any[]; }; - argsForCall: any[]; - wasCalled: boolean; - } - - interface SpyAnd { - /** By chaining the spy with and.callThrough, the spy will still track all calls to it but in addition it will delegate to the actual implementation. */ - callThrough(): Spy; - /** By chaining the spy with and.returnValue, all calls to the function will return a specific value. */ - returnValue(val: any): Spy; - /** By chaining the spy with and.returnValues, all calls to the function will return specific values in order until it reaches the end of the return values list. */ - returnValues(...values: any[]): Spy; - /** By chaining the spy with and.callFake, all calls to the spy will delegate to the supplied function. */ - callFake(fn: Function): Spy; - /** By chaining the spy with and.throwError, all calls to the spy will throw the specified value. */ - throwError(msg: string): Spy; - /** When a calling strategy is used for a spy, the original stubbing behavior can be returned at any time with and.stub. */ - stub(): Spy; - } - - interface Calls { - /** By chaining the spy with calls.any(), will return false if the spy has not been called at all, and then true once at least one call happens. **/ - any(): boolean; - /** By chaining the spy with calls.count(), will return the number of times the spy was called **/ - count(): number; - /** By chaining the spy with calls.argsFor(), will return the arguments passed to call number index **/ - argsFor(index: number): any[]; - /** By chaining the spy with calls.allArgs(), will return the arguments to all calls **/ - allArgs(): any[]; - /** By chaining the spy with calls.all(), will return the context (the this) and arguments passed all calls **/ - all(): CallInfo[]; - /** By chaining the spy with calls.mostRecent(), will return the context (the this) and arguments for the most recent call **/ - mostRecent(): CallInfo; - /** By chaining the spy with calls.first(), will return the context (the this) and arguments for the first call **/ - first(): CallInfo; - /** By chaining the spy with calls.reset(), will clears all tracking for a spy **/ - reset(): void; - } - - interface CallInfo { - /** The context (the this) for the call */ - object: any; - /** All arguments passed to the call */ - args: any[]; - /** The return value of the call */ - returnValue: any; - } - - interface Util { - inherit(childClass: Function, parentClass: Function): any; - formatException(e: any): any; - htmlEscape(str: string): string; - argsToArray(args: any): any; - extend(destination: any, source: any): any; - } - - interface JsApiReporter extends Reporter { - - started: boolean; - finished: boolean; - result: any; - messages: any; - - new (): any; - - suites(): Suite[]; - summarize_(suiteOrSpec: SuiteOrSpec): any; - results(): any; - resultsForSpec(specId: any): any; - log(str: any): any; - resultsForSpecs(specIds: any): any; - summarizeResult_(result: any): any; - } - - interface Jasmine { - Spec: Spec; - clock: Clock; - util: Util; - } - - export var HtmlReporter: HtmlReporter; - export var HtmlSpecFilter: HtmlSpecFilter; - export var DEFAULT_TIMEOUT_INTERVAL: number; -} diff --git a/typings/globals/jasmine/typings.json b/typings/globals/jasmine/typings.json deleted file mode 100644 index 3fb336c..0000000 --- a/typings/globals/jasmine/typings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "resolution": "main", - "tree": { - "src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/c49913aa9ea419ea46c1c684e488cf2a10303b1a/jasmine/jasmine.d.ts", - "raw": "registry:dt/jasmine#2.2.0+20160621224255", - "typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/c49913aa9ea419ea46c1c684e488cf2a10303b1a/jasmine/jasmine.d.ts" - } -} diff --git a/typings/globals/node/index.d.ts b/typings/globals/node/index.d.ts deleted file mode 100644 index d03329b..0000000 --- a/typings/globals/node/index.d.ts +++ /dev/null @@ -1,2960 +0,0 @@ -// Generated by typings -// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/4008a51db44dabcdc368097a39a01ab7a5f9587f/node/node.d.ts -interface Error { - stack?: string; -} - -interface ErrorConstructor { - captureStackTrace(targetObject: Object, constructorOpt?: Function): void; - stackTraceLimit: number; -} - -// compat for TypeScript 1.8 -// if you use with --target es3 or --target es5 and use below definitions, -// use the lib.es6.d.ts that is bundled with TypeScript 1.8. -interface MapConstructor { } -interface WeakMapConstructor { } -interface SetConstructor { } -interface WeakSetConstructor { } - -/************************************************ -* * -* GLOBAL * -* * -************************************************/ -declare var process: NodeJS.Process; -declare var global: NodeJS.Global; - -declare var __filename: string; -declare var __dirname: string; - -declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; -declare function clearTimeout(timeoutId: NodeJS.Timer): void; -declare function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; -declare function clearInterval(intervalId: NodeJS.Timer): void; -declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): any; -declare function clearImmediate(immediateId: any): void; - -interface NodeRequireFunction { - (id: string): any; -} - -interface NodeRequire extends NodeRequireFunction { - resolve(id: string): string; - cache: any; - extensions: any; - main: any; -} - -declare var require: NodeRequire; - -interface NodeModule { - exports: any; - require: NodeRequireFunction; - id: string; - filename: string; - loaded: boolean; - parent: any; - children: any[]; -} - -declare var module: NodeModule; - -// Same as module.exports -declare var exports: any; -declare var SlowBuffer: { - new (str: string, encoding?: string): Buffer; - new (size: number): Buffer; - new (size: Uint8Array): Buffer; - new (array: any[]): Buffer; - prototype: Buffer; - isBuffer(obj: any): boolean; - byteLength(string: string, encoding?: string): number; - concat(list: Buffer[], totalLength?: number): Buffer; -}; - - -// Buffer class -type BufferEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "binary" | "hex"; -interface Buffer extends NodeBuffer { } - -/** - * Raw data is stored in instances of the Buffer class. - * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized. - * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' - */ -declare var Buffer: { - /** - * Allocates a new buffer containing the given {str}. - * - * @param str String to store in buffer. - * @param encoding encoding to use, optional. Default is 'utf8' - */ - new (str: string, encoding?: string): Buffer; - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - */ - new (size: number): Buffer; - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - */ - new (array: Uint8Array): Buffer; - /** - * Produces a Buffer backed by the same allocated memory as - * the given {ArrayBuffer}. - * - * - * @param arrayBuffer The ArrayBuffer with which to share memory. - */ - new (arrayBuffer: ArrayBuffer): Buffer; - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - */ - new (array: any[]): Buffer; - /** - * Copies the passed {buffer} data onto a new {Buffer} instance. - * - * @param buffer The buffer to copy. - */ - new (buffer: Buffer): Buffer; - prototype: Buffer; - /** - * Allocates a new Buffer using an {array} of octets. - * - * @param array - */ - from(array: any[]): Buffer; - /** - * When passed a reference to the .buffer property of a TypedArray instance, - * the newly created Buffer will share the same allocated memory as the TypedArray. - * The optional {byteOffset} and {length} arguments specify a memory range - * within the {arrayBuffer} that will be shared by the Buffer. - * - * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() - * @param byteOffset - * @param length - */ - from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; - /** - * Copies the passed {buffer} data onto a new Buffer instance. - * - * @param buffer - */ - from(buffer: Buffer): Buffer; - /** - * Creates a new Buffer containing the given JavaScript string {str}. - * If provided, the {encoding} parameter identifies the character encoding. - * If not provided, {encoding} defaults to 'utf8'. - * - * @param str - */ - from(str: string, encoding?: string): Buffer; - /** - * Returns true if {obj} is a Buffer - * - * @param obj object to test. - */ - isBuffer(obj: any): obj is Buffer; - /** - * Returns true if {encoding} is a valid encoding argument. - * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' - * - * @param encoding string to test. - */ - isEncoding(encoding: string): boolean; - /** - * Gives the actual byte length of a string. encoding defaults to 'utf8'. - * This is not the same as String.prototype.length since that returns the number of characters in a string. - * - * @param string string to test. - * @param encoding encoding used to evaluate (defaults to 'utf8') - */ - byteLength(string: string, encoding?: string): number; - /** - * Returns a buffer which is the result of concatenating all the buffers in the list together. - * - * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. - * If the list has exactly one item, then the first item of the list is returned. - * If the list has more than one item, then a new Buffer is created. - * - * @param list An array of Buffer objects to concatenate - * @param totalLength Total length of the buffers when concatenated. - * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. - */ - concat(list: Buffer[], totalLength?: number): Buffer; - /** - * The same as buf1.compare(buf2). - */ - compare(buf1: Buffer, buf2: Buffer): number; - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - * @param fill if specified, buffer will be initialized by calling buf.fill(fill). - * If parameter is omitted, buffer will be filled with zeros. - * @param encoding encoding used for call to buf.fill while initalizing - */ - alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; - /** - * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - allocUnsafe(size: number): Buffer; - /** - * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - allocUnsafeSlow(size: number): Buffer; -}; - -/************************************************ -* * -* GLOBAL INTERFACES * -* * -************************************************/ -declare namespace NodeJS { - export interface ErrnoException extends Error { - errno?: string; - code?: string; - path?: string; - syscall?: string; - stack?: string; - } - - export class EventEmitter { - addListener(event: string, listener: Function): this; - on(event: string, listener: Function): this; - once(event: string, listener: Function): this; - removeListener(event: string, listener: Function): this; - removeAllListeners(event?: string): this; - setMaxListeners(n: number): this; - getMaxListeners(): number; - listeners(event: string): Function[]; - emit(event: string, ...args: any[]): boolean; - listenerCount(type: string): number; - // Added in Node 6... - prependListener(event: string, listener: Function): this; - prependOnceListener(event: string, listener: Function): this; - eventNames(): string[]; - } - - export interface ReadableStream extends EventEmitter { - readable: boolean; - read(size?: number): string | Buffer; - setEncoding(encoding: string): void; - pause(): ReadableStream; - resume(): ReadableStream; - pipe(destination: T, options?: { end?: boolean; }): T; - unpipe(destination?: T): void; - unshift(chunk: string): void; - unshift(chunk: Buffer): void; - wrap(oldStream: ReadableStream): ReadableStream; - } - - export interface WritableStream extends EventEmitter { - writable: boolean; - write(buffer: Buffer | string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - } - - export interface ReadWriteStream extends ReadableStream, WritableStream { - pause(): ReadWriteStream; - resume(): ReadWriteStream; - } - - export interface Events extends EventEmitter { } - - export interface Domain extends Events { - run(fn: Function): void; - add(emitter: Events): void; - remove(emitter: Events): void; - bind(cb: (err: Error, data: any) => any): any; - intercept(cb: (data: any) => any): any; - dispose(): void; - - addListener(event: string, listener: Function): this; - on(event: string, listener: Function): this; - once(event: string, listener: Function): this; - removeListener(event: string, listener: Function): this; - removeAllListeners(event?: string): this; - } - - export interface MemoryUsage { - rss: number; - heapTotal: number; - heapUsed: number; - } - - export interface ProcessVersions { - http_parser: string; - node: string; - v8: string; - ares: string; - uv: string; - zlib: string; - modules: string; - openssl: string; - } - - export interface Process extends EventEmitter { - stdout: WritableStream; - stderr: WritableStream; - stdin: ReadableStream; - argv: string[]; - execArgv: string[]; - execPath: string; - abort(): void; - chdir(directory: string): void; - cwd(): string; - env: any; - exit(code?: number): void; - exitCode: number; - getgid(): number; - setgid(id: number): void; - setgid(id: string): void; - getuid(): number; - setuid(id: number): void; - setuid(id: string): void; - version: string; - versions: ProcessVersions; - config: { - target_defaults: { - cflags: any[]; - default_configuration: string; - defines: string[]; - include_dirs: string[]; - libraries: string[]; - }; - variables: { - clang: number; - host_arch: string; - node_install_npm: boolean; - node_install_waf: boolean; - node_prefix: string; - node_shared_openssl: boolean; - node_shared_v8: boolean; - node_shared_zlib: boolean; - node_use_dtrace: boolean; - node_use_etw: boolean; - node_use_openssl: boolean; - target_arch: string; - v8_no_strict_aliasing: number; - v8_use_snapshot: boolean; - visibility: string; - }; - }; - kill(pid: number, signal?: string | number): void; - pid: number; - title: string; - arch: string; - platform: string; - memoryUsage(): MemoryUsage; - nextTick(callback: Function, ...args: any[]): void; - umask(mask?: number): number; - uptime(): number; - hrtime(time?: number[]): number[]; - domain: Domain; - - // Worker - send?(message: any, sendHandle?: any): void; - disconnect(): void; - connected: boolean; - } - - export interface Global { - Array: typeof Array; - ArrayBuffer: typeof ArrayBuffer; - Boolean: typeof Boolean; - Buffer: typeof Buffer; - DataView: typeof DataView; - Date: typeof Date; - Error: typeof Error; - EvalError: typeof EvalError; - Float32Array: typeof Float32Array; - Float64Array: typeof Float64Array; - Function: typeof Function; - GLOBAL: Global; - Infinity: typeof Infinity; - Int16Array: typeof Int16Array; - Int32Array: typeof Int32Array; - Int8Array: typeof Int8Array; - Intl: typeof Intl; - JSON: typeof JSON; - Map: MapConstructor; - Math: typeof Math; - NaN: typeof NaN; - Number: typeof Number; - Object: typeof Object; - Promise: Function; - RangeError: typeof RangeError; - ReferenceError: typeof ReferenceError; - RegExp: typeof RegExp; - Set: SetConstructor; - String: typeof String; - Symbol: Function; - SyntaxError: typeof SyntaxError; - TypeError: typeof TypeError; - URIError: typeof URIError; - Uint16Array: typeof Uint16Array; - Uint32Array: typeof Uint32Array; - Uint8Array: typeof Uint8Array; - Uint8ClampedArray: Function; - WeakMap: WeakMapConstructor; - WeakSet: WeakSetConstructor; - clearImmediate: (immediateId: any) => void; - clearInterval: (intervalId: NodeJS.Timer) => void; - clearTimeout: (timeoutId: NodeJS.Timer) => void; - console: typeof console; - decodeURI: typeof decodeURI; - decodeURIComponent: typeof decodeURIComponent; - encodeURI: typeof encodeURI; - encodeURIComponent: typeof encodeURIComponent; - escape: (str: string) => string; - eval: typeof eval; - global: Global; - isFinite: typeof isFinite; - isNaN: typeof isNaN; - parseFloat: typeof parseFloat; - parseInt: typeof parseInt; - process: Process; - root: Global; - setImmediate: (callback: (...args: any[]) => void, ...args: any[]) => any; - setInterval: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => NodeJS.Timer; - setTimeout: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => NodeJS.Timer; - undefined: typeof undefined; - unescape: (str: string) => string; - gc: () => void; - v8debug?: any; - } - - export interface Timer { - ref(): void; - unref(): void; - } -} - -interface IterableIterator {} - -/** - * @deprecated - */ -interface NodeBuffer extends Uint8Array { - write(string: string, offset?: number, length?: number, encoding?: string): number; - toString(encoding?: string, start?: number, end?: number): string; - toJSON(): any; - equals(otherBuffer: Buffer): boolean; - compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; - copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; - slice(start?: number, end?: number): Buffer; - writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readUInt8(offset: number, noAssert?: boolean): number; - readUInt16LE(offset: number, noAssert?: boolean): number; - readUInt16BE(offset: number, noAssert?: boolean): number; - readUInt32LE(offset: number, noAssert?: boolean): number; - readUInt32BE(offset: number, noAssert?: boolean): number; - readInt8(offset: number, noAssert?: boolean): number; - readInt16LE(offset: number, noAssert?: boolean): number; - readInt16BE(offset: number, noAssert?: boolean): number; - readInt32LE(offset: number, noAssert?: boolean): number; - readInt32BE(offset: number, noAssert?: boolean): number; - readFloatLE(offset: number, noAssert?: boolean): number; - readFloatBE(offset: number, noAssert?: boolean): number; - readDoubleLE(offset: number, noAssert?: boolean): number; - readDoubleBE(offset: number, noAssert?: boolean): number; - swap16(): Buffer; - swap32(): Buffer; - swap64(): Buffer; - writeUInt8(value: number, offset: number, noAssert?: boolean): number; - writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeInt8(value: number, offset: number, noAssert?: boolean): number; - writeInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeFloatLE(value: number, offset: number, noAssert?: boolean): number; - writeFloatBE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; - fill(value: any, offset?: number, end?: number): this; - indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; - lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; - entries(): IterableIterator<[number, number]>; - includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; - keys(): IterableIterator; - values(): IterableIterator; -} - -/************************************************ -* * -* MODULES * -* * -************************************************/ -declare module "buffer" { - export var INSPECT_MAX_BYTES: number; - var BuffType: typeof Buffer; - var SlowBuffType: typeof SlowBuffer; - export { BuffType as Buffer, SlowBuffType as SlowBuffer }; -} - -declare module "querystring" { - export interface StringifyOptions { - encodeURIComponent?: Function; - } - - export interface ParseOptions { - maxKeys?: number; - decodeURIComponent?: Function; - } - - export function stringify(obj: T, sep?: string, eq?: string, options?: StringifyOptions): string; - export function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): any; - export function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): T; - export function escape(str: string): string; - export function unescape(str: string): string; -} - -declare module "events" { - export class EventEmitter extends NodeJS.EventEmitter { - static EventEmitter: EventEmitter; - static listenerCount(emitter: EventEmitter, event: string): number; // deprecated - static defaultMaxListeners: number; - - addListener(event: string, listener: Function): this; - on(event: string, listener: Function): this; - once(event: string, listener: Function): this; - prependListener(event: string, listener: Function): this; - prependOnceListener(event: string, listener: Function): this; - removeListener(event: string, listener: Function): this; - removeAllListeners(event?: string): this; - setMaxListeners(n: number): this; - getMaxListeners(): number; - listeners(event: string): Function[]; - emit(event: string, ...args: any[]): boolean; - eventNames(): string[]; - listenerCount(type: string): number; - } -} - -declare module "http" { - import * as events from "events"; - import * as net from "net"; - import * as stream from "stream"; - - export interface RequestOptions { - protocol?: string; - host?: string; - hostname?: string; - family?: number; - port?: number; - localAddress?: string; - socketPath?: string; - method?: string; - path?: string; - headers?: { [key: string]: any }; - auth?: string; - agent?: Agent | boolean; - } - - export interface Server extends events.EventEmitter, net.Server { - setTimeout(msecs: number, callback: Function): void; - maxHeadersCount: number; - timeout: number; - } - /** - * @deprecated Use IncomingMessage - */ - export interface ServerRequest extends IncomingMessage { - connection: net.Socket; - } - export interface ServerResponse extends events.EventEmitter, stream.Writable { - // Extended base methods - write(buffer: Buffer): boolean; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - write(str: string, encoding?: string, fd?: string): boolean; - - writeContinue(): void; - writeHead(statusCode: number, reasonPhrase?: string, headers?: any): void; - writeHead(statusCode: number, headers?: any): void; - statusCode: number; - statusMessage: string; - headersSent: boolean; - setHeader(name: string, value: string | string[]): void; - setTimeout(msecs: number, callback: Function): ServerResponse; - sendDate: boolean; - getHeader(name: string): string; - removeHeader(name: string): void; - write(chunk: any, encoding?: string): any; - addTrailers(headers: any): void; - finished: boolean; - - // Extended base methods - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - end(data?: any, encoding?: string): void; - } - export interface ClientRequest extends events.EventEmitter, stream.Writable { - // Extended base methods - write(buffer: Buffer): boolean; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - write(str: string, encoding?: string, fd?: string): boolean; - - write(chunk: any, encoding?: string): void; - abort(): void; - setTimeout(timeout: number, callback?: Function): void; - setNoDelay(noDelay?: boolean): void; - setSocketKeepAlive(enable?: boolean, initialDelay?: number): void; - - setHeader(name: string, value: string | string[]): void; - getHeader(name: string): string; - removeHeader(name: string): void; - addTrailers(headers: any): void; - - // Extended base methods - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - end(data?: any, encoding?: string): void; - } - export interface IncomingMessage extends events.EventEmitter, stream.Readable { - httpVersion: string; - httpVersionMajor: string; - httpVersionMinor: string; - connection: any; - headers: any; - rawHeaders: string[]; - trailers: any; - rawTrailers: any; - setTimeout(msecs: number, callback: Function): NodeJS.Timer; - /** - * Only valid for request obtained from http.Server. - */ - method?: string; - /** - * Only valid for request obtained from http.Server. - */ - url?: string; - /** - * Only valid for response obtained from http.ClientRequest. - */ - statusCode?: number; - /** - * Only valid for response obtained from http.ClientRequest. - */ - statusMessage?: string; - socket: net.Socket; - destroy(error?: Error): void; - } - /** - * @deprecated Use IncomingMessage - */ - export interface ClientResponse extends IncomingMessage { } - - export interface AgentOptions { - /** - * Keep sockets around in a pool to be used by other requests in the future. Default = false - */ - keepAlive?: boolean; - /** - * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000. - * Only relevant if keepAlive is set to true. - */ - keepAliveMsecs?: number; - /** - * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity - */ - maxSockets?: number; - /** - * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256. - */ - maxFreeSockets?: number; - } - - export class Agent { - maxSockets: number; - sockets: any; - requests: any; - - constructor(opts?: AgentOptions); - - /** - * Destroy any sockets that are currently in use by the agent. - * It is usually not necessary to do this. However, if you are using an agent with KeepAlive enabled, - * then it is best to explicitly shut down the agent when you know that it will no longer be used. Otherwise, - * sockets may hang open for quite a long time before the server terminates them. - */ - destroy(): void; - } - - export var METHODS: string[]; - - export var STATUS_CODES: { - [errorCode: number]: string; - [errorCode: string]: string; - }; - export function createServer(requestListener?: (request: IncomingMessage, response: ServerResponse) => void): Server; - export function createClient(port?: number, host?: string): any; - export function request(options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest; - export function get(options: any, callback?: (res: IncomingMessage) => void): ClientRequest; - export var globalAgent: Agent; -} - -declare module "cluster" { - import * as child from "child_process"; - import * as events from "events"; - - export interface ClusterSettings { - exec?: string; - args?: string[]; - silent?: boolean; - } - - export interface Address { - address: string; - port: number; - addressType: string; - } - - export class Worker extends events.EventEmitter { - id: string; - process: child.ChildProcess; - suicide: boolean; - send(message: any, sendHandle?: any): boolean; - kill(signal?: string): void; - destroy(signal?: string): void; - disconnect(): void; - isConnected(): boolean; - isDead(): boolean; - } - - export var settings: ClusterSettings; - export var isMaster: boolean; - export var isWorker: boolean; - export function setupMaster(settings?: ClusterSettings): void; - export function fork(env?: any): Worker; - export function disconnect(callback?: Function): void; - export var worker: Worker; - export var workers: { - [index: string]: Worker - }; - - // Event emitter - export function addListener(event: string, listener: Function): void; - export function on(event: "disconnect", listener: (worker: Worker) => void): void; - export function on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): void; - export function on(event: "fork", listener: (worker: Worker) => void): void; - export function on(event: "listening", listener: (worker: Worker, address: any) => void): void; - export function on(event: "message", listener: (worker: Worker, message: any) => void): void; - export function on(event: "online", listener: (worker: Worker) => void): void; - export function on(event: "setup", listener: (settings: any) => void): void; - export function on(event: string, listener: Function): any; - export function once(event: string, listener: Function): void; - export function removeListener(event: string, listener: Function): void; - export function removeAllListeners(event?: string): void; - export function setMaxListeners(n: number): void; - export function listeners(event: string): Function[]; - export function emit(event: string, ...args: any[]): boolean; -} - -declare module "zlib" { - import * as stream from "stream"; - export interface ZlibOptions { chunkSize?: number; windowBits?: number; level?: number; memLevel?: number; strategy?: number; dictionary?: any; } - - export interface Gzip extends stream.Transform { } - export interface Gunzip extends stream.Transform { } - export interface Deflate extends stream.Transform { } - export interface Inflate extends stream.Transform { } - export interface DeflateRaw extends stream.Transform { } - export interface InflateRaw extends stream.Transform { } - export interface Unzip extends stream.Transform { } - - export function createGzip(options?: ZlibOptions): Gzip; - export function createGunzip(options?: ZlibOptions): Gunzip; - export function createDeflate(options?: ZlibOptions): Deflate; - export function createInflate(options?: ZlibOptions): Inflate; - export function createDeflateRaw(options?: ZlibOptions): DeflateRaw; - export function createInflateRaw(options?: ZlibOptions): InflateRaw; - export function createUnzip(options?: ZlibOptions): Unzip; - - export function deflate(buf: Buffer, callback: (error: Error, result: any) => void): void; - export function deflateSync(buf: Buffer, options?: ZlibOptions): any; - export function deflateRaw(buf: Buffer, callback: (error: Error, result: any) => void): void; - export function deflateRawSync(buf: Buffer, options?: ZlibOptions): any; - export function gzip(buf: Buffer, callback: (error: Error, result: any) => void): void; - export function gzipSync(buf: Buffer, options?: ZlibOptions): any; - export function gunzip(buf: Buffer, callback: (error: Error, result: any) => void): void; - export function gunzipSync(buf: Buffer, options?: ZlibOptions): any; - export function inflate(buf: Buffer, callback: (error: Error, result: any) => void): void; - export function inflateSync(buf: Buffer, options?: ZlibOptions): any; - export function inflateRaw(buf: Buffer, callback: (error: Error, result: any) => void): void; - export function inflateRawSync(buf: Buffer, options?: ZlibOptions): any; - export function unzip(buf: Buffer, callback: (error: Error, result: any) => void): void; - export function unzipSync(buf: Buffer, options?: ZlibOptions): any; - - // Constants - export var Z_NO_FLUSH: number; - export var Z_PARTIAL_FLUSH: number; - export var Z_SYNC_FLUSH: number; - export var Z_FULL_FLUSH: number; - export var Z_FINISH: number; - export var Z_BLOCK: number; - export var Z_TREES: number; - export var Z_OK: number; - export var Z_STREAM_END: number; - export var Z_NEED_DICT: number; - export var Z_ERRNO: number; - export var Z_STREAM_ERROR: number; - export var Z_DATA_ERROR: number; - export var Z_MEM_ERROR: number; - export var Z_BUF_ERROR: number; - export var Z_VERSION_ERROR: number; - export var Z_NO_COMPRESSION: number; - export var Z_BEST_SPEED: number; - export var Z_BEST_COMPRESSION: number; - export var Z_DEFAULT_COMPRESSION: number; - export var Z_FILTERED: number; - export var Z_HUFFMAN_ONLY: number; - export var Z_RLE: number; - export var Z_FIXED: number; - export var Z_DEFAULT_STRATEGY: number; - export var Z_BINARY: number; - export var Z_TEXT: number; - export var Z_ASCII: number; - export var Z_UNKNOWN: number; - export var Z_DEFLATED: number; - export var Z_NULL: number; -} - -declare module "os" { - export interface CpuInfo { - model: string; - speed: number; - times: { - user: number; - nice: number; - sys: number; - idle: number; - irq: number; - }; - } - - export interface NetworkInterfaceInfo { - address: string; - netmask: string; - family: string; - mac: string; - internal: boolean; - } - - export function hostname(): string; - export function loadavg(): number[]; - export function uptime(): number; - export function freemem(): number; - export function totalmem(): number; - export function cpus(): CpuInfo[]; - export function type(): string; - export function release(): string; - export function networkInterfaces(): { [index: string]: NetworkInterfaceInfo[] }; - export function homedir(): string; - export function userInfo(options?: { encoding: string }): { username: string, uid: number, gid: number, shell: any, homedir: string } - export var constants: { - UV_UDP_REUSEADDR: number, - errno: { - SIGHUP: number; - SIGINT: number; - SIGQUIT: number; - SIGILL: number; - SIGTRAP: number; - SIGABRT: number; - SIGIOT: number; - SIGBUS: number; - SIGFPE: number; - SIGKILL: number; - SIGUSR1: number; - SIGSEGV: number; - SIGUSR2: number; - SIGPIPE: number; - SIGALRM: number; - SIGTERM: number; - SIGCHLD: number; - SIGSTKFLT: number; - SIGCONT: number; - SIGSTOP: number; - SIGTSTP: number; - SIGTTIN: number; - SIGTTOU: number; - SIGURG: number; - SIGXCPU: number; - SIGXFSZ: number; - SIGVTALRM: number; - SIGPROF: number; - SIGWINCH: number; - SIGIO: number; - SIGPOLL: number; - SIGPWR: number; - SIGSYS: number; - SIGUNUSED: number; - }, - signals: { - E2BIG: number; - EACCES: number; - EADDRINUSE: number; - EADDRNOTAVAIL: number; - EAFNOSUPPORT: number; - EAGAIN: number; - EALREADY: number; - EBADF: number; - EBADMSG: number; - EBUSY: number; - ECANCELED: number; - ECHILD: number; - ECONNABORTED: number; - ECONNREFUSED: number; - ECONNRESET: number; - EDEADLK: number; - EDESTADDRREQ: number; - EDOM: number; - EDQUOT: number; - EEXIST: number; - EFAULT: number; - EFBIG: number; - EHOSTUNREACH: number; - EIDRM: number; - EILSEQ: number; - EINPROGRESS: number; - EINTR: number; - EINVAL: number; - EIO: number; - EISCONN: number; - EISDIR: number; - ELOOP: number; - EMFILE: number; - EMLINK: number; - EMSGSIZE: number; - EMULTIHOP: number; - ENAMETOOLONG: number; - ENETDOWN: number; - ENETRESET: number; - ENETUNREACH: number; - ENFILE: number; - ENOBUFS: number; - ENODATA: number; - ENODEV: number; - ENOENT: number; - ENOEXEC: number; - ENOLCK: number; - ENOLINK: number; - ENOMEM: number; - ENOMSG: number; - ENOPROTOOPT: number; - ENOSPC: number; - ENOSR: number; - ENOSTR: number; - ENOSYS: number; - ENOTCONN: number; - ENOTDIR: number; - ENOTEMPTY: number; - ENOTSOCK: number; - ENOTSUP: number; - ENOTTY: number; - ENXIO: number; - EOPNOTSUPP: number; - EOVERFLOW: number; - EPERM: number; - EPIPE: number; - EPROTO: number; - EPROTONOSUPPORT: number; - EPROTOTYPE: number; - ERANGE: number; - EROFS: number; - ESPIPE: number; - ESRCH: number; - ESTALE: number; - ETIME: number; - ETIMEDOUT: number; - ETXTBSY: number; - EWOULDBLOCK: number; - EXDEV: number; - }, - }; - export function arch(): string; - export function platform(): string; - export function tmpdir(): string; - export function tmpDir(): string; - export function getNetworkInterfaces(): { [index: string]: NetworkInterfaceInfo[] }; - export var EOL: string; - export function endianness(): "BE" | "LE"; -} - -declare module "https" { - import * as tls from "tls"; - import * as events from "events"; - import * as http from "http"; - - export interface ServerOptions { - pfx?: any; - key?: any; - passphrase?: string; - cert?: any; - ca?: any; - crl?: any; - ciphers?: string; - honorCipherOrder?: boolean; - requestCert?: boolean; - rejectUnauthorized?: boolean; - NPNProtocols?: any; - SNICallback?: (servername: string, cb:(err:Error,ctx:tls.SecureContext)=>any) => any; - } - - export interface RequestOptions extends http.RequestOptions { - pfx?: any; - key?: any; - passphrase?: string; - cert?: any; - ca?: any; - ciphers?: string; - rejectUnauthorized?: boolean; - secureProtocol?: string; - } - - export interface Agent extends http.Agent { } - - export interface AgentOptions extends http.AgentOptions { - pfx?: any; - key?: any; - passphrase?: string; - cert?: any; - ca?: any; - ciphers?: string; - rejectUnauthorized?: boolean; - secureProtocol?: string; - maxCachedSessions?: number; - } - - export var Agent: { - new (options?: AgentOptions): Agent; - }; - export interface Server extends tls.Server { } - export function createServer(options: ServerOptions, requestListener?: Function): Server; - export function request(options: RequestOptions, callback?: (res: http.IncomingMessage) => void): http.ClientRequest; - export function get(options: RequestOptions, callback?: (res: http.IncomingMessage) => void): http.ClientRequest; - export var globalAgent: Agent; -} - -declare module "punycode" { - export function decode(string: string): string; - export function encode(string: string): string; - export function toUnicode(domain: string): string; - export function toASCII(domain: string): string; - export var ucs2: ucs2; - interface ucs2 { - decode(string: string): number[]; - encode(codePoints: number[]): string; - } - export var version: any; -} - -declare module "repl" { - import * as stream from "stream"; - import * as readline from "readline"; - - export interface ReplOptions { - prompt?: string; - input?: NodeJS.ReadableStream; - output?: NodeJS.WritableStream; - terminal?: boolean; - eval?: Function; - useColors?: boolean; - useGlobal?: boolean; - ignoreUndefined?: boolean; - writer?: Function; - completer?: Function; - replMode?: any; - breakEvalOnSigint?: any; - } - - export interface REPLServer extends readline.ReadLine { - defineCommand(keyword: string, cmd: Function | { help: string, action: Function }): void; - displayPrompt(preserveCursor?: boolean): void - } - - export function start(options: ReplOptions): REPLServer; -} - -declare module "readline" { - import * as events from "events"; - import * as stream from "stream"; - - export interface Key { - sequence?: string; - name?: string; - ctrl?: boolean; - meta?: boolean; - shift?: boolean; - } - - export interface ReadLine extends events.EventEmitter { - setPrompt(prompt: string): void; - prompt(preserveCursor?: boolean): void; - question(query: string, callback: (answer: string) => void): void; - pause(): ReadLine; - resume(): ReadLine; - close(): void; - write(data: string | Buffer, key?: Key): void; - } - - export interface Completer { - (line: string): CompleterResult; - (line: string, callback: (err: any, result: CompleterResult) => void): any; - } - - export interface CompleterResult { - completions: string[]; - line: string; - } - - export interface ReadLineOptions { - input: NodeJS.ReadableStream; - output?: NodeJS.WritableStream; - completer?: Completer; - terminal?: boolean; - historySize?: number; - } - - export function createInterface(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer, terminal?: boolean): ReadLine; - export function createInterface(options: ReadLineOptions): ReadLine; - - export function cursorTo(stream: NodeJS.WritableStream, x: number, y: number): void; - export function moveCursor(stream: NodeJS.WritableStream, dx: number | string, dy: number | string): void; - export function clearLine(stream: NodeJS.WritableStream, dir: number): void; - export function clearScreenDown(stream: NodeJS.WritableStream): void; -} - -declare module "vm" { - export interface Context { } - export interface ScriptOptions { - filename?: string; - lineOffset?: number; - columnOffset?: number; - displayErrors?: boolean; - timeout?: number; - cachedData?: Buffer; - produceCachedData?: boolean; - } - export interface RunningScriptOptions { - filename?: string; - lineOffset?: number; - columnOffset?: number; - displayErrors?: boolean; - timeout?: number; - } - export class Script { - constructor(code: string, options?: ScriptOptions); - runInContext(contextifiedSandbox: Context, options?: RunningScriptOptions): any; - runInNewContext(sandbox?: Context, options?: RunningScriptOptions): any; - runInThisContext(options?: RunningScriptOptions): any; - } - export function createContext(sandbox?: Context): Context; - export function isContext(sandbox: Context): boolean; - export function runInContext(code: string, contextifiedSandbox: Context, options?: RunningScriptOptions): any; - export function runInDebugContext(code: string): any; - export function runInNewContext(code: string, sandbox?: Context, options?: RunningScriptOptions): any; - export function runInThisContext(code: string, options?: RunningScriptOptions): any; -} - -declare module "child_process" { - import * as events from "events"; - import * as stream from "stream"; - - export interface ChildProcess extends events.EventEmitter { - stdin: stream.Writable; - stdout: stream.Readable; - stderr: stream.Readable; - stdio: [stream.Writable, stream.Readable, stream.Readable]; - pid: number; - kill(signal?: string): void; - send(message: any, sendHandle?: any): boolean; - connected: boolean; - disconnect(): void; - unref(): void; - ref(): void; - } - - export interface SpawnOptions { - cwd?: string; - env?: any; - stdio?: any; - detached?: boolean; - uid?: number; - gid?: number; - shell?: boolean | string; - } - export function spawn(command: string, args?: string[], options?: SpawnOptions): ChildProcess; - - export interface ExecOptions { - cwd?: string; - env?: any; - shell?: string; - timeout?: number; - maxBuffer?: number; - killSignal?: string; - uid?: number; - gid?: number; - } - export interface ExecOptionsWithStringEncoding extends ExecOptions { - encoding: BufferEncoding; - } - export interface ExecOptionsWithBufferEncoding extends ExecOptions { - encoding: string; // specify `null`. - } - export function exec(command: string, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess; - export function exec(command: string, options: ExecOptionsWithStringEncoding, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess; - // usage. child_process.exec("tsc", {encoding: null as string}, (err, stdout, stderr) => {}); - export function exec(command: string, options: ExecOptionsWithBufferEncoding, callback?: (error: Error, stdout: Buffer, stderr: Buffer) => void): ChildProcess; - export function exec(command: string, options: ExecOptions, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess; - - export interface ExecFileOptions { - cwd?: string; - env?: any; - timeout?: number; - maxBuffer?: number; - killSignal?: string; - uid?: number; - gid?: number; - } - export interface ExecFileOptionsWithStringEncoding extends ExecFileOptions { - encoding: BufferEncoding; - } - export interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions { - encoding: string; // specify `null`. - } - export function execFile(file: string, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess; - export function execFile(file: string, options?: ExecFileOptionsWithStringEncoding, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess; - // usage. child_process.execFile("file.sh", {encoding: null as string}, (err, stdout, stderr) => {}); - export function execFile(file: string, options?: ExecFileOptionsWithBufferEncoding, callback?: (error: Error, stdout: Buffer, stderr: Buffer) => void): ChildProcess; - export function execFile(file: string, options?: ExecFileOptions, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess; - export function execFile(file: string, args?: string[], callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess; - export function execFile(file: string, args?: string[], options?: ExecFileOptionsWithStringEncoding, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess; - // usage. child_process.execFile("file.sh", ["foo"], {encoding: null as string}, (err, stdout, stderr) => {}); - export function execFile(file: string, args?: string[], options?: ExecFileOptionsWithBufferEncoding, callback?: (error: Error, stdout: Buffer, stderr: Buffer) => void): ChildProcess; - export function execFile(file: string, args?: string[], options?: ExecFileOptions, callback?: (error: Error, stdout: string, stderr: string) => void): ChildProcess; - - export interface ForkOptions { - cwd?: string; - env?: any; - execPath?: string; - execArgv?: string[]; - silent?: boolean; - uid?: number; - gid?: number; - } - export function fork(modulePath: string, args?: string[], options?: ForkOptions): ChildProcess; - - export interface SpawnSyncOptions { - cwd?: string; - input?: string | Buffer; - stdio?: any; - env?: any; - uid?: number; - gid?: number; - timeout?: number; - killSignal?: string; - maxBuffer?: number; - encoding?: string; - shell?: boolean | string; - } - export interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions { - encoding: BufferEncoding; - } - export interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions { - encoding: string; // specify `null`. - } - export interface SpawnSyncReturns { - pid: number; - output: string[]; - stdout: T; - stderr: T; - status: number; - signal: string; - error: Error; - } - export function spawnSync(command: string): SpawnSyncReturns; - export function spawnSync(command: string, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; - export function spawnSync(command: string, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; - export function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns; - export function spawnSync(command: string, args?: string[], options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; - export function spawnSync(command: string, args?: string[], options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; - export function spawnSync(command: string, args?: string[], options?: SpawnSyncOptions): SpawnSyncReturns; - - export interface ExecSyncOptions { - cwd?: string; - input?: string | Buffer; - stdio?: any; - env?: any; - shell?: string; - uid?: number; - gid?: number; - timeout?: number; - killSignal?: string; - maxBuffer?: number; - encoding?: string; - } - export interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions { - encoding: BufferEncoding; - } - export interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions { - encoding: string; // specify `null`. - } - export function execSync(command: string): Buffer; - export function execSync(command: string, options?: ExecSyncOptionsWithStringEncoding): string; - export function execSync(command: string, options?: ExecSyncOptionsWithBufferEncoding): Buffer; - export function execSync(command: string, options?: ExecSyncOptions): Buffer; - - export interface ExecFileSyncOptions { - cwd?: string; - input?: string | Buffer; - stdio?: any; - env?: any; - uid?: number; - gid?: number; - timeout?: number; - killSignal?: string; - maxBuffer?: number; - encoding?: string; - } - export interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions { - encoding: BufferEncoding; - } - export interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions { - encoding: string; // specify `null`. - } - export function execFileSync(command: string): Buffer; - export function execFileSync(command: string, options?: ExecFileSyncOptionsWithStringEncoding): string; - export function execFileSync(command: string, options?: ExecFileSyncOptionsWithBufferEncoding): Buffer; - export function execFileSync(command: string, options?: ExecFileSyncOptions): Buffer; - export function execFileSync(command: string, args?: string[], options?: ExecFileSyncOptionsWithStringEncoding): string; - export function execFileSync(command: string, args?: string[], options?: ExecFileSyncOptionsWithBufferEncoding): Buffer; - export function execFileSync(command: string, args?: string[], options?: ExecFileSyncOptions): Buffer; -} - -declare module "url" { - export interface Url { - href?: string; - protocol?: string; - auth?: string; - hostname?: string; - port?: string; - host?: string; - pathname?: string; - search?: string; - query?: string | any; - slashes?: boolean; - hash?: string; - path?: string; - } - - export function parse(urlStr: string, parseQueryString?: boolean, slashesDenoteHost?: boolean): Url; - export function format(url: Url): string; - export function resolve(from: string, to: string): string; -} - -declare module "dns" { - export function lookup(domain: string, family: number, callback: (err: Error, address: string, family: number) => void): string; - export function lookup(domain: string, callback: (err: Error, address: string, family: number) => void): string; - export function resolve(domain: string, rrtype: string, callback: (err: Error, addresses: string[]) => void): string[]; - export function resolve(domain: string, callback: (err: Error, addresses: string[]) => void): string[]; - export function resolve4(domain: string, callback: (err: Error, addresses: string[]) => void): string[]; - export function resolve6(domain: string, callback: (err: Error, addresses: string[]) => void): string[]; - export function resolveMx(domain: string, callback: (err: Error, addresses: string[]) => void): string[]; - export function resolveTxt(domain: string, callback: (err: Error, addresses: string[]) => void): string[]; - export function resolveSrv(domain: string, callback: (err: Error, addresses: string[]) => void): string[]; - export function resolveNs(domain: string, callback: (err: Error, addresses: string[]) => void): string[]; - export function resolveCname(domain: string, callback: (err: Error, addresses: string[]) => void): string[]; - export function reverse(ip: string, callback: (err: Error, domains: string[]) => void): string[]; - - //Error codes - export var NODATA: string; - export var FORMERR: string; - export var SERVFAIL: string; - export var NOTFOUND: string; - export var NOTIMP: string; - export var REFUSED: string; - export var BADQUERY: string; - export var BADNAME: string; - export var BADFAMILY: string; - export var BADRESP: string; - export var CONNREFUSED: string; - export var TIMEOUT: string; - export var EOF: string; - export var FILE: string; - export var NOMEM: string; - export var DESTRUCTION: string; - export var BADSTR: string; - export var BADFLAGS: string; - export var NONAME: string; - export var BADHINTS: string; - export var NOTINITIALIZED: string; - export var LOADIPHLPAPI: string; - export var ADDRGETNETWORKPARAMS: string; - export var CANCELLED: string; -} - -declare module "net" { - import * as stream from "stream"; - - export interface Socket extends stream.Duplex { - // Extended base methods - write(buffer: Buffer): boolean; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - write(str: string, encoding?: string, fd?: string): boolean; - - connect(port: number, host?: string, connectionListener?: Function): void; - connect(path: string, connectionListener?: Function): void; - bufferSize: number; - setEncoding(encoding?: string): void; - write(data: any, encoding?: string, callback?: Function): void; - destroy(): void; - pause(): Socket; - resume(): Socket; - setTimeout(timeout: number, callback?: Function): void; - setNoDelay(noDelay?: boolean): void; - setKeepAlive(enable?: boolean, initialDelay?: number): void; - address(): { port: number; family: string; address: string; }; - unref(): void; - ref(): void; - - remoteAddress: string; - remoteFamily: string; - remotePort: number; - localAddress: string; - localPort: number; - bytesRead: number; - bytesWritten: number; - - // Extended base methods - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - end(data?: any, encoding?: string): void; - } - - export var Socket: { - new (options?: { fd?: string; type?: string; allowHalfOpen?: boolean; }): Socket; - }; - - export interface ListenOptions { - port?: number; - host?: string; - backlog?: number; - path?: string; - exclusive?: boolean; - } - - export interface Server extends Socket { - listen(port: number, hostname?: string, backlog?: number, listeningListener?: Function): Server; - listen(port: number, hostname?: string, listeningListener?: Function): Server; - listen(port: number, backlog?: number, listeningListener?: Function): Server; - listen(port: number, listeningListener?: Function): Server; - listen(path: string, backlog?: number, listeningListener?: Function): Server; - listen(path: string, listeningListener?: Function): Server; - listen(handle: any, backlog?: number, listeningListener?: Function): Server; - listen(handle: any, listeningListener?: Function): Server; - listen(options: ListenOptions, listeningListener?: Function): Server; - close(callback?: Function): Server; - address(): { port: number; family: string; address: string; }; - getConnections(cb: (error: Error, count: number) => void): void; - ref(): Server; - unref(): Server; - maxConnections: number; - connections: number; - } - export function createServer(connectionListener?: (socket: Socket) => void): Server; - export function createServer(options?: { allowHalfOpen?: boolean; }, connectionListener?: (socket: Socket) => void): Server; - export function connect(options: { port: number, host?: string, localAddress?: string, localPort?: string, family?: number, allowHalfOpen?: boolean; }, connectionListener?: Function): Socket; - export function connect(port: number, host?: string, connectionListener?: Function): Socket; - export function connect(path: string, connectionListener?: Function): Socket; - export function createConnection(options: { port: number, host?: string, localAddress?: string, localPort?: string, family?: number, allowHalfOpen?: boolean; }, connectionListener?: Function): Socket; - export function createConnection(port: number, host?: string, connectionListener?: Function): Socket; - export function createConnection(path: string, connectionListener?: Function): Socket; - export function isIP(input: string): number; - export function isIPv4(input: string): boolean; - export function isIPv6(input: string): boolean; -} - -declare module "dgram" { - import * as events from "events"; - - interface RemoteInfo { - address: string; - port: number; - size: number; - } - - interface AddressInfo { - address: string; - family: string; - port: number; - } - - interface BindOptions { - port: number; - address?: string; - exclusive?: boolean; - } - - interface SocketOptions { - type: "udp4" | "udp6"; - reuseAddr?: boolean; - } - - export function createSocket(type: string, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; - export function createSocket(options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; - - export interface Socket extends events.EventEmitter { - send(msg: Buffer | String | any[], port: number, address: string, callback?: (error: Error, bytes: number) => void): void; - send(msg: Buffer | String | any[], offset: number, length: number, port: number, address: string, callback?: (error: Error, bytes: number) => void): void; - bind(port?: number, address?: string, callback?: () => void): void; - bind(options: BindOptions, callback?: Function): void; - close(callback?: any): void; - address(): AddressInfo; - setBroadcast(flag: boolean): void; - setTTL(ttl: number): void; - setMulticastTTL(ttl: number): void; - setMulticastLoopback(flag: boolean): void; - addMembership(multicastAddress: string, multicastInterface?: string): void; - dropMembership(multicastAddress: string, multicastInterface?: string): void; - ref(): void; - unref(): void; - } -} - -declare module "fs" { - import * as stream from "stream"; - import * as events from "events"; - - interface Stats { - isFile(): boolean; - isDirectory(): boolean; - isBlockDevice(): boolean; - isCharacterDevice(): boolean; - isSymbolicLink(): boolean; - isFIFO(): boolean; - isSocket(): boolean; - dev: number; - ino: number; - mode: number; - nlink: number; - uid: number; - gid: number; - rdev: number; - size: number; - blksize: number; - blocks: number; - atime: Date; - mtime: Date; - ctime: Date; - birthtime: Date; - } - - interface FSWatcher extends events.EventEmitter { - close(): void; - } - - export interface ReadStream extends stream.Readable { - close(): void; - destroy(): void; - } - export interface WriteStream extends stream.Writable { - close(): void; - bytesWritten: number; - path: string | Buffer; - } - - /** - * Asynchronous rename. - * @param oldPath - * @param newPath - * @param callback No arguments other than a possible exception are given to the completion callback. - */ - export function rename(oldPath: string, newPath: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - /** - * Synchronous rename - * @param oldPath - * @param newPath - */ - export function renameSync(oldPath: string, newPath: string): void; - export function truncate(path: string | Buffer, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function truncate(path: string | Buffer, len: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function truncateSync(path: string | Buffer, len?: number): void; - export function ftruncate(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function ftruncate(fd: number, len: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function ftruncateSync(fd: number, len?: number): void; - export function chown(path: string | Buffer, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function chownSync(path: string | Buffer, uid: number, gid: number): void; - export function fchown(fd: number, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function fchownSync(fd: number, uid: number, gid: number): void; - export function lchown(path: string | Buffer, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function lchownSync(path: string | Buffer, uid: number, gid: number): void; - export function chmod(path: string | Buffer, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function chmod(path: string | Buffer, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function chmodSync(path: string | Buffer, mode: number): void; - export function chmodSync(path: string | Buffer, mode: string): void; - export function fchmod(fd: number, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function fchmod(fd: number, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function fchmodSync(fd: number, mode: number): void; - export function fchmodSync(fd: number, mode: string): void; - export function lchmod(path: string | Buffer, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function lchmod(path: string | Buffer, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function lchmodSync(path: string | Buffer, mode: number): void; - export function lchmodSync(path: string | Buffer, mode: string): void; - export function stat(path: string | Buffer, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; - export function lstat(path: string | Buffer, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; - export function fstat(fd: number, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; - export function statSync(path: string | Buffer): Stats; - export function lstatSync(path: string | Buffer): Stats; - export function fstatSync(fd: number): Stats; - export function link(srcpath: string | Buffer, dstpath: string | Buffer, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function linkSync(srcpath: string | Buffer, dstpath: string | Buffer): void; - export function symlink(srcpath: string | Buffer, dstpath: string | Buffer, type?: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function symlinkSync(srcpath: string | Buffer, dstpath: string | Buffer, type?: string): void; - export function readlink(path: string | Buffer, callback?: (err: NodeJS.ErrnoException, linkString: string) => any): void; - export function readlinkSync(path: string | Buffer): string; - export function realpath(path: string | Buffer, callback?: (err: NodeJS.ErrnoException, resolvedPath: string) => any): void; - export function realpath(path: string | Buffer, cache: { [path: string]: string }, callback: (err: NodeJS.ErrnoException, resolvedPath: string) => any): void; - export function realpathSync(path: string | Buffer, cache?: { [path: string]: string }): string; - /* - * Asynchronous unlink - deletes the file specified in {path} - * - * @param path - * @param callback No arguments other than a possible exception are given to the completion callback. - */ - export function unlink(path: string | Buffer, callback?: (err?: NodeJS.ErrnoException) => void): void; - /* - * Synchronous unlink - deletes the file specified in {path} - * - * @param path - */ - export function unlinkSync(path: string | Buffer): void; - /* - * Asynchronous rmdir - removes the directory specified in {path} - * - * @param path - * @param callback No arguments other than a possible exception are given to the completion callback. - */ - export function rmdir(path: string | Buffer, callback?: (err?: NodeJS.ErrnoException) => void): void; - /* - * Synchronous rmdir - removes the directory specified in {path} - * - * @param path - */ - export function rmdirSync(path: string | Buffer): void; - /* - * Asynchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. - * - * @param path - * @param callback No arguments other than a possible exception are given to the completion callback. - */ - export function mkdir(path: string | Buffer, callback?: (err?: NodeJS.ErrnoException) => void): void; - /* - * Asynchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. - * - * @param path - * @param mode - * @param callback No arguments other than a possible exception are given to the completion callback. - */ - export function mkdir(path: string | Buffer, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - /* - * Asynchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. - * - * @param path - * @param mode - * @param callback No arguments other than a possible exception are given to the completion callback. - */ - export function mkdir(path: string | Buffer, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - /* - * Synchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. - * - * @param path - * @param mode - * @param callback No arguments other than a possible exception are given to the completion callback. - */ - export function mkdirSync(path: string | Buffer, mode?: number): void; - /* - * Synchronous mkdir - creates the directory specified in {path}. Parameter {mode} defaults to 0777. - * - * @param path - * @param mode - * @param callback No arguments other than a possible exception are given to the completion callback. - */ - export function mkdirSync(path: string | Buffer, mode?: string): void; - /* - * Asynchronous mkdtemp - Creates a unique temporary directory. Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * - * @param prefix - * @param callback The created folder path is passed as a string to the callback's second parameter. - */ - export function mkdtemp(prefix: string, callback?: (err: NodeJS.ErrnoException, folder: string) => void): void; - /* - * Synchronous mkdtemp - Creates a unique temporary directory. Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * - * @param prefix - * @returns Returns the created folder path. - */ - export function mkdtempSync(prefix: string): string; - export function readdir(path: string | Buffer, callback?: (err: NodeJS.ErrnoException, files: string[]) => void): void; - export function readdirSync(path: string | Buffer): string[]; - export function close(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function closeSync(fd: number): void; - export function open(path: string | Buffer, flags: string | number, callback: (err: NodeJS.ErrnoException, fd: number) => void): void; - export function open(path: string | Buffer, flags: string | number, mode: number, callback: (err: NodeJS.ErrnoException, fd: number) => void): void; - export function openSync(path: string | Buffer, flags: string | number, mode?: number): number; - export function utimes(path: string | Buffer, atime: number, mtime: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function utimes(path: string | Buffer, atime: Date, mtime: Date, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function utimesSync(path: string | Buffer, atime: number, mtime: number): void; - export function utimesSync(path: string | Buffer, atime: Date, mtime: Date): void; - export function futimes(fd: number, atime: number, mtime: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function futimes(fd: number, atime: Date, mtime: Date, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function futimesSync(fd: number, atime: number, mtime: number): void; - export function futimesSync(fd: number, atime: Date, mtime: Date): void; - export function fsync(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function fsyncSync(fd: number): void; - export function write(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: NodeJS.ErrnoException, written: number, buffer: Buffer) => void): void; - export function write(fd: number, buffer: Buffer, offset: number, length: number, callback?: (err: NodeJS.ErrnoException, written: number, buffer: Buffer) => void): void; - export function write(fd: number, data: any, callback?: (err: NodeJS.ErrnoException, written: number, str: string) => void): void; - export function write(fd: number, data: any, offset: number, callback?: (err: NodeJS.ErrnoException, written: number, str: string) => void): void; - export function write(fd: number, data: any, offset: number, encoding: string, callback?: (err: NodeJS.ErrnoException, written: number, str: string) => void): void; - export function writeSync(fd: number, buffer: Buffer, offset: number, length: number, position?: number): number; - export function writeSync(fd: number, data: any, position?: number, enconding?: string): number; - export function read(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: NodeJS.ErrnoException, bytesRead: number, buffer: Buffer) => void): void; - export function readSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number; - /* - * Asynchronous readFile - Asynchronously reads the entire contents of a file. - * - * @param fileName - * @param encoding - * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file. - */ - export function readFile(filename: string, encoding: string, callback: (err: NodeJS.ErrnoException, data: string) => void): void; - /* - * Asynchronous readFile - Asynchronously reads the entire contents of a file. - * - * @param fileName - * @param options An object with optional {encoding} and {flag} properties. If {encoding} is specified, readFile returns a string; otherwise it returns a Buffer. - * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file. - */ - export function readFile(filename: string, options: { encoding: string; flag?: string; }, callback: (err: NodeJS.ErrnoException, data: string) => void): void; - /* - * Asynchronous readFile - Asynchronously reads the entire contents of a file. - * - * @param fileName - * @param options An object with optional {encoding} and {flag} properties. If {encoding} is specified, readFile returns a string; otherwise it returns a Buffer. - * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file. - */ - export function readFile(filename: string, options: { flag?: string; }, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void; - /* - * Asynchronous readFile - Asynchronously reads the entire contents of a file. - * - * @param fileName - * @param callback - The callback is passed two arguments (err, data), where data is the contents of the file. - */ - export function readFile(filename: string, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void; - /* - * Synchronous readFile - Synchronously reads the entire contents of a file. - * - * @param fileName - * @param encoding - */ - export function readFileSync(filename: string, encoding: string): string; - /* - * Synchronous readFile - Synchronously reads the entire contents of a file. - * - * @param fileName - * @param options An object with optional {encoding} and {flag} properties. If {encoding} is specified, readFileSync returns a string; otherwise it returns a Buffer. - */ - export function readFileSync(filename: string, options: { encoding: string; flag?: string; }): string; - /* - * Synchronous readFile - Synchronously reads the entire contents of a file. - * - * @param fileName - * @param options An object with optional {encoding} and {flag} properties. If {encoding} is specified, readFileSync returns a string; otherwise it returns a Buffer. - */ - export function readFileSync(filename: string, options?: { flag?: string; }): Buffer; - export function writeFile(filename: string, data: any, callback?: (err: NodeJS.ErrnoException) => void): void; - export function writeFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; - export function writeFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; - export function writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void; - export function writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void; - export function appendFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; - export function appendFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; - export function appendFile(filename: string, data: any, callback?: (err: NodeJS.ErrnoException) => void): void; - export function appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void; - export function appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void; - export function watchFile(filename: string, listener: (curr: Stats, prev: Stats) => void): void; - export function watchFile(filename: string, options: { persistent?: boolean; interval?: number; }, listener: (curr: Stats, prev: Stats) => void): void; - export function unwatchFile(filename: string, listener?: (curr: Stats, prev: Stats) => void): void; - export function watch(filename: string, listener?: (event: string, filename: string) => any): FSWatcher; - export function watch(filename: string, encoding: string, listener?: (event: string, filename: string | Buffer) => any): FSWatcher; - export function watch(filename: string, options: { persistent?: boolean; recursive?: boolean; encoding?: string }, listener?: (event: string, filename: string | Buffer) => any): FSWatcher; - export function exists(path: string | Buffer, callback?: (exists: boolean) => void): void; - export function existsSync(path: string | Buffer): boolean; - - interface Constants { - /** Constant for fs.access(). File is visible to the calling process. */ - F_OK: number; - - /** Constant for fs.access(). File can be read by the calling process. */ - R_OK: number; - - /** Constant for fs.access(). File can be written by the calling process. */ - W_OK: number; - - /** Constant for fs.access(). File can be executed by the calling process. */ - X_OK: number; - } - - export const constants: Constants; - - /** Tests a user's permissions for the file specified by path. */ - export function access(path: string | Buffer, callback: (err: NodeJS.ErrnoException) => void): void; - export function access(path: string | Buffer, mode: number, callback: (err: NodeJS.ErrnoException) => void): void; - /** Synchronous version of fs.access. This throws if any accessibility checks fail, and does nothing otherwise. */ - export function accessSync(path: string | Buffer, mode?: number): void; - export function createReadStream(path: string | Buffer, options?: { - flags?: string; - encoding?: string; - fd?: number; - mode?: number; - autoClose?: boolean; - start?: number; - end?: number; - }): ReadStream; - export function createWriteStream(path: string | Buffer, options?: { - flags?: string; - encoding?: string; - fd?: number; - mode?: number; - }): WriteStream; - export function fdatasync(fd: number, callback: Function): void; - export function fdatasyncSync(fd: number): void; -} - -declare module "path" { - - /** - * A parsed path object generated by path.parse() or consumed by path.format(). - */ - export interface ParsedPath { - /** - * The root of the path such as '/' or 'c:\' - */ - root: string; - /** - * The full directory path such as '/home/user/dir' or 'c:\path\dir' - */ - dir: string; - /** - * The file name including extension (if any) such as 'index.html' - */ - base: string; - /** - * The file extension (if any) such as '.html' - */ - ext: string; - /** - * The file name without extension (if any) such as 'index' - */ - name: string; - } - - /** - * Normalize a string path, reducing '..' and '.' parts. - * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used. - * - * @param p string path to normalize. - */ - export function normalize(p: string): string; - /** - * Join all arguments together and normalize the resulting path. - * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown. - * - * @param paths string paths to join. - */ - export function join(...paths: any[]): string; - /** - * Join all arguments together and normalize the resulting path. - * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown. - * - * @param paths string paths to join. - */ - export function join(...paths: string[]): string; - /** - * The right-most parameter is considered {to}. Other parameters are considered an array of {from}. - * - * Starting from leftmost {from} paramter, resolves {to} to an absolute path. - * - * If {to} isn't already absolute, {from} arguments are prepended in right to left order, until an absolute path is found. If after using all {from} paths still no absolute path is found, the current working directory is used as well. The resulting path is normalized, and trailing slashes are removed unless the path gets resolved to the root directory. - * - * @param pathSegments string paths to join. Non-string arguments are ignored. - */ - export function resolve(...pathSegments: any[]): string; - /** - * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory. - * - * @param path path to test. - */ - export function isAbsolute(path: string): boolean; - /** - * Solve the relative path from {from} to {to}. - * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve. - * - * @param from - * @param to - */ - export function relative(from: string, to: string): string; - /** - * Return the directory name of a path. Similar to the Unix dirname command. - * - * @param p the path to evaluate. - */ - export function dirname(p: string): string; - /** - * Return the last portion of a path. Similar to the Unix basename command. - * Often used to extract the file name from a fully qualified path. - * - * @param p the path to evaluate. - * @param ext optionally, an extension to remove from the result. - */ - export function basename(p: string, ext?: string): string; - /** - * Return the extension of the path, from the last '.' to end of string in the last portion of the path. - * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string - * - * @param p the path to evaluate. - */ - export function extname(p: string): string; - /** - * The platform-specific file separator. '\\' or '/'. - */ - export var sep: string; - /** - * The platform-specific file delimiter. ';' or ':'. - */ - export var delimiter: string; - /** - * Returns an object from a path string - the opposite of format(). - * - * @param pathString path to evaluate. - */ - export function parse(pathString: string): ParsedPath; - /** - * Returns a path string from an object - the opposite of parse(). - * - * @param pathString path to evaluate. - */ - export function format(pathObject: ParsedPath): string; - - export module posix { - export function normalize(p: string): string; - export function join(...paths: any[]): string; - export function resolve(...pathSegments: any[]): string; - export function isAbsolute(p: string): boolean; - export function relative(from: string, to: string): string; - export function dirname(p: string): string; - export function basename(p: string, ext?: string): string; - export function extname(p: string): string; - export var sep: string; - export var delimiter: string; - export function parse(p: string): ParsedPath; - export function format(pP: ParsedPath): string; - } - - export module win32 { - export function normalize(p: string): string; - export function join(...paths: any[]): string; - export function resolve(...pathSegments: any[]): string; - export function isAbsolute(p: string): boolean; - export function relative(from: string, to: string): string; - export function dirname(p: string): string; - export function basename(p: string, ext?: string): string; - export function extname(p: string): string; - export var sep: string; - export var delimiter: string; - export function parse(p: string): ParsedPath; - export function format(pP: ParsedPath): string; - } -} - -declare module "string_decoder" { - export interface NodeStringDecoder { - write(buffer: Buffer): string; - end(buffer?: Buffer): string; - } - export var StringDecoder: { - new (encoding?: string): NodeStringDecoder; - }; -} - -declare module "tls" { - import * as crypto from "crypto"; - import * as net from "net"; - import * as stream from "stream"; - - var CLIENT_RENEG_LIMIT: number; - var CLIENT_RENEG_WINDOW: number; - - export interface Certificate { - /** - * Country code. - */ - C: string; - /** - * Street. - */ - ST: string; - /** - * Locality. - */ - L: string; - /** - * Organization. - */ - O: string; - /** - * Organizational unit. - */ - OU: string; - /** - * Common name. - */ - CN: string; - } - - export interface CipherNameAndProtocol { - /** - * The cipher name. - */ - name: string; - /** - * SSL/TLS protocol version. - */ - version: string; - } - - export class TLSSocket extends stream.Duplex { - /** - * Returns the bound address, the address family name and port of the underlying socket as reported by - * the operating system. - * @returns {any} - An object with three properties, e.g. { port: 12346, family: 'IPv4', address: '127.0.0.1' }. - */ - address(): { port: number; family: string; address: string }; - /** - * A boolean that is true if the peer certificate was signed by one of the specified CAs, otherwise false. - */ - authorized: boolean; - /** - * The reason why the peer's certificate has not been verified. - * This property becomes available only when tlsSocket.authorized === false. - */ - authorizationError: Error; - /** - * Static boolean value, always true. - * May be used to distinguish TLS sockets from regular ones. - */ - encrypted: boolean; - /** - * Returns an object representing the cipher name and the SSL/TLS protocol version of the current connection. - * @returns {CipherNameAndProtocol} - Returns an object representing the cipher name - * and the SSL/TLS protocol version of the current connection. - */ - getCipher(): CipherNameAndProtocol; - /** - * Returns an object representing the peer's certificate. - * The returned object has some properties corresponding to the field of the certificate. - * If detailed argument is true the full chain with issuer property will be returned, - * if false only the top certificate without issuer property. - * If the peer does not provide a certificate, it returns null or an empty object. - * @param {boolean} detailed - If true; the full chain with issuer property will be returned. - * @returns {any} - An object representing the peer's certificate. - */ - getPeerCertificate(detailed?: boolean): { - subject: Certificate; - issuerInfo: Certificate; - issuer: Certificate; - raw: any; - valid_from: string; - valid_to: string; - fingerprint: string; - serialNumber: string; - }; - /** - * Could be used to speed up handshake establishment when reconnecting to the server. - * @returns {any} - ASN.1 encoded TLS session or undefined if none was negotiated. - */ - getSession(): any; - /** - * NOTE: Works only with client TLS sockets. - * Useful only for debugging, for session reuse provide session option to tls.connect(). - * @returns {any} - TLS session ticket or undefined if none was negotiated. - */ - getTLSTicket(): any; - /** - * The string representation of the local IP address. - */ - localAddress: string; - /** - * The numeric representation of the local port. - */ - localPort: string; - /** - * The string representation of the remote IP address. - * For example, '74.125.127.100' or '2001:4860:a005::68'. - */ - remoteAddress: string; - /** - * The string representation of the remote IP family. 'IPv4' or 'IPv6'. - */ - remoteFamily: string; - /** - * The numeric representation of the remote port. For example, 443. - */ - remotePort: number; - /** - * Initiate TLS renegotiation process. - * - * NOTE: Can be used to request peer's certificate after the secure connection has been established. - * ANOTHER NOTE: When running as the server, socket will be destroyed with an error after handshakeTimeout timeout. - * @param {TlsOptions} options - The options may contain the following fields: rejectUnauthorized, - * requestCert (See tls.createServer() for details). - * @param {Function} callback - callback(err) will be executed with null as err, once the renegotiation - * is successfully completed. - */ - renegotiate(options: TlsOptions, callback: (err: Error) => any): any; - /** - * Set maximum TLS fragment size (default and maximum value is: 16384, minimum is: 512). - * Smaller fragment size decreases buffering latency on the client: large fragments are buffered by - * the TLS layer until the entire fragment is received and its integrity is verified; - * large fragments can span multiple roundtrips, and their processing can be delayed due to packet - * loss or reordering. However, smaller fragments add extra TLS framing bytes and CPU overhead, - * which may decrease overall server throughput. - * @param {number} size - TLS fragment size (default and maximum value is: 16384, minimum is: 512). - * @returns {boolean} - Returns true on success, false otherwise. - */ - setMaxSendFragment(size: number): boolean; - } - - export interface TlsOptions { - host?: string; - port?: number; - pfx?: string | Buffer[]; - key?: string | string[] | Buffer | any[]; - passphrase?: string; - cert?: string | string[] | Buffer | Buffer[]; - ca?: string | string[] | Buffer | Buffer[]; - crl?: string | string[]; - ciphers?: string; - honorCipherOrder?: boolean; - requestCert?: boolean; - rejectUnauthorized?: boolean; - NPNProtocols?: string[] | Buffer; - SNICallback?: (servername: string, cb:(err:Error,ctx:SecureContext)=>any) => any; - ecdhCurve?: string; - dhparam?: string | Buffer; - handshakeTimeout?: number; - ALPNProtocols?: string[] | Buffer; - sessionTimeout?: number; - ticketKeys?: any; - sessionIdContext?: string; - secureProtocol?: string; - } - - export interface ConnectionOptions { - host?: string; - port?: number; - socket?: net.Socket; - pfx?: string | Buffer - key?: string |string[] | Buffer | Buffer[]; - passphrase?: string; - cert?: string | string[] | Buffer | Buffer[]; - ca?: string | Buffer | (string | Buffer)[]; - rejectUnauthorized?: boolean; - NPNProtocols?: (string | Buffer)[]; - servername?: string; - path?: string; - ALPNProtocols?: (string | Buffer)[]; - checkServerIdentity?: (servername: string, cert: string | Buffer | (string | Buffer)[]) => any; - secureProtocol?: string; - secureContext?: Object; - session?: Buffer; - minDHSize?: number; - } - - export interface Server extends net.Server { - close(): Server; - address(): { port: number; family: string; address: string; }; - addContext(hostName: string, credentials: { - key: string; - cert: string; - ca: string; - }): void; - maxConnections: number; - connections: number; - } - - export interface ClearTextStream extends stream.Duplex { - authorized: boolean; - authorizationError: Error; - getPeerCertificate(): any; - getCipher: { - name: string; - version: string; - }; - address: { - port: number; - family: string; - address: string; - }; - remoteAddress: string; - remotePort: number; - } - - export interface SecurePair { - encrypted: any; - cleartext: any; - } - - export interface SecureContextOptions { - pfx?: string | Buffer; - key?: string | Buffer; - passphrase?: string; - cert?: string | Buffer; - ca?: string | Buffer; - crl?: string | string[] - ciphers?: string; - honorCipherOrder?: boolean; - } - - export interface SecureContext { - context: any; - } - - export function createServer(options: TlsOptions, secureConnectionListener?: (cleartextStream: ClearTextStream) => void): Server; - export function connect(options: ConnectionOptions, secureConnectionListener?: () => void): ClearTextStream; - export function connect(port: number, host?: string, options?: ConnectionOptions, secureConnectListener?: () => void): ClearTextStream; - export function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () => void): ClearTextStream; - export function createSecurePair(credentials?: crypto.Credentials, isServer?: boolean, requestCert?: boolean, rejectUnauthorized?: boolean): SecurePair; - export function createSecureContext(details: SecureContextOptions): SecureContext; -} - -declare module "crypto" { - export interface Certificate { - exportChallenge(spkac: string | Buffer): Buffer; - exportPublicKey(spkac: string | Buffer): Buffer; - verifySpkac(spkac: Buffer): boolean; - } - export var Certificate: { - new (): Certificate; - (): Certificate; - } - - export var fips: boolean; - - export interface CredentialDetails { - pfx: string; - key: string; - passphrase: string; - cert: string; - ca: string | string[]; - crl: string | string[]; - ciphers: string; - } - export interface Credentials { context?: any; } - export function createCredentials(details: CredentialDetails): Credentials; - export function createHash(algorithm: string): Hash; - export function createHmac(algorithm: string, key: string | Buffer): Hmac; - - type Utf8AsciiLatin1Encoding = "utf8" | "ascii" | "latin1"; - type HexBase64Latin1Encoding = "latin1" | "hex" | "base64"; - type Utf8AsciiBinaryEncoding = "utf8" | "ascii" | "binary"; - type HexBase64BinaryEncoding = "binary" | "base64" | "hex"; - type ECDHKeyFormat = "compressed" | "uncompressed" | "hybrid"; - - export interface Hash extends NodeJS.ReadWriteStream { - update(data: string | Buffer): Hash; - update(data: string | Buffer, input_encoding: Utf8AsciiLatin1Encoding): Hash; - digest(): Buffer; - digest(encoding: HexBase64Latin1Encoding): string; - } - export interface Hmac extends NodeJS.ReadWriteStream { - update(data: string | Buffer): Hmac; - update(data: string | Buffer, input_encoding: Utf8AsciiLatin1Encoding): Hmac; - digest(): Buffer; - digest(encoding: HexBase64Latin1Encoding): string; - } - export function createCipher(algorithm: string, password: any): Cipher; - export function createCipheriv(algorithm: string, key: any, iv: any): Cipher; - export interface Cipher extends NodeJS.ReadWriteStream { - update(data: Buffer): Buffer; - update(data: string, input_encoding: Utf8AsciiBinaryEncoding): Buffer; - update(data: Buffer, input_encoding: any, output_encoding: HexBase64BinaryEncoding): string; - update(data: string, input_encoding: Utf8AsciiBinaryEncoding, output_encoding: HexBase64BinaryEncoding): string; - final(): Buffer; - final(output_encoding: string): string; - setAutoPadding(auto_padding?: boolean): void; - getAuthTag(): Buffer; - setAAD(buffer: Buffer): void; - } - export function createDecipher(algorithm: string, password: any): Decipher; - export function createDecipheriv(algorithm: string, key: any, iv: any): Decipher; - export interface Decipher extends NodeJS.ReadWriteStream { - update(data: Buffer): Buffer; - update(data: string, input_encoding: HexBase64BinaryEncoding): Buffer; - update(data: Buffer, input_encoding: any, output_encoding: Utf8AsciiBinaryEncoding): string; - update(data: string, input_encoding: HexBase64BinaryEncoding, output_encoding: Utf8AsciiBinaryEncoding): string; - final(): Buffer; - final(output_encoding: string): string; - setAutoPadding(auto_padding?: boolean): void; - setAuthTag(tag: Buffer): void; - setAAD(buffer: Buffer): void; - } - export function createSign(algorithm: string): Signer; - export interface Signer extends NodeJS.WritableStream { - update(data: string | Buffer): Signer; - update(data: string | Buffer, input_encoding: Utf8AsciiLatin1Encoding): Signer; - sign(private_key: string | { key: string; passphrase: string }): Buffer; - sign(private_key: string | { key: string; passphrase: string }, output_format: HexBase64Latin1Encoding): string; - } - export function createVerify(algorith: string): Verify; - export interface Verify extends NodeJS.WritableStream { - update(data: string | Buffer): Verify; - update(data: string | Buffer, input_encoding: Utf8AsciiLatin1Encoding): Verify; - verify(object: string, signature: Buffer): boolean; - verify(object: string, signature: string, signature_format: HexBase64Latin1Encoding): boolean; - } - export function createDiffieHellman(prime_length: number, generator?: number): DiffieHellman; - export function createDiffieHellman(prime: Buffer): DiffieHellman; - export function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding): DiffieHellman; - export function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding, generator: number | Buffer): DiffieHellman; - export function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding, generator: string, generator_encoding: HexBase64Latin1Encoding): DiffieHellman; - export interface DiffieHellman { - generateKeys(): Buffer; - generateKeys(encoding: HexBase64Latin1Encoding): string; - computeSecret(other_public_key: Buffer): Buffer; - computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding): Buffer; - computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding, output_encoding: HexBase64Latin1Encoding): string; - getPrime(): Buffer; - getPrime(encoding: HexBase64Latin1Encoding): string; - getGenerator(): Buffer; - getGenerator(encoding: HexBase64Latin1Encoding): string; - getPublicKey(): Buffer; - getPublicKey(encoding: HexBase64Latin1Encoding): string; - getPrivateKey(): Buffer; - getPrivateKey(encoding: HexBase64Latin1Encoding): string; - setPublicKey(public_key: Buffer): void; - setPublicKey(public_key: string, encoding: string): void; - setPrivateKey(private_key: Buffer): void; - setPrivateKey(private_key: string, encoding: string): void; - verifyError: number; - } - export function getDiffieHellman(group_name: string): DiffieHellman; - export function pbkdf2(password: string | Buffer, salt: string | Buffer, iterations: number, keylen: number, digest: string, callback: (err: Error, derivedKey: Buffer) => any): void; - export function pbkdf2Sync(password: string | Buffer, salt: string | Buffer, iterations: number, keylen: number, digest: string): Buffer; - export function randomBytes(size: number): Buffer; - export function randomBytes(size: number, callback: (err: Error, buf: Buffer) => void): void; - export function pseudoRandomBytes(size: number): Buffer; - export function pseudoRandomBytes(size: number, callback: (err: Error, buf: Buffer) => void): void; - export interface RsaPublicKey { - key: string; - padding?: number; - } - export interface RsaPrivateKey { - key: string; - passphrase?: string, - padding?: number; - } - export function publicEncrypt(public_key: string | RsaPublicKey, buffer: Buffer): Buffer - export function privateDecrypt(private_key: string | RsaPrivateKey, buffer: Buffer): Buffer - export function privateEncrypt(private_key: string | RsaPrivateKey, buffer: Buffer): Buffer - export function publicDecrypt(public_key: string | RsaPublicKey, buffer: Buffer): Buffer - export function getCiphers(): string[]; - export function getCurves(): string[]; - export function getHashes(): string[]; - export interface ECDH { - generateKeys(): Buffer; - generateKeys(encoding: HexBase64Latin1Encoding): string; - generateKeys(encoding: HexBase64Latin1Encoding, format: ECDHKeyFormat): string; - computeSecret(other_public_key: Buffer): Buffer; - computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding): Buffer; - computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding, output_encoding: HexBase64Latin1Encoding): string; - getPrivateKey(): Buffer; - getPrivateKey(encoding: HexBase64Latin1Encoding): string; - getPublicKey(): Buffer; - getPublicKey(encoding: HexBase64Latin1Encoding): string; - getPublicKey(encoding: HexBase64Latin1Encoding, format: ECDHKeyFormat): string; - setPrivateKey(private_key: Buffer): void; - setPrivateKey(private_key: string, encoding: HexBase64Latin1Encoding): void; - } - export function createECDH(curve_name: string): ECDH; -} - -declare module "stream" { - import * as events from "events"; - - class internal extends events.EventEmitter { - pipe(destination: T, options?: { end?: boolean; }): T; - } - namespace internal { - - export class Stream extends internal {} - - export interface ReadableOptions { - highWaterMark?: number; - encoding?: string; - objectMode?: boolean; - read?: (size?: number) => any; - } - - export class Readable extends events.EventEmitter implements NodeJS.ReadableStream { - readable: boolean; - constructor(opts?: ReadableOptions); - _read(size: number): void; - read(size?: number): any; - setEncoding(encoding: string): void; - pause(): Readable; - resume(): Readable; - pipe(destination: T, options?: { end?: boolean; }): T; - unpipe(destination?: T): void; - unshift(chunk: any): void; - wrap(oldStream: NodeJS.ReadableStream): NodeJS.ReadableStream; - push(chunk: any, encoding?: string): boolean; - } - - export interface WritableOptions { - highWaterMark?: number; - decodeStrings?: boolean; - objectMode?: boolean; - write?: (chunk: string|Buffer, encoding: string, callback: Function) => any; - writev?: (chunks: {chunk: string|Buffer, encoding: string}[], callback: Function) => any; - } - - export class Writable extends events.EventEmitter implements NodeJS.WritableStream { - writable: boolean; - constructor(opts?: WritableOptions); - _write(chunk: any, encoding: string, callback: Function): void; - write(chunk: any, cb?: Function): boolean; - write(chunk: any, encoding?: string, cb?: Function): boolean; - end(): void; - end(chunk: any, cb?: Function): void; - end(chunk: any, encoding?: string, cb?: Function): void; - } - - export interface DuplexOptions extends ReadableOptions, WritableOptions { - allowHalfOpen?: boolean; - readableObjectMode?: boolean; - writableObjectMode?: boolean; - } - - // Note: Duplex extends both Readable and Writable. - export class Duplex extends Readable implements NodeJS.ReadWriteStream { - // Readable - pause(): Duplex; - resume(): Duplex; - // Writeable - writable: boolean; - constructor(opts?: DuplexOptions); - _write(chunk: any, encoding: string, callback: Function): void; - write(chunk: any, cb?: Function): boolean; - write(chunk: any, encoding?: string, cb?: Function): boolean; - end(): void; - end(chunk: any, cb?: Function): void; - end(chunk: any, encoding?: string, cb?: Function): void; - } - - export interface TransformOptions extends ReadableOptions, WritableOptions { - transform?: (chunk: string|Buffer, encoding: string, callback: Function) => any; - flush?: (callback: Function) => any; - } - - // Note: Transform lacks the _read and _write methods of Readable/Writable. - export class Transform extends events.EventEmitter implements NodeJS.ReadWriteStream { - readable: boolean; - writable: boolean; - constructor(opts?: TransformOptions); - _transform(chunk: any, encoding: string, callback: Function): void; - _flush(callback: Function): void; - read(size?: number): any; - setEncoding(encoding: string): void; - pause(): Transform; - resume(): Transform; - pipe(destination: T, options?: { end?: boolean; }): T; - unpipe(destination?: T): void; - unshift(chunk: any): void; - wrap(oldStream: NodeJS.ReadableStream): NodeJS.ReadableStream; - push(chunk: any, encoding?: string): boolean; - write(chunk: any, cb?: Function): boolean; - write(chunk: any, encoding?: string, cb?: Function): boolean; - end(): void; - end(chunk: any, cb?: Function): void; - end(chunk: any, encoding?: string, cb?: Function): void; - } - - export class PassThrough extends Transform { } - } - - export = internal; -} - -declare module "util" { - export interface InspectOptions { - showHidden?: boolean; - depth?: number; - colors?: boolean; - customInspect?: boolean; - } - - export function format(format: any, ...param: any[]): string; - export function debug(string: string): void; - export function error(...param: any[]): void; - export function puts(...param: any[]): void; - export function print(...param: any[]): void; - export function log(string: string): void; - export function inspect(object: any, showHidden?: boolean, depth?: number, color?: boolean): string; - export function inspect(object: any, options: InspectOptions): string; - export function isArray(object: any): boolean; - export function isRegExp(object: any): boolean; - export function isDate(object: any): boolean; - export function isError(object: any): boolean; - export function inherits(constructor: any, superConstructor: any): void; - export function debuglog(key: string): (msg: string, ...param: any[]) => void; - export function isBoolean(object: any): boolean; - export function isBuffer(object: any): boolean; - export function isFunction(object: any): boolean; - export function isNull(object: any): boolean; - export function isNullOrUndefined(object: any): boolean; - export function isNumber(object: any): boolean; - export function isObject(object: any): boolean; - export function isPrimitive(object: any): boolean; - export function isString(object: any): boolean; - export function isSymbol(object: any): boolean; - export function isUndefined(object: any): boolean; - export function deprecate(fn: Function, message: string): Function; -} - -declare module "assert" { - function internal(value: any, message?: string): void; - namespace internal { - export class AssertionError implements Error { - name: string; - message: string; - actual: any; - expected: any; - operator: string; - generatedMessage: boolean; - - constructor(options?: { - message?: string; actual?: any; expected?: any; - operator?: string; stackStartFunction?: Function - }); - } - - export function fail(actual?: any, expected?: any, message?: string, operator?: string): void; - export function ok(value: any, message?: string): void; - export function equal(actual: any, expected: any, message?: string): void; - export function notEqual(actual: any, expected: any, message?: string): void; - export function deepEqual(actual: any, expected: any, message?: string): void; - export function notDeepEqual(acutal: any, expected: any, message?: string): void; - export function strictEqual(actual: any, expected: any, message?: string): void; - export function notStrictEqual(actual: any, expected: any, message?: string): void; - export function deepStrictEqual(actual: any, expected: any, message?: string): void; - export function notDeepStrictEqual(actual: any, expected: any, message?: string): void; - export var throws: { - (block: Function, message?: string): void; - (block: Function, error: Function, message?: string): void; - (block: Function, error: RegExp, message?: string): void; - (block: Function, error: (err: any) => boolean, message?: string): void; - }; - - export var doesNotThrow: { - (block: Function, message?: string): void; - (block: Function, error: Function, message?: string): void; - (block: Function, error: RegExp, message?: string): void; - (block: Function, error: (err: any) => boolean, message?: string): void; - }; - - export function ifError(value: any): void; - } - - export = internal; -} - -declare module "tty" { - import * as net from "net"; - - export function isatty(fd: number): boolean; - export interface ReadStream extends net.Socket { - isRaw: boolean; - setRawMode(mode: boolean): void; - isTTY: boolean; - } - export interface WriteStream extends net.Socket { - columns: number; - rows: number; - isTTY: boolean; - } -} - -declare module "domain" { - import * as events from "events"; - - export class Domain extends events.EventEmitter implements NodeJS.Domain { - run(fn: Function): void; - add(emitter: events.EventEmitter): void; - remove(emitter: events.EventEmitter): void; - bind(cb: (err: Error, data: any) => any): any; - intercept(cb: (data: any) => any): any; - dispose(): void; - members: any[]; - enter(): void; - exit(): void; - } - - export function create(): Domain; -} - -declare module "constants" { - export var E2BIG: number; - export var EACCES: number; - export var EADDRINUSE: number; - export var EADDRNOTAVAIL: number; - export var EAFNOSUPPORT: number; - export var EAGAIN: number; - export var EALREADY: number; - export var EBADF: number; - export var EBADMSG: number; - export var EBUSY: number; - export var ECANCELED: number; - export var ECHILD: number; - export var ECONNABORTED: number; - export var ECONNREFUSED: number; - export var ECONNRESET: number; - export var EDEADLK: number; - export var EDESTADDRREQ: number; - export var EDOM: number; - export var EEXIST: number; - export var EFAULT: number; - export var EFBIG: number; - export var EHOSTUNREACH: number; - export var EIDRM: number; - export var EILSEQ: number; - export var EINPROGRESS: number; - export var EINTR: number; - export var EINVAL: number; - export var EIO: number; - export var EISCONN: number; - export var EISDIR: number; - export var ELOOP: number; - export var EMFILE: number; - export var EMLINK: number; - export var EMSGSIZE: number; - export var ENAMETOOLONG: number; - export var ENETDOWN: number; - export var ENETRESET: number; - export var ENETUNREACH: number; - export var ENFILE: number; - export var ENOBUFS: number; - export var ENODATA: number; - export var ENODEV: number; - export var ENOENT: number; - export var ENOEXEC: number; - export var ENOLCK: number; - export var ENOLINK: number; - export var ENOMEM: number; - export var ENOMSG: number; - export var ENOPROTOOPT: number; - export var ENOSPC: number; - export var ENOSR: number; - export var ENOSTR: number; - export var ENOSYS: number; - export var ENOTCONN: number; - export var ENOTDIR: number; - export var ENOTEMPTY: number; - export var ENOTSOCK: number; - export var ENOTSUP: number; - export var ENOTTY: number; - export var ENXIO: number; - export var EOPNOTSUPP: number; - export var EOVERFLOW: number; - export var EPERM: number; - export var EPIPE: number; - export var EPROTO: number; - export var EPROTONOSUPPORT: number; - export var EPROTOTYPE: number; - export var ERANGE: number; - export var EROFS: number; - export var ESPIPE: number; - export var ESRCH: number; - export var ETIME: number; - export var ETIMEDOUT: number; - export var ETXTBSY: number; - export var EWOULDBLOCK: number; - export var EXDEV: number; - export var WSAEINTR: number; - export var WSAEBADF: number; - export var WSAEACCES: number; - export var WSAEFAULT: number; - export var WSAEINVAL: number; - export var WSAEMFILE: number; - export var WSAEWOULDBLOCK: number; - export var WSAEINPROGRESS: number; - export var WSAEALREADY: number; - export var WSAENOTSOCK: number; - export var WSAEDESTADDRREQ: number; - export var WSAEMSGSIZE: number; - export var WSAEPROTOTYPE: number; - export var WSAENOPROTOOPT: number; - export var WSAEPROTONOSUPPORT: number; - export var WSAESOCKTNOSUPPORT: number; - export var WSAEOPNOTSUPP: number; - export var WSAEPFNOSUPPORT: number; - export var WSAEAFNOSUPPORT: number; - export var WSAEADDRINUSE: number; - export var WSAEADDRNOTAVAIL: number; - export var WSAENETDOWN: number; - export var WSAENETUNREACH: number; - export var WSAENETRESET: number; - export var WSAECONNABORTED: number; - export var WSAECONNRESET: number; - export var WSAENOBUFS: number; - export var WSAEISCONN: number; - export var WSAENOTCONN: number; - export var WSAESHUTDOWN: number; - export var WSAETOOMANYREFS: number; - export var WSAETIMEDOUT: number; - export var WSAECONNREFUSED: number; - export var WSAELOOP: number; - export var WSAENAMETOOLONG: number; - export var WSAEHOSTDOWN: number; - export var WSAEHOSTUNREACH: number; - export var WSAENOTEMPTY: number; - export var WSAEPROCLIM: number; - export var WSAEUSERS: number; - export var WSAEDQUOT: number; - export var WSAESTALE: number; - export var WSAEREMOTE: number; - export var WSASYSNOTREADY: number; - export var WSAVERNOTSUPPORTED: number; - export var WSANOTINITIALISED: number; - export var WSAEDISCON: number; - export var WSAENOMORE: number; - export var WSAECANCELLED: number; - export var WSAEINVALIDPROCTABLE: number; - export var WSAEINVALIDPROVIDER: number; - export var WSAEPROVIDERFAILEDINIT: number; - export var WSASYSCALLFAILURE: number; - export var WSASERVICE_NOT_FOUND: number; - export var WSATYPE_NOT_FOUND: number; - export var WSA_E_NO_MORE: number; - export var WSA_E_CANCELLED: number; - export var WSAEREFUSED: number; - export var SIGHUP: number; - export var SIGINT: number; - export var SIGILL: number; - export var SIGABRT: number; - export var SIGFPE: number; - export var SIGKILL: number; - export var SIGSEGV: number; - export var SIGTERM: number; - export var SIGBREAK: number; - export var SIGWINCH: number; - export var SSL_OP_ALL: number; - export var SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number; - export var SSL_OP_CIPHER_SERVER_PREFERENCE: number; - export var SSL_OP_CISCO_ANYCONNECT: number; - export var SSL_OP_COOKIE_EXCHANGE: number; - export var SSL_OP_CRYPTOPRO_TLSEXT_BUG: number; - export var SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number; - export var SSL_OP_EPHEMERAL_RSA: number; - export var SSL_OP_LEGACY_SERVER_CONNECT: number; - export var SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number; - export var SSL_OP_MICROSOFT_SESS_ID_BUG: number; - export var SSL_OP_MSIE_SSLV2_RSA_PADDING: number; - export var SSL_OP_NETSCAPE_CA_DN_BUG: number; - export var SSL_OP_NETSCAPE_CHALLENGE_BUG: number; - export var SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number; - export var SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number; - export var SSL_OP_NO_COMPRESSION: number; - export var SSL_OP_NO_QUERY_MTU: number; - export var SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number; - export var SSL_OP_NO_SSLv2: number; - export var SSL_OP_NO_SSLv3: number; - export var SSL_OP_NO_TICKET: number; - export var SSL_OP_NO_TLSv1: number; - export var SSL_OP_NO_TLSv1_1: number; - export var SSL_OP_NO_TLSv1_2: number; - export var SSL_OP_PKCS1_CHECK_1: number; - export var SSL_OP_PKCS1_CHECK_2: number; - export var SSL_OP_SINGLE_DH_USE: number; - export var SSL_OP_SINGLE_ECDH_USE: number; - export var SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number; - export var SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number; - export var SSL_OP_TLS_BLOCK_PADDING_BUG: number; - export var SSL_OP_TLS_D5_BUG: number; - export var SSL_OP_TLS_ROLLBACK_BUG: number; - export var ENGINE_METHOD_DSA: number; - export var ENGINE_METHOD_DH: number; - export var ENGINE_METHOD_RAND: number; - export var ENGINE_METHOD_ECDH: number; - export var ENGINE_METHOD_ECDSA: number; - export var ENGINE_METHOD_CIPHERS: number; - export var ENGINE_METHOD_DIGESTS: number; - export var ENGINE_METHOD_STORE: number; - export var ENGINE_METHOD_PKEY_METHS: number; - export var ENGINE_METHOD_PKEY_ASN1_METHS: number; - export var ENGINE_METHOD_ALL: number; - export var ENGINE_METHOD_NONE: number; - export var DH_CHECK_P_NOT_SAFE_PRIME: number; - export var DH_CHECK_P_NOT_PRIME: number; - export var DH_UNABLE_TO_CHECK_GENERATOR: number; - export var DH_NOT_SUITABLE_GENERATOR: number; - export var NPN_ENABLED: number; - export var RSA_PKCS1_PADDING: number; - export var RSA_SSLV23_PADDING: number; - export var RSA_NO_PADDING: number; - export var RSA_PKCS1_OAEP_PADDING: number; - export var RSA_X931_PADDING: number; - export var RSA_PKCS1_PSS_PADDING: number; - export var POINT_CONVERSION_COMPRESSED: number; - export var POINT_CONVERSION_UNCOMPRESSED: number; - export var POINT_CONVERSION_HYBRID: number; - export var O_RDONLY: number; - export var O_WRONLY: number; - export var O_RDWR: number; - export var S_IFMT: number; - export var S_IFREG: number; - export var S_IFDIR: number; - export var S_IFCHR: number; - export var S_IFBLK: number; - export var S_IFIFO: number; - export var S_IFSOCK: number; - export var S_IRWXU: number; - export var S_IRUSR: number; - export var S_IWUSR: number; - export var S_IXUSR: number; - export var S_IRWXG: number; - export var S_IRGRP: number; - export var S_IWGRP: number; - export var S_IXGRP: number; - export var S_IRWXO: number; - export var S_IROTH: number; - export var S_IWOTH: number; - export var S_IXOTH: number; - export var S_IFLNK: number; - export var O_CREAT: number; - export var O_EXCL: number; - export var O_NOCTTY: number; - export var O_DIRECTORY: number; - export var O_NOATIME: number; - export var O_NOFOLLOW: number; - export var O_SYNC: number; - export var O_SYMLINK: number; - export var O_DIRECT: number; - export var O_NONBLOCK: number; - export var O_TRUNC: number; - export var O_APPEND: number; - export var F_OK: number; - export var R_OK: number; - export var W_OK: number; - export var X_OK: number; - export var UV_UDP_REUSEADDR: number; - export var SIGQUIT: number; - export var SIGTRAP: number; - export var SIGIOT: number; - export var SIGBUS: number; - export var SIGUSR1: number; - export var SIGUSR2: number; - export var SIGPIPE: number; - export var SIGALRM: number; - export var SIGCHLD: number; - export var SIGSTKFLT: number; - export var SIGCONT: number; - export var SIGSTOP: number; - export var SIGTSTP: number; - export var SIGTTIN: number; - export var SIGTTOU: number; - export var SIGURG: number; - export var SIGXCPU: number; - export var SIGXFSZ: number; - export var SIGVTALRM: number; - export var SIGPROF: number; - export var SIGIO: number; - export var SIGPOLL: number; - export var SIGPWR: number; - export var SIGSYS: number; - export var SIGUNUSED: number; - export var defaultCoreCipherList: string; - export var defaultCipherList: string; - export var ENGINE_METHOD_RSA: number; - export var ALPN_ENABLED: number; -} - -declare module "process" { - export = process; -} - -declare module "v8" { - interface HeapSpaceInfo { - space_name: string; - space_size: number; - space_used_size: number; - space_available_size: number; - physical_space_size: number; - } - export function getHeapStatistics() : {total_heap_size: number, total_heap_size_executable: number, total_physical_size: number, total_avaialble_size: number, used_heap_size: number, heap_size_limit: number}; - export function getHeapSpaceStatistics(): HeapSpaceInfo[]; - export function setFlagsFromString(flags: string): void; -} - -declare module "timers" { - export function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; - export function clearTimeout(timeoutId: NodeJS.Timer): void; - export function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; - export function clearInterval(intervalId: NodeJS.Timer): void; - export function setImmediate(callback: (...args: any[]) => void, ...args: any[]): any; - export function clearImmediate(immediateId: any): void; -} - -declare module "console" { - export = console; -} diff --git a/typings/globals/node/typings.json b/typings/globals/node/typings.json deleted file mode 100644 index 46e1032..0000000 --- a/typings/globals/node/typings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "resolution": "main", - "tree": { - "src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/4008a51db44dabcdc368097a39a01ab7a5f9587f/node/node.d.ts", - "raw": "registry:dt/node#6.0.0+20160909174046", - "typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/4008a51db44dabcdc368097a39a01ab7a5f9587f/node/node.d.ts" - } -} diff --git a/typings/index.d.ts b/typings/index.d.ts deleted file mode 100644 index 208a022..0000000 --- a/typings/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -/// -/// diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 2016dad..0000000 --- a/webpack.config.js +++ /dev/null @@ -1,110 +0,0 @@ -var webpack = require('webpack'); -var path = require('path'); -var webpackMerge = require('webpack-merge'); - -// Webpack Config -var webpackConfig = { - entry: { - 'main': './app/main.ts', - }, - - output: { - publicPath: '/dist/', - path: path.resolve(__dirname, './dist'), - }, - - plugins: [ - new webpack.ContextReplacementPlugin( - // The (\\|\/) piece accounts for path separators in *nix and Windows - /angular(\\|\/)core(\\|\/)src(\\|\/)linker/, - path.resolve(__dirname, './'), - { - // your Angular Async Route paths relative to this root directory - } - ), - new webpack.ProvidePlugin({ - jQuery: 'jquery', - $: 'jquery', - jquery: 'jquery' - }) - ], - - module: { - loaders: [ - // .ts files for TypeScript - { - test: /\.ts$/, - loaders: [ - 'awesome-typescript-loader', - 'angular2-template-loader', - 'angular2-router-loader' - ] - }, - { test: /\.css$/, loaders: ['to-string-loader', 'css-loader'] }, - { test: /\.html$/, loader: 'raw-loader' }, - { test: /\.scss$/, loaders: ['style', 'css', 'postcss', 'sass'] }, - { test: /\.(woff2?|ttf|eot|svg)$/, loader: 'url?limit=10000' }, - { test: /bootstrap\/dist\/js\/umd\//, loader: 'imports?jQuery=jquery' } - ] - } - -}; - - -// Our Webpack Defaults -var defaultConfig = { - devtool: 'source-map', - - output: { - filename: '[name].bundle.js', - sourceMapFilename: '[name].map', - chunkFilename: '[id].chunk.js' - }, - - resolve: { - extensions: [ '.ts', '.js' ], - modules: [ path.resolve(__dirname, 'node_modules') ] - }, - - devServer: { - historyApiFallback: true, - watchOptions: { aggregateTimeout: 300, poll: 1000 }, - headers: { - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS", - "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization" - } - }, - - node: { - global: true, - crypto: 'empty', - __dirname: true, - __filename: true, - process: true, - Buffer: false, - clearImmediate: false, - setImmediate: false - } -}; - - -module.exports = function(env) { - console.log(env); - // if(!env.release && env.release != true) { - // webpackConfig.plugins.push( - // new webpack.DefinePlugin({"process.env" : { - // PRODUCTION: JSON.stringify(true), - // API_ENDPOINT : JSON.stringify(process.env.API_ENDPOINT || "http://localhost:5000") - // }}) - // ); - // } else { - webpackConfig.plugins.push( - new webpack.DefinePlugin({"process.env" : { - PRODUCTION: JSON.stringify(true), - API_ENDPOINT : JSON.stringify(process.env.API_ENDPOINT || "/api/") - }}) - ); - // } - return webpackMerge(defaultConfig, webpackConfig); -};