Compare commits

..

19 Commits

Author SHA1 Message Date
Sercan Yemen
cf9e9fc209 Merge branch 'master' into skeleton 2017-09-22 16:45:47 +03:00
Sercan Yemen
ff0f2933d9 Merge branch 'master' into skeleton 2017-09-22 16:45:23 +03:00
Sercan Yemen
62467c8ddf Merge branch 'master' into skeleton 2017-09-12 16:06:21 +03:00
Sercan Yemen
024ab15b25 Merge branch 'master' into skeleton 2017-09-11 16:34:07 +03:00
Sercan Yemen
915ad52863 Merge branch 'master' into skeleton 2017-09-11 16:21:05 +03:00
Sercan Yemen
97bfaa9979 Merge branch 'master' into skeleton 2017-09-11 13:06:42 +03:00
Sercan Yemen
6ae3e154c3 Merge branch 'master' into skeleton 2017-09-11 12:59:36 +03:00
Sercan Yemen
49b6ff7292 navigation model for horizontal nav 2017-09-11 12:58:24 +03:00
Sercan Yemen
903688ab43 Merge branch 'master' into skeleton 2017-09-11 12:57:59 +03:00
Sercan Yemen
19f822cbab removed unnecessary md2 from skeleton 2017-09-01 09:05:56 +03:00
Sercan Yemen
1d21a14d0e Merge branch 'master' into skeleton 2017-08-30 20:52:23 +03:00
Sercan Yemen
4bf2ba73ad merge 'master' into skeleton 2017-08-30 20:08:12 +03:00
Sercan Yemen
6a3972fff8 Merge branch 'master' into skeleton 2017-08-30 14:43:10 +03:00
Sercan Yemen
dca16238eb Merge branch 'master' into skeleton 2017-08-30 14:41:30 +03:00
Sercan Yemen
2b91119d00 Merge branch 'master' into skeleton 2017-08-30 11:50:56 +03:00
Sercan Yemen
ff4899e8d2 Merge branch 'master' into skeleton
# Conflicts:
#	src/app/app.module.ts
#	src/app/main/content/apps/calendar/calendar.component.html
#	src/app/main/content/apps/contacts/contact-list/contact-list.component.html
#	src/app/main/content/apps/contacts/contacts.component.html
#	src/app/main/content/apps/contacts/contacts.component.scss
#	src/app/main/content/apps/contacts/contacts.module.ts
#	src/app/main/content/apps/contacts/contacts.service.ts
#	src/app/main/content/apps/contacts/selected-bar/selected-bar.component.html
#	src/app/main/content/apps/mail/sidenavs/main/main-sidenav.component.html
#	src/app/navigation.model.ts
2017-08-24 11:18:24 +03:00
Sercan Yemen
e818c53f1d navbar fixes 2017-08-22 16:05:32 +03:00
Sercan Yemen
ca96fffadf removed fuse fake db 2017-08-22 15:58:35 +03:00
Sercan Yemen
d7003711ee skeleton branch 2017-08-22 15:55:48 +03:00
975 changed files with 3183 additions and 61840 deletions

View File

@@ -9,7 +9,6 @@
"outDir": "dist",
"assets": [
"assets",
"app/main/content/components/angular-material",
"favicon.ico"
],
"index": "index.html",
@@ -38,28 +37,13 @@
},
"lint": [
{
"project": "src/tsconfig.app.json",
"exclude": [
"**/node_modules/**",
"**/src/app/fuse-fake-db/**/*",
"**/src/assets/angular-material-examples/**/*"
]
"project": "src/tsconfig.app.json"
},
{
"project": "src/tsconfig.spec.json",
"exclude": [
"**/node_modules/**",
"**/src/app/fuse-fake-db/**/*",
"**/src/assets/angular-material-examples/**/*"
]
"project": "src/tsconfig.spec.json"
},
{
"project": "e2e/tsconfig.e2e.json",
"exclude": [
"**/node_modules/**",
"**/src/app/fuse-fake-db/**/*",
"**/src/assets/angular-material-examples/**/*"
]
"project": "e2e/tsconfig.e2e.json"
}
],
"test": {

View File

@@ -1 +0,0 @@
https://themeforest.net/licenses/terms/regular

View File

@@ -1,6 +1,6 @@
# Fuse2
Material Design Admin Template with Angular 5+ and Angular Material 2
Material Design Admin Template with Angular 4+ and Angular Material 2
## Development server

View File

@@ -1,14 +1,14 @@
import { Fuse2Page } from './app.po';
describe('Fuse2 App', () => {
let page: Fuse2Page;
describe('fuse2 App', () => {
let page: Fuse2Page;
beforeEach(() => {
page = new Fuse2Page();
});
beforeEach(() => {
page = new Fuse2Page();
});
it('should display welcome message', () => {
page.navigateTo();
expect(page.getParagraphText()).toEqual('Welcome to app!');
});
it('should display welcome message', () => {
page.navigateTo();
expect(page.getParagraphText()).toEqual('Welcome to app!!');
});
});

View File

@@ -1,11 +1,11 @@
import { browser, by, element } from 'protractor';
export class Fuse2Page {
navigateTo() {
return browser.get('/');
}
navigateTo() {
return browser.get('/');
}
getParagraphText() {
return element(by.css('app-root h1')).getText();
}
getParagraphText() {
return element(by.css('app-root h1')).getText();
}
}

View File

@@ -2,12 +2,10 @@
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/e2e",
"baseUrl": "./",
"module": "commonjs",
"target": "es5",
"types": [
"jasmine",
"jasminewd2",
"node"
]
}

View File

@@ -1,33 +1,33 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
// https://karma-runner.github.io/0.13/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular/cli'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular/cli/plugins/karma')
],
client:{
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
reports: [ 'html', 'lcovonly' ],
fixWebpackSourcePaths: true
},
angularCli: {
environment: 'dev'
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
});
config.set({
basePath: '',
frameworks: ['jasmine', '@angular/cli'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular/cli/plugins/karma')
],
client:{
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
reports: [ 'html', 'lcovonly' ],
fixWebpackSourcePaths: true
},
angularCli: {
environment: 'dev'
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
});
};

5941
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,84 +1,75 @@
{
"name": "fuse2",
"version": "1.3.2",
"license": "https://themeforest.net/licenses/terms/regular",
"version": "1.1.0",
"license": "",
"scripts": {
"ng": "ng",
"start": "ng serve --open",
"start": "ng serve",
"start-hmr": "ng serve --hmr -e=hmr -sm=false",
"start-hmr-sourcemaps": "ng serve --hmr -e=hmr",
"build": "node --max_old_space_size=6144 ./node_modules/@angular/cli/bin/ng build --dev",
"build-stats": "node --max_old_space_size=6144 ./node_modules/@angular/cli/bin/ng build --dev --stats-json",
"build-prod": "node --max_old_space_size=6144 ./node_modules/@angular/cli/bin/ng build --prod",
"build-prod-stats": "node --max_old_space_size=6144 ./node_modules/@angular/cli/bin/ng build --prod --stats-json",
"build": "node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build",
"build-prod": "node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build --prod",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"bundle-report": "webpack-bundle-analyzer dist/stats.json"
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@agm/core": "1.0.0-beta.2",
"@angular/animations": "5.1.3",
"@angular/cdk": "5.0.3",
"@angular/common": "5.1.3",
"@angular/compiler": "5.1.3",
"@angular/core": "5.1.3",
"@angular/flex-layout": "2.0.0-beta.12",
"@angular/forms": "5.1.3",
"@angular/http": "5.1.3",
"@angular/material": "5.0.3",
"@angular/material-moment-adapter": "5.0.3",
"@angular/platform-browser": "5.1.3",
"@angular/platform-browser-dynamic": "5.1.3",
"@angular/router": "5.1.3",
"@ngrx/effects": "4.1.1",
"@ngrx/router-store": "4.1.1",
"@ngrx/store": "4.1.1",
"@ngrx/store-devtools": "4.1.1",
"@ngx-translate/core": "9.0.2",
"@swimlane/ngx-charts": "7.0.1",
"@swimlane/ngx-datatable": "11.1.7",
"@swimlane/ngx-dnd": "3.1.0",
"@types/prismjs": "1.9.0",
"angular-calendar": "0.23.1",
"angular-in-memory-web-api": "0.5.2",
"@angular/animations": "4.4.3",
"@angular/cdk": "2.0.0-beta.10",
"@angular/common": "4.4.3",
"@angular/compiler": "4.4.3",
"@angular/core": "4.4.3",
"@angular/flex-layout": "2.0.0-beta.9",
"@angular/forms": "4.4.3",
"@angular/http": "4.4.3",
"@angular/material": "2.0.0-beta.10",
"@angular/platform-browser": "4.4.3",
"@angular/platform-browser-dynamic": "4.4.3",
"@angular/router": "4.4.3",
"@swimlane/ngx-charts": "6.0.2",
"@swimlane/ngx-datatable": "9.3.1",
"@swimlane/ngx-dnd": "3.0.0",
"angular-calendar": "0.19.0",
"angular-in-memory-web-api": "0.3.2",
"classlist.js": "1.1.20150312",
"core-js": "2.5.3",
"d3": "4.12.2",
"core-js": "2.5.0",
"d3": "4.10.0",
"hammerjs": "2.0.8",
"highlight.js": "9.12.0",
"intl": "1.2.5",
"moment": "2.20.1",
"ngrx-store-freeze": "0.2.0",
"ngx-color-picker": "5.3.0",
"ngx-cookie-service": "1.0.9",
"perfect-scrollbar": "1.3.0",
"prismjs": "1.9.0",
"rxjs": "5.5.6",
"md2": "0.0.28",
"moment": "2.18.1",
"ngx-color-picker": "4.3.1",
"ngx-cookie-service": "1.0.7",
"ngx-perfect-scrollbar": "4.6.2",
"perfect-scrollbar": "0.8.1",
"rxjs": "5.4.3",
"web-animations-js": "2.3.1",
"zone.js": "0.8.19"
"zone.js": "0.8.17"
},
"devDependencies": {
"@angular/cli": "1.6.3",
"@angular/compiler-cli": "5.1.3",
"@angular/language-service": "5.1.3",
"@angular/cli": "1.4.2",
"@angular/compiler-cli": "4.4.3",
"@angular/language-service": "4.4.3",
"@angularclass/hmr": "2.1.3",
"@types/jasmine": "2.5.54",
"@types/jasminewd2": "2.0.3",
"@types/node": "6.0.96",
"codelyzer": "4.0.2",
"jasmine-core": "2.6.4",
"jasmine-spec-reporter": "4.1.1",
"@ngtools/webpack": "1.7.1",
"@types/jasmine": "2.6.0",
"@types/jasminewd2": "2.0.2",
"@types/node": "6.0.88",
"codelyzer": "3.0.1",
"jasmine-core": "2.6.2",
"jasmine-spec-reporter": "4.1.0",
"karma": "1.7.1",
"karma-chrome-launcher": "2.1.1",
"karma-cli": "1.0.1",
"karma-coverage-istanbul-reporter": "1.3.3",
"karma-jasmine": "1.1.1",
"karma-coverage-istanbul-reporter": "1.2.1",
"karma-jasmine": "1.1.0",
"karma-jasmine-html-reporter": "0.2.2",
"node-sass": "4.5.3",
"protractor": "5.1.2",
"ts-node": "3.2.2",
"tslint": "5.7.0",
"typescript": "2.4.2",
"webpack-bundle-analyzer": "2.9.2"
"ts-node": "3.0.4",
"tslint": "5.3.2",
"typescript": "2.3.3"
}
}

View File

@@ -4,25 +4,25 @@
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 } }));
}
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 } }));
}
};

View File

@@ -1,12 +1,5 @@
import { Component } from '@angular/core';
import { FuseSplashScreenService } from './core/services/splash-screen.service';
import { TranslateService } from '@ngx-translate/core';
import { FuseTranslationLoaderService } from './core/services/translation-loader.service';
import { FuseNavigationService } from './core/components/navigation/navigation.service';
import { FuseNavigationModel } from './navigation/navigation.model';
import { locale as navigationEnglish } from './navigation/i18n/en';
import { locale as navigationTurkish } from './navigation/i18n/tr';
@Component({
selector : 'fuse-root',
@@ -15,26 +8,7 @@ import { locale as navigationTurkish } from './navigation/i18n/tr';
})
export class AppComponent
{
constructor(
private fuseNavigationService: FuseNavigationService,
private fuseSplashScreen: FuseSplashScreenService,
private translate: TranslateService,
private translationLoader: FuseTranslationLoaderService
)
constructor(private fuseSplashScreen: FuseSplashScreenService)
{
// Add languages
this.translate.addLangs(['en', 'tr']);
// Set the default language
this.translate.setDefaultLang('en');
// Use a language
this.translate.use('en');
// Set the navigation model
this.fuseNavigationService.setNavigationModel(new FuseNavigationModel());
// Set the navigation translations
this.translationLoader.loadTranslations(navigationEnglish, navigationTurkish);
}
}

View File

@@ -1,48 +1,23 @@
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpModule } from '@angular/http';
import { HttpClientModule } from '@angular/common/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { RouterModule, Routes } from '@angular/router';
import { InMemoryWebApiModule } from 'angular-in-memory-web-api';
import 'hammerjs';
import { SharedModule } from './core/modules/shared.module';
import { AppComponent } from './app.component';
import { FuseFakeDbService } from './fuse-fake-db/fuse-fake-db.service';
import { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';
import { FuseMainModule } from './main/main.module';
import { FuseSplashScreenService } from './core/services/splash-screen.service';
import { FuseConfigService } from './core/services/config.service';
import { FuseNavigationService } from './core/components/navigation/navigation.service';
import { TranslateModule } from '@ngx-translate/core';
import { AppStoreModule } from './store/store.module';
import { FuseSampleModule } from './main/content/sample/sample.module';
const appRoutes: Routes = [
{
path : 'apps',
loadChildren: './main/content/apps/apps.module#FuseAppsModule'
},
{
path : 'pages',
loadChildren: './main/content/pages/pages.module#FusePagesModule'
},
{
path : 'ui',
loadChildren: './main/content/ui/ui.module#FuseUIModule'
},
{
path : 'services',
loadChildren: './main/content/services/services.module#FuseServicesModule'
},
{
path : 'components',
loadChildren: './main/content/components/components.module#FuseComponentsModule'
},
{
path : 'components-third-party',
loadChildren: './main/content/components-third-party/components-third-party.module#FuseComponentsThirdPartyModule'
},
{
path : '**',
redirectTo: 'apps/dashboards/project'
redirectTo: 'sample'
}
];
@@ -52,17 +27,14 @@ const appRoutes: Routes = [
],
imports : [
BrowserModule,
HttpModule,
HttpClientModule,
BrowserAnimationsModule,
RouterModule.forRoot(appRoutes),
SharedModule,
TranslateModule.forRoot(),
InMemoryWebApiModule.forRoot(FuseFakeDbService, {
delay : 0,
passThruUnknownUrl: true
}),
AppStoreModule,
FuseMainModule
PerfectScrollbarModule.forRoot(),
FuseMainModule,
FuseSampleModule
],
providers : [
FuseSplashScreenService,

View File

@@ -33,21 +33,21 @@ export const fuseAnimations = [
stagger('50ms', [
animateChild()
])
], {optional: true})),
])),
transition('void => 100',
query('@*',
[
stagger('100ms', [
animateChild()
])
], {optional: true})),
])),
transition('void => 200',
query('@*',
[
stagger('200ms', [
animateChild()
])
], {optional: true}))
]))
]),
trigger('fadeInOut', [
@@ -76,53 +76,6 @@ export const fuseAnimations = [
transition('0 => 1', animate('300ms ease-in'))
]),
trigger('slideIn', [
transition('void => left', [
style({
transform: 'translateX(100%)'
}),
animate('300ms ease-in',
style({
transform: 'translateX(0)'
})
)
]
),
transition('left => void', [
style({
transform: 'translateX(0)'
}),
animate('300ms ease-in',
style({
transform: 'translateX(-100%)'
})
)
]
),
transition('void => right', [
style({
transform: 'translateX(-100%)'
}),
animate('300ms ease-in',
style({
transform: 'translateX(0)'
})
)
]
),
transition('right => void', [
style({
transform: 'translateX(0)'
}),
animate('300ms ease-in',
style({
transform: 'translateX(100%)'
})
)
]
),
]),
trigger('slideInLeft', [
state('void', style({
transform: 'translateX(-100%)',
@@ -176,17 +129,6 @@ export const fuseAnimations = [
transition('* => void', animate('300ms'))
]),
trigger('expandCollapse', [
state('void', style({
height: '0px'
})),
state('*', style({
height: '*'
})),
transition('void => *', animate('300ms ease-out')),
transition('* => void', animate('300ms ease-in'))
]),
trigger('routerTransitionLeft', [
transition('* => *', [

View File

@@ -1,6 +1,6 @@
<h1 matDialogTitle>Confirm</h1>
<div mat-dialog-content>{{confirmMessage}}</div>
<div mat-dialog-actions class="pt-24">
<button mat-raised-button class="mat-accent mr-16" (click)="dialogRef.close(true)">Confirm</button>
<button mat-button (click)="dialogRef.close(false)">Cancel</button>
<h1 md-dialog-title>Confirm</h1>
<div md-dialog-content>{{confirmMessage}}</div>
<div md-dialog-actions class="pt-24">
<button md-raised-button class="mat-accent mr-16" (click)="dialogRef.close(true)">Confirm</button>
<button md-button (click)="dialogRef.close(false)">Cancel</button>
</div>

View File

@@ -1,5 +1,5 @@
import { Component, OnInit } from '@angular/core';
import { MatDialogRef } from '@angular/material';
import { MdDialogRef } from '@angular/material';
@Component({
selector : 'fuse-confirm-dialog',
@@ -10,7 +10,7 @@ export class FuseConfirmDialogComponent implements OnInit
{
public confirmMessage: string;
constructor(public dialogRef: MatDialogRef<FuseConfirmDialogComponent>)
constructor(public dialogRef: MdDialogRef<FuseConfirmDialogComponent>)
{
}

View File

@@ -1,65 +0,0 @@
/**
* This class is based on the code in the following projects:
*
* - https://github.com/zenorocha/select
* - https://github.com/zenorocha/clipboard.js/
*
* Both released under MIT license - © Zeno Rocha
*/
import { Injectable } from '@angular/core';
@Injectable()
export class CopierService
{
private textarea: HTMLTextAreaElement;
/** Copy the text value to the clipboard. */
copyText(text: string): boolean
{
this.createTextareaAndSelect(text);
const copySuccessful = document.execCommand('copy');
this.removeFake();
return copySuccessful;
}
/**
* Creates a hidden textarea element, sets its value from `text` property,
* and makes a selection on it.
*/
private createTextareaAndSelect(text: string)
{
// Create a fake element to hold the contents to copy
this.textarea = document.createElement('textarea');
// Prevent zooming on iOS
this.textarea.style.fontSize = '12pt';
// Hide the element
this.textarea.classList.add('cdk-visually-hidden');
// Move element to the same position vertically
const yPosition = window.pageYOffset || document.documentElement.scrollTop;
this.textarea.style.top = yPosition + 'px';
this.textarea.setAttribute('readonly', '');
this.textarea.value = text;
document.body.appendChild(this.textarea);
this.textarea.select();
this.textarea.setSelectionRange(0, this.textarea.value.length);
}
/** Remove the text area from the DOM. */
private removeFake()
{
if ( this.textarea )
{
document.body.removeChild(this.textarea);
this.textarea = null;
}
}
}

View File

@@ -1,7 +1,6 @@
import { Component, Input, OnInit } from '@angular/core';
import * as moment from 'moment';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/interval';
import { Observable } from 'rxjs/Rx';
@Component({
selector : 'fuse-countdown',

View File

@@ -1,100 +1,100 @@
<div class="demo-sidenav">
<mat-list>
<h3 matSubheader>Sidenav Demo</h3>
<md-list>
<h3 md-subheader>Sidenav Demo</h3>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 1</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 2</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 3</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 4</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 5</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 6</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 7</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 8</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 9</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 10</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 11</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 12</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 13</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 14</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 15</span>
</mat-list-item>
</md-list-item>
<mat-divider></mat-divider>
<md-divider></md-divider>
<mat-list-item>
<md-list-item>
<span>Sidenav Item 16</span>
</mat-list-item>
</md-list-item>
</mat-list>
</md-list>
</div>

View File

@@ -1,6 +0,0 @@
:host {
display: block;
padding: 8px;
background: #263238;
cursor: text;
}

View File

@@ -1,102 +0,0 @@
import { Component, ContentChild, ElementRef, Input, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import * as Prism from 'prismjs/prism';
import './prism-languages';
@Component({
selector : 'fuse-highlight',
template : ' ',
styleUrls: ['./highlight.component.scss']
})
export class FuseHighlightComponent implements OnInit
{
@ContentChild('source') source: ElementRef;
@Input('lang') lang: string;
@Input('path') path: string;
constructor(
private elementRef: ElementRef,
private http: HttpClient
)
{
}
ngOnInit()
{
// If there is no language defined, return...
if ( !this.lang )
{
return;
}
// If the path is defined...
if ( this.path )
{
// Get the source
this.http.get(this.path, {responseType: 'text'}).subscribe((response) => {
// Highlight it
this.highlight(response);
});
}
// If the path is not defined and the source element exists...
if ( !this.path && this.source )
{
// Highlight it
this.highlight(this.source.nativeElement.value);
}
}
highlight(sourceCode)
{
// Split the source into lines
const sourceLines = sourceCode.split('\n');
// Remove the first and the last line of the source
// code if they are blank lines. This way, the html
// can be formatted properly while using fuse-highlight
// component
if ( !sourceLines[0].trim() )
{
sourceLines.shift();
}
if ( !sourceLines[sourceLines.length - 1].trim() )
{
sourceLines.pop();
}
// Find the first non-whitespace char index in
// the first line of the source code
const indexOfFirstChar = sourceLines[0].search(/\S|$/);
// Generate the trimmed source
let source = '';
// Iterate through all the lines
sourceLines.forEach((line, index) => {
// Trim the beginning white space depending on the index
// and concat the source code
source = source + line.substr(indexOfFirstChar, line.length);
// If it's not the last line...
if ( index !== sourceLines.length - 1 )
{
// Add a line break at the end
source = source + '\n';
}
});
// Generate the highlighted code
const highlightedCode = Prism.highlight(source, Prism.languages[this.lang]);
// Replace the innerHTML of the component with the highlighted code
this.elementRef.nativeElement.innerHTML =
'<pre><code class="highlight language-' + this.lang + '">' + highlightedCode + '</code></pre>';
}
}

View File

@@ -1,16 +0,0 @@
import 'prismjs/prism';
import 'prismjs/components/prism-c';
import 'prismjs/components/prism-cpp';
import 'prismjs/components/prism-csharp';
import 'prismjs/components/prism-css';
import 'prismjs/components/prism-diff';
import 'prismjs/components/prism-markup';
import 'prismjs/components/prism-java';
import 'prismjs/components/prism-javascript';
import 'prismjs/components/prism-json';
import 'prismjs/components/prism-perl';
import 'prismjs/components/prism-php';
import 'prismjs/components/prism-python';
import 'prismjs/components/prism-sass';
import 'prismjs/components/prism-scss';
import 'prismjs/components/prism-typescript';

View File

@@ -0,0 +1,58 @@
import { Component, ContentChild, ElementRef, Input, OnInit } from '@angular/core';
import * as hljs from 'highlight.js';
@Component({
selector : 'fuse-hljs',
template : ' ',
styleUrls: ['./hljs.component.scss']
})
export class FuseHljsComponent implements OnInit
{
hljs: any;
@ContentChild('source') source: ElementRef;
@Input('lang') lang: string;
constructor(
private elementRef: ElementRef
)
{
this.hljs = hljs;
}
ngOnInit()
{
const originalSource = this.source.nativeElement.value;
if ( !originalSource || !this.lang )
{
return;
}
// Split the source into lines
const sourceLines = originalSource.split('\n');
// Find the first non-whitespace char index in
// the first line of the source code
const indexOfFirstChar = sourceLines[0].search(/\S|$/);
// Generate the trimmed source
let source = '';
// Iterate through all the lines and trim the
// beginning white space depending on the index
sourceLines.forEach((line, index) => {
source = source + line.substr(indexOfFirstChar, line.length);
if ( index !== sourceLines.length - 1 )
{
source = source + '\n';
}
});
this.elementRef.nativeElement.innerHTML =
`<pre><code class="highlight">` + this.hljs.highlight(this.lang, source).value + `</code></pre>`;
}
}

View File

@@ -1,23 +1,23 @@
<button mat-icon-button
<button md-icon-button
type="button"
class="mat-elevation-z1"
[matMenuTriggerFor]="colorMenu"
(menuOpened)="onMenuOpen()"
[ngClass]="'mat-'+selectedPalette+'-'+selectedHue+'-bg'">
<mat-icon>palette</mat-icon>
[mdMenuTriggerFor]="colorMenu"
(onMenuOpen)="onMenuOpen()"
[ngClass]="'md-'+selectedPalette+'-'+selectedHue+'-bg'">
<md-icon>palette</md-icon>
</button>
<mat-menu #colorMenu="matMenu" class="fuse-material-color-picker-menu">
<md-menu #colorMenu="mdMenu" class="fuse-material-color-picker-menu">
<header [ngClass]="selectedColor?.class || 'mat-accent-bg'"
<header [ngClass]="selectedColor?.class || 'md-accent-bg'"
class="mat-elevation-z4"
fxLayout="row"
fxLayoutAlign="space-between center">
<button mat-icon-button
<button md-icon-button
[style.visibility]="view==='hues'?'visible':'hidden'"
(click)="$event.stopPropagation();backToPaletteSelection()" aria-label="Palette">
<mat-icon class="s-20">arrow_back</mat-icon>
<md-icon class="s-20">arrow_back</md-icon>
</button>
<span *ngIf="selectedColor?.palette">
@@ -28,11 +28,11 @@
Select Color
</span>
<button mat-icon-button
<button md-icon-button
class="remove-color-button"
(click)="removeColor()"
aria-label="Remove Color">
<mat-icon class="s-20">delete</mat-icon>
<md-icon class="s-20">delete</md-icon>
</button>
</header>
@@ -47,10 +47,10 @@
fxLayoutAlign="start start"
class="colors" fusePerfectScrollbar>
<div class="color"
[ngClass]="'mat-'+color.key+'-bg'"
[ngClass]="'md-'+color.key+'-bg'"
*ngFor="let color of (colors | keys)"
(click)="$event.stopPropagation();selectPalette(color.key)"
fxLayout="row" fxLayoutAlign="start end" mat-ink-ripple>
fxLayout="row" fxLayoutAlign="start end" md-ink-ripple>
<span class="label">
{{color.key}}
</span>
@@ -67,16 +67,16 @@
<div class="color"
*ngFor="let hue of hues"
[fxHide]="selectedPalette === 'white' && hue !== '500'|| selectedPalette === 'black' && hue !== '500'"
[ngClass]="'mat-'+selectedPalette+'-'+hue+'-bg'"
[ngClass]="'md-'+selectedPalette+'-'+hue+'-bg'"
(click)="selectHue(hue)"
fxLayout="row" fxLayoutAlign="start end" mat-ink-ripple>
fxLayout="row" fxLayoutAlign="start end" md-ink-ripple>
<span class="label">
{{hue}}
</span>
<mat-icon *ngIf="selectedHue === hue" class="s-16">check</mat-icon>
<md-icon *ngIf="selectedHue === hue" class="s-16">check</md-icon>
</div>
</div>
</div>
</div>
</mat-menu>
</md-menu>

View File

@@ -11,7 +11,7 @@
overflow: hidden;
min-height: 258px;
height: 308px;
background-color: #F7F7F7;
background-color: #f7f7f7;
.view {
position: absolute;
@@ -39,7 +39,7 @@
font-size: 10px;
}
mat-icon {
md-icon {
position: absolute;
top: 2px;
right: 2px;

View File

@@ -129,7 +129,7 @@ export class FuseMaterialColorPickerComponent implements OnInit, OnChanges
{
this.selectedBg = MatColors.getColor(this.selectedPalette)[this.selectedHue];
this.selectedFg = MatColors.getColor(this.selectedPalette).contrast[this.selectedHue];
this.selectedClass = 'mat-' + this.selectedPalette + '-' + this.selectedHue + '-bg';
this.selectedClass = 'md-' + this.selectedPalette + '-' + this.selectedHue + '-bg';
}
else
{

View File

@@ -1,11 +1,7 @@
<a class="nav-link" matRipple>
<mat-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</mat-icon>
<span class="nav-link-title" [translate]="item.translate">{{item.title}}</span>
<span class="nav-link-badge" *ngIf="item.badge" [translate]="item.badge.translate"
[ngStyle]="{'background-color': item.badge.bg,'color': item.badge.fg}">
{{item.badge.title}}
</span>
<mat-icon class="collapse-arrow">keyboard_arrow_right</mat-icon>
<a class="nav-link" md-ripple>
<md-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</md-icon>
<span class="nav-link-title">{{item.title}}</span>
<md-icon class="collapse-arrow">keyboard_arrow_right</md-icon>
</a>
<div class="children" [ngClass]="{'open': isOpen}">
@@ -15,7 +11,6 @@
<ng-container *ngFor="let item of item.children">
<fuse-nav-horizontal-item *ngIf="item.type=='item'" [item]="item"></fuse-nav-horizontal-item>
<fuse-nav-horizontal-collapse *ngIf="item.type=='collapse'" [item]="item"></fuse-nav-horizontal-collapse>
<fuse-nav-horizontal-collapse *ngIf="item.type=='group'" [item]="item"></fuse-nav-horizontal-collapse>
</ng-container>
</div>

View File

@@ -1,18 +1,6 @@
<a class="nav-link" *ngIf="item.url" [routerLink]="[item.url]" routerLinkActive="active"
[routerLinkActiveOptions]="{exact: item.exactMatch || false}" matRipple>
<mat-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</mat-icon>
<span class="nav-link-title" [translate]="item.translate">{{item.title}}</span>
<span class="nav-link-badge" *ngIf="item.badge" [translate]="item.badge.translate"
[ngStyle]="{'background-color': item.badge.bg,'color': item.badge.fg}">
{{item.badge.title}}
</span>
</a>
<span class="nav-link" *ngIf="item.function" (click)="item.function()" matRipple>
<mat-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</mat-icon>
<span class="nav-link-title" [translate]="item.translate">{{item.title}}</span>
<span class="nav-link-badge" *ngIf="item.badge" [translate]="item.badge.translate"
[ngStyle]="{'background-color': item.badge.bg,'color': item.badge.fg}">
{{item.badge.title}}
</span>
</span>
<a class="nav-link" md-ripple
[routerLink]="[item.url]" routerLinkActive="active">
<md-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</md-icon>
<span class="nav-link-title">{{item.title}}</span>
<span class="nav-link-badge" *ngIf="item.badge" [ngStyle]="{'background-color': item.badge.bg,'color': item.badge.fg}">{{item.badge.title}}</span>
</a>

View File

@@ -22,7 +22,7 @@
<fuse-nav-horizontal-collapse *ngIf="item.type=='group'" [item]="item"></fuse-nav-horizontal-collapse>
<fuse-nav-horizontal-collapse *ngIf="item.type=='collapse'" [item]="item"></fuse-nav-horizontal-collapse>
<fuse-nav-horizontal-item *ngIf="item.type=='item'" [item]="item"></fuse-nav-horizontal-item>
<fuse-nav-horizontal-item *ngIf="item.type=='nav-item'" [item]="item"></fuse-nav-horizontal-item>
</ng-container>

View File

@@ -26,6 +26,7 @@ export class FuseNavigationComponent implements OnDestroy
ngOnDestroy()
{
console.warn('destroyed');
this.navigationModelChangeSubscription.unsubscribe();
}

View File

@@ -1,5 +0,0 @@
export interface FuseNavigationModelInterface
{
model: any[];
}

View File

@@ -1,23 +1,23 @@
import { EventEmitter, Injectable } from '@angular/core';
import { NavigationModel } from '../../../navigation.model';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { FuseNavigationModelInterface } from './navigation.model';
@Injectable()
export class FuseNavigationService
{
onNavCollapseToggle = new EventEmitter<any>();
onNavCollapseToggled = new EventEmitter<any>();
onNavigationModelChange: BehaviorSubject<any> = new BehaviorSubject({});
navigationModel: FuseNavigationModelInterface;
navigationModel: NavigationModel;
flatNavigation: any[] = [];
constructor()
{
this.navigationModel = new NavigationModel();
this.onNavigationModelChange.next(this.navigationModel.model);
}
/**
* Get navigation model
*
* @returns {any[]}
*/
getNavigationModel()
@@ -27,125 +27,19 @@ export class FuseNavigationService
/**
* Set the navigation model
*
* @param model
*/
setNavigationModel(model)
{
// console.log(model);
this.navigationModel = model;
console.log(this.navigationModel);
this.onNavigationModelChange.next(this.navigationModel.model);
}
/**
* Add new navigation item
* to the given location
*/
addNavigationItem(location, item)
{
// Parse the location
const locationArr = location.split('.');
if ( locationArr.length === 0 )
{
return;
}
// Find the navigation item
const navItem = this.findNavigationItemById(locationArr);
// Act according to the item type
switch ( navItem.type )
{
case 'item':
// Create a children array
navItem.children = [];
// Push the item
navItem.children.push(item);
// Change the item type to collapsable
navItem.type = 'collapse';
break;
case 'collapse':
// Push the item
navItem.children.push(item);
break;
case 'group':
// Push the item
navItem.children.push(item);
break;
default:
break;
}
}
/**
* Get navigation item from
* given location
*
* @param location
*/
getNavigationItem(location)
{
// Parse the location
const locationArr = location.split('.');
if ( locationArr.length === 0 )
{
return;
}
// Find and return the navigation item
return this.findNavigationItemById(locationArr);
}
/**
* Find navigation item by location
*
* @param location
* @param navigation
*/
findNavigationItemById(location, navigation?)
{
if ( !navigation )
{
navigation = this.navigationModel.model;
}
// Iterate through the given navigation
for ( const navItem of navigation )
{
// If the nav item id equals the first location...
if ( navItem.id === location[0] )
{
// If there is more location to look at...
if ( location.length > 1 )
{
// Remove the first item of the location
location.splice(0, 1);
// Go nested...
return this.findNavigationItemById(location, navItem.children);
}
// Otherwise just return the nav item
else
{
return navItem;
}
}
}
}
/**
* Get flattened navigation array
* @param navigationItems
@@ -153,15 +47,8 @@ export class FuseNavigationService
*/
getFlatNavigation(navigationItems?)
{
// If navigation items not provided,
// that means we are running the function
// for the first time...
if ( !navigationItems )
{
// Reset the flat navigation
this.flatNavigation = [];
// Get the entire navigation model
navigationItems = this.navigationModel.model;
}
@@ -186,10 +73,7 @@ export class FuseNavigationService
if ( navItem.type === 'collapse' || navItem.type === 'group' )
{
if ( navItem.children )
{
this.getFlatNavigation(navItem.children);
}
this.getFlatNavigation(navItem.children);
}
}

View File

@@ -1,17 +1,11 @@
<a class="nav-link" matRipple (click)="toggleOpen($event)">
<mat-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</mat-icon>
<span class="nav-link-title" [translate]="item.translate">{{item.title}}</span>
<span class="nav-link-badge" *ngIf="item.badge" [translate]="item.badge.translate"
[ngStyle]="{'background-color': item.badge.bg,'color': item.badge.fg}">
{{item.badge.title}}
</span>
<mat-icon class="collapse-arrow">keyboard_arrow_right</mat-icon>
<a class="nav-link" md-ripple (click)="toggleOpen($event)">
<md-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</md-icon>
<span class="nav-link-title">{{item.title}}</span>
<md-icon class="collapse-arrow">keyboard_arrow_right</md-icon>
</a>
<div class="children" [@slideInOut]="isOpen">
<ng-container *ngFor="let item of item.children">
<fuse-nav-vertical-item *ngIf="item.type=='item'" [item]="item"></fuse-nav-vertical-item>
<fuse-nav-vertical-collapse *ngIf="item.type=='collapse'" [item]="item"></fuse-nav-vertical-collapse>
<fuse-nav-vertical-group *ngIf="item.type=='group'" [item]="item"></fuse-nav-vertical-group>
</ng-container>
</div>

View File

@@ -43,7 +43,7 @@ export class FuseNavVerticalCollapseComponent implements OnInit
this.navigationService.onNavCollapseToggled
.subscribe(
(clickedItem) => {
if ( clickedItem && clickedItem.children )
if ( clickedItem.children )
{
// Check if the clicked item is one
// of the children of this item
@@ -69,20 +69,6 @@ export class FuseNavVerticalCollapseComponent implements OnInit
);
}
ngOnInit()
{
// Check if the url can be found in
// one of the children of this item
if ( this.isUrlInChildren(this.item, this.router.url) )
{
this.expand();
}
else
{
this.collapse();
}
}
/**
* Toggle collapse
*
@@ -96,7 +82,6 @@ export class FuseNavVerticalCollapseComponent implements OnInit
// Navigation collapse toggled...
this.navigationService.onNavCollapseToggled.emit(this.item);
this.navigationService.onNavCollapseToggle.emit();
}
/**
@@ -110,7 +95,6 @@ export class FuseNavVerticalCollapseComponent implements OnInit
}
this.isOpen = true;
this.navigationService.onNavCollapseToggle.emit();
}
/**
@@ -122,9 +106,7 @@ export class FuseNavVerticalCollapseComponent implements OnInit
{
return;
}
this.isOpen = false;
this.navigationService.onNavCollapseToggle.emit();
}
/**
@@ -181,7 +163,7 @@ export class FuseNavVerticalCollapseComponent implements OnInit
}
}
if ( parent.children[i].url === url || url.includes(parent.children[i].url) )
if ( parent.children[i].url === url )
{
return true;
}
@@ -190,4 +172,8 @@ export class FuseNavVerticalCollapseComponent implements OnInit
return false;
}
ngOnInit()
{
}
}

View File

@@ -1,7 +1,6 @@
<div class="group-title">
<span class="hint-text" [translate]="item.translate">{{ item.title }}</span>
<span class="hint-text">{{ item.title }}</span>
</div>
<div class="group-items">
<ng-container *ngFor="let item of item.children">
<fuse-nav-vertical-group *ngIf="item.type=='group'" [item]="item"></fuse-nav-vertical-group>

View File

@@ -7,7 +7,7 @@ import { Component, HostBinding, Input, OnInit } from '@angular/core';
})
export class FuseNavVerticalGroupComponent implements OnInit
{
@HostBinding('class') classes = 'nav-group nav-item';
@HostBinding('class') classes = 'nav-group';
@Input() item: any;
constructor()

View File

@@ -1,18 +1,6 @@
<a class="nav-link" *ngIf="item.url" [routerLink]="[item.url]" routerLinkActive="active"
[routerLinkActiveOptions]="{exact: item.exactMatch || false}" matRipple>
<mat-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</mat-icon>
<span class="nav-link-title" [translate]="item.translate">{{item.title}}</span>
<span class="nav-link-badge" *ngIf="item.badge" [translate]="item.badge.translate"
[ngStyle]="{'background-color': item.badge.bg,'color': item.badge.fg}">
{{item.badge.title}}
</span>
<a class="nav-link" md-ripple
[routerLink]="[item.url]" routerLinkActive="active">
<md-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</md-icon>
<span class="nav-link-title">{{item.title}}</span>
<span class="nav-link-badge" *ngIf="item.badge" [ngStyle]="{'background-color': item.badge.bg,'color': item.badge.fg}">{{item.badge.title}}</span>
</a>
<span class="nav-link" *ngIf="item.function" (click)="item.function()" matRipple>
<mat-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</mat-icon>
<span class="nav-link-title" [translate]="item.translate">{{item.title}}</span>
<span class="nav-link-badge" *ngIf="item.badge" [translate]="item.badge.translate"
[ngStyle]="{'background-color': item.badge.bg,'color': item.badge.fg}">
{{item.badge.title}}
</span>
</span>

View File

@@ -1,20 +1,20 @@
<div class="fuse-search-bar" [ngClass]="{'expanded':!collapsed}" fxFlex="0 1 auto">
<div [ngClass]="toolbarColor" fxLayout="row" fxLayoutAlign="start center" fxFlex>
<label for="fuse-search-bar-input">
<button mat-icon-button class="fuse-search-bar-expander" aria-label="Expand Search Bar" (click)="expand()"
<button md-icon-button class="fuse-search-bar-expander" aria-label="Expand Search Bar" (click)="expand()"
*ngIf="collapsed">
<mat-icon class="s-24">search</mat-icon>
<md-icon class="s-24">search</md-icon>
</button>
<!--<span class="fuse-search-bar-loader" fxLayout="row" fxLayoutAlign="center center" *ngIf="!collapsed">
<mat-progress-spinner color="mat-accent" mode="indeterminate"></mat-progress-spinner>
<md-progress-spinner color="md-accent" mode="indeterminate"></md-progress-spinner>
</span>-->
</label>
<input id="fuse-search-bar-input" class="ml-24" type="text" placeholder="Search" (input)="search($event)" fxFlex>
<button mat-icon-button class="fuse-search-bar-collapser mat-icon-button" (click)="collapse()"
<button md-icon-button class="fuse-search-bar-collapser md-icon-button" (click)="collapse()"
aria-label="Collapse Search Bar">
<mat-icon class="s-24">close</mat-icon>
<md-icon class="s-24">close</md-icon>
</button>
</div>

View File

@@ -2,8 +2,8 @@
<div class="shortcuts-mobile-toggle" *ngIf="!mobileShortcutsPanelActive" fxLayout="row" fxLayoutAlign="start center"
fxHide fxShow.lt-md>
<button mat-icon-button (click)="showMobileShortcutsPanel()">
<mat-icon class="amber-600-fg">star</mat-icon>
<button md-icon-button (click)="showMobileShortcutsPanel()">
<md-icon class="amber-600-fg">star</md-icon>
</button>
</div>
@@ -16,8 +16,8 @@
<div class="w-40 h-40 p-4" fxLayout="row" fxLayoutAlign="center center"
*ngFor="let shortcutItem of shortcutItems">
<a mat-icon-button matTooltip="{{shortcutItem.title}}" [routerLink]="shortcutItem.url">
<mat-icon *ngIf="shortcutItem.icon">{{shortcutItem.icon}}</mat-icon>
<a md-icon-button mdTooltip="{{shortcutItem.title}}" [routerLink]="shortcutItem.url">
<md-icon *ngIf="shortcutItem.icon">{{shortcutItem.icon}}</md-icon>
<span *ngIf="!shortcutItem.icon" class="h2 secondary-text text-bold">
{{shortcutItem.title.substr(0, 1).toUpperCase()}}
</span>
@@ -25,64 +25,64 @@
</div>
<button mat-icon-button [matMenuTriggerFor]="addMenu" matTooltip="Click to add/remove shortcut"
(menuOpened)="onMenuOpen()">
<mat-icon class="amber-600-fg">star</mat-icon>
<button md-icon-button [mdMenuTriggerFor]="addMenu" md-tooltip="Click to add/remove shortcut"
(onMenuOpen)="onMenuOpen()">
<md-icon class="amber-600-fg">star</md-icon>
</button>
</div>
<div class="shortcuts-mobile-close" fxLayout="row" fxLayoutAlign="start center" fxHide fxShow.lt-md>
<button mat-icon-button (click)="hideMobileShortcutsPanel()">
<mat-icon>close</mat-icon>
<button md-icon-button (click)="hideMobileShortcutsPanel()">
<md-icon>close</md-icon>
</button>
</div>
</div>
<mat-menu #addMenu="matMenu" class="w-240">
<md-menu #addMenu="mdMenu" class="w-240">
<mat-form-field class="px-16 w-100-p" (click)="$event.stopPropagation()" floatPlaceholder="never">
<input #searchInput matInput placeholder="Search for an app or a page" (input)="search($event)">
</mat-form-field>
<md-input-container class="px-16 w-100-p" (click)="$event.stopPropagation()" floatPlaceholder="never">
<input #searchInput mdInput placeholder="Search for an app or a page" (input)="search($event)">
</md-input-container>
<mat-divider></mat-divider>
<mat-nav-list *ngIf="!searching" style="max-height: 312px; overflow: auto" fusePerfectScrollbar>
<md-divider></md-divider>
<md-nav-list *ngIf="!searching" style="max-height: 312px; overflow: auto" fusePerfectScrollbar>
<mat-list-item *ngFor="let shortcutItem of shortcutItems"
(click)="toggleShortcut($event, shortcutItem)">
<md-list-item *ngFor="let shortcutItem of shortcutItems"
(click)="toggleShortcut($event, shortcutItem)">
<div class="w-100-p" fxLayout="row" fxLayoutAlign="start center">
<mat-icon mat-list-icon class="mr-8" *ngIf="shortcutItem.icon">{{shortcutItem.icon}}</mat-icon>
<md-icon md-list-icon class="mr-8" *ngIf="shortcutItem.icon">{{shortcutItem.icon}}</md-icon>
<span class="h2 w-32 h-32 p-4 mr-8 secondary-text text-bold" fxLayout="row"
fxLayoutAlign="center center" *ngIf="!shortcutItem.icon">
{{shortcutItem.title.substr(0, 1).toUpperCase()}}
</span>
<p matLine fxFlex>{{shortcutItem.title}}</p>
<mat-icon class="ml-8">star</mat-icon>
<p md-line fxFlex>{{shortcutItem.title}}</p>
<md-icon class="ml-8">star</md-icon>
</div>
</mat-list-item>
<mat-list-item *ngIf="shortcutItems.length === 0">
</md-list-item>
<md-list-item *ngIf="shortcutItems.length === 0">
<p>
<small>No shortcuts yet!</small>
</p>
</mat-list-item>
</mat-nav-list>
</md-list-item>
</md-nav-list>
<mat-nav-list *ngIf="searching" style="max-height: 312px; overflow: auto" fusePerfectScrollbar>
<mat-list-item *ngFor="let navigationItem of filteredNavigationItems"
(click)="toggleShortcut($event, navigationItem)">
<md-nav-list *ngIf="searching" style="max-height: 312px; overflow: auto" fusePerfectScrollbar>
<md-list-item *ngFor="let navigationItem of filteredNavigationItems"
(click)="toggleShortcut($event, navigationItem)">
<div class="w-100-p" fxLayout="row" fxLayoutAlign="start center">
<mat-icon mat-list-icon class="mr-8" *ngIf="navigationItem.icon">{{navigationItem.icon}}</mat-icon>
<md-icon md-list-icon class="mr-8" *ngIf="navigationItem.icon">{{navigationItem.icon}}</md-icon>
<span class="h2 w-32 h-32 p-4 mr-8 secondary-text text-bold" fxLayout="row"
fxLayoutAlign="center center" *ngIf="!navigationItem.icon">
{{navigationItem.title.substr(0, 1).toUpperCase()}}
</span>
<p matLine fxFlex>{{navigationItem.title}}</p>
<mat-icon class="ml-8" *ngIf="isInShortcuts(navigationItem)">star</mat-icon>
<p md-line fxFlex>{{navigationItem.title}}</p>
<md-icon class="ml-8" *ngIf="isInShortcuts(navigationItem)">star</md-icon>
</div>
</mat-list-item>
</mat-nav-list>
</mat-menu>
</md-list-item>
</md-nav-list>
</md-menu>
</div>

View File

@@ -149,9 +149,7 @@ export class FuseShortcutsComponent implements OnInit, OnDestroy
onMenuOpen()
{
setTimeout(() => {
this.searchInputField.nativeElement.focus();
});
this.searchInputField.nativeElement.focus();
}
showMobileShortcutsPanel()

View File

@@ -1,56 +1,50 @@
<button #openButton mat-icon-button class="open-button mat-primary-bg mat-elevation-z2" (click)="openBar()">
<mat-icon>settings</mat-icon>
<button #openButton md-icon-button class="open-button md-primary-bg mat-elevation-z2" (click)="openBar()">
<md-icon>settings</md-icon>
</button>
<div class="theme-options-panel-overlay" #overlay [fxHide]="barClosed" [@fadeInOut]="!barClosed"></div>
<div #panel class="theme-options-panel mat-white-bg mat-elevation-z8">
<div #panel class="theme-options-panel md-white-bg mat-elevation-z8">
<button mat-icon-button class="close-button" (click)="closeBar()">
<mat-icon>close</mat-icon>
<button md-icon-button class="close-button" (click)="closeBar()">
<md-icon>close</md-icon>
</button>
<div class="theme-options-panel-inner" fxLayout="column" fxLayoutAlign="start start">
<h3>Navigation:</h3>
<mat-radio-group [(ngModel)]="fuseSettings.layout.navigation" (ngModelChange)="onSettingsChange()"
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
<mat-radio-button class="mr-8 mb-8" value="top">Top</mat-radio-button>
<mat-radio-button class="mr-8 mb-8" value="left">Left</mat-radio-button>
<mat-radio-button class="mr-8 mb-8" value="right">Right</mat-radio-button>
<mat-radio-button class="mr-8 mb-8" value="none">None</mat-radio-button>
</mat-radio-group>
<h3>Navigation Fold (for vertical navigation):</h3>
<mat-slide-toggle [(ngModel)]="fuseSettings.layout.navigationFolded"
(change)="onSettingsChange()">
Folded
</mat-slide-toggle>
<md-radio-group [(ngModel)]="fuseSettings.layout.navigation" (ngModelChange)="onSettingsChange()"
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
<md-radio-button class="mr-8 mb-8" value="top">Top</md-radio-button>
<md-radio-button class="mr-8 mb-8" value="left">Left</md-radio-button>
<md-radio-button class="mr-8 mb-8" value="right">Right</md-radio-button>
<md-radio-button class="mr-8 mb-8" value="none">None</md-radio-button>
</md-radio-group>
<h3 class="mt-24">Toolbar:</h3>
<mat-radio-group [(ngModel)]="fuseSettings.layout.toolbar" (ngModelChange)="onSettingsChange()"
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
<mat-radio-button class="mr-8 mb-8" value="below">Below</mat-radio-button>
<mat-radio-button class="mr-8 mb-8" value="above">Above</mat-radio-button>
<mat-radio-button class="mr-8 mb-8" value="none">None</mat-radio-button>
</mat-radio-group>
<md-radio-group [(ngModel)]="fuseSettings.layout.toolbar" (ngModelChange)="onSettingsChange()"
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
<md-radio-button class="mr-8 mb-8" value="below">Below</md-radio-button>
<md-radio-button class="mr-8 mb-8" value="above">Above</md-radio-button>
<md-radio-button class="mr-8 mb-8" value="none">None</md-radio-button>
</md-radio-group>
<h3 class="mt-24">Footer:</h3>
<mat-radio-group [(ngModel)]="fuseSettings.layout.footer" (ngModelChange)="onSettingsChange()"
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
<mat-radio-button class="mr-8 mb-8" value="below">Below</mat-radio-button>
<mat-radio-button class="mr-8 mb-8" value="above">Above</mat-radio-button>
<mat-radio-button class="mr-8 mb-8" value="none">None</mat-radio-button>
</mat-radio-group>
<md-radio-group [(ngModel)]="fuseSettings.layout.footer" (ngModelChange)="onSettingsChange()"
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
<md-radio-button class="mr-8 mb-8" value="below">Below</md-radio-button>
<md-radio-button class="mr-8 mb-8" value="above">Above</md-radio-button>
<md-radio-button class="mr-8 mb-8" value="none">None</md-radio-button>
</md-radio-group>
<h3 class="mt-24">Layout Mode:</h3>
<mat-radio-group [(ngModel)]="fuseSettings.layout.mode" (ngModelChange)="onSettingsChange()"
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
<mat-radio-button class="mr-8 mb-8" value="boxed">Boxed</mat-radio-button>
<mat-radio-button class="mr-8 mb-8" value="fullwidth">Fullwidth</mat-radio-button>
</mat-radio-group>
<md-radio-group [(ngModel)]="fuseSettings.layout.mode" (ngModelChange)="onSettingsChange()"
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
<md-radio-button class="mr-8 mb-8" value="boxed">Boxed</md-radio-button>
<md-radio-button class="mr-8 mb-8" value="fullwidth">Fullwidth</md-radio-button>
</md-radio-group>
<mat-divider></mat-divider>
<md-divider></md-divider>
<h3>Colors:</h3>
<div class="colors">
@@ -75,31 +69,30 @@
</div>
<mat-divider></mat-divider>
<md-divider></md-divider>
<h3>Router Animation:</h3>
<mat-form-field class="w-100-p">
<mat-select class="p-0" [(ngModel)]="fuseSettings.routerAnimation">
<mat-option value="none">
None
</mat-option>
<mat-option value="slideUp">
Slide up
</mat-option>
<mat-option value="slideDown">
Slide down
</mat-option>
<mat-option value="slideRight">
Slide right
</mat-option>
<mat-option value="slideLeft">
Slide left
</mat-option>
<mat-option value="fadeIn">
Fade in
</mat-option>
</mat-select>
</mat-form-field>
<md-select class="p-0" [(ngModel)]="fuseSettings.routerAnimation">
<md-option value="none">
None
</md-option>
<md-option value="slideUp">
Slide up
</md-option>
<md-option value="slideDown">
Slide down
</md-option>
<md-option value="slideRight">
Slide right
</md-option>
<md-option value="slideLeft">
Slide left
</md-option>
<md-option value="fadeIn">
Fade in
</md-option>
</md-select>
</div>
</div>

View File

@@ -14,7 +14,6 @@
display: block;
right: 0;
top: 160px;
z-index: 998;
&.bar-closed .theme-options-panel {
display: none;
@@ -49,7 +48,7 @@
color: rgba(0, 0, 0, 0.54);
}
.mat-divider {
.mat-divider{
display: block !important;
width: 100%;
margin: 24px 0 16px 0;
@@ -103,7 +102,7 @@
opacity: .75;
z-index: 998;
mat-icon {
md-icon {
animation: rotating 3s linear infinite;
}

View File

@@ -3,7 +3,6 @@ import { style, animate, AnimationBuilder, AnimationPlayer } from '@angular/anim
import { Subscription } from 'rxjs/Subscription';
import { FuseConfigService } from '../../services/config.service';
import { fuseAnimations } from '../../animations';
import { FuseNavigationService } from '../navigation/navigation.service';
@Component({
selector : 'fuse-theme-options',
@@ -27,7 +26,6 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
constructor(
private animationBuilder: AnimationBuilder,
private fuseConfig: FuseConfigService,
private navigationService: FuseNavigationService,
private renderer: Renderer2
)
{
@@ -40,27 +38,6 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
this.fuseSettings = newSettings;
}
);
// Get the nav model and add customize nav item
// that opens the bar programmatically
const navModel = this.navigationService.getNavigationModel();
navModel.push({
'id' : 'custom-function',
'title' : 'Custom Function',
'type' : 'group',
'children': [
{
'id' : 'customize',
'title' : 'Customize',
'type' : 'item',
'icon' : 'settings',
'function': () => {
this.openBar();
}
}
]
});
}
ngOnInit()

View File

@@ -62,23 +62,4 @@ fuse-widget {
transform: rotateY(360deg);
}
}
.mat-form-field {
&.mat-form-field-type-mat-select {
.mat-input-wrapper {
padding: 16px 0;
.mat-input-infix {
border: none;
padding: 0;
}
}
.mat-input-underline {
display: none;
}
}
}
}

View File

@@ -27,9 +27,7 @@ export class FuseWidgetComponent implements OnInit, AfterContentInit
setTimeout(() => {
this.toggleButtons.forEach(flipButton => {
this.renderer.listen(flipButton.el.nativeElement, 'click', (event) => {
event.preventDefault();
event.stopPropagation();
this.renderer.listen(flipButton.el.nativeElement, 'click', () => {
this.toggle();
});
});

View File

@@ -21,7 +21,7 @@ export class FuseIfOnDomDirective implements AfterContentChecked
{
setTimeout(() => {
this.viewContainer.createEmbeddedView(this.templateRef);
}, 300);
}, 350);
this.isCreated = true;
}
else if ( this.isCreated && !document.body.contains(this.element.nativeElement) )

View File

@@ -1,84 +0,0 @@
import { Directive, Input, OnInit, HostListener, OnDestroy, HostBinding } from '@angular/core';
import { MatSidenav } from '@angular/material';
import { ObservableMedia } from '@angular/flex-layout';
import { Subscription } from 'rxjs/Subscription';
import { FuseMatchMedia } from '../../services/match-media.service';
import { FuseMatSidenavHelperService } from './fuse-mat-sidenav-helper.service';
@Directive({
selector: '[fuseMatSidenavHelper]'
})
export class FuseMatSidenavHelperDirective implements OnInit, OnDestroy
{
matchMediaSubscription: Subscription;
@HostBinding('class.mat-is-locked-open') isLockedOpen = true;
@Input('fuseMatSidenavHelper') id: string;
@Input('mat-is-locked-open') matIsLockedOpenBreakpoint: string;
constructor(
private fuseMatSidenavService: FuseMatSidenavHelperService,
private fuseMatchMedia: FuseMatchMedia,
private observableMedia: ObservableMedia,
private matSidenav: MatSidenav
)
{
}
ngOnInit()
{
this.fuseMatSidenavService.setSidenav(this.id, this.matSidenav);
if ( this.observableMedia.isActive(this.matIsLockedOpenBreakpoint) )
{
this.isLockedOpen = true;
this.matSidenav.mode = 'side';
this.matSidenav.toggle(true);
}
else
{
this.isLockedOpen = false;
this.matSidenav.mode = 'over';
this.matSidenav.toggle(false);
}
this.matchMediaSubscription = this.fuseMatchMedia.onMediaChange.subscribe(() => {
if ( this.observableMedia.isActive(this.matIsLockedOpenBreakpoint) )
{
this.isLockedOpen = true;
this.matSidenav.mode = 'side';
this.matSidenav.toggle(true);
}
else
{
this.isLockedOpen = false;
this.matSidenav.mode = 'over';
this.matSidenav.toggle(false);
}
});
}
ngOnDestroy()
{
this.matchMediaSubscription.unsubscribe();
}
}
@Directive({
selector: '[fuseMatSidenavToggler]'
})
export class FuseMatSidenavTogglerDirective
{
@Input('fuseMatSidenavToggler') id;
constructor(private fuseMatSidenavService: FuseMatSidenavHelperService)
{
}
@HostListener('click')
onClick()
{
this.fuseMatSidenavService.getSidenav(this.id).toggle();
}
}

View File

@@ -1,5 +1,5 @@
import { AfterViewInit, Directive, ElementRef, OnDestroy, OnInit } from '@angular/core';
import PerfectScrollbar from 'perfect-scrollbar';
import { AfterViewInit, Directive, ElementRef, NgZone, OnDestroy, OnInit } from '@angular/core';
import * as Ps from 'perfect-scrollbar';
import { FuseConfigService } from '../../services/config.service';
import { Subscription } from 'rxjs/Subscription';
import { Platform } from '@angular/cdk/platform';
@@ -7,16 +7,16 @@ import { Platform } from '@angular/cdk/platform';
@Directive({
selector: '[fusePerfectScrollbar]'
})
export class FusePerfectScrollbarDirective implements AfterViewInit, OnDestroy
export class FusePerfectScrollbarDirective implements OnInit, AfterViewInit, OnDestroy
{
onSettingsChanged: Subscription;
isDisableCustomScrollbars = false;
isMobile = false;
isInitialized = true;
ps;
constructor(
public element: ElementRef,
private element: ElementRef,
private zone: NgZone,
private fuseConfig: FuseConfigService,
private platform: Platform
)
@@ -35,6 +35,11 @@ export class FusePerfectScrollbarDirective implements AfterViewInit, OnDestroy
}
}
ngOnInit()
{
}
ngAfterViewInit()
{
if ( this.isMobile || this.isDisableCustomScrollbars )
@@ -43,15 +48,16 @@ export class FusePerfectScrollbarDirective implements AfterViewInit, OnDestroy
return;
}
// Initialize the perfect-scrollbar
this.ps = new PerfectScrollbar(this.element.nativeElement, {
wheelPropagation: true
this.zone.runOutsideAngular(() => {
// Initialize the perfect-scrollbar
Ps.initialize(this.element.nativeElement);
});
}
ngOnDestroy()
{
if ( !this.isInitialized || !this.ps )
if ( !this.isInitialized )
{
return;
}
@@ -59,7 +65,7 @@ export class FusePerfectScrollbarDirective implements AfterViewInit, OnDestroy
this.onSettingsChanged.unsubscribe();
// Destroy the perfect-scrollbar
this.ps.destroy();
Ps.destroy(this.element.nativeElement);
}
update()
@@ -70,7 +76,7 @@ export class FusePerfectScrollbarDirective implements AfterViewInit, OnDestroy
}
// Update the perfect-scrollbar
this.ps.update();
Ps.update(this.element.nativeElement);
}
destroy()
@@ -120,6 +126,7 @@ export class FusePerfectScrollbarDirective implements AfterViewInit, OnDestroy
// PS has weird event sending order, this is a workaround for that
this.update();
this.update();
}
else if ( value !== this.element.nativeElement[target] )

View File

@@ -0,0 +1,99 @@
import { Directive, Input, OnInit, HostListener, OnDestroy, HostBinding } from '@angular/core';
import { MdSidenav } from '@angular/material';
import { FuseMdSidenavHelperService } from 'app/core/directives/md-sidenav-helper/md-sidenav-helper.service';
import { FuseMatchMedia } from '../../services/match-media.service';
import { ObservableMedia } from '@angular/flex-layout';
import { Subscription } from 'rxjs/Subscription';
@Directive({
selector: '[fuseMdSidenavHelper]'
})
export class FuseMdSidenavHelperDirective implements OnInit, OnDestroy
{
matchMediaSubscription: Subscription;
@HostBinding('class.md-is-locked-open') isLockedOpen = true;
@HostBinding('class.md-stop-transition') stopTransition = true;
@Input('fuseMdSidenavHelper') id: string;
@Input('md-is-locked-open') mdIsLockedOpenBreakpoint: string;
constructor(
private fuseMdSidenavService: FuseMdSidenavHelperService,
private fuseMatchMedia: FuseMatchMedia,
private observableMedia: ObservableMedia,
private mdSidenav: MdSidenav
)
{
}
ngOnInit()
{
this.fuseMdSidenavService.setSidenav(this.id, this.mdSidenav);
if ( this.observableMedia.isActive(this.mdIsLockedOpenBreakpoint) )
{
setTimeout(() => {
this.isLockedOpen = true;
this.mdSidenav.mode = 'side';
this.mdSidenav.open();
});
this.stopTransition = false;
}
else
{
setTimeout(() => {
this.isLockedOpen = false;
this.mdSidenav.mode = 'over';
this.mdSidenav.close();
});
setTimeout(() => {
this.stopTransition = false;
}, 3000);
}
this.matchMediaSubscription = this.fuseMatchMedia.onMediaChange.subscribe(() => {
if ( this.observableMedia.isActive(this.mdIsLockedOpenBreakpoint) )
{
setTimeout(() => {
this.isLockedOpen = true;
this.mdSidenav.mode = 'side';
this.mdSidenav.open();
});
}
else
{
setTimeout(() => {
this.isLockedOpen = false;
this.mdSidenav.mode = 'over';
this.mdSidenav.close();
});
}
});
}
ngOnDestroy()
{
this.matchMediaSubscription.unsubscribe();
}
}
@Directive({
selector: '[fuseMdSidenavToggler]'
})
export class FuseMdSidenavTogglerDirective
{
@Input('fuseMdSidenavToggler') id;
constructor(private fuseMdSidenavService: FuseMdSidenavHelperService)
{
}
@HostListener('click')
onClick()
{
this.fuseMdSidenavService.getSidenav(this.id).toggle();
}
}

View File

@@ -1,10 +1,10 @@
import { Injectable } from '@angular/core';
import { MatSidenav } from '@angular/material';
import { MdSidenav } from '@angular/material';
@Injectable()
export class FuseMatSidenavHelperService
export class FuseMdSidenavHelperService
{
sidenavInstances: MatSidenav[];
sidenavInstances: MdSidenav[];
constructor()
{

View File

@@ -82,12 +82,10 @@ export class FuseUtils
{
function S4()
{
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
return (((1 + Math.random()) * 0x10000) || 0).toString(16).substring(1);
}
return S4() + S4();
return (S4() + S4());
}
public static toggleInArray(item, array)
@@ -101,14 +99,4 @@ export class FuseUtils
array.splice(array.indexOf(item), 1);
}
}
public static handleize(text)
{
return text.toString().toLowerCase()
.replace(/\s+/g, '-') // Replace spaces with -
.replace(/[^\w\-]+/g, '') // Remove all non-word chars
.replace(/\-\-+/g, '-') // Replace multiple - with single -
.replace(/^-+/, '') // Trim - from start of text
.replace(/-+$/, ''); // Trim - from end of text
}
}

View File

@@ -681,7 +681,6 @@ const matColors = {
}
};
// tslint:disable-next-line
const matPresetColors = [
'#ffebee', '#ffcdd2', '#ef9a9a', '#e57373', '#ef5350', '#f44336', '#e53935', '#d32f2f', '#c62828', '#b71c1c', '#ff8a80', '#ff5252', '#ff1744', '#d50000', '#fce4ec', '#f8bbd0', '#f48fb1', '#f06292', '#ec407a', '#e91e63', '#d81b60', '#c2185b', '#ad1457', '#880e4f', '#ff80ab', '#ff4081', '#f50057', '#c51162', '#f3e5f5', '#e1bee7', '#ce93d8', '#ba68c8', '#ab47bc', '#9c27b0', '#8e24aa', '#7b1fa2', '#6a1b9a', '#4a148c', '#ea80fc', '#e040fb', '#d500f9', '#aa00ff', '#ede7f6', '#d1c4e9', '#b39ddb', '#9575cd', '#7e57c2', '#673ab7', '#5e35b1', '#512da8', '#4527a0', '#311b92', '#b388ff', '#7c4dff', '#651fff', '#6200ea', '#e8eaf6', '#c5cae9', '#9fa8da', '#7986cb', '#5c6bc0', '#3f51b5', '#3949ab', '#303f9f', '#283593', '#1a237e', '#8c9eff', '#536dfe', '#3d5afe', '#304ffe', '#e3f2fd', '#bbdefb', '#90caf9', '#64b5f6', '#42a5f5', '#2196f3', '#1e88e5', '#1976d2', '#1565c0', '#0d47a1', '#82b1ff', '#448aff', '#2979ff', '#2962ff', '#e1f5fe', '#b3e5fc', '#81d4fa', '#4fc3f7', '#29b6f6', '#03a9f4', '#039be5', '#0288d1', '#0277bd', '#01579b', '#80d8ff', '#40c4ff', '#00b0ff', '#0091ea', '#e0f7fa', '#b2ebf2', '#80deea', '#4dd0e1', '#26c6da', '#00bcd4', '#00acc1', '#0097a7', '#00838f', '#006064', '#84ffff', '#18ffff', '#00e5ff', '#00b8d4', '#e0f2f1', '#b2dfdb', '#80cbc4', '#4db6ac', '#26a69a', '#009688', '#00897b', '#00796b', '#00695c', '#004d40', '#a7ffeb', '#64ffda', '#1de9b6', '#00bfa5', '#e8f5e9', '#c8e6c9', '#a5d6a7', '#81c784', '#66bb6a', '#4caf50', '#43a047', '#388e3c', '#2e7d32', '#1b5e20', '#b9f6ca', '#69f0ae', '#00e676', '#00c853', '#f1f8e9', '#dcedc8', '#c5e1a5', '#aed581', '#9ccc65', '#8bc34a', '#7cb342', '#689f38', '#558b2f', '#33691e', '#ccff90', '#b2ff59', '#76ff03', '#64dd17', '#f9fbe7', '#f0f4c3', '#e6ee9c', '#dce775', '#d4e157', '#cddc39', '#c0ca33', '#afb42b', '#9e9d24', '#827717', '#f4ff81', '#eeff41', '#c6ff00', '#aeea00', '#fffde7', '#fff9c4', '#fff59d', '#fff176', '#ffee58', '#ffeb3b', '#fdd835', '#fbc02d', '#f9a825', '#f57f17', '#ffff8d', '#ffff00', '#ffea00', '#ffd600', '#fff8e1', '#ffecb3', '#ffe082', '#ffd54f', '#ffca28', '#ffc107', '#ffb300', '#ffa000', '#ff8f00', '#ff6f00', '#ffe57f', '#ffd740', '#ffc400', '#ffab00', '#fff3e0', '#ffe0b2', '#ffcc80', '#ffb74d', '#ffa726', '#ff9800', '#fb8c00', '#f57c00', '#ef6c00', '#e65100', '#ffd180', '#ffab40', '#ff9100', '#ff6d00', '#fbe9e7', '#ffccbc', '#ffab91', '#ff8a65', '#ff7043', '#ff5722', '#f4511e', '#e64a19', '#d84315', '#bf360c', '#ff9e80', '#ff6e40', '#ff3d00', '#dd2c00', '#efebe9', '#d7ccc8', '#bcaaa4', '#a1887f', '#8d6e63', '#795548', '#6d4c41', '#5d4037', '#4e342e', '#3e2723', '#d7ccc8', '#bcaaa4', '#8d6e63', '#5d4037', '#fafafa', '#f5f5f5', '#eeeeee', '#e0e0e0', '#bdbdbd', '#9e9e9e', '#757575', '#616161', '#424242', '#212121', '#ffffff', '#eeeeee', '#bdbdbd', '#616161', '#eceff1', '#cfd8dc', '#b0bec5', '#90a4ae', '#78909c', '#607d8b', '#546e7a', '#455a64', '#37474f', '#263238', '#cfd8dc', '#b0bec5', '#78909c', '#455a64'
];

View File

@@ -1,108 +1,106 @@
import { NgModule } from '@angular/core';
import {
MatAutocompleteModule,
MatButtonModule,
MatButtonToggleModule,
MatCheckboxModule,
MatToolbarModule,
MatTooltipModule,
MatCardModule,
MatChipsModule,
MatDatepickerModule,
MatDialogModule,
MatExpansionModule,
MatFormFieldModule,
MatGridListModule,
MatIconModule,
MatInputModule,
MatListModule,
MatMenuModule,
MatNativeDateModule,
MatPaginatorModule,
MatProgressBarModule,
MatProgressSpinnerModule,
MatRadioModule,
MatRippleModule,
MatSelectModule,
MatSidenavModule,
MatSliderModule,
MatSlideToggleModule,
MatSnackBarModule,
MatSortModule,
MatTableModule,
MatTabsModule,
MatStepperModule
MdAutocompleteModule,
MdButtonModule,
MdButtonToggleModule,
MdCheckboxModule,
MdToolbarModule,
MdTooltipModule,
MdCardModule,
MdChipsModule,
MdCoreModule,
MdDatepickerModule,
MdDialogModule,
MdExpansionModule,
MdGridListModule,
MdIconModule,
MdInputModule,
MdListModule,
MdMenuModule,
MdNativeDateModule,
MdPaginatorModule,
MdProgressBarModule,
MdProgressSpinnerModule,
MdRadioModule,
MdRippleModule,
MdSelectModule,
MdSidenavModule,
MdSliderModule,
MdSlideToggleModule,
MdSnackBarModule,
MdSortModule,
MdTableModule,
MdTabsModule
} from '@angular/material';
import { CdkTableModule } from '@angular/cdk/table';
@NgModule({
imports: [
MatAutocompleteModule,
MatButtonModule,
MatButtonToggleModule,
MatCardModule,
MatCheckboxModule,
MatChipsModule,
MatDatepickerModule,
MatDialogModule,
MatExpansionModule,
MatFormFieldModule,
MatGridListModule,
MatIconModule,
MatInputModule,
MatListModule,
MatMenuModule,
MatNativeDateModule,
MatPaginatorModule,
MatProgressBarModule,
MatProgressSpinnerModule,
MatRadioModule,
MatRippleModule,
MatSelectModule,
MatSidenavModule,
MatSliderModule,
MatSlideToggleModule,
MatSnackBarModule,
MatStepperModule,
MatSortModule,
MatTableModule,
MatTabsModule,
MatToolbarModule,
MatTooltipModule,
MdAutocompleteModule,
MdButtonModule,
MdButtonToggleModule,
MdCardModule,
MdCheckboxModule,
MdChipsModule,
MdCoreModule,
MdDatepickerModule,
MdDialogModule,
MdExpansionModule,
MdGridListModule,
MdIconModule,
MdInputModule,
MdListModule,
MdMenuModule,
MdNativeDateModule,
MdPaginatorModule,
MdProgressBarModule,
MdProgressSpinnerModule,
MdRadioModule,
MdRippleModule,
MdSelectModule,
MdSidenavModule,
MdSliderModule,
MdSlideToggleModule,
MdSnackBarModule,
MdSortModule,
MdTableModule,
MdTabsModule,
MdToolbarModule,
MdTooltipModule,
CdkTableModule
],
exports: [
MatAutocompleteModule,
MatButtonModule,
MatButtonToggleModule,
MatCardModule,
MatCheckboxModule,
MatChipsModule,
MatDatepickerModule,
MatDialogModule,
MatExpansionModule,
MatGridListModule,
MatIconModule,
MatInputModule,
MatListModule,
MatMenuModule,
MatNativeDateModule,
MatPaginatorModule,
MatProgressBarModule,
MatProgressSpinnerModule,
MatRadioModule,
MatRippleModule,
MatSelectModule,
MatSidenavModule,
MatSliderModule,
MatSlideToggleModule,
MatSnackBarModule,
MatStepperModule,
MatSortModule,
MatTableModule,
MatTabsModule,
MatToolbarModule,
MatTooltipModule,
MdAutocompleteModule,
MdButtonModule,
MdButtonToggleModule,
MdCardModule,
MdCheckboxModule,
MdChipsModule,
MdCoreModule,
MdDatepickerModule,
MdDialogModule,
MdExpansionModule,
MdGridListModule,
MdIconModule,
MdInputModule,
MdListModule,
MdMenuModule,
MdNativeDateModule,
MdPaginatorModule,
MdProgressBarModule,
MdProgressSpinnerModule,
MdRadioModule,
MdRippleModule,
MdSelectModule,
MdSidenavModule,
MdSliderModule,
MdSlideToggleModule,
MdSnackBarModule,
MdSortModule,
MdTableModule,
MdTabsModule,
MdToolbarModule,
MdTooltipModule,
CdkTableModule
]
})

View File

@@ -8,28 +8,27 @@ import { ColorPickerModule } from 'ngx-color-picker';
import { NgxDnDModule } from '@swimlane/ngx-dnd';
import { NgxDatatableModule } from '@swimlane/ngx-datatable';
import { FuseMatSidenavHelperDirective, FuseMatSidenavTogglerDirective } from '../directives/fuse-mat-sidenav-helper/fuse-mat-sidenav-helper.directive';
import { FuseMatSidenavHelperService } from '../directives/fuse-mat-sidenav-helper/fuse-mat-sidenav-helper.service';
import { FuseMdSidenavHelperDirective, FuseMdSidenavTogglerDirective } from '../directives/md-sidenav-helper/md-sidenav-helper.directive';
import { FusePipesModule } from '../pipes/pipes.module';
import { FuseConfirmDialogComponent } from '../components/confirm-dialog/confirm-dialog.component';
import { FuseCountdownComponent } from '../components/countdown/countdown.component';
import { FuseMatchMedia } from '../services/match-media.service';
import { FuseNavbarVerticalService } from '../../main/navbar/vertical/navbar-vertical.service';
import { FuseHighlightComponent } from '../components/highlight/highlight.component';
import { FuseMdSidenavHelperService } from '../directives/md-sidenav-helper/md-sidenav-helper.service';
import { FuseHljsComponent } from '../components/hljs/hljs.component';
import { FusePerfectScrollbarDirective } from '../directives/fuse-perfect-scrollbar/fuse-perfect-scrollbar.directive';
import { FuseIfOnDomDirective } from '../directives/fuse-if-on-dom/fuse-if-on-dom.directive';
import { FuseMaterialColorPickerComponent } from '../components/material-color-picker/material-color-picker.component';
import { FuseTranslationLoaderService } from '../services/translation-loader.service';
import { Md2Module } from 'md2';
import { CookieService } from 'ngx-cookie-service';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations : [
FuseMatSidenavHelperDirective,
FuseMatSidenavTogglerDirective,
FuseMdSidenavHelperDirective,
FuseMdSidenavTogglerDirective,
FuseConfirmDialogComponent,
FuseCountdownComponent,
FuseHighlightComponent,
FuseHljsComponent,
FuseIfOnDomDirective,
FusePerfectScrollbarDirective,
FuseMaterialColorPickerComponent
@@ -43,18 +42,19 @@ import { TranslateModule } from '@ngx-translate/core';
ReactiveFormsModule,
ColorPickerModule,
NgxDnDModule,
NgxDatatableModule
NgxDatatableModule,
Md2Module
],
exports : [
FlexLayoutModule,
MaterialModule,
CommonModule,
FormsModule,
FuseMatSidenavHelperDirective,
FuseMatSidenavTogglerDirective,
FuseMdSidenavHelperDirective,
FuseMdSidenavTogglerDirective,
FusePipesModule,
FuseCountdownComponent,
FuseHighlightComponent,
FuseHljsComponent,
FusePerfectScrollbarDirective,
ReactiveFormsModule,
ColorPickerModule,
@@ -62,7 +62,7 @@ import { TranslateModule } from '@ngx-translate/core';
NgxDatatableModule,
FuseIfOnDomDirective,
FuseMaterialColorPickerComponent,
TranslateModule
Md2Module
],
entryComponents: [
FuseConfirmDialogComponent
@@ -71,8 +71,7 @@ import { TranslateModule } from '@ngx-translate/core';
CookieService,
FuseMatchMedia,
FuseNavbarVerticalService,
FuseMatSidenavHelperService,
FuseTranslationLoaderService
FuseMdSidenavHelperService
]
})

View File

@@ -3,7 +3,7 @@
@import '~@swimlane/ngx-datatable/release/themes/material.css';
@import '~@swimlane/ngx-datatable/release/assets/icons.css';
// Perfect scrollbar
@import '~perfect-scrollbar/css/perfect-scrollbar.css';
@import '~perfect-scrollbar/dist/css/perfect-scrollbar.min.css';
// Fuse
@import "fuse";
@@ -25,7 +25,6 @@
@import "partials/angular-material-fix";
@import "partials/typography";
@import "partials/page-layouts";
@import "partials/cards";
@import "partials/navigation";
@import "partials/forms";
@import "partials/toolbar";

View File

@@ -1,4 +1,3 @@
// Fix: "Icon button ripple radius is not correct on Edge & Safari"
.mat-icon-button {
.mat-button-ripple {
@@ -6,73 +5,37 @@
}
}
// Fix: "Inconsistent font sizes across elements"
.mat-input-wrapper {
font-size: 16px;
}
md-sidenav-container {
.mat-checkbox {
font-size: 16px;
}
md-sidenav {
.mat-radio-button {
font-size: 16px;
}
&[md-is-locked-open].md-stop-transition {
transition: none !important;
transform: translate3d(0, 0, 0) !important;
opacity: 0;
.mat-pseudo-checkbox-checked:after {
width: 14px !important;
height: 7px !important;
}
~ .mat-sidenav-content,
~ .mat-drawer-content {
transition: none !important;
}
}
// Fix: "Input underlines has wrong color opacity value"
.mat-form-field-underline {
background-color: rgba(0, 0, 0, 0.12);
}
&.mat-sidenav-opened {
// Fix: "Some idiots using table-cell and inline-table in mat-select"
.mat-form-field {
&.mat-drawer-side {
&.mat-form-field-type-mat-select {
.mat-input-infix {
display: inline-flex;
width: auto;
.mat-select-trigger {
display: inline-flex;
align-items: center;
width: 100%;
.mat-select-value {
display: flex;
max-width: none;
margin-right: 8px;
}
.mat-select-arrow-wrapper {
display: inline-flex;
~ .mat-sidenav-content,
~ .mat-drawer-content {
transition: none !important;
transform: translate3d(0, 0, 0) !important;
}
}
}
}
}
// Fix: "Stepper icons are broken due to Fuse's icon helpers"
mat-horizontal-stepper,
mat-vertical-stepper {
mat-step-header {
mat-icon {
height: 16px !important;
width: 16px !important;
min-width: 0 !important;
min-height: 0 !important;
color: rgba(255, 255, 255, 0.87) !important;
&.mat-drawer-end {
}
}
}
mat-vertical-stepper {
padding: 16px 0;
}
.mat-drawer-content {
}
}

View File

@@ -1,56 +0,0 @@
.fuse-card {
max-width: 320px;
min-width: 320px;
background: white;
border-radius: 2px;
@include mat-elevation(2);
&.variable-width {
min-width: 0;
}
// Buttons
.mat-button {
min-width: 0 !important;
padding: 0 8px !important;
}
// Button Toggle Group
.mat-button-toggle-group,
.mat-button-toggle-standalone {
box-shadow: none !important;
}
// Tabs
.mat-tab-labels {
justify-content: center;
}
.mat-tab-label {
min-width: 0 !important;
}
// Divider
.card-divider {
border-top: 1px solid rgba(0, 0, 0, 0.12);
margin: 16px;
&.light {
border-top-color: rgba(255, 255, 255, 0.12);
}
&.full-width {
margin: 0;
}
}
// Expand Area
.card-expand-area {
overflow: hidden;
.card-expanded-content {
padding: 8px 16px 16px 16px;
line-height: 1.75;
}
}
}

View File

@@ -51,14 +51,12 @@ $matColorHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400
// If the base text color is black...
@if (rgba(black, 1) == rgba($baseTextColor, 1)) {
.mat-icon,
.icon {
color: rgba(0, 0, 0, 0.54);
}
&.secondary-text,
.secondary-text {
color: rgba(0, 0, 0, 0.54) !important;
.secondary-text,
.mat-icon,
.icon,
.md2-datepicker-button {
color: rgba(0, 0, 0, 0.54);
}
&.hint-text,
@@ -82,7 +80,8 @@ $matColorHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400
@else {
.mat-icon,
.icon {
.icon,
.md2-datepicker-button {
color: rgba(255, 255, 255, 1);
}
@@ -112,60 +111,49 @@ $matColorHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400
@mixin generateMaterialElementColors($contrastColor) {
// If the contrast color is white...
$fuseForeground: (
base: white,
text: white,
hint-text: rgba(white, 0.5),
divider: rgba(white, 0.12),
);
$foreground: $mat-dark-theme-foreground;
// If the contrast color is black...
@if (rgba(black, 1) == rgba($contrastColor, 1)) {
$fuseForeground: (
base: black,
hint-text: rgba(black, 0.38),
divider: rgba(black, 0.12),
);
$foreground: $mat-light-theme-foreground;
}
// Native Input
input[type="text"] {
color: map_get($fuseForeground, base);
color: mat-color($foreground, base);
}
// Input
.mat-input-placeholder {
color: map_get($fuseForeground, hint-text);
color: mat-color($foreground, hint-text);
}
.mat-input-underline {
background-color: map_get($fuseForeground, divider);
background-color: mat-color($foreground, divider);
}
// Select
.mat-select-trigger,
.mat-select-arrow {
color: map_get($fuseForeground, hint-text);
color: mat-color($foreground, hint-text);
}
.mat-select-underline {
background-color: map_get($fuseForeground, divider);
background-color: mat-color($foreground, divider);
}
.mat-select-disabled .mat-select-value,
.mat-select-arrow,
.mat-select-trigger {
color: map_get($fuseForeground, hint-text);
color: mat-color($foreground, hint-text);
}
.mat-select-content,
.mat-select-panel-done-animating {
background: map_get($background, card);
.mat-select-content, .mat-select-panel-done-animating {
background: mat-color($background, card);
}
.mat-select-value {
color: map_get($fuseForeground, text);
color: mat-color($foreground, text);
}
}
@@ -176,7 +164,7 @@ $matColorHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400
background-color: $color !important;
}
.mat-#{$colorName}#{$hue}-bg {
.md-#{$colorName}#{$hue}-bg {
background-color: $color !important;
color: $contrastColor !important;
@@ -187,11 +175,6 @@ $matColorHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400
// Generate material element colors
// based on current contrast color
@include generateMaterialElementColors($contrastColor);
&[disabled] {
background-color: rgba($color, .12) !important;
color: rgba($contrastColor, .26) !important;
}
}
.#{$colorName}#{$hue}-fg {

View File

@@ -1,6 +1,6 @@
body {
> mat-sidenav-container {
> md-sidenav-container {
height: 100%;
}
}

View File

@@ -1,59 +1,9 @@
// ######################
// POSITION HELPERS
// ######################
@each $breakpoint in map-keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
.position#{$infix}-relative {
position: relative;
}
.position#{$infix}-absolute {
position: absolute;
}
.position#{$infix}-static {
position: static;
}
}
}
// ####################################
// ABSOLUTE POSITION ALIGNMENT HELPERS
// ####################################
@each $breakpoint in map-keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
.align#{$infix}-top {
top: 0;
}
.align#{$infix}-right {
right: 0;
}
.align#{$infix}-bottom {
bottom: 0;
}
.align#{$infix}-left {
left: 0;
}
}
}
// ######################
// SIZE HELPERS
// ######################
@each $prop, $abbrev in (height: h, width: w) {
@for $index from 0 through 180 {
@for $index from 0 through 128 {
$size: $index * 4;
$length: #{$size}px;
@@ -78,6 +28,7 @@
// ######################
// SPACING HELPERS
// ######################
@each $breakpoint in map-keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) {
@@ -132,45 +83,47 @@
}
@if ($abbrev == m) {
@for $index from 0 through 64 {
$size: $index * 4;
$length: #{$size}px;
// Some special margin utils for flex alignments
.m#{$infix}-auto {
margin: auto !important;
}
// Some special margin utils for flex alignments
.m#{$infix}-auto {
margin: auto !important;
}
.mt#{$infix}-auto {
margin-top: auto !important;
}
.mt#{$infix}-auto {
margin-top: auto !important;
}
.mr#{$infix}-auto {
margin-right: auto !important;
}
.mr#{$infix}-auto {
margin-right: auto !important;
}
.mb#{$infix}-auto {
margin-bottom: auto !important;
}
.mb#{$infix}-auto {
margin-bottom: auto !important;
}
.ml#{$infix}-auto {
margin-left: auto !important;
}
.ml#{$infix}-auto {
margin-left: auto !important;
}
.mx#{$infix}-auto {
margin-right: auto !important;
margin-left: auto !important;
}
.mx#{$infix}-auto {
margin-right: auto !important;
margin-left: auto !important;
}
.my#{$infix}-auto {
margin-top: auto !important;
margin-bottom: auto !important;
.my#{$infix}-auto {
margin-top: auto !important;
margin-bottom: auto !important;
}
}
}
}
}
}
// ######################
// BORDER HELPERS
// ######################
// Border helpers
$border-style: 1px solid rgba(0, 0, 0, 0.12);
.border,
@@ -209,10 +162,3 @@ $border-style: 1px solid rgba(0, 0, 0, 0.12);
border-top: $border-style;
border-bottom: $border-style;
}
// ######################
// BORDER RADIUS HELPERS
// ######################
.border-radius-100 {
border-radius: 100%;
}

View File

@@ -1,5 +1,5 @@
i,
mat-icon {
md-icon {
color: rgba(0, 0, 0, 0.54);
font-size: 24px;
width: 24px;

View File

@@ -46,14 +46,14 @@
margin-top: 0;
margin-bottom: 0;
}
mat-icon.status {
md-icon.status {
position: absolute;
top: 28px;
left: 28px;
}
}
mat-icon.status {
md-icon.status {
border-radius: 50%;
&.online {
@@ -116,7 +116,7 @@ mat-icon.status {
max-height: 48px;
height: 48px;
mat-icon {
md-icon {
margin: 0 16px 0 0;
}
@@ -142,7 +142,7 @@ mat-icon.status {
}
}
mat-divider {
md-divider {
margin: 8px 0;
}
}
@@ -196,7 +196,7 @@ mat-icon.status {
background-color: #FFFFFF;
width: 280px;
border-radius: 2px;
margin: 12px;
margin: 24px 24px 0 0;
overflow: hidden;
&.style-1 {
@@ -234,7 +234,7 @@ mat-icon.status {
}
}
mat-divider {
md-divider {
margin: 16px 32px;
}
@@ -411,6 +411,7 @@ table {
color: rgba(0, 0, 0, 0.54);
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
white-space: nowrap;
min-width: 120px;
&:first-child {
padding-left: 24px;

View File

@@ -12,7 +12,6 @@
}
.nav-group {
display: block;
> .group-title {
position: relative;
@@ -47,20 +46,14 @@
}
.nav-link-badge {
display: flex;
align-items: center;
min-width: 20px;
height: 20px;
line-height: 20px;
padding: 0 7px;
font-size: 11px;
font-weight: 500;
border-radius: 20px;
transition: opacity 0.2s ease-in-out 0.1s;
margin-left: 8px;
+ .collapse-arrow {
margin-left: 8px;
}
}
&:hover {
@@ -110,9 +103,7 @@
> .nav-item {
> .nav-link,
&.nav-group > .group-title,
&.nav-group > .group-items > .nav-item > .nav-link {
> .nav-link {
padding-left: 56px;
}
@@ -120,9 +111,7 @@
> .nav-item {
> .nav-link,
&.nav-group > .group-title,
&.nav-group > .group-items > .nav-item > .nav-link {
> .nav-link {
padding-left: 72px;
}
}
@@ -201,10 +190,6 @@
> .nav-item {
> .nav-link {
height: 56px;
}
&.nav-collapse {
position: relative;

View File

@@ -96,7 +96,7 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
max-height: $carded-toolbar-height;
}
> .content {
.content {
display: flex;
flex: 1;
overflow: auto;
@@ -112,12 +112,12 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
// Single scroll
&.single-scroll {
> mat-sidenav-container {
> md-sidenav-container {
flex: 1 0 auto;
}
}
> mat-sidenav-container {
> md-sidenav-container {
display: flex;
flex: 1;
background: none;
@@ -132,11 +132,11 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
min-width: 240px;
max-width: 240px;
height: auto;
z-index: 4;
z-index: 2;
overflow-y: hidden;
@include mat-elevation(7);
&.mat-is-locked-open {
&.md-is-locked-open {
background: none;
box-shadow: none;
}
@@ -145,12 +145,6 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
height: $carded-header-height;
min-height: $carded-header-height;
max-height: $carded-header-height;
@include media-breakpoint-down('sm') {
height: $carded-header-height-sm;
min-height: $carded-header-height-sm;
max-height: $carded-header-height-sm;
}
}
.content {
@@ -181,12 +175,6 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
height: $carded-header-height-without-toolbar;
min-height: $carded-header-height-without-toolbar;
max-height: $carded-header-height-without-toolbar;
@include media-breakpoint-down('sm') {
height: $carded-header-height-without-toolbar-sm;
min-height: $carded-header-height-without-toolbar-sm;
max-height: $carded-header-height-without-toolbar-sm;
}
}
.content-card {
@@ -222,73 +210,17 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
}
}
}
// Tabbed
&.tabbed {
> mat-sidenav-container {
> .mat-sidenav-content,
> .mat-drawer-content {
width: calc(100% - 240px);
.center {
width: calc(100% - 32px);
@include media-breakpoint-down('md') {
width: calc(100% - 64px);
}
.header {
flex: 1;
}
.content-card {
.content {
.mat-tab-group {
overflow: hidden;
.mat-tab-header {
.mat-tab-label {
height: 64px;
}
}
.mat-tab-body {
overflow: hidden;
.mat-tab-body-content {
overflow: hidden;
.tab-content {
position: relative;
width: 100%;
height: 100%;
overflow: auto;
}
}
}
}
}
}
}
}
}
}
}
// Left sidenav
&.left-sidenav {
// Sidenav
> mat-sidenav-container {
> md-sidenav-container {
.sidenav {
&.mat-is-locked-open {
&.md-is-locked-open {
~ .mat-sidenav-content,
~ .mat-drawer-content {
@@ -306,12 +238,12 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
&.right-sidenav {
// Sidenav
> mat-sidenav-container {
> md-sidenav-container {
.sidenav {
order: 999;
&.mat-is-locked-open {
&.md-is-locked-open {
~ .mat-sidenav-content,
~ .mat-drawer-content {
@@ -363,7 +295,7 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
// Single scroll
&.single-scroll {
> mat-sidenav-container {
> md-sidenav-container {
flex: 1 0 auto;
> .mat-sidenav-content,
@@ -377,7 +309,7 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
// Inner Sidenav
&.inner-sidenav {
> mat-sidenav-container {
> md-sidenav-container {
flex: 1;
.sidenav {
@@ -406,9 +338,10 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
}
}
> mat-sidenav-container {
> md-sidenav-container {
display: flex;
flex-direction: column;
//flex-direction: row;
flex: 1;
background: none;
z-index: 2;
@@ -421,7 +354,7 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
z-index: 51;
@include mat-elevation(7);
&.mat-is-locked-open {
&.md-is-locked-open {
width: 220px;
min-width: 220px;
max-width: 220px;
@@ -507,7 +440,7 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
&.left-sidenav,
&.right-sidenav {
> mat-sidenav-container {
> md-sidenav-container {
flex: 1 0 auto;
}
}
@@ -525,7 +458,7 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
&.left-sidenav,
&.right-sidenav {
> mat-sidenav-container {
> md-sidenav-container {
flex: 1 0 auto !important;
> .mat-sidenav-content,
@@ -550,7 +483,7 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
&.left-sidenav,
&.right-sidenav {
> mat-sidenav-container {
> md-sidenav-container {
> .mat-sidenav-content,
> .mat-drawer-content {

View File

@@ -4,9 +4,8 @@
@media all {
/* Never show page breaks in normal view */
.page-break-after,
.page-break-before {
/* Never show page break in normal view */
.page-break {
display: none;
}
@@ -14,52 +13,39 @@
@media print {
/* html and body tweaks */
html, body {
height: auto !important;
overflow: initial !important;
/* Page Styles */
@page {
//margin: 0.5cm;
}
/* Page breaks */
.page-break-after {
/* Page break */
.page-break {
display: block;
break-after: always;
page-break-after: always;
position: relative;
}
.page-break-before {
display: block;
page-break-before: always;
position: relative;
}
/* General styles */
fuse-root {
fuse-navbar-vertical,
fuse-navbar-horizontal,
fuse-navbar,
fuse-toolbar,
fuse-footer,
fuse-quick-panel,
fuse-theme-options,
.ps > .ps__rail-x,
.ps > .ps__rail-y {
.ps > .ps__scrollbar-x-rail,
.ps > .ps__scrollbar-y-rail {
display: none !important;
}
.ps {
overflow: visible !important;
}
}
.mat-drawer-container,
.mat-sidenav-container {
background-color: white !important;
.mat-drawer-content,
.mat-sidenav-content {
overflow: initial !important;
height: auto !important
}
}
/* Printable page specific styles */
.printable {
overflow: visible !important;
height: auto !important;
}
}

View File

@@ -28,7 +28,7 @@ html, body {
}
// Reset non angular-material input's default browser/os styles
*:not(mat-input-container) {
*:not(md-input-container) {
> input {
border: none;
@@ -55,7 +55,7 @@ html, body {
}
}
*:not(mat-input-container) {
*:not(md-input-container) {
> input[type="button"],
> button,

View File

@@ -229,22 +229,6 @@ strong {
}
}
.line-height-1 {
line-height: 1;
}
.line-height-1\.25 {
line-height: 1.25;
}
.line-height-1\.50 {
line-height: 1.5;
}
.line-height-1\.75 {
line-height: 1.75;
}
// Boxed text
.text-boxed {
border-radius: 2px;

View File

@@ -0,0 +1,124 @@
/*
github.com style (c) Vasily Polovnyov <vast@whiteants.net>
*/
hljs,
[hljs] {
display: block;
overflow-x: auto;
// padding: 0.5em;
color: #333;
background: #F8F8F8;
-webkit-text-size-adjust: none;
}
.hljs-comment,
.diff .hljs-header {
color: #998;
font-style: italic;
}
.hljs-keyword,
.css .rule .hljs-keyword,
.hljs-winutils,
.nginx .hljs-title,
.hljs-subst,
.hljs-request,
.hljs-status {
color: #333;
font-weight: bold;
}
.hljs-number,
.hljs-hexcolor,
.ruby .hljs-constant {
color: #008080;
}
.hljs-string,
.hljs-tag .hljs-value,
.hljs-doctag,
.tex .hljs-formula {
color: #D14;
}
.hljs-title,
.hljs-id,
.scss .hljs-preprocessor {
color: #900;
font-weight: bold;
}
.hljs-list .hljs-keyword,
.hljs-subst {
font-weight: normal;
}
.hljs-class .hljs-title,
.hljs-type,
.vhdl .hljs-literal,
.tex .hljs-command {
color: #458;
font-weight: bold;
}
.hljs-tag,
.hljs-tag .hljs-title,
.hljs-rule .hljs-property,
.django .hljs-tag .hljs-keyword {
color: #000080;
font-weight: normal;
}
.hljs-attribute,
.hljs-variable,
.lisp .hljs-body,
.hljs-name {
color: #008080;
}
.hljs-regexp {
color: #009926;
}
.hljs-symbol,
.ruby .hljs-symbol .hljs-string,
.lisp .hljs-keyword,
.clojure .hljs-keyword,
.scheme .hljs-keyword,
.tex .hljs-special,
.hljs-prompt {
color: #990073;
}
.hljs-built_in {
color: #0086B3;
}
.hljs-preprocessor,
.hljs-pragma,
.hljs-pi,
.hljs-doctype,
.hljs-shebang,
.hljs-cdata {
color: #999;
font-weight: bold;
}
.hljs-deletion {
background: #FDD;
}
.hljs-addition {
background: #DFD;
}
.diff .hljs-change {
background: #0086B3;
}
.hljs-chunk {
color: #AAA;
}

View File

@@ -3,21 +3,20 @@
.color-picker {
height: auto !important;
border: none !important;
@include mat-elevation(4);
.preset-area {
padding: 0 0 16px 16px !important;
//padding: 4px 15px;
padding: 0 0 12px 12px !important;
height: 140px;
overflow-y: auto;
overflow-x: hidden;
> hr {
display: none;
}
.preset-label {
display: none;
}
.preset-color {
@@ -26,8 +25,7 @@
margin: 0 !important;
border: none !important;
border-radius: 0 !important;
&:nth-child(14n+1) {
&:nth-child(14n+3) {
clear: both;
}
}

View File

@@ -55,7 +55,6 @@
min-height: 48px;
transition: none;
padding: 0 24px;
overflow: hidden;
}
}
}
@@ -83,16 +82,6 @@
.datatable-pager {
margin: 0 0 0 24px;
.pager {
li {
a {
text-decoration: none !important;
}
}
}
}
}
}

View File

@@ -1,12 +1,11 @@
.ps {
position: relative;
> .ps__rail-x {
> .ps__scrollbar-y-rail {
z-index: 99999;
}
> .ps__rail-y {
> .ps__scrollbar-y-rail {
z-index: 99999;
left: auto !important;
}
}

View File

@@ -1,4 +1,4 @@
@import "prism";
@import "highlight";
@import "perfect-scrollbar";
@import "ngx-datatable";
@import "ngx-color-picker";

View File

@@ -1,269 +0,0 @@
// Edit the sixteen color-value variables, and create your own syntax highlighter colorscheme
$base00: #263238;
$base01: #2C393F;
$base02: #62727A;
$base03: #707880;
$base04: #C9CCD3;
$base05: #CDD3DE;
$base06: #D5DBE5;
$base07: #FFFFFF;
$base08: #EC5F67;
$base09: #EA9560;
$base0A: #FFCC00;
$base0B: #8BD649;
$base0C: #80CBC4;
$base0D: #89DDFF;
$base0E: #82AAFF;
$base0F: #EC5F67;
$red: $base08;
$orange: $base09;
$yellow: $base0A;
$green: $base0B;
$cyan: $base0C;
$blue: $base0D;
$violet: $base0E;
$magenta: $base0F;
$code-font-family: Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace;
$code-font-size: 14px;
$code-line-height: 1.6;
$code-background: $base00;
$code-color: $base05;
$code-color-fade: $base05;
// $code-text-shadow: none;
$code-color-comment: $base02;
$code-color-keyword: $base0B;
$code-color-value: $base0C;
$code-color-attr-name: $base09;
$code-color-string: $base0C;
$code-color-name: $base0A;
$code-color-number: $base09;
$code-color-variable: $base0D;
$code-color-selector: $base0E;
$code-color-property: $base0A;
$code-color-important: $base08;
$code-color-tag: $base0D;
$code-color-atrule: $base0C;
// @import "../partials/prism";
/**
* Prism base code highlighter theme using Sass
*
* @author @MoOx
* https://github.com/MoOx/sass-prism-theme-base/blob/master/_prism.scss
* slightly adapted by me, Bram de Haan
*/
// prism selector
$code-selector: "code[class*=\"language-\"], pre[class*=\"language-\"]";
$code-selector-block: "pre[class*=\"language-\"]";
$code-selector-inline: ":not(pre) > code[class*=\"language-\"]";
// generic stuff
$code-font-family: Menlo, Monaco, "Courier New", monospace !default;
$code-font-size: 14px !default;
$code-line-height: 1.6 !default;
$code-tab-size: 4 !default;
$code-hyphens: none !default;
$code-block-padding: 12px !default;
$code-inline-padding: 2px 6px !default;
$code-border-radius: 0 !default;
$code-border: none !default;
$code-background: #2A2A2A !default;
$code-color: #FFF !default;
$code-color-fade: #BEBEC5 !default;
// $code-text-shadow: 0 1px 0 #000 !default;
$code-box-shadow: none !default;
$code-color-property: #B58900 !default;
$code-color-important: #CB4B16 !default;
$code-color-tag: #268BD2 !default;
$code-color-atrule: #2AA198 !default;
$code-color-attr-name: #B65611 !default;
// $code-linenums-padding: 7px !default;
// $code-linenums-width: 40px !default;
// $code-linenums-background: #444 !default;
// $code-linenums-border-color: #555 !default;
// $code-linenums-border-width: 1px !default;
@if $code-selector != null {
#{$code-selector} {
-moz-tab-size: $code-tab-size;
-o-tab-size: $code-tab-size;
tab-size: $code-tab-size;
-webkit-hyphens: $code-hyphens;
-moz-hyphens: $code-hyphens;
-ms-hyphens: $code-hyphens;
hyphens: $code-hyphens;
// whitespace management
white-space: pre; // fallback
white-space: pre-wrap;
word-break: break-all;
word-wrap: break-word;
font-family: $code-font-family;
font-size: $code-font-size;
line-height: $code-line-height;
color: $code-color;
// text-shadow: $code-text-shadow;
background: $code-background;
}
}
%code-background {
border-radius: $code-border-radius;
border: $code-border;
box-shadow: $code-box-shadow;
}
@if $code-selector-block != null {
#{$code-selector-block} {
@extend %code-background;
padding: $code-block-padding;
}
}
@if $code-selector-inline != null {
#{$code-selector-inline} {
@extend %code-background;
padding: $code-inline-padding;
}
}
// pre[class*="language-"],
// :not(pre) > code[class*="language-"] {
// background: $code-background;
// }
// prism tokens
//
$code-color-comment: null !default;
$code-color-keyword: null !default;
$code-color-value: null !default;
$code-color-string: null !default;
$code-color-name: null !default;
$code-color-number: null !default;
$code-color-variable: null !default;
$code-color-selector: null !default;
$code-color-punctuation: $code-color-fade !default;
#{$code-selector} {
.namespace {
opacity: .7;
}
.token {
&.comment,
&.prolog,
&.doctype,
&.cdata {
color: $code-color-comment;
}
&.null,
&.operator,
&.boolean,
&.number {
color: $code-color-number;
}
&.string {
color: $code-color-string;
}
&.attr-name {
color: $code-color-attr-name;
}
&.entity,
&.url,
.language-css &.string,
.style &.string {
color: $code-color-string;
}
&.selector {
color: $code-color-selector;
}
&.attr-value,
&.keyword,
&.control,
&.directive,
&.unit {
color: $code-color-keyword;
}
&.important {
color: $code-color-important;
}
&.atrule {
color: $code-color-atrule;
}
&.regex,
&.statement {
color: $code-color-value;
}
&.placeholder,
&.variable {
color: $code-color-variable;
}
&.property,
&.tag {
// font-style: italic;
}
&.property {
color: $code-color-property;
}
&.tag {
color: $code-color-tag;
}
&.important,
&.statement {
font-weight: bold;
}
// todo ?
// &.mixin
// &.gradient
// &.abslength
// &.easing
// &.time
// &.angle
// &.fontfamily
// ruby/vim https://github.com/LeaVerou/prism/pull/18
// &.inst-var
// &.builtin
// &.const
// &.symbol
//
// php https://github.com/LeaVerou/prism/pull/20
// &.deliminator
// &.function
&.punctuation {
color: $code-color-punctuation;
}
&.entity {
cursor: help;
}
// for dev :)
&.debug {
color: red
}
}
}

View File

@@ -22,19 +22,18 @@ export class FuseConfigService
// Set the default settings
this.defaultSettings = {
layout : {
navigation : 'left', // 'right', 'left', 'top', 'none'
navigationFolded: false, // true, false
toolbar : 'below', // 'above', 'below', 'none'
footer : 'below', // 'above', 'below', 'none'
mode : 'fullwidth' // 'boxed', 'fullwidth'
navigation: 'left', // 'right', 'left', 'top', 'none'
toolbar : 'below', // 'above', 'below', 'none'
footer : 'below', // 'above', 'below', 'none'
mode : 'fullwidth' // 'boxed', 'fullwidth'
},
colorClasses : {
toolbar: 'mat-white-500-bg',
navbar : 'mat-fuse-dark-700-bg',
footer : 'mat-fuse-dark-900-bg'
toolbar: 'md-white-500-bg',
navbar : 'md-fuse-dark-500-bg',
footer : 'md-fuse-dark-700-bg'
},
customScrollbars: true,
routerAnimation : 'fadeIn' // fadeIn, slideUp, slideDown, slideRight, slideLeft, none
routerAnimation : 'fadeIn'
};
/**
@@ -45,7 +44,6 @@ export class FuseConfigService
this.defaultSettings.customScrollbars = false;
}
// Set the settings from the default settings
this.settings = Object.assign({}, this.defaultSettings);
// Reload the default settings on every navigation start
@@ -60,6 +58,7 @@ export class FuseConfigService
// Create the behavior subject
this.onSettingsChanged = new BehaviorSubject(this.settings);
}
/**
@@ -68,10 +67,7 @@ export class FuseConfigService
*/
setSettings(settings)
{
// Set the settings from the given object
this.settings = Object.assign({}, this.settings, settings);
// Trigger the event
this.onSettingsChanged.next(this.settings);
}
}

View File

@@ -1,27 +0,0 @@
import { Injectable } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
export interface Locale
{
lang: string;
data: Object;
}
@Injectable()
export class FuseTranslationLoaderService
{
constructor(private translate: TranslateService)
{
}
public loadTranslations(...args: Locale[]): void
{
const locales = [...args];
locales.forEach((locale) => {
// use setTranslation() with the third argument set to true
// to append translations instead of replacing them
this.translate.setTranslation(locale.lang, locale.data, true);
});
}
}

View File

@@ -1,773 +0,0 @@
export class AcademyFakeDb
{
public static courses = [
{
'id' : '15459251a6d6b397565',
'title' : 'Basics of Angular',
'slug' : 'basics-of-angular',
'category': 'web',
'length' : 30,
'updated' : 'Jun 28, 2017'
},
{
'id' : '154588a0864d2881124',
'title' : 'Basics of TypeScript',
'slug' : 'basics-of-typeScript',
'category': 'web',
'length' : 60,
'updated' : 'Nov 01, 2017'
},
{
'id' : '15453ba60d3baa5daaf',
'title' : 'Android N: Quick Settings',
'slug' : 'android-n-quick-settings',
'category': 'android',
'length' : 120,
'updated' : 'Jun 28, 2017'
},
{
'id' : '15453a06c08fb021776',
'title' : 'Keep Sensitive Data Safe and Private',
'slug' : 'keep-sensitive-data-safe-and-private',
'category': 'android',
'length' : 45,
'updated' : 'Jun 28, 2017'
},
{
'id' : '15427f4c1b7f3953234',
'title' : 'Building a gRPC Service with Java',
'slug' : 'building-a-grpc-service-with-java',
'category': 'cloud',
'length' : 30,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1542d75d929a603125',
'title' : 'Build a PWA Using Workbox',
'slug' : 'build-a-pwa-using-workbox',
'category': 'web',
'length' : 120,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1543ee3a5b43e0f9f45',
'title' : 'Build an App for the Google Assistant with Firebase and Dialogflow',
'slug' : 'build-an-app-for-the-google-assistant-with-firebase-and-dialogflow',
'category': 'firebase',
'length' : 30,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1543cc4515df3146112',
'title' : 'Cloud Functions for Firebase',
'slug' : 'cloud-functions-for-firebase',
'category': 'firebase',
'length' : 45,
'updated' : 'Jun 28, 2017'
},
{
'id' : '154398a4770d7aaf9a2',
'title' : 'Manage Your Pivotal Cloud Foundry App\'s Using Apigee Edge',
'slug' : 'manage-your-pivotal-cloud-foundry-apps-using-apigee-Edge',
'category': 'cloud',
'length' : 90,
'updated' : 'Jun 28, 2017'
},
{
'id' : '15438351f87dcd68567',
'title' : 'Building Beautiful UIs with Flutter',
'your' : 'building-beautiful-uis-with-flutter',
'category': 'web',
'length' : 90,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1544e43dcdae6ebf876',
'title' : 'Cloud Firestore',
'slug' : 'cloud-firestore',
'category': 'firebase',
'length' : 90,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1541ca7af66da284177',
'title' : 'Customize Network Topology with Subnetworks',
'slug' : 'customize-network-topology-with-subnetworks',
'category': 'web',
'length' : 45,
'updated' : 'Jun 28, 2017'
},
{
'id' : '154297167e781781745',
'title' : 'Looking at Campaign Finance with BigQuery',
'slug' : 'looking-at-campaign-finance-with-bigquery',
'category': 'cloud',
'length' : 60,
'updated' : 'Jun 28, 2017'
},
{
'id' : '154537435d5b32bf11a',
'title' : 'Firebase Android',
'slug' : 'firebase-android',
'category': 'android',
'length' : 45,
'updated' : 'Jun 28, 2017'
},
{
'id' : '154204e45a59b168453',
'title' : 'Simulating a Thread Network Using OpenThread',
'slug' : 'simulating-a-thread-network-using-openthread',
'category': 'web',
'length' : 45,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1541dd1e05dfc439216',
'title' : 'Your First Progressive Web App',
'slug' : 'your-first-progressive-web-app',
'category': 'web',
'length' : 30,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1532dfc67e704e48515',
'title' : 'Launch Cloud Datalab',
'slug' : 'launch-cloud-datalab',
'category': 'cloud',
'length' : 60,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1542e43dfaae6ebf226',
'title' : 'Personalize Your iOS App with Firebase User Management',
'slug' : 'personalize-your-ios-app-with-firebase-user-management',
'category': 'firebase',
'length' : 90,
'updated' : 'Jun 28, 2017'
}
];
public static categories = [
{
'id' : 0,
'value': 'web',
'label': 'Web'
},
{
'id' : 1,
'value': 'firebase',
'label': 'Firebase'
},
{
'id' : 2,
'value': 'cloud',
'label': 'Cloud'
},
{
'id' : 3,
'value': 'android',
'label': 'Android'
}
];
private static demoSteps = [
{
'title' : 'Introduction',
'content': '<h1>Step 1 - Introduction</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Get the sample code',
'content': '<h1>Step 2 - Get the sample code</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Create a Firebase project and Set up your app',
'content': '<h1>Step 3 - Create a Firebase project and Set up your app</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Install the Firebase Command Line Interface',
'content': '<h1>Step 4 - Install the Firebase Command Line Interface</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Deploy and run the web app',
'content': '<h1>Step 5 - Deploy and run the web app</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'The Functions Directory',
'content': '<h1>Step 6 - The Functions Directory</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Import the Cloud Functions and Firebase Admin modules',
'content': '<h1>Step 7 - Import the Cloud Functions and Firebase Admin modules</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Welcome New Users',
'content': '<h1>Step 8 - Welcome New Users</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Images moderation',
'content': '<h1>Step 9 - Images moderation</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'New Message Notifications',
'content': '<h1>Step 10 - New Message Notifications</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Congratulations!',
'content': '<h1>Step 11 - Congratulations!</h1>' +
'<br>' +
'You\'ve built a full-fidelity, offline-capable progressive web app by leveraging the power of reusable Web Components and Firebase. Why bother with a native app when you know how to do all that?!'
}
];
public static course = [
{
'id' : '15459251a6d6b397565',
'title' : 'Basics of Angular',
'slug' : 'basics-of-angular',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'web',
'length' : 30,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '154588a0864d2881124',
'title' : 'Basics of TypeScript',
'slug' : 'basics-of-typeScript',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'web',
'length' : 60,
'totalSteps' : 11,
'updated' : 'Nov 01, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '15453ba60d3baa5daaf',
'title' : 'Android N: Quick Settings',
'slug' : 'android-n-quick-settings',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'android',
'length' : 120,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '15453a06c08fb021776',
'title' : 'Keep Sensitive Data Safe and Private',
'slug' : 'keep-sensitive-data-safe-and-private',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'android',
'length' : 45,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '15427f4c1b7f3953234',
'title' : 'Building a gRPC Service with Java',
'slug' : 'building-a-grpc-service-with-java',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'cloud',
'length' : 30,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1542d75d929a603125',
'title' : 'Build a PWA Using Workbox',
'slug' : 'build-a-pwa-using-workbox',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'web',
'length' : 120,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1543ee3a5b43e0f9f45',
'title' : 'Build an App for the Google Assistant with Firebase and Dialogflow',
'slug' : 'build-an-app-for-the-google-assistant-with-firebase-and-dialogflow',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'firebase',
'length' : 30,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1543cc4515df3146112',
'title' : 'Cloud Functions for Firebase',
'slug' : 'cloud-functions-for-firebase',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'firebase',
'length' : 45,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '154398a4770d7aaf9a2',
'title' : 'Manage Your Pivotal Cloud Foundry App\'s Using Apigee Edge',
'slug' : 'manage-your-pivotal-cloud-foundry-apps-using-apigee-Edge',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'cloud',
'length' : 90,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '15438351f87dcd68567',
'title' : 'Building Beautiful UIs with Flutter',
'your' : 'building-beautiful-uis-with-flutter',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'web',
'length' : 90,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1544e43dcdae6ebf876',
'title' : 'Cloud Firestore',
'slug' : 'cloud-firestore',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'firebase',
'length' : 90,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1541ca7af66da284177',
'title' : 'Customize Network Topology with Subnetworks',
'slug' : 'customize-network-topology-with-subnetworks',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'web',
'length' : 45,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '154297167e781781745',
'title' : 'Looking at Campaign Finance with BigQuery',
'slug' : 'looking-at-campaign-finance-with-bigquery',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'cloud',
'length' : 60,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '154537435d5b32bf11a',
'title' : 'Firebase Android',
'slug' : 'firebase-android',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'android',
'length' : 45,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '154204e45a59b168453',
'title' : 'Simulating a Thread Network Using OpenThread',
'slug' : 'simulating-a-thread-network-using-openthread',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'web',
'length' : 45,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1541dd1e05dfc439216',
'title' : 'Your First Progressive Web App',
'slug' : 'your-first-progressive-web-app',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'web',
'length' : 30,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1532dfc67e704e48515',
'title' : 'Launch Cloud Datalab',
'slug' : 'launch-cloud-datalab',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'cloud',
'length' : 60,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1542e43dfaae6ebf226',
'title' : 'Personalize Your iOS App with Firebase User Management',
'slug' : 'personalize-your-ios-app-with-firebase-user-management',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'firebase',
'length' : 90,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
}
];
}

View File

@@ -1,97 +0,0 @@
import {
startOfDay,
endOfDay,
subDays,
addDays,
endOfMonth,
isSameDay,
isSameMonth,
addHours
} from 'date-fns';
export class CalendarFakeDb
{
public static data = [
{
id : 'events',
data: [
{
start : subDays(startOfDay(new Date()), 1),
end : addDays(new Date(), 1),
title : 'A 3 day event',
allDay : false,
color : {
primary : '#ad2121',
secondary: '#FAE3E3'
},
resizable: {
beforeStart: true,
afterEnd : true
},
draggable: true,
meta : {
location: 'Los Angeles',
notes : 'Eos eu verear adipiscing, ex ornatus denique iracundia sed, quodsi oportere appellantur an pri.'
}
},
{
start : startOfDay(new Date()),
title : 'An event with no end date',
allDay : false,
color : {
primary : '#e3bc08',
secondary: '#FDF1BA'
},
resizable: {
beforeStart: true,
afterEnd : true
},
draggable: true,
meta : {
location: 'Los Angeles',
notes : 'Eos eu verear adipiscing, ex ornatus denique iracundia sed, quodsi oportere appellantur an pri.'
}
},
{
start : subDays(endOfMonth(new Date()), 3),
end : addDays(endOfMonth(new Date()), 3),
title : 'A long event that spans 2 months',
allDay : false,
color : {
primary : '#1e90ff',
secondary: '#D1E8FF'
},
resizable: {
beforeStart: true,
afterEnd : true
},
draggable: true,
meta : {
location: 'Los Angeles',
notes : 'Eos eu verear adipiscing, ex ornatus denique iracundia sed, quodsi oportere appellantur an pri.'
}
},
{
start : addHours(startOfDay(new Date()), 2),
end : new Date(),
title : 'A draggable and resizable event',
allDay : false,
color : {
primary : '#e3bc08',
secondary: '#FDF1BA'
},
resizable: {
beforeStart: true,
afterEnd : true
},
draggable: true,
meta : {
location: 'Los Angeles',
notes : 'Eos eu verear adipiscing, ex ornatus denique iracundia sed, quodsi oportere appellantur an pri.'
}
}
]
}
];
}

View File

@@ -1,325 +0,0 @@
export class ChatFakeDb
{
public static contacts = [
{
'id' : '5725a680b3249760ea21de52',
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg',
'status': 'online',
'mood' : 'I never sign anything until I pretend to read it first..'
},
{
'id' : '5725a680606588342058356d',
'name' : 'Arnold',
'avatar': 'assets/images/avatars/Arnold.jpg',
'status': 'do-not-disturb',
'mood' : 'Looks like Andrew Jackson\'s been tossed to the back of the bus.'
},
{
'id' : '5725a68009e20d0a9e9acf2a',
'name' : 'Barrera',
'avatar': 'assets/images/avatars/Barrera.jpg',
'status': 'do-not-disturb',
'mood' : 'Love is going to bed early.Marriage is going to sleep early.',
'unread': null
},
{
'id' : '5725a6809fdd915739187ed5',
'name' : 'Blair',
'avatar': 'assets/images/avatars/Blair.jpg',
'status': 'offline',
'mood' : 'I would be unstoppable. If i could just get started.',
'unread': 3
},
{
'id' : '5725a68007920cf75051da64',
'name' : 'Boyle',
'avatar': 'assets/images/avatars/Boyle.jpg',
'status': 'offline',
'mood' : '\'GOOD MORNING COFFEE\'....Meet your maker!!!!'
},
{
'id' : '5725a68031fdbb1db2c1af47',
'name' : 'Christy',
'avatar': 'assets/images/avatars/Christy.jpg',
'status': 'offline',
'mood' : 'We always hold hands. If I let go, she shops.'
},
{
'id' : '5725a680bc670af746c435e2',
'name' : 'Copeland',
'avatar': 'assets/images/avatars/Copeland.jpg',
'status': 'online',
'mood' : 'I get enough exercise just pushing my luck.'
},
{
'id' : '5725a680e7eb988a58ddf303',
'name' : 'Estes',
'avatar': 'assets/images/avatars/Estes.jpg',
'status': 'away',
'mood' : 'What comes after the man bun hairstyle? The he-hive!'
},
{
'id' : '5725a680dcb077889f758961',
'name' : 'Harper',
'avatar': 'assets/images/avatars/Harper.jpg',
'status': 'offline',
'mood' : 'Always try to be modest and be proud of it!'
},
{
'id' : '5725a6806acf030f9341e925',
'name' : 'Helen',
'avatar': 'assets/images/avatars/Helen.jpg',
'status': 'away',
'mood' : 'Why are there stitch marks on zombies? Who\'s giving them medical attention?'
},
{
'id' : '5725a680ae1ae9a3c960d487',
'name' : 'Henderson',
'avatar': 'assets/images/avatars/Henderson.jpg',
'status': 'offline',
'mood' : 'I can\'t decide if people who wear pajamas in public have given up on life or are living it to the fullest.'
},
{
'id' : '5725a680b8d240c011dd224b',
'name' : 'Josefina',
'avatar': 'assets/images/avatars/Josefina.jpg',
'status': 'online',
'mood' : 'The fastest way to being happy is to make other people happy. You go first'
},
{
'id' : '5725a68034cb3968e1f79eac',
'name' : 'Katina',
'avatar': 'assets/images/avatars/Katina.jpg',
'status': 'away',
'mood' : 'If I was a rat,,, I wouldn\'t give anyone my ass.'
},
{
'id' : '5725a6801146cce777df2a08',
'name' : 'Lily',
'avatar': 'assets/images/avatars/Lily.jpg',
'status': 'do-not-disturb',
'mood' : 'A zip line but from the sofa to the fridge'
},
{
'id' : '5725a6808a178bfd034d6ecf',
'name' : 'Mai',
'avatar': 'assets/images/avatars/Mai.jpg',
'status': 'away',
'mood' : 'If a girl tells you she has a nipple ring, the only correct response is \'I don\'t believe you.\''
},
{
'id' : '5725a680653c265f5c79b5a9',
'name' : 'Nancy',
'avatar': 'assets/images/avatars/Nancy.jpg',
'status': 'do-not-disturb',
'mood' : 'Prison counts as a gated community, right?'
},
{
'id' : '5725a680bbcec3cc32a8488a',
'name' : 'Nora',
'avatar': 'assets/images/avatars/Nora.jpg',
'status': 'do-not-disturb',
'mood' : 'I never date left handed women. Righty tighty, lefty loosey.'
},
{
'id' : '5725a6803d87f1b77e17b62b',
'name' : 'Odessa',
'avatar': 'assets/images/avatars/Odessa.jpg',
'status': 'away',
'mood' : 'A day without sunshine is like, night.'
},
{
'id' : '5725a680e87cb319bd9bd673',
'name' : 'Reyna',
'avatar': 'assets/images/avatars/Reyna.jpg',
'status': 'offline',
'mood' : 'I can\'t wait for summer in Canada...'
},
{
'id' : '5725a6802d10e277a0f35775',
'name' : 'Shauna',
'avatar': 'assets/images/avatars/Shauna.jpg',
'status': 'online',
'mood' : 'My take home pay doesnt ven take me home.',
'unread': null
},
{
'id' : '5725a680aef1e5cf26dd3d1f',
'name' : 'Shepard',
'avatar': 'assets/images/avatars/Shepard.jpg',
'status': 'online',
'mood' : 'I don\'t speak Spanish, but I\'m pretty sure \'Dora\' means \'annoying\''
},
{
'id' : '5725a680cd7efa56a45aea5d',
'name' : 'Tillman',
'avatar': 'assets/images/avatars/Tillman.jpg',
'status': 'do-not-disturb',
'mood' : ''
},
{
'id' : '5725a680fb65c91a82cb35e2',
'name' : 'Trevino',
'avatar': 'assets/images/avatars/Trevino.jpg',
'status': 'away',
'mood' : 'Apparently, a rat and a plastic tube does not count as a DIY abortion kit.'
},
{
'id' : '5725a68018c663044be49cbf',
'name' : 'Tyson',
'avatar': 'assets/images/avatars/Tyson.jpg',
'status': 'do-not-disturb',
'mood' : 'I\'m wondering why life keeps teaching me lessons I have no desire to learn...'
},
{
'id' : '5725a6809413bf8a0a5272b1',
'name' : 'Velazquez',
'avatar': 'assets/images/avatars/Velazquez.jpg',
'status': 'online',
'mood' : 'Modulation in all things.'
}
];
public static chats = [
{
'id' : '1725a680b3249760ea21de52',
'dialog': [
{
'who' : '5725a680b3249760ea21de52',
'message': 'Quickly come to the meeting room 1B, we have a big server issue',
'time' : '2017-03-22T08:54:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Im having breakfast right now, cant you wait for 10 minutes?',
'time' : '2017-03-22T08:55:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'We are losing money! Quick!',
'time' : '2017-03-22T09:00:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Its not my money, you know. I will eat my breakfast and then I will come to the meeting room.',
'time' : '2017-03-22T09:02:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'You are the worst!',
'time' : '2017-03-22T09:05:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'We are losing money! Quick!',
'time' : '2017-03-22T09:15:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Its not my money, you know. I will eat my breakfast and then I will come to the meeting room.',
'time' : '2017-03-22T09:20:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'You are the worst!',
'time' : '2017-03-22T09:22:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'We are losing money! Quick!',
'time' : '2017-03-22T09:25:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Its not my money, you know. I will eat my breakfast and then I will come to the meeting room.',
'time' : '2017-03-22T09:27:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'You are the worst!',
'time' : '2017-03-22T09:33:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'We are losing money! Quick!',
'time' : '2017-03-22T09:35:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Its not my money, you know. I will eat my breakfast and then I will come to the meeting room.',
'time' : '2017-03-22T09:45:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'You are the worst!',
'time' : '2017-03-22T10:00:28.299Z'
}
]
},
{
'id' : '2725a680b8d240c011dd2243',
'dialog': [
{
'who' : '5725a680b8d240c011dd224b',
'message': 'Quickly come to the meeting room 1B, we have a big server issue',
'time' : '2017-04-22T01:00:00.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Im having breakfast right now, cant you wait for 10 minutes?',
'time' : '2017-04-22T01:05:00.299Z'
},
{
'who' : '5725a680b8d240c011dd224b',
'message': 'We are losing money! Quick!',
'time' : '2017-04-22T01:10:00.299Z'
}
]
},
{
'id' : '3725a6809413bf8a0a5272b4',
'dialog': [
{
'who' : '5725a6809413bf8a0a5272b1',
'message': 'Quickly come to the meeting room 1B, we have a big server issue',
'time' : '2017-04-22T02:10:00.299Z'
}
]
}
];
public static user = [
{
'id' : '5725a6802d10e277a0f35724',
'name' : 'John Doe',
'avatar' : 'assets/images/avatars/profile.jpg',
'status' : 'online',
'mood' : 'it\'s a status....not your diary...',
'chatList': [
{
'id' : '1725a680b3249760ea21de52',
'contactId' : '5725a680b3249760ea21de52',
'name' : 'Alice Freeman',
'unread' : 4,
'lastMessageTime': '2017-06-12T02:10:18.931Z'
},
{
'id' : '2725a680b8d240c011dd2243',
'contactId' : '5725a680b8d240c011dd224b',
'name' : 'Josefina',
'unread' : null,
'lastMessageTime': '2017-02-18T10:30:18.931Z'
},
{
'id' : '3725a6809413bf8a0a5272b4',
'contactId' : '5725a6809413bf8a0a5272b1',
'name' : 'Velazquez',
'unread' : 2,
'lastMessageTime': '2017-03-18T12:30:18.931Z'
}
]
}
];
}

View File

@@ -1,411 +0,0 @@
export class ContactsFakeDb
{
public static contacts = [
{
'id' : '5725a680b3249760ea21de52',
'name' : 'Abbott',
'lastName': 'Keitch',
'avatar' : 'assets/images/avatars/Abbott.jpg',
'nickname': 'Royalguard',
'company' : 'Saois',
'jobTitle': 'Digital Archivist',
'email' : 'abbott@withinpixels.com',
'phone' : '+1-202-555-0175',
'address' : '933 8th Street Stamford, CT 06902',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680606588342058356d',
'name' : 'Arnold',
'lastName': 'Matlock',
'avatar' : 'assets/images/avatars/Arnold.jpg',
'nickname': 'Wanderer',
'company' : 'Laotcone',
'jobTitle': 'Graphic Artist',
'email' : 'arnold@withinpixels.com',
'phone' : '+1-202-555-0141',
'address' : '906 Valley Road Michigan City, IN 46360',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a68009e20d0a9e9acf2a',
'name' : 'Barrera',
'lastName': 'Bradbury',
'avatar' : 'assets/images/avatars/Barrera.jpg',
'nickname': 'Jackal',
'company' : 'Unizim',
'jobTitle': 'Graphic Designer',
'email' : 'barrera@withinpixels.com',
'phone' : '+1-202-555-0196',
'address' : '183 River Street Passaic, NJ 07055',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a6809fdd915739187ed5',
'name' : 'Blair',
'lastName': 'Strangeway',
'avatar' : 'assets/images/avatars/Blair.jpg',
'nickname': 'Knight',
'company' : 'Conedubdax',
'jobTitle': 'Visual Designer',
'email' : 'blair@withinpixels.com',
'phone' : '+1-202-555-0118',
'address' : '143 Jones Street Eau Claire, WI 54701',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a68007920cf75051da64',
'name' : 'Boyle',
'lastName': 'Winters',
'avatar' : 'assets/images/avatars/Boyle.jpg',
'nickname': 'Jester',
'company' : 'Newo',
'jobTitle': 'Catalogue Illustrator',
'email' : 'boyle@withinpixels.com',
'phone' : '+1-202-555-0177',
'address' : '218 Pearl Street Brandon, FL 33510',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a68031fdbb1db2c1af47',
'name' : 'Christy',
'lastName': 'Camacho',
'avatar' : 'assets/images/avatars/Christy.jpg',
'nickname': 'Mist',
'company' : 'uniway',
'jobTitle': '3D Animator',
'email' : 'christy@withinpixels.com',
'phone' : '+1-202-555-0136',
'address' : '329 Bridge Street Desoto, TX 75115',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680bc670af746c435e2',
'name' : 'Copeland',
'lastName': 'Redcliff',
'avatar' : 'assets/images/avatars/Copeland.jpg',
'nickname': 'Cloudlaw',
'company' : 'Tempron',
'jobTitle': 'Multimedia Artist',
'email' : 'copeland@withinpixels.com',
'phone' : '+1-202-555-0107',
'address' : '956 6th Avenue North Bergen, NJ 0704',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680e7eb988a58ddf303',
'name' : 'Estes',
'lastName': 'Stevens',
'avatar' : 'assets/images/avatars/Estes.jpg',
'nickname': 'Roamer',
'company' : 'nam-dex',
'jobTitle': 'Special Effects Artist',
'email' : 'estes@withinpixels.com',
'phone' : '+1-202-555-0113',
'address' : '664 York Street Cambridge, MA 02138',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680dcb077889f758961',
'name' : 'Harper',
'lastName': 'MacGuffin',
'avatar' : 'assets/images/avatars/Harper.jpg',
'nickname': 'Tempest',
'company' : 'runcane',
'jobTitle': 'Application Developer',
'email' : 'harper@withinpixels.com',
'phone' : '+1-202-555-0173',
'address' : '738 Route 11 Cornelius, NC 28031',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a6806acf030f9341e925',
'name' : 'Helen',
'lastName': 'Sheridan',
'avatar' : 'assets/images/avatars/Helen.jpg',
'nickname': 'Magicbattler',
'company' : 'Subhow',
'jobTitle': 'Content Developer',
'email' : 'helen@withinpixels.com',
'phone' : '+1-202-555-0163',
'address' : '194 Washington Avenue Saint Petersburg, FL 33702',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680ae1ae9a3c960d487',
'name' : 'Henderson',
'lastName': 'Cambias',
'avatar' : 'assets/images/avatars/Henderson.jpg',
'nickname': 'Blizzard',
'company' : 'Howcom',
'jobTitle': 'Web Designer',
'email' : 'henderson@withinpixels.com',
'phone' : '+1-202-555-0151',
'address' : '686 Roosevelt Avenue Oviedo, FL 32765',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680b8d240c011dd224b',
'name' : 'Josefina',
'lastName': 'Lakefield',
'avatar' : 'assets/images/avatars/Josefina.jpg',
'nickname': 'Violet',
'company' : 'Gecko',
'jobTitle': 'Web Developer',
'email' : 'josefina@withinpixels.com',
'phone' : '+1-202-555-0160',
'address' : '202 Hartford Road Lynchburg, VA 24502',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a68034cb3968e1f79eac',
'name' : 'Katina',
'lastName': 'Bletchley',
'avatar' : 'assets/images/avatars/Katina.jpg',
'nickname': 'Rose',
'company' : 'Lexicom',
'jobTitle': 'Software Designer',
'email' : 'katina@withinpixels.com',
'phone' : '+1-202-555-0186',
'address' : '219 Woodland Road Valrico, FL 33594',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a6801146cce777df2a08',
'name' : 'Lily',
'lastName': 'Peasegood',
'avatar' : 'assets/images/avatars/Lily.jpg',
'nickname': 'Star',
'company' : 'zooflex',
'jobTitle': 'Software Specialist',
'email' : 'lily@withinpixels.com',
'phone' : '+1-202-555-0115',
'address' : '305 Willow Drive Superior, WI 54880',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a6808a178bfd034d6ecf',
'name' : 'Mai',
'lastName': 'Nox',
'avatar' : 'assets/images/avatars/Mai.jpg',
'nickname': 'Violetmage',
'company' : 'quadzone',
'jobTitle': 'Software Engineer',
'email' : 'mai@withinpixels.com',
'phone' : '+1-202-555-0199',
'address' : '148 Heather Lane Mcminnville, TN 37110',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680653c265f5c79b5a9',
'name' : 'Nancy',
'lastName': 'Jaggers',
'avatar' : 'assets/images/avatars/Nancy.jpg',
'nickname': 'Silverwarden',
'company' : 'Opetamnix',
'jobTitle': 'Software Architect',
'email' : 'nancy@withinpixels.com',
'phone' : '+1-202-555-0120',
'address' : '345 Laurel Lane Union City, NJ 07087',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680bbcec3cc32a8488a',
'name' : 'Nora',
'lastName': 'Franklin',
'avatar' : 'assets/images/avatars/Nora.jpg',
'nickname': 'Katanachanter',
'company' : 'Saoway',
'jobTitle': 'Database Coordinator',
'email' : 'nora@withinpixels.com',
'phone' : '+1-202-555-0172',
'address' : '572 Rose Street Summerfield, FL 34491',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a6803d87f1b77e17b62b',
'name' : 'Odessa',
'lastName': 'Goodman',
'avatar' : 'assets/images/avatars/Odessa.jpg',
'nickname': 'Rose',
'company' : 'transace',
'jobTitle': 'Database Administration Manager',
'email' : 'odessa@withinpixels.com',
'phone' : '+1-202-555-0190',
'address' : '527 Jefferson Court Conyers, GA 30012',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680e87cb319bd9bd673',
'name' : 'Reyna',
'lastName': 'Preece',
'avatar' : 'assets/images/avatars/Reyna.jpg',
'nickname': 'Holydawn',
'company' : 'Dingex',
'jobTitle': 'Data Processing Planner',
'email' : 'reyna@withinpixels.com',
'phone' : '+1-202-555-0116',
'address' : '297 Strawberry Lane Faribault, MN 55021',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a6802d10e277a0f35775',
'name' : 'Shauna',
'lastName': 'Atherton',
'avatar' : 'assets/images/avatars/Shauna.jpg',
'nickname': 'Faunasoul',
'company' : 'Vivaflex',
'jobTitle': 'Art Director',
'email' : 'shauna@withinpixels.com',
'phone' : '+1-202-555-0159',
'address' : '928 Canterbury Court Pittsburgh, PA 15206',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680aef1e5cf26dd3d1f',
'name' : 'Shepard',
'lastName': 'Rosco',
'avatar' : 'assets/images/avatars/Shepard.jpg',
'nickname': 'Fireking',
'company' : 'Goldenla',
'jobTitle': 'Magazine Designer',
'email' : 'shepard@withinpixels.com',
'phone' : '+1-202-555-0173',
'address' : '904 Ridge Road Pickerington, OH 43147',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680cd7efa56a45aea5d',
'name' : 'Tillman',
'lastName': 'Lee',
'avatar' : 'assets/images/avatars/Tillman.jpg',
'nickname': 'Gust',
'company' : 'K-techno',
'jobTitle': 'News Photographer',
'email' : 'tillman@withinpixels.com',
'phone' : '+1-202-555-0183',
'address' : '447 Charles Street Dorchester, MA 02125',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680fb65c91a82cb35e2',
'name' : 'Trevino',
'lastName': 'Bush',
'avatar' : 'assets/images/avatars/Trevino.jpg',
'nickname': 'Wolf',
'company' : 'Dalthex',
'jobTitle': 'Photojournalist',
'email' : 'trevino@withinpixels.com',
'phone' : '+1-202-555-0138',
'address' : '84 Valley View Road Norman, OK 73072',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a68018c663044be49cbf',
'name' : 'Tyson',
'lastName': 'Marshall',
'avatar' : 'assets/images/avatars/Tyson.jpg',
'nickname': 'Honordread',
'company' : 'Geocon',
'jobTitle': 'Manuscript Editor',
'email' : 'tyson@withinpixels.com',
'phone' : '+1-202-555-0146',
'address' : '204 Clark Street Monsey, NY 10952',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a6809413bf8a0a5272b1',
'name' : 'Velazquez',
'lastName': 'Smethley',
'avatar' : 'assets/images/avatars/Velazquez.jpg',
'nickname': 'Strifedream',
'company' : 'ranex',
'jobTitle': 'Publications Editor',
'email' : 'velezquez@withinpixels.com',
'phone' : '+1-202-555-0146',
'address' : '261 Cleveland Street Riverside, NJ 08075',
'birthday': null,
'notes' : ''
}
];
public static user = [
{
'id' : '5725a6802d10e277a0f35724',
'name' : 'John Doe',
'avatar' : 'assets/images/avatars/profile.jpg',
'starred' : [
'5725a680ae1ae9a3c960d487',
'5725a6801146cce777df2a08',
'5725a680bbcec3cc32a8488a',
'5725a680bc670af746c435e2',
'5725a68009e20d0a9e9acf2a'
],
'frequentContacts': [
'5725a6809fdd915739187ed5',
'5725a68031fdbb1db2c1af47',
'5725a680606588342058356d',
'5725a680e7eb988a58ddf303',
'5725a6806acf030f9341e925',
'5725a68034cb3968e1f79eac',
'5725a6801146cce777df2a08',
'5725a680653c265f5c79b5a9'
],
'groups' : [
{
'id' : '5725a6802d10e277a0f35739',
'name' : 'Friends',
'contactIds': [
'5725a680bbcec3cc32a8488a',
'5725a680e87cb319bd9bd673',
'5725a6802d10e277a0f35775'
]
},
{
'id' : '5725a6802d10e277a0f35749',
'name' : 'Clients',
'contactIds': [
'5725a680cd7efa56a45aea5d',
'5725a68018c663044be49cbf',
'5725a6809413bf8a0a5272b1',
'5725a6803d87f1b77e17b62b'
]
},
{
'id' : '5725a6802d10e277a0f35329',
'name' : 'Recent Workers',
'contactIds': [
'5725a680bbcec3cc32a8488a',
'5725a680653c265f5c79b5a9',
'5725a6808a178bfd034d6ecf',
'5725a6801146cce777df2a08'
]
}
]
}
];
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,61 +0,0 @@
export class FaqFakeDb
{
public static data = [
{
'question': 'Proident tempor est nulla irure ad est?',
'answer': 'Id nulla nulla proident deserunt deserunt proident in quis. Cillum reprehenderit labore id anim laborum.'
},
{
'question': 'Ullamco duis commodo sint ad aliqua aute?',
'answer': 'Sunt laborum enim nostrud ea fugiat cillum mollit aliqua exercitation ad elit.'
},
{
'question': 'Eiusmod non occaecat pariatur Lorem in ex?',
'answer': 'Nostrud anim mollit incididunt qui qui sit commodo duis. Anim amet irure aliquip duis nostrud sit quis fugiat ullamco non dolor labore. Lorem sunt voluptate laboris culpa proident. Aute eiusmod aliqua exercitation irure exercitation qui laboris mollit occaecat eu occaecat fugiat.'
},
{
'question': 'Lorem magna cillum consequat consequat mollit?',
'answer': 'Velit ipsum proident ea incididunt et. Consectetur eiusmod laborum voluptate duis occaecat ullamco sint enim proident.'
},
{
'question': 'Quis irure cupidatat ad consequat reprehenderit excepteur?',
'answer': 'Esse nisi mollit aliquip mollit aute consequat adipisicing. Do excepteur dolore proident cupidatat pariatur irure consequat incididunt.'
},
{
'question': 'Officia voluptate tempor ut mollit ea cillum?',
'answer': 'Deserunt veniam reprehenderit do elit magna ut.'
},
{
'question': 'Sunt fugiat officia nisi minim sunt duis?',
'answer': 'Eiusmod eiusmod sint aliquip exercitation cillum. Magna nulla officia ex consectetur ea ad excepteur in qui.'
},
{
'question': 'Non cupidatat enim quis aliquip minim laborum?',
'answer': 'Qui cillum eiusmod nostrud sunt dolore velit nostrud labore voluptate ad dolore. Eu Lorem anim pariatur aliqua. Ullamco ut dolor velit esse occaecat dolore eu cillum commodo qui. Nulla dolor consequat voluptate magna ut commodo magna consectetur non aute proident.'
},
{
'question': 'Dolor ex occaecat magna labore laboris qui?',
'answer': 'Incididunt qui excepteur eiusmod elit cillum occaecat voluptate cillum nostrud. Dolor ullamco ullamco eiusmod do sunt adipisicing pariatur. In esse esse labore id reprehenderit sint do. Pariatur culpa dolor tempor qui excepteur duis do anim minim ipsum.'
},
{
'question': 'Nisi et ullamco minim ea proident tempor?',
'answer': 'Dolor veniam dolor cillum Lorem magna nisi in occaecat nulla dolor ea eiusmod.'
},
{
'question': 'Amet sunt et quis amet commodo quis?',
'answer': 'Nulla dolore consequat aliqua sint consequat elit qui occaecat et.'
},
{
'question': 'Ut eiusmod ex ea eiusmod culpa incididunt?',
'answer': 'Fugiat non incididunt officia ex incididunt occaecat. Voluptate nostrud culpa aliquip mollit incididunt non dolore.'
},
{
'question': 'Proident reprehenderit laboris pariatur ut et nisi?',
'answer': 'Reprehenderit proident ut ad cillum quis velit quis aliqua ut aliquip tempor ullamco.'
},
{
'question': 'Aliqua aliquip aliquip aliquip et exercitation aute?',
'answer': 'Adipisicing Lorem tempor ex anim. Labore tempor laboris nostrud dolore voluptate ullamco. Fugiat ex deserunt anim minim esse velit laboris aute ea duis incididunt. Elit irure id Lorem incididunt laborum aliquip consectetur est irure sunt. Ut labore anim nisi aliqua tempor laborum nulla cillum. Duis irure consequat cillum magna cillum eiusmod ut. Et exercitation voluptate quis deserunt elit quis dolor deserunt ex ex esse ex.'
}
];
}

View File

@@ -1,146 +0,0 @@
export class FileManagerFakeDb
{
public static files = [
{
'name' : 'Work Documents',
'type' : 'folder',
'owner' : 'me',
'size' : '',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true
},
{
'name' : 'Public Documents',
'type' : 'folder',
'owner' : 'public',
'size' : '',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true
},
{
'name' : 'Private Documents',
'type' : 'folder',
'owner' : 'me',
'size' : '',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true
},
{
'name' : 'Ongoing projects',
'type' : 'document',
'owner' : 'Emily Bennett',
'size' : '1.2 Mb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
},
{
'name' : 'Shopping list',
'type' : 'document',
'owner' : 'Emily Bennett',
'size' : '980 Kb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
},
{
'name' : 'Invoices',
'type' : 'spreadsheet',
'owner' : 'Emily Bennett',
'size' : '750 Kb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
},
{
'name' : 'Crash logs',
'type' : 'document',
'owner' : 'Emily Bennett',
'size' : '980 Mb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
},
{
'name' : 'System logs',
'type' : 'document',
'owner' : 'Emily Bennett',
'size' : '52 Kb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
},
{
'name' : 'Prices',
'type' : 'spreadsheet',
'owner' : 'Emily Bennett',
'size' : '27 Mb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
},
{
'name' : 'Anabelle Manual',
'type' : 'document',
'owner' : 'Emily Bennett',
'size' : '1.1 Kb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
},
{
'name' : 'Steam summer sale budget',
'type' : 'spreadsheet',
'owner' : 'Emily Bennett',
'size' : '505 Kb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
}
];
}

View File

@@ -1,62 +0,0 @@
import { InMemoryDbService } from 'angular-in-memory-web-api';
import { MailFakeDb } from './mail';
import { ChatFakeDb } from './chat';
import { CalendarFakeDb } from './calendar';
import { TodoFakeDb } from './todo';
import { ProfileFakeDb } from './profile';
import { ContactsFakeDb } from './contacts';
import { InvoiceFakeDb } from './invoice';
import { FileManagerFakeDb } from './file-manager';
import { SearchFakeDb } from './search';
import { QuickPanelFakeDb } from './quick-panel';
import { IconsFakeDb } from './icons';
import { ProjectsDashboardDb } from './projects-dashboard';
import { ScrumboardFakeDb } from './scrumboard';
import { FaqFakeDb } from './faq';
import { KnowledgeBaseFakeDb } from './knowledge-base';
import { ECommerceFakeDb } from './e-commerce';
import { AcademyFakeDb } from './academy';
export class FuseFakeDbService implements InMemoryDbService
{
createDb()
{
return {
'mail-mails' : MailFakeDb.mails,
'mail-folders' : MailFakeDb.folders,
'mail-filters' : MailFakeDb.filters,
'mail-labels' : MailFakeDb.labels,
'chat-contacts' : ChatFakeDb.contacts,
'chat-chats' : ChatFakeDb.chats,
'chat-user' : ChatFakeDb.user,
'calendar' : CalendarFakeDb.data,
'todo-todos' : TodoFakeDb.todos,
'todo-filters' : TodoFakeDb.filters,
'todo-tags' : TodoFakeDb.tags,
'profile-timeline' : ProfileFakeDb.timeline,
'profile-photos-videos' : ProfileFakeDb.photosVideos,
'profile-about' : ProfileFakeDb.about,
'contacts-contacts' : ContactsFakeDb.contacts,
'contacts-user' : ContactsFakeDb.user,
'invoice' : InvoiceFakeDb.invoice,
'file-manager' : FileManagerFakeDb.files,
'search-classic' : SearchFakeDb.classic,
'search-table' : SearchFakeDb.table,
'quick-panel-notes' : QuickPanelFakeDb.notes,
'quick-panel-events' : QuickPanelFakeDb.events,
'icons' : IconsFakeDb.icons,
'projects-dashboard-projects': ProjectsDashboardDb.projects,
'projects-dashboard-widgets' : ProjectsDashboardDb.widgets,
'scrumboard-boards' : ScrumboardFakeDb.boards,
'faq' : FaqFakeDb.data,
'knowledge-base' : KnowledgeBaseFakeDb.data,
'e-commerce-dashboard' : ECommerceFakeDb.dashboard,
'e-commerce-products' : ECommerceFakeDb.products,
'e-commerce-orders' : ECommerceFakeDb.orders,
'academy-categories' : AcademyFakeDb.categories,
'academy-courses' : AcademyFakeDb.courses,
'academy-course' : AcademyFakeDb.course
};
}
}

View File

@@ -1,938 +0,0 @@
export class IconsFakeDb
{
public static icons = [
'3d_rotation',
'ac_unit',
'access_alarm',
'access_alarms',
'access_time',
'accessibility',
'accessible',
'account_balance',
'account_balance_wallet',
'account_box',
'account_circle',
'adb',
'add',
'add_a_photo',
'add_alarm',
'add_alert',
'add_box',
'add_circle',
'add_circle_outline',
'add_location',
'add_shopping_cart',
'add_to_photos',
'add_to_queue',
'adjust',
'airline_seat_flat',
'airline_seat_flat_angled',
'airline_seat_individual_suite',
'airline_seat_legroom_extra',
'airline_seat_legroom_normal',
'airline_seat_legroom_reduced',
'airline_seat_recline_extra',
'airline_seat_recline_normal',
'airplanemode_active',
'airplanemode_inactive',
'airplay',
'airport_shuttle',
'alarm',
'alarm_add',
'alarm_off',
'alarm_on',
'album',
'all_inclusive',
'all_out',
'android',
'announcement',
'apps',
'archive',
'arrow_back',
'arrow_downward',
'arrow_drop_down',
'arrow_drop_down_circle',
'arrow_drop_up',
'arrow_forward',
'arrow_upward',
'art_track',
'aspect_ratio',
'assessment',
'assignment',
'assignment_ind',
'assignment_late',
'assignment_return',
'assignment_returned',
'assignment_turned_in',
'assistant',
'assistant_photo',
'attach_file',
'attach_money',
'attachment',
'audiotrack',
'autorenew',
'av_timer',
'backspace',
'backup',
'battery_alert',
'battery_charging_full',
'battery_full',
'battery_std',
'battery_unknown',
'beach_access',
'beenhere',
'block',
'bluetooth',
'bluetooth_audio',
'bluetooth_connected',
'bluetooth_disabled',
'bluetooth_searching',
'blur_circular',
'blur_linear',
'blur_off',
'blur_on',
'book',
'bookmark',
'bookmark_border',
'border_all',
'border_bottom',
'border_clear',
'border_color',
'border_horizontal',
'border_inner',
'border_left',
'border_outer',
'border_right',
'border_style',
'border_top',
'border_vertical',
'branding_watermark',
'brightness_1',
'brightness_2',
'brightness_3',
'brightness_4',
'brightness_5',
'brightness_6',
'brightness_7',
'brightness_auto',
'brightness_high',
'brightness_low',
'brightness_medium',
'broken_image',
'brush',
'bubble_chart',
'bug_report',
'build',
'burst_mode',
'business',
'business_center',
'cached',
'cake',
'call',
'call_end',
'call_made',
'call_merge',
'call_missed',
'call_missed_outgoing',
'call_received',
'call_split',
'call_to_action',
'camera',
'camera_alt',
'camera_enhance',
'camera_front',
'camera_rear',
'camera_roll',
'cancel',
'card_giftcard',
'card_membership',
'card_travel',
'casino',
'cast',
'cast_connected',
'center_focus_strong',
'center_focus_weak',
'change_history',
'chat',
'chat_bubble',
'chat_bubble_outline',
'check',
'check_box',
'check_box_outline_blank',
'check_circle',
'chevron_left',
'chevron_right',
'child_care',
'child_friendly',
'chrome_reader_mode',
'class',
'clear',
'clear_all',
'close',
'closed_caption',
'cloud',
'cloud_circle',
'cloud_done',
'cloud_download',
'cloud_off',
'cloud_queue',
'cloud_upload',
'code',
'collections',
'collections_bookmark',
'color_lens',
'colorize',
'comment',
'compare',
'compare_arrows',
'computer',
'confirmation_number',
'contact_mail',
'contact_phone',
'contacts',
'content_copy',
'content_cut',
'content_paste',
'control_point',
'control_point_duplicate',
'copyright',
'create',
'create_new_folder',
'credit_card',
'crop',
'crop_16_9',
'crop_3_2',
'crop_5_4',
'crop_7_5',
'crop_din',
'crop_free',
'crop_landscape',
'crop_original',
'crop_portrait',
'crop_rotate',
'crop_square',
'dashboard',
'data_usage',
'date_range',
'dehaze',
'delete',
'delete_forever',
'delete_sweep',
'description',
'desktop_mac',
'desktop_windows',
'details',
'developer_board',
'developer_mode',
'device_hub',
'devices',
'devices_other',
'dialer_sip',
'dialpad',
'directions',
'directions_bike',
'directions_boat',
'directions_bus',
'directions_car',
'directions_railway',
'directions_run',
'directions_subway',
'directions_transit',
'directions_walk',
'disc_full',
'dns',
'do_not_disturb',
'do_not_disturb_alt',
'do_not_disturb_off',
'do_not_disturb_on',
'dock',
'domain',
'done',
'done_all',
'donut_large',
'donut_small',
'drafts',
'drag_handle',
'drive_eta',
'dvr',
'edit',
'edit_location',
'eject',
'email',
'enhanced_encryption',
'equalizer',
'error',
'error_outline',
'euro_symbol',
'ev_station',
'event',
'event_available',
'event_busy',
'event_note',
'event_seat',
'exit_to_app',
'expand_less',
'expand_more',
'explicit',
'explore',
'exposure',
'exposure_neg_1',
'exposure_neg_2',
'exposure_plus_1',
'exposure_plus_2',
'exposure_zero',
'extension',
'face',
'fast_forward',
'fast_rewind',
'favorite',
'favorite_border',
'featured_play_list',
'featured_video',
'feedback',
'fiber_dvr',
'fiber_manual_record',
'fiber_new',
'fiber_pin',
'fiber_smart_record',
'file_download',
'file_upload',
'filter',
'filter_1',
'filter_2',
'filter_3',
'filter_4',
'filter_5',
'filter_6',
'filter_7',
'filter_8',
'filter_9',
'filter_9_plus',
'filter_b_and_w',
'filter_center_focus',
'filter_drama',
'filter_frames',
'filter_hdr',
'filter_list',
'filter_none',
'filter_tilt_shift',
'filter_vintage',
'find_in_page',
'find_replace',
'fingerprint',
'first_page',
'fitness_center',
'flag',
'flare',
'flash_auto',
'flash_off',
'flash_on',
'flight',
'flight_land',
'flight_takeoff',
'flip',
'flip_to_back',
'flip_to_front',
'folder',
'folder_open',
'folder_shared',
'folder_special',
'font_download',
'format_align_center',
'format_align_justify',
'format_align_left',
'format_align_right',
'format_bold',
'format_clear',
'format_color_fill',
'format_color_reset',
'format_color_text',
'format_indent_decrease',
'format_indent_increase',
'format_italic',
'format_line_spacing',
'format_list_bulleted',
'format_list_numbered',
'format_paint',
'format_quote',
'format_shapes',
'format_size',
'format_strikethrough',
'format_textdirection_l_to_r',
'format_textdirection_r_to_l',
'format_underlined',
'forum',
'forward',
'forward_10',
'forward_30',
'forward_5',
'free_breakfast',
'fullscreen',
'fullscreen_exit',
'functions',
'g_translate',
'gamepad',
'games',
'gavel',
'gesture',
'get_app',
'gif',
'golf_course',
'gps_fixed',
'gps_not_fixed',
'gps_off',
'grade',
'gradient',
'grain',
'graphic_eq',
'grid_off',
'grid_on',
'group',
'group_add',
'group_work',
'hd',
'hdr_off',
'hdr_on',
'hdr_strong',
'hdr_weak',
'headset',
'headset_mic',
'healing',
'hearing',
'help',
'help_outline',
'high_quality',
'highlight',
'highlight_off',
'history',
'home',
'hot_tub',
'hotel',
'hourglass_empty',
'hourglass_full',
'http',
'https',
'image',
'image_aspect_ratio',
'import_contacts',
'import_export',
'important_devices',
'inbox',
'indeterminate_check_box',
'info',
'info_outline',
'input',
'insert_chart',
'insert_comment',
'insert_drive_file',
'insert_emoticon',
'insert_invitation',
'insert_link',
'insert_photo',
'invert_colors',
'invert_colors_off',
'iso',
'keyboard',
'keyboard_arrow_down',
'keyboard_arrow_left',
'keyboard_arrow_right',
'keyboard_arrow_up',
'keyboard_backspace',
'keyboard_capslock',
'keyboard_hide',
'keyboard_return',
'keyboard_tab',
'keyboard_voice',
'kitchen',
'label',
'label_outline',
'landscape',
'language',
'laptop',
'laptop_chromebook',
'laptop_mac',
'laptop_windows',
'last_page',
'launch',
'layers',
'layers_clear',
'leak_add',
'leak_remove',
'lens',
'library_add',
'library_books',
'library_music',
'lightbulb_outline',
'line_style',
'line_weight',
'linear_scale',
'link',
'linked_camera',
'list',
'live_help',
'live_tv',
'local_activity',
'local_airport',
'local_atm',
'local_bar',
'local_cafe',
'local_car_wash',
'local_convenience_store',
'local_dining',
'local_drink',
'local_florist',
'local_gas_station',
'local_grocery_store',
'local_hospital',
'local_hotel',
'local_laundry_service',
'local_library',
'local_mall',
'local_movies',
'local_offer',
'local_parking',
'local_pharmacy',
'local_phone',
'local_pizza',
'local_play',
'local_post_office',
'local_printshop',
'local_see',
'local_shipping',
'local_taxi',
'location_city',
'location_disabled',
'location_off',
'location_on',
'location_searching',
'lock',
'lock_open',
'lock_outline',
'looks',
'looks_3',
'looks_4',
'looks_5',
'looks_6',
'looks_one',
'looks_two',
'loop',
'loupe',
'low_priority',
'loyalty',
'mail',
'mail_outline',
'map',
'markunread',
'markunread_mailbox',
'memory',
'menu',
'merge_type',
'message',
'mic',
'mic_none',
'mic_off',
'mms',
'mode_comment',
'mode_edit',
'monetization_on',
'money_off',
'monochrome_photos',
'mood',
'mood_bad',
'more',
'more_horiz',
'more_vert',
'motorcycle',
'mouse',
'move_to_inbox',
'movie',
'movie_creation',
'movie_filter',
'multiline_chart',
'music_note',
'music_video',
'my_location',
'nature',
'nature_people',
'navigate_before',
'navigate_next',
'navigation',
'near_me',
'network_cell',
'network_check',
'network_locked',
'network_wifi',
'new_releases',
'next_week',
'nfc',
'no_encryption',
'no_sim',
'not_interested',
'note',
'note_add',
'notifications',
'notifications_active',
'notifications_none',
'notifications_off',
'notifications_paused',
'offline_pin',
'ondemand_video',
'opacity',
'open_in_browser',
'open_in_new',
'open_with',
'pages',
'pageview',
'palette',
'pan_tool',
'panorama',
'panorama_fish_eye',
'panorama_horizontal',
'panorama_vertical',
'panorama_wide_angle',
'party_mode',
'pause',
'pause_circle_filled',
'pause_circle_outline',
'payment',
'people',
'people_outline',
'perm_camera_mic',
'perm_contact_calendar',
'perm_data_setting',
'perm_device_information',
'perm_identity',
'perm_media',
'perm_phone_msg',
'perm_scan_wifi',
'person',
'person_add',
'person_outline',
'person_pin',
'person_pin_circle',
'personal_video',
'pets',
'phone',
'phone_android',
'phone_bluetooth_speaker',
'phone_forwarded',
'phone_in_talk',
'phone_iphone',
'phone_locked',
'phone_missed',
'phone_paused',
'phonelink',
'phonelink_erase',
'phonelink_lock',
'phonelink_off',
'phonelink_ring',
'phonelink_setup',
'photo',
'photo_album',
'photo_camera',
'photo_filter',
'photo_library',
'photo_size_select_actual',
'photo_size_select_large',
'photo_size_select_small',
'picture_as_pdf',
'picture_in_picture',
'picture_in_picture_alt',
'pie_chart',
'pie_chart_outlined',
'pin_drop',
'place',
'play_arrow',
'play_circle_filled',
'play_circle_outline',
'play_for_work',
'playlist_add',
'playlist_add_check',
'playlist_play',
'plus_one',
'poll',
'polymer',
'pool',
'portable_wifi_off',
'portrait',
'power',
'power_input',
'power_settings_new',
'pregnant_woman',
'present_to_all',
'print',
'priority_high',
'public',
'publish',
'query_builder',
'question_answer',
'queue',
'queue_music',
'queue_play_next',
'radio',
'radio_button_checked',
'radio_button_unchecked',
'rate_review',
'receipt',
'recent_actors',
'record_voice_over',
'redeem',
'redo',
'refresh',
'remove',
'remove_circle',
'remove_circle_outline',
'remove_from_queue',
'remove_red_eye',
'remove_shopping_cart',
'reorder',
'repeat',
'repeat_one',
'replay',
'replay_10',
'replay_30',
'replay_5',
'reply',
'reply_all',
'report',
'report_problem',
'restaurant',
'restaurant_menu',
'restore',
'restore_page',
'ring_volume',
'room',
'room_service',
'rotate_90_degrees_ccw',
'rotate_left',
'rotate_right',
'rounded_corner',
'router',
'rowing',
'rss_feed',
'rv_hookup',
'satellite',
'save',
'scanner',
'schedule',
'school',
'screen_lock_landscape',
'screen_lock_portrait',
'screen_lock_rotation',
'screen_rotation',
'screen_share',
'sd_card',
'sd_storage',
'search',
'security',
'select_all',
'send',
'sentiment_dissatisfied',
'sentiment_neutral',
'sentiment_satisfied',
'sentiment_very_dissatisfied',
'sentiment_very_satisfied',
'settings',
'settings_applications',
'settings_backup_restore',
'settings_bluetooth',
'settings_brightness',
'settings_cell',
'settings_ethernet',
'settings_input_antenna',
'settings_input_component',
'settings_input_composite',
'settings_input_hdmi',
'settings_input_svideo',
'settings_overscan',
'settings_phone',
'settings_power',
'settings_remote',
'settings_system_daydream',
'settings_voice',
'share',
'shop',
'shop_two',
'shopping_basket',
'shopping_cart',
'short_text',
'show_chart',
'shuffle',
'signal_cellular_4_bar',
'signal_cellular_connected_no_internet_4_bar',
'signal_cellular_no_sim',
'signal_cellular_null',
'signal_cellular_off',
'signal_wifi_4_bar',
'signal_wifi_4_bar_lock',
'signal_wifi_off',
'sim_card',
'sim_card_alert',
'skip_next',
'skip_previous',
'slideshow',
'slow_motion_video',
'smartphone',
'smoke_free',
'smoking_rooms',
'sms',
'sms_failed',
'snooze',
'sort',
'sort_by_alpha',
'spa',
'space_bar',
'speaker',
'speaker_group',
'speaker_notes',
'speaker_notes_off',
'speaker_phone',
'spellcheck',
'star',
'star_border',
'star_half',
'stars',
'stay_current_landscape',
'stay_current_portrait',
'stay_primary_landscape',
'stay_primary_portrait',
'stop',
'stop_screen_share',
'storage',
'store',
'store_mall_directory',
'straighten',
'streetview',
'strikethrough_s',
'style',
'subdirectory_arrow_left',
'subdirectory_arrow_right',
'subject',
'subscriptions',
'subtitles',
'subway',
'supervisor_account',
'surround_sound',
'swap_calls',
'swap_horiz',
'swap_vert',
'swap_vertical_circle',
'switch_camera',
'switch_video',
'sync',
'sync_disabled',
'sync_problem',
'system_update',
'system_update_alt',
'tab',
'tab_unselected',
'tablet',
'tablet_android',
'tablet_mac',
'tag_faces',
'tap_and_play',
'terrain',
'text_fields',
'text_format',
'textsms',
'texture',
'theaters',
'thumb_down',
'thumb_up',
'thumbs_up_down',
'time_to_leave',
'timelapse',
'timeline',
'timer',
'timer_10',
'timer_3',
'timer_off',
'title',
'toc',
'today',
'toll',
'tonality',
'touch_app',
'toys',
'track_changes',
'traffic',
'train',
'tram',
'transfer_within_a_station',
'transform',
'translate',
'trending_down',
'trending_flat',
'trending_up',
'tune',
'turned_in',
'turned_in_not',
'tv',
'unarchive',
'undo',
'unfold_less',
'unfold_more',
'update',
'usb',
'verified_user',
'vertical_align_bottom',
'vertical_align_center',
'vertical_align_top',
'vibration',
'video_call',
'video_label',
'video_library',
'videocam',
'videocam_off',
'videogame_asset',
'view_agenda',
'view_array',
'view_carousel',
'view_column',
'view_comfy',
'view_compact',
'view_day',
'view_headline',
'view_list',
'view_module',
'view_quilt',
'view_stream',
'view_week',
'vignette',
'visibility',
'visibility_off',
'voice_chat',
'voicemail',
'volume_down',
'volume_mute',
'volume_off',
'volume_up',
'vpn_key',
'vpn_lock',
'wallpaper',
'warning',
'watch',
'watch_later',
'wb_auto',
'wb_cloudy',
'wb_incandescent',
'wb_iridescent',
'wb_sunny',
'wc',
'web',
'web_asset',
'weekend',
'whatshot',
'widgets',
'wifi',
'wifi_lock',
'wifi_tethering',
'work',
'wrap_text',
'youtube_searched_for',
'zoom_in',
'zoom_out',
'zoom_out_map'
];
}

View File

@@ -1,59 +0,0 @@
export class InvoiceFakeDb
{
public static invoice = {
'from' : {
'title' : 'Fuse Inc.',
'address': '2810 Country Club Road Cranford, NJ 07016',
'phone' : '+66 123 455 87',
'email' : 'hello@fuseinc.com',
'website': 'www.fuseinc.com'
},
'client' : {
'title' : 'John Doe',
'address': '9301 Wood Street Philadelphia, PA 19111',
'phone' : '+55 552 455 87',
'email' : 'johndoe@mail.com'
},
'number' : 'P9-0004',
'date' : 'Jul 19, 2015',
'dueDate' : 'Aug 24, 2015',
'services': [
{
'title' : 'Prototype & Design',
'detail' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus accumsan, quam sed eleifend imperdiet.',
'unit' : 'Hour',
'unitPrice': '12.00',
'quantity' : '240',
'total' : '2880'
},
{
'title' : 'Coding',
'detail' : 'Vestibulum ligula sem, rutrum et libero id, porta vehicula metus. Cras dapibus neque sit amet laoreet vestibulum.',
'unit' : 'Hour',
'unitPrice': '10.50',
'quantity' : '350',
'total' : '3675'
},
{
'title' : 'Testing',
'detail' : 'Pellentesque luctus efficitur neque in finibus. Integer ut nunc in augue maximus porttitor id id nulla. In vitae erat.',
'unit' : 'Hour',
'unitPrice': '4.00',
'quantity' : '50',
'total' : '200'
},
{
'title' : 'Documentation & Training',
'detail' : 'Pellentesque luctus efficitur neque in finibus. Integer ut nunc in augue maximus porttitor id id nulla. In vitae erat.',
'unit' : 'Hour',
'unitPrice': '6.50',
'quantity' : '260',
'total' : '1690'
}
],
'subtotal': '8445',
'tax' : '675.60',
'discount': '120.60',
'total' : '9000'
};
}

View File

@@ -1,113 +0,0 @@
export class KnowledgeBaseFakeDb
{
public static data = [
{
'title' : 'Your Account',
'path' : '/pages/knowledge-base',
'articlesCount' : 17,
'featuredArticles': [
{
'title' : 'Account limits',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'How do I change my username?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'How do I change my password?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'How do I change my email address?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'How do I close my account?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
}
]
},
{
'title' : 'Selling',
'path' : '/pages/knowledge-base',
'articlesCount' : 12,
'featuredArticles': [
{
'title' : 'A guide to the upload process',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Author collaboration',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Exclusivity policy',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Promises you make as an author',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'An authors introduction',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
}
]
},
{
'title' : 'Buying',
'path' : '/pages/knowledge-base',
'articlesCount' : 19,
'featuredArticles': [
{
'title' : 'Where is my purchase code?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Can I get a refund?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Contact us',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'How do I purchase an item?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'I\'m trying to find a specific item',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
}
]
},
{
'title' : 'Item Support',
'path' : '/pages/knowledge-base',
'articlesCount' : 24,
'featuredArticles': [
{
'title' : 'What is Item Support?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'How to contact an author',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Rating or review removal policy',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Purchasing unsupported items',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Item installation guide',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
}
]
}
];
}

View File

@@ -1,481 +0,0 @@
export class MailFakeDb
{
public static mails = [
{
'id' : '15459251a6d6b397565',
'from' : {
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg',
'email' : 'alicefreeman@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '28 Jun',
'read' : false,
'starred' : false,
'important' : true,
'hasAttachments': true,
'attachments' : [
{
'type' : 'image',
'fileName': 'flowers',
'preview' : 'assets/images/etc/flowers-thumb.jpg',
'url' : '',
'size' : '1.1Mb'
},
{
'type' : 'image',
'fileName': 'snow',
'preview' : 'assets/images/etc/snow-thumb.jpg',
'url' : '',
'size' : '380kb'
},
{
'type' : 'image',
'fileName': 'sunrise',
'preview' : 'assets/images/etc/sunrise-thumb.jpg',
'url' : 'assets/images/etc/early-sunrise.jpg',
'size' : '17Mb'
}
],
'labels' : [
1
],
'folder' : 0
},
{
'id' : '154588a0864d2881124',
'from' : {
'name' : 'Lawrence Collins',
'avatar': 'assets/images/avatars/vincent.jpg',
'email' : 'lawrencecollins@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '28 Jun',
'read' : false,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '15453ba60d3baa5daaf',
'from' : {
'name' : 'Judith Burton',
'avatar': 'assets/images/avatars/joyce.jpg',
'email' : 'judithburton@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '28 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [
3,
2
],
'folder' : 0
},
{
'id' : '15453a06c08fb021776',
'from' : {
'name' : 'Danielle Obrien',
'avatar': 'assets/images/avatars/danielle.jpg',
'email' : 'danielleobrien@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '28 Jun',
'read' : true,
'starred' : true,
'important' : false,
'hasAttachments': false,
'labels' : [
1,
3
],
'folder' : 0
},
{
'id' : '154537435d5b32bf11a',
'from' : {
'name' : 'Brian Flores',
'avatar': '',
'email' : 'brianflores@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '26 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '1544e43dcdae6ebf876',
'from' : {
'name' : 'Charles Kim',
'avatar': 'assets/images/avatars/garry.jpg',
'email' : 'charleskim@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '18 Jun',
'read' : true,
'starred' : false,
'important' : true,
'hasAttachments': false,
'labels' : [
2
],
'folder' : 0
},
{
'id' : '1543ee3a5b43e0f9f45',
'from' : {
'name' : 'Patricia White',
'avatar': '',
'email' : 'patriciawhite@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '15 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '1543cc4515df3146112',
'from' : {
'name' : 'Juan Carpenter',
'avatar': 'assets/images/avatars/james.jpg',
'email' : 'juancarpenter@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '11 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '154398a4770d7aaf9a2',
'from' : {
'name' : 'Maria Gilbert',
'avatar': 'assets/images/avatars/danielle.jpg',
'email' : 'mariagilbert@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '5 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '15438351f87dcd68567',
'from' : {
'name' : 'Tammy Brooks',
'avatar': '',
'email' : 'tammybrooks@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '1 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '1542d75d929a603125',
'from' : {
'name' : 'Kathy Price',
'avatar': '',
'email' : 'kathyprice@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p> ',
'time' : '1 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '1541ca7af66da284177',
'from' : {
'name' : 'Alan Coleman',
'avatar': '',
'email' : 'alancoleman@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p> ',
'time' : '28 June',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '154297167e781781745',
'from' : {
'name' : 'Thomas Silva',
'avatar': '',
'email' : 'thomassilva@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p> ',
'time' : '16 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '15427f4c1b7f3953234',
'from' : {
'name' : 'Jessica Robertson',
'avatar': '',
'email' : 'jessicarobertson@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p> ',
'time' : '19 May',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 3
},
{
'id' : '154204e45a59b168453',
'from' : {
'name' : 'John Palmer',
'avatar': '',
'email' : 'johnpalmer@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p> ',
'time' : '8 May',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 3
},
{
'id' : '1541dd1e05dfc439216',
'from' : {
'name' : 'David Butler',
'avatar': '',
'email' : 'davidbutler@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p> ',
'time' : '7 May',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 3
}
];
public static folders = [
{
'id' : 0,
'handle': 'inbox',
'title' : 'Inbox',
'icon' : 'inbox'
},
{
'id' : 1,
'handle': 'sent',
'title' : 'Sent',
'icon' : 'send'
},
{
'id' : 2,
'handle': 'drafts',
'title' : 'Drafts',
'icon' : 'email_open'
},
{
'id' : 3,
'handle': 'spam',
'title' : 'Spam',
'icon' : 'error'
},
{
'id' : 4,
'handle': 'trash',
'title' : 'Trash',
'icon' : 'delete'
}
];
public static filters = [
{
'id' : 0,
'handle': 'starred',
'title' : 'Starred',
'icon' : 'star'
},
{
'id' : 1,
'handle': 'important',
'title' : 'Important',
'icon' : 'label'
}
];
public static labels = [
{
'id' : 0,
'handle': 'note',
'title' : 'Note',
'color' : '#7cb342'
},
{
'id' : 1,
'handle': 'paypal',
'title' : 'Paypal',
'color' : '#d84315'
},
{
'id' : 2,
'handle': 'invoice',
'title' : 'Invoice',
'color' : '#607d8b'
},
{
'id' : 3,
'handle': 'amazon',
'title' : 'Amazon',
'color' : '#03a9f4'
}
];
}

View File

@@ -1,360 +0,0 @@
export class ProfileFakeDb
{
public static timeline = {
activities: [
{
'user' : {
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg'
},
'message': 'started following you.',
'time' : '13 mins. ago'
},
{
'user' : {
'name' : 'Andrew Green',
'avatar': 'assets/images/avatars/andrew.jpg'
},
'message': 'sent you a message.',
'time' : 'June 10,2015'
},
{
'user' : {
'name' : 'Garry Newman',
'avatar': 'assets/images/avatars/garry.jpg'
},
'message': 'shared a public post with your group.',
'time' : 'June 9,2015'
},
{
'user' : {
'name' : 'Carl Henderson',
'avatar': 'assets/images/avatars/carl.jpg'
},
'message': 'wants to play Fallout Shelter with you.',
'time' : 'June 8,2015'
},
{
'user' : {
'name' : 'Jane Dean',
'avatar': 'assets/images/avatars/jane.jpg'
},
'message': 'started following you.',
'time' : 'June 7,2015'
},
{
'user' : {
'name' : 'Juan Carpenter',
'avatar': 'assets/images/avatars/james.jpg'
},
'message': 'sent you a message.',
'time' : 'June 6,2015'
},
{
'user' : {
'name' : 'Judith Burton',
'avatar': 'assets/images/avatars/joyce.jpg'
},
'message': 'shared a photo with you.',
'time' : 'June 5,2015'
},
{
'user' : {
'name' : 'Vincent Munoz',
'avatar': 'assets/images/avatars/vincent.jpg'
},
'message': 'shared a photo with you.',
'time' : 'June 4,2015'
}
],
posts : [
{
'user' : {
'name' : 'Garry Newman',
'avatar': 'assets/images/avatars/garry.jpg'
},
'message' : 'Remember the place we were talking about the other night? Found it!',
'time' : '32 minutes ago',
'type' : 'post',
'like' : 5,
'share' : 21,
'media' : {
'type' : 'image',
'preview': 'assets/images/etc/early-sunrise.jpg'
},
'comments': [
{
'user' : {
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg'
},
'time' : 'June 10, 2015',
'message': 'Thats a wonderful place. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et eleifend ligula. Fusce posuere in sapien ac facilisis. Etiam sit amet justo non felis ornare feugiat.'
}
]
},
{
'user' : {
'name' : 'Andrew Green',
'avatar': 'assets/images/avatars/andrew.jpg'
},
'message' : 'Hey, man! Check this, its pretty awesome!',
'time' : 'June 12, 2015',
'type' : 'article',
'like' : 98,
'share' : 6,
'article' : {
'title' : 'The Fallout 4 Pip-Boy Edition Is Back In Stock Now',
'subtitle': 'Kotaku',
'excerpt' : 'The Fallout 4 Pip-Boy edition is back in stock at Gamestop, for all 3 platforms. Additionally, Walmart also has it in stock for the PS4 and Xbox One as of this writing, as does Best Buy.',
'media' : {
'type' : 'image',
'preview': 'assets/images/etc/fallout.jpg'
}
},
'comments': [
{
'user' : {
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg'
},
'time' : 'June 10, 2015',
'message': 'Thats a wonderful place. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et eleifend ligula. Fusce posuere in sapien ac facilisis. Etiam sit amet justo non felis ornare feugiat.'
}
]
},
{
'user' : {
'name' : 'Carl Henderson',
'avatar': 'assets/images/avatars/carl.jpg'
},
'message': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et eleifend ligula. Fusce posuere in sapien ac facilisis. Etiam sit amet justo non felis ornare feugiat. Aenean lorem ex, ultrices sit amet ligula sed...',
'time' : 'June 10, 2015',
'type' : 'something',
'like' : 4,
'share' : 1
}
]
};
public static photosVideos = [
{
'name' : 'June 2015',
'info' : '5 Photos',
'media': [
{
'type' : 'photo',
'title' : 'Mountain Sunset',
'preview': 'assets/images/etc/mountain-sunset.jpg'
},
{
'type' : 'photo',
'title' : 'Mountain Lake',
'preview': 'assets/images/etc/mountain-lake.jpg'
},
{
'type' : 'photo',
'title' : 'Hot air balloons',
'preview': 'assets/images/etc/air-balloons.jpg'
},
{
'type' : 'photo',
'title' : 'Cactus',
'preview': 'assets/images/etc/cactus.jpg'
},
{
'type' : 'photo',
'title' : 'Road Trip',
'preview': 'assets/images/etc/road-trip.jpg'
}
]
},
{
'name' : 'May 2015',
'info' : '7 Photos, 3 Videos',
'media': [
{
'type' : 'photo',
'title' : 'Mountain Sunset',
'preview': 'assets/images/etc/mountain-sunset.jpg'
},
{
'type' : 'photo',
'title' : 'Mountain Lake',
'preview': 'assets/images/etc/mountain-lake.jpg'
},
{
'type' : 'photo',
'title' : 'Hot air balloons',
'preview': 'assets/images/etc/air-balloons.jpg'
},
{
'type' : 'photo',
'title' : 'Cactus',
'preview': 'assets/images/etc/cactus.jpg'
},
{
'type' : 'photo',
'title' : 'Road Trip',
'preview': 'assets/images/etc/road-trip.jpg'
},
{
'type' : 'photo',
'title' : 'Mountain Sunset',
'preview': 'assets/images/etc/mountain-sunset.jpg'
},
{
'type' : 'photo',
'title' : 'Mountain Lake',
'preview': 'assets/images/etc/mountain-lake.jpg'
},
{
'type' : 'photo',
'title' : 'Hot air balloons',
'preview': 'assets/images/etc/air-balloons.jpg'
},
{
'type' : 'photo',
'title' : 'Cactus',
'preview': 'assets/images/etc/cactus.jpg'
},
{
'type' : 'photo',
'title' : 'Road Trip',
'preview': 'assets/images/etc/road-trip.jpg'
}
]
},
{
'name' : 'April 2015',
'info' : '5 Photos',
'media': [
{
'type' : 'photo',
'title' : 'Mountain Sunset',
'preview': 'assets/images/etc/mountain-sunset.jpg'
},
{
'type' : 'photo',
'title' : 'Mountain Lake',
'preview': 'assets/images/etc/mountain-lake.jpg'
},
{
'type' : 'photo',
'title' : 'Hot air balloons',
'preview': 'assets/images/etc/air-balloons.jpg'
},
{
'type' : 'photo',
'title' : 'Cactus',
'preview': 'assets/images/etc/cactus.jpg'
},
{
'type' : 'photo',
'title' : 'Road Trip',
'preview': 'assets/images/etc/road-trip.jpg'
},
{
'type' : 'photo',
'title' : 'Mountain Sunset',
'preview': 'assets/images/etc/mountain-sunset.jpg'
},
{
'type' : 'photo',
'title' : 'Mountain Lake',
'preview': 'assets/images/etc/mountain-lake.jpg'
}
]
}
];
public static about = {
'general': {
'gender' : 'Female',
'birthday' : 'May 8th, 1988',
'locations': [
'Istanbul, Turkey',
'New York, USA'
],
'about' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis eget pharetra felis, sed ullamcorper dui. Sed et elementum neque. Vestibulum pellente viverra ultrices. Etiam justo augue, vehicula ac gravida a, interdum sit amet nisl. Integer vitae nisi id nibh dictum mollis in vitae tortor.'
},
'work' : {
'occupation': 'Developer',
'skills' : 'C#, PHP, Javascript, Angular, JS, HTML, CSS',
'jobs' : [
{
'company': 'Self-Employed',
'date' : '2010 - Now'
},
{
'company': 'Google',
'date' : '2008 - 2010'
}
]
},
'contact': {
'address' : 'Ut pharetra luctus est quis sodales. Duis nisi tortor, bibendum eget tincidunt, aliquam ac elit. Mauris nec euismod odio.',
'tel' : [
'+6 555 6600',
'+9 555 5255'
],
'websites': [
'withinpixels.com'
],
'emails' : [
'mail@withinpixels.com',
'mail@creapond.com'
]
},
'groups' : [
{
'logo' : 'assets/images/logos/android.png',
'name' : 'Android',
'category': 'Technology',
'members' : '1.856.546'
},
{
'logo' : 'assets/images/logos/google.png',
'name' : 'Google',
'category': 'Web',
'members' : '1.226.121'
},
{
'logo' : 'assets/images/logos/fallout.png',
'name' : 'Fallout',
'category': 'Games',
'members' : '526.142'
}
],
'friends': [
{
'name' : 'Garry Newman',
'avatar': 'assets/images/avatars/garry.jpg'
},
{
'name' : 'Carl Henderson',
'avatar': 'assets/images/avatars/carl.jpg'
},
{
'name' : 'Jane Dean',
'avatar': 'assets/images/avatars/jane.jpg'
},
{
'name' : 'Garry Arnold',
'avatar': 'assets/images/avatars/garry.jpg'
},
{
'name' : 'Vincent Munoz',
'avatar': 'assets/images/avatars/vincent.jpg'
},
{
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg'
},
{
'name' : 'Andrew Green',
'avatar': 'assets/images/avatars/andrew.jpg'
}
]
};
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,32 +0,0 @@
export class QuickPanelFakeDb
{
public static notes = [
{
'title' : 'Best songs to listen while working',
'detail': 'Last edit: May 8th, 2015'
},
{
'title' : 'Useful subreddits',
'detail': 'Last edit: January 12th, 2015'
}
];
public static events = [
{
'title' : 'Group Meeting',
'detail': 'In 32 Minutes, Room 1B'
},
{
'title' : 'Public Beta Release',
'detail': '11:00 PM'
},
{
'title' : 'Dinner with David',
'detail': '17:30 PM'
},
{
'title' : 'Q&A Session',
'detail': '20:30 PM'
}
];
}

View File

@@ -1,787 +0,0 @@
export class ScrumboardFakeDb
{
public static boards = [
{
'id' : '32gfhaf2',
'name' : 'ACME Frontend Application',
'uri' : 'acme-frontend-application',
'settings': {
'color' : 'fuse-dark',
'subscribed' : false,
'cardCoverImages': true
},
'lists' : [
{
'id' : '56027cf5a2ca3839a5d36103',
'name' : 'Design',
'idCards': [
'5603a2a3cab0c8300f6096b3',
'44d1.2b51ea6cc2b5d.21f4a3412e857.8ffa2d8b44ad9.ac87215ed53a1.67d4921ad8f8d.9f318bcb2'
]
},
{
'id' : '56127cf2a2ca3539g7d36103',
'name' : 'Development',
'idCards': [
'2837273da9b93dd84243s0f9',
'5787b7e4740c57bf0dffd5b6',
'5637273da9b93bb84743a0f9',
'7987.9740ba532b0d4.f9d12243f7362.507c0738dc561.87fba0a03df6e.75e6508cacf10.7a9835b54'
]
},
{
'id' : 'faf244627326f1249525763d',
'name' : 'Upcoming Features',
'idCards': [
'd9005a4b89ed2aadca48a6ad',
'f6b9d7a9247e5d794a081927',
'80ed.24ad3b18e2668.f28fbbceeeff9.5a834620a42f1.5909be19a2bf2.6c4a54947ce2d.da356b0c1',
'0ad2.7862f947bc456.f42b446df54cb.d1dd9e93601a1.9deb1406d1404.0b3c278fc7001.733341b42',
'bad3.51be8ad33acaf.9540ecb37f7e8.6bee596cfe7d3.44c68bee289c4.b96ed0b9f0af7.e14846035'
]
},
{
'id' : 'ad7d.9fffac5dff412.c83bca6853767.8fd7549b2b1ca.ceda8a01774c4.a5cf3976e87e4.ce79eeeea',
'name' : 'Known Bugs',
'idCards': [
'acc6.9c673cd2f5e35.521e91d8d5991.4b2a95e0539d1.027930c0743c5.7ad1ea7bea476.e8fbe6347',
'3279.3d69b40cc0b75.690252b6bea08.1e1789b0b7c2e.2f264b8661ce2.84d5f56910e23.429be5e8a',
'ba01.8e1a43f92a03a.0022bd5cbb9ba.275c64d911d8c.880e0846a3966.f75ff43e53ad.48ad612e7'
]
}
],
'cards' : [
{
'id' : '2837273da9b93dd84243s0f9',
'name' : 'Update generators',
'description' : 'Current generator doesn\'t support Node.js 6 and above.',
'idAttachmentCover': '',
'idMembers' : [
'26027s1930450d8bf7b10828'
],
'idLabels' : [
'26022e4129ad3a5sc28b36cd'
],
'attachments' : [],
'subscribed' : false,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'AngularCLI could be a nice alternative.',
'time' : 'now'
}
],
'activities' : [],
'due' : null
},
{
'id' : '5603a2a3cab0c8300f6096b3',
'name' : 'Change background colors',
'description' : '',
'idAttachmentCover': '67027cahbe3b52ecf2dc631c',
'idMembers' : [
'76027g1930450d8bf7b10958'
],
'idLabels' : [
'56027e4119ad3a5dc28b36cd',
'5640635e19ad3a5dc21416b2'
],
'attachments' : [
{
'id' : '67027cahbe3b52ecf2dc631c',
'name': 'mail.jpg',
'src' : 'assets/images/scrumboard/mail.jpg',
'time': 'Added Nov 3 at 15:22AM',
'type': 'image'
},
{
'id' : '56027cfcbe1b72ecf1fc452a',
'name': 'calendar.jpg',
'src' : 'assets/images/scrumboard/calendar.jpg',
'time': 'Added Nov 1 at 12:34PM',
'type': 'image'
}
],
'subscribed' : true,
'checklists' : [
{
'id' : '63021cfdbe1x72wcf1fc451v',
'name' : 'Checklist',
'checkItemsChecked': 1,
'checkItems' : [
{
'name' : 'Implement a calendar library',
'checked': false
},
{
'name' : 'Replace event colors with Material Design colors',
'checked': true
},
{
'name' : 'Replace icons with Material Design icons',
'checked': false
},
{
'name' : 'Use moment.js',
'checked': false
}
]
},
{
'name' : 'Checklist 2',
'id' : '74031cfdbe1x72wcz1dc166z',
'checkItemsChecked': 1,
'checkItems' : [
{
'name' : 'Replace event colors with Material Design colors',
'checked': true
},
{
'name' : 'Replace icons with Material Design icons',
'checked': false
},
{
'name' : 'Use moment.js',
'checked': false
}
]
}
],
'checkItems' : 7,
'checkItemsChecked': 2,
'comments' : [
{
'idMember': '56027c1930450d8bf7b10758',
'message' : 'We should be able to add moment.js without any problems',
'time' : '12 mins. ago'
},
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'I added a link for a page that might help us deciding the colors',
'time' : '30 mins. ago'
}
],
'activities' : [
{
'idMember': '56027c1930450d8bf7b10758',
'message' : 'added a comment',
'time' : '12 mins. ago'
},
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'added a comment',
'time' : '30 mins. ago'
},
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'attached a link',
'time' : '45 mins. ago'
}
],
'due' : '2017-08-29T10:16:34.000Z'
},
{
'id' : '5637273da9b93bb84743a0f9',
'name' : 'Fix splash screen bugs',
'description' : '',
'idAttachmentCover': '',
'idMembers' : [
'56027c1930450d8bf7b10758'
],
'idLabels' : [
'5640635e19ad3a5dc21416b2'
],
'attachments' : [],
'subscribed' : true,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [],
'activities' : [],
'due' : null
},
{
'id' : 'd9005a4b89ed2aadca48a6ad',
'name' : 'Add alternative authentication pages',
'description' : '',
'idAttachmentCover': '',
'idMembers' : [
'36027j1930450d8bf7b10158'
],
'idLabels' : [
'6540635g19ad3s5dc31412b2',
'56027e4119ad3a5dc28b36cd'
],
'attachments' : [],
'subscribed' : false,
'checklists' : [
{
'id' : 'dbfb.99bd0ad37dabc.e05046f0c824d.18f26bb524c96.78bebc8488634.240c0ee6a5e45.4cb872965',
'name' : 'Pages',
'checkItemsChecked': 2,
'checkItems' : [
{
'name' : 'Login',
'checked': true
},
{
'name' : 'Register',
'checked': true
},
{
'name' : 'Lost Password',
'checked': false
},
{
'name' : 'Recover Password',
'checked': false
},
{
'name' : 'Activate Account',
'checked': false
}
]
}
],
'checkItems' : 5,
'checkItemsChecked': 2,
'comments' : [],
'activities' : [],
'due' : null
},
{
'id' : '5787b7e4740c57bf0dffd5b6',
'name' : 'Fix the console',
'description' : 'We need to fix the console asap!',
'idAttachmentCover': '',
'idMembers' : [],
'idLabels' : [
'26022e4129ad3a5sc28b36cd'
],
'attachments' : [],
'subscribed' : true,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'I\'m on it!',
'time' : 'now'
}
],
'activities' : [],
'due' : '2018-09-07T12:00:00.000Z'
},
{
'id' : 'f6b9d7a9247e5d794a081927',
'name' : 'New media player',
'description' : '',
'idAttachmentCover': '',
'idMembers' : [
'76027g1930450d8bf7b10958',
'56027c1930450d8bf7b10758',
'26027s1930450d8bf7b10828'
],
'idLabels' : [
'5640635e19ad3a5dc21416b2',
'6540635g19ad3s5dc31412b2'
],
'attachments' : [],
'subscribed' : false,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [],
'activities' : [],
'due' : null
},
{
'id' : 'acc6.9c673cd2f5e35.521e91d8d5991.4b2a95e0539d1.027930c0743c5.7ad1ea7bea476.e8fbe6347',
'name' : 'Memory Leak',
'description' : '',
'idAttachmentCover': '',
'idMembers' : [
'36027j1930450d8bf7b10158'
],
'idLabels' : [
'26022e4129ad3a5sc28b36cd',
'5640635e19ad3a5dc21416b2'
],
'attachments' : [],
'subscribed' : false,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [],
'activities' : [],
'due' : null
},
{
'id' : '3279.3d69b40cc0b75.690252b6bea08.1e1789b0b7c2e.2f264b8661ce2.84d5f56910e23.429be5e8a',
'name' : 'Broken toolbar on profile page',
'description' : '',
'idAttachmentCover': '',
'idMembers' : [
'26027s1930450d8bf7b10828'
],
'idLabels' : [
'26022e4129ad3a5sc28b36cd'
],
'attachments' : [],
'subscribed' : false,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'This should be a medium priority bug, shouldn\'t it?',
'time' : 'now'
}
],
'activities' : [],
'due' : null
},
{
'id' : 'ba01.8e1a43f92a03a.0022bd5cbb9ba.275c64d911d8c.880e0846a3966.f75ff43e53ad.48ad612e7',
'name' : 'Button hover style',
'description' : 'If there are 3 or more buttons in certain page, weird flashing happens when you hover over the red ones.',
'idAttachmentCover': '',
'idMembers' : [
'26027s1930450d8bf7b10828'
],
'idLabels' : [
'26022e4129ad3a5sc28b36cd',
'5640635e19ad3a5dc21416b2'
],
'attachments' : [],
'subscribed' : true,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [],
'activities' : [],
'due' : '2017-03-08T09:00:00.000Z'
},
{
'id' : '80ed.24ad3b18e2668.f28fbbceeeff9.5a834620a42f1.5909be19a2bf2.6c4a54947ce2d.da356b0c1',
'name' : 'New header designs',
'description' : '',
'idAttachmentCover': '12027cafbe3b52ecf2ef632c',
'idMembers' : [],
'idLabels' : [
'56027e4119ad3a5dc28b36cd',
'6540635g19ad3s5dc31412b2',
'5640635e19ad3a5dc21416b2'
],
'attachments' : [
{
'id' : '12027cafbe3b52ecf2ef632c',
'name': 'header-.jpg',
'src' : 'assets/images/scrumboard/header-1.jpg',
'time': 'Added Nov 3 at 15:22AM',
'type': 'image'
},
{
'id' : '55027ced1e1a12ecf1fced2a',
'name': 'header-2.jpg',
'src' : 'assets/images/scrumboard/header-2.jpg',
'time': 'Added Nov 1 at 12:34PM',
'type': 'image'
}
],
'subscribed' : false,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'Currently we have two new designs ready to ship.',
'time' : 'now'
}
],
'activities' : [],
'due' : null
},
{
'id' : '0ad2.7862f947bc456.f42b446df54cb.d1dd9e93601a1.9deb1406d1404.0b3c278fc7001.733341b42',
'name' : 'Fixed footer',
'description' : '',
'idAttachmentCover': '',
'idMembers' : [
'26027s1930450d8bf7b10828',
'56027c1930450d8bf7b10758'
],
'idLabels' : [
'6540635g19ad3s5dc31412b2'
],
'attachments' : [],
'subscribed' : true,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [],
'activities' : [],
'due' : null
},
{
'id' : 'bad3.51be8ad33acaf.9540ecb37f7e8.6bee596cfe7d3.44c68bee289c4.b96ed0b9f0af7.e14846035',
'name' : 'Collapsable navigation',
'description' : '',
'idAttachmentCover': '',
'idMembers' : [],
'idLabels' : [
'6540635g19ad3s5dc31412b2'
],
'attachments' : [],
'subscribed' : false,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'I\'m not sure why we re-doing the navigation. The current collapsable navigation works flawlessly.',
'time' : 'now'
}
],
'activities' : [],
'due' : null
},
{
'id' : '44d1.2b51ea6cc2b5d.21f4a3412e857.8ffa2d8b44ad9.ac87215ed53a1.67d4921ad8f8d.9f318bcb2',
'name' : 'Mail app new layout',
'description' : 'Current layout has lots of flaws in mobile. Outlook view should help with that.',
'idAttachmentCover': '',
'idMembers' : [
'56027c1930450d8bf7b10758',
'26027s1930450d8bf7b10828',
'76027g1930450d8bf7b10958',
'36027j1930450d8bf7b10158'
],
'idLabels' : [
'56027e4119ad3a5dc28b36cd',
'26022e4129ad3a5sc28b36cd'
],
'attachments' : [],
'subscribed' : false,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [],
'activities' : [],
'due' : null
},
{
'id' : '7987.9740ba532b0d4.f9d12243f7362.507c0738dc561.87fba0a03df6e.75e6508cacf10.7a9835b54',
'name' : 'API recover and monitoring',
'description' : 'We need a service to monitor and recover failed APIs.',
'idAttachmentCover': '',
'idMembers' : [
'36027j1930450d8bf7b10158',
'76027g1930450d8bf7b10958'
],
'idLabels' : [
'26022e4129ad3a5sc28b36cd',
'5640635e19ad3a5dc21416b2'
],
'attachments' : [],
'subscribed' : true,
'checklists' : [
{
'id' : '6926.2b31d119e4a.889401e0ca7a0.13ad8ce2e569d.976e54e8b5d87.456afccd7e820.d6c77106a',
'name' : 'API Monitoring',
'checkItemsChecked': 2,
'checkItems' : [
{
'name' : 'Simple dashboard design',
'checked': false
},
{
'name' : 'Should be able to see different time periods on the same dashboard',
'checked': true
},
{
'name' : 'Different colors for different clusters',
'checked': true
}
]
},
{
'id' : '7c22.5261c7924387f.248e8b1d32205.003f7a9f501d1.1d48dcdbe8b23.8099dcc5f75a7.29a966196',
'name' : 'API Recovery',
'checkItemsChecked': 1,
'checkItems' : [
{
'name' : 'Warning notifications to all developers',
'checked': false
},
{
'name' : 'Immediate recovery options attached to the notifications',
'checked': true
},
{
'name' : 'Backups every 6hours',
'checked': false
}
]
}
],
'checkItems' : 6,
'checkItemsChecked': 3,
'comments' : [],
'activities' : [],
'due' : '2017-02-02T11:20:34.000Z'
}
],
'members' : [
{
'id' : '56027c1930450d8bf7b10758',
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg'
},
{
'id' : '26027s1930450d8bf7b10828',
'name' : 'Danielle Obrien',
'avatar': 'assets/images/avatars/danielle.jpg'
},
{
'id' : '76027g1930450d8bf7b10958',
'name' : 'James Lewis',
'avatar': 'assets/images/avatars/james.jpg'
},
{
'id' : '36027j1930450d8bf7b10158',
'name' : 'Vincent Munoz',
'avatar': 'assets/images/avatars/vincent.jpg'
}
],
'labels' : [
{
'id' : '26022e4129ad3a5sc28b36cd',
'name' : 'High Priority',
'color': 'mat-red-500-bg'
},
{
'id' : '56027e4119ad3a5dc28b36cd',
'name' : 'Design',
'color': 'mat-orange-400-bg'
},
{
'id' : '5640635e19ad3a5dc21416b2',
'name' : 'App',
'color': 'mat-blue-600-bg'
},
{
'id' : '6540635g19ad3s5dc31412b2',
'name' : 'Feature',
'color': 'mat-green-400-bg'
}
]
},
{
'id' : '27cfcbe1',
'name' : 'ACME Backend Application',
'uri' : 'acme-backend-application',
'settings': {
'color' : 'blue-grey',
'subscribed' : false,
'cardCoverImages': true
},
'lists' : [
{
'id' : '56027cf5a2ca3839a5d36103',
'name' : 'Designs',
'idCards': [
'5603a2a3cab0c8300f6096b3'
]
},
{
'id' : '56127cf2a2ca3539g7d36103',
'name' : 'Development',
'idCards': [
'5637273da9b93bb84743a0f9'
]
}
],
'cards' : [
{
'id' : '5603a2a3cab0c8300f6096b3',
'name' : 'Calendar App Design',
'description' : '',
'idAttachmentCover': '56027cfcbe1b72ecf1fc452a',
'idMembers' : [
'56027c1930450d8bf7b10758',
'36027j1930450d8bf7b10158'
],
'idLabels' : [
'56027e4119ad3a5dc28b36cd',
'5640635e19ad3a5dc21416b2'
],
'attachments' : [
{
'id' : '56027cfcbe1b72ecf1fc452a',
'name': 'calendar-app-design.jpg',
'src' : 'assets/images/scrumboard/calendar.jpg',
'time': 'Added Nov 1 at 12:34PM',
'type': 'image'
},
{
'id' : '67027cahbe3b52ecf2dc631c',
'url' : 'assets/images/scrumboard/calendar.jpg',
'time': 'Added Nov 3 at 15:22AM',
'type': 'link'
}
],
'subscribed' : true,
'checklists' : [
{
'id' : '63021cfdbe1x72wcf1fc451v',
'name' : 'Checklist',
'checkItemsChecked': 1,
'checkItems' : [
{
'name' : 'Implement a calendar library',
'checked': false
},
{
'name' : 'Replace event colors with Material Design colors',
'checked': true
},
{
'name' : 'Replace icons with Material Design icons',
'checked': false
},
{
'name' : 'Use moment.js',
'checked': false
}
]
},
{
'name' : 'Checklist 2',
'id' : '74031cfdbe1x72wcz1dc166z',
'checkItemsChecked': 1,
'checkItems' : [
{
'name' : 'Replace event colors with Material Design colors',
'checked': true
},
{
'name' : 'Replace icons with Material Design icons',
'checked': false
},
{
'name' : 'Use moment.js',
'checked': false
}
]
}
],
'checkItems' : 7,
'checkItemsChecked': 2,
'comments' : [
{
'idMember': '56027c1930450d8bf7b10758',
'message' : 'We should be able to add moment.js without any problems',
'time' : '12 mins. ago'
},
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'I added a link for a page that might help us deciding the colors',
'time' : '30 mins. ago'
}
],
'activities' : [
{
'idMember': '56027c1930450d8bf7b10758',
'message' : 'added a comment',
'time' : '12 mins. ago'
},
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'added a comment',
'time' : '30 mins. ago'
},
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'attached a link',
'time' : '45 mins. ago'
}
],
'due' : null
},
{
'id' : '5637273da9b93bb84743a0f9',
'name' : 'Fix Splash Screen bugs',
'description' : '',
'idAttachmentCover': '5603a2ae2bbd55bb2db57478',
'idMembers' : [
'56027c1930450d8bf7b10758'
],
'idLabels' : [],
'attachments' : [
{
'id' : '5603a2ae2bbd55bb2db57478',
'name': 'mail-app-design.jpg',
'src' : 'assets/images/scrumboard/mail.jpg',
'time': 'Added Nov 1 at 12:34PM',
'type': 'image'
}
],
'subscribed' : true,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [],
'activities' : [],
'due' : null
}
],
'members' : [
{
'id' : '56027c1930450d8bf7b10758',
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg'
},
{
'id' : '26027s1930450d8bf7b10828',
'name' : 'Danielle Obrien',
'avatar': 'assets/images/avatars/danielle.jpg'
},
{
'id' : '76027g1930450d8bf7b10958',
'name' : 'James Lewis',
'avatar': 'assets/images/avatars/james.jpg'
},
{
'id' : '36027j1930450d8bf7b10158',
'name' : 'Vincent Munoz',
'avatar': 'assets/images/avatars/vincent.jpg'
}
],
'labels' : [
{
'id' : '56027e4119ad3a5dc28b36cd',
'name' : 'Design',
'color': 'mat-red-500-bg'
},
{
'id' : '5640635e19ad3a5dc21416b2',
'name' : 'App',
'color': 'mat-blue-500-bg'
},
{
'id' : '6540635g19ad3s5dc31412b2',
'name' : 'Feature',
'color': 'mat-green-400-bg'
}
]
}
];
}

View File

@@ -1,139 +0,0 @@
export class SearchFakeDb
{
public static classic = [
{
'title' : 'Dynamically Procrastinate B2C',
'url' : 'ourwebaddress.com/articles/procrastinate',
'excerpt': 'Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.'
},
{
'title' : 'Cross Media',
'url' : 'ourwebaddress.com/articles/cross-media',
'excerpt': 'Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas.'
},
{
'title' : 'Synergize',
'url' : 'ourwebaddress.com/articles/synergize',
'excerpt': 'Completely synergize resource taxing relationships via premier niche markets. Professionally cultivate one-to-one customer service with robust ideas.'
},
{
'title' : 'Parallel Platforms',
'url' : 'ourwebaddress.com/articles/parallel-paltforms',
'excerpt': 'Objectively innovate empowered manufactured products whereas parallel platforms. Holisticly predominate extensible testing procedures for reliable supply chains.'
},
{
'title' : 'Growth Strategies',
'url' : 'ourwebaddress.com/articles/growth-strategies',
'excerpt': 'Proactively envisioned multimedia based expertise and cross-media growth strategies. Holistically pontificate installed base portals after maintainable products.'
},
{
'title' : 'Methodologies',
'url' : 'ourwebaddress.com/articles/methodologies',
'excerpt': 'Phosfluorescently engage worldwide methodologies with web-enabled technology. Completely pursue scalable customer service through sustainable potentialities.'
},
{
'title' : 'E-tailers',
'url' : 'ourwebaddress.com/articles/e-trailers',
'excerpt': 'Collaboratively administrate turnkey channels whereas virtual e-tailers. Objectively seize scalable metrics whereas proactive e-services.'
},
{
'title' : 'Web Readiness',
'url' : 'ourwebaddress.com/articles/web-readiness',
'excerpt': 'Credibly innovate granular internal or organic sources whereas high standards in web-readiness. Dramatically synthesize integrated schemas with optimal networks.'
}
];
public static table = [
{
'name' : 'Airi Satou',
'position' : 'Accountant',
'office' : 'Tokyo',
'age' : '33',
'startDate': '2008/11/28',
'salary' : '162700',
'email' : 'a.satou@mail.com'
},
{
'name' : 'Angellica Ramos',
'position' : 'Chief Executive Officer (CEO)',
'office' : 'London',
'age' : '47',
'startDate': '2009/10/09',
'salary' : '1200000',
'email' : 'a.ramos@mail.com'
},
{
'name' : 'Ashton Cox',
'position' : 'Hunior Technical Author',
'office' : 'San Fransisco',
'age' : '66',
'startDate': '2009/01/12',
'salary' : '86000',
'email' : 'a.cox@mail.com'
},
{
'name' : 'Bradley Greer',
'position' : 'Software Engineer',
'office' : 'London',
'age' : '41',
'startDate': '2012/10/13',
'salary' : '132000',
'email' : 'b.greer@mail.com'
},
{
'name' : 'Brenden Wagner',
'position' : 'Software Engineer',
'office' : 'San Fransisco',
'age' : '28',
'startDate': '2011/06/07',
'salary' : '206850',
'email' : 'b.wagner@mail.com'
},
{
'name' : 'Brielle Williamson',
'position' : 'Integration Specialist',
'office' : 'New York',
'age' : '61',
'startDate': '2012/12/02',
'salary' : '372000',
'email' : 'b.williamson@mail.com'
},
{
'name' : 'Bruno Nash',
'position' : 'Software Engineer',
'office' : 'London',
'age' : '38',
'startDate': '2011/05/03',
'salary' : '163500',
'email' : 'b.nash@mail.com'
},
{
'name' : 'Caesar Vance',
'position' : 'Pre-Sales Support',
'office' : 'New York',
'age' : '21',
'startDate': '2011/12/12',
'salary' : '106450',
'email' : 'c.vance@mail.com'
},
{
'name' : 'Cara Stevens',
'position' : 'Sales Assistant',
'office' : 'New York',
'age' : '46',
'startDate': '2011/12/06',
'salary' : '145600',
'email' : 'c.stevens@mail.com'
},
{
'name' : 'Cedric Kelly',
'position' : 'Senior Javascript Developer',
'office' : 'Edinburg',
'age' : '22',
'startDate': '2012/03/29',
'salary' : '433060',
'email' : 'c.kelly@mail.com'
}
];
}

View File

@@ -1,324 +0,0 @@
export class TodoFakeDb
{
public static todos = [
{
'id' : '561551bd7fe2ff461101c192',
'title' : 'Proident tempor est nulla irure ad est',
'notes' : 'Id nulla nulla proident deserunt deserunt proident in quis. Cillum reprehenderit labore id anim laborum.',
'startDate': 'Wednesday, January 29, 2014 3:17 PM',
'dueDate' : null,
'completed': false,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [1]
},
{
'id' : '561551bd4ac1e7eb77a3a750',
'title' : 'Magna quis irure quis ea pariatur laborum',
'notes' : '',
'startDate': 'Sunday, February 1, 2015 1:30 PM',
'dueDate' : 'Friday, December 30, 2016 10:07 AM',
'completed': false,
'starred' : false,
'important': true,
'deleted' : false,
'tags' : [1, 4]
},
{
'id' : '561551bd917bfec2ddef2d49',
'title' : 'Ullamco duis commodo sint ad aliqua aute',
'notes' : 'Sunt laborum enim nostrud ea fugiat cillum mollit aliqua exercitation ad elit.',
'startDate': 'Friday, April 11, 2014 3:43 AM',
'dueDate' : 'Wednesday, July 26, 2017 11:14 AM',
'completed': false,
'starred' : true,
'important': true,
'deleted' : false,
'tags' : [3]
},
{
'id' : '561551bdeeb2fd6877e18c29',
'title' : 'Eiusmod non occaecat pariatur Lorem in ex',
'notes' : 'Nostrud anim mollit incididunt qui qui sit commodo duis. Anim amet irure aliquip duis nostrud sit quis fugiat ullamco non dolor labore. Lorem sunt voluptate laboris culpa proident. Aute eiusmod aliqua exercitation irure exercitation qui laboris mollit occaecat eu occaecat fugiat.',
'startDate': 'Wednesday, May 7, 2014 4:14 AM',
'dueDate' : 'Friday, December 15, 2017 4:01 AM',
'completed': true,
'starred' : true,
'important': false,
'deleted' : false,
'tags' : [2]
},
{
'id' : '561551bdf38eae0134ae43d4',
'title' : 'Lorem magna cillum consequat consequat mollit',
'notes' : 'Velit ipsum proident ea incididunt et. Consectetur eiusmod laborum voluptate duis occaecat ullamco sint enim proident.',
'startDate': 'Sunday, August 23, 2015 11:19 PM',
'dueDate' : 'Friday, July 8, 2016 10:49 AM',
'completed': false,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [5, 4]
},
{
'id' : '561551bd32f1588c814a0ccd',
'title' : 'Quis irure cupidatat ad consequat reprehenderit excepteur',
'notes' : 'Esse nisi mollit aliquip mollit aute consequat adipisicing. Do excepteur dolore proident cupidatat pariatur irure consequat incididunt.',
'startDate': 'Sunday, June 7, 2015 10:49 AM',
'dueDate' : 'Monday, January 9, 2017 8:34 AM',
'completed': false,
'starred' : true,
'important': false,
'deleted' : false,
'tags' : [2, 3]
},
{
'id' : '561551bd0bb4b08ca77038ef',
'title' : 'Officia voluptate tempor ut mollit ea cillum',
'notes' : 'Deserunt veniam reprehenderit do elit magna ut.',
'startDate': 'Saturday, October 18, 2014 4:25 AM',
'dueDate' : 'Sunday, August 21, 2016 10:48 PM',
'completed': true,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [2, 4]
},
{
'id' : '561551bdf84eec913835ebe5',
'title' : 'Sit exercitation cupidatat minim est ipsum excepteur',
'notes' : '',
'startDate': 'Friday, August 8, 2014 5:45 AM',
'dueDate' : 'Wednesday, June 15, 2016 1:53 PM',
'completed': true,
'starred' : false,
'important': true,
'deleted' : false,
'tags' : [1, 3]
},
{
'id' : '561551bd2047cc709af0f670',
'title' : 'Sunt fugiat officia nisi minim sunt duis',
'notes' : 'Eiusmod eiusmod sint aliquip exercitation cillum. Magna nulla officia ex consectetur ea ad excepteur in qui.',
'startDate': 'Monday, July 13, 2015 1:55 PM',
'dueDate' : 'Thursday, March 3, 2016 2:26 PM',
'completed': false,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [
{
'id' : 5,
'name' : 'mobile',
'label': 'Mobile',
'color': '#9C27B0'
}
]
},
{
'id' : '561551bd73d1a627e97005ce',
'title' : 'Non cupidatat enim quis aliquip minim laborum',
'notes' : 'Qui cillum eiusmod nostrud sunt dolore velit nostrud labore voluptate ad dolore. Eu Lorem anim pariatur aliqua. Ullamco ut dolor velit esse occaecat dolore eu cillum commodo qui. Nulla dolor consequat voluptate magna ut commodo magna consectetur non aute proident.',
'startDate': 'Tuesday, November 11, 2014 6:36 PM',
'dueDate' : 'Tuesday, August 9, 2016 7:18 AM',
'completed': false,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [2]
},
{
'id' : '561551bd8f7d793ded0a2353',
'title' : 'Dolor ex occaecat magna labore laboris qui',
'notes' : 'Incididunt qui excepteur eiusmod elit cillum occaecat voluptate cillum nostrud. Dolor ullamco ullamco eiusmod do sunt adipisicing pariatur. In esse esse labore id reprehenderit sint do. Pariatur culpa dolor tempor qui excepteur duis do anim minim ipsum.',
'startDate': 'Monday, June 9, 2014 3:15 PM',
'dueDate' : 'Wednesday, October 19, 2016 3:38 PM',
'completed': false,
'starred' : false,
'important': true,
'deleted' : false,
'tags' : [3]
},
{
'id' : '561551bdaa586f72d0be02cc',
'title' : 'Ex nisi amet id dolore nostrud esse',
'notes' : '',
'startDate': 'Thursday, January 15, 2015 6:11 PM',
'dueDate' : 'Sunday, August 20, 2017 10:02 AM',
'completed': false,
'starred' : true,
'important': true,
'deleted' : false,
'tags' : [4]
},
{
'id' : '561551bd9f1c2de5b27f537b',
'title' : 'In dolor velit labore dolore ex eiusmod',
'notes' : '',
'startDate': 'Monday, March 10, 2014 12:50 AM',
'dueDate' : 'Thursday, January 26, 2017 3:10 PM',
'completed': false,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [4]
},
{
'id' : '561551bd26e21bb5e85b35cb',
'title' : 'Sunt voluptate aliquip exercitation minim magna sit',
'notes' : '',
'startDate': 'Tuesday, March 24, 2015 10:54 PM',
'dueDate' : 'Wednesday, August 23, 2017 5:35 PM',
'completed': false,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [4]
},
{
'id' : '561551bd719860cf0ad2011a',
'title' : 'Nisi et ullamco minim ea proident tempor',
'notes' : 'Dolor veniam dolor cillum Lorem magna nisi in occaecat nulla dolor ea eiusmod.',
'startDate': 'Friday, February 14, 2014 10:03 AM',
'dueDate' : 'Saturday, July 8, 2017 11:54 PM',
'completed': false,
'starred' : true,
'important': false,
'deleted' : false,
'tags' : [2, 4]
},
{
'id' : '561551bd49d800c243264a91',
'title' : 'Sit ipsum mollit cupidatat adipisicing officia aliquip',
'notes' : '',
'startDate': 'Wednesday, December 10, 2014 9:25 AM',
'dueDate' : 'Friday, March 25, 2016 12:29 AM',
'completed': true,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [1]
},
{
'id' : '561551bd061990eaf40fb64f',
'title' : 'Amet sunt et quis amet commodo quis',
'notes' : 'Nulla dolore consequat aliqua sint consequat elit qui occaecat et.',
'startDate': 'Saturday, March 1, 2014 3:59 PM',
'dueDate' : 'Saturday, November 7, 2015 2:00 PM',
'completed': false,
'starred' : false,
'important': true,
'deleted' : false,
'tags' : [1]
},
{
'id' : '561551be81d05fa94711e7f3',
'title' : 'Ut eiusmod ex ea eiusmod culpa incididunt',
'notes' : 'Fugiat non incididunt officia ex incididunt occaecat. Voluptate nostrud culpa aliquip mollit incididunt non dolore.',
'startDate': 'Monday, February 2, 2015 3:07 PM',
'dueDate' : 'Saturday, October 14, 2017 6:57 AM',
'completed': false,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [2]
},
{
'id' : '561551be05c093a80e0c8d05',
'title' : 'Proident reprehenderit laboris pariatur ut et nisi',
'notes' : 'Reprehenderit proident ut ad cillum quis velit quis aliqua ut aliquip tempor ullamco.',
'startDate': 'Sunday, June 14, 2015 4:40 AM',
'dueDate' : 'Wednesday, February 10, 2016 10:47 AM',
'completed': true,
'starred' : true,
'important': true,
'deleted' : false,
'tags' : [5]
},
{
'id' : '561551be3bb43a5bd431c2fc',
'title' : 'Aliqua aliquip aliquip aliquip et exercitation aute',
'notes' : 'Adipisicing Lorem tempor ex anim. Labore tempor laboris nostrud dolore voluptate ullamco. Fugiat ex deserunt anim minim esse velit laboris aute ea duis incididunt. Elit irure id Lorem incididunt laborum aliquip consectetur est irure sunt. Ut labore anim nisi aliqua tempor laborum nulla cillum. Duis irure consequat cillum magna cillum eiusmod ut. Et exercitation voluptate quis deserunt elit quis dolor deserunt ex ex esse ex.',
'startDate': 'Saturday, May 3, 2014 1:32 AM',
'dueDate' : 'Monday, September 12, 2016 9:16 PM',
'completed': true,
'starred' : false,
'important': true,
'deleted' : true,
'tags' : [3]
}
];
public static filters = [
{
'id' : 0,
'handle': 'starred',
'title' : 'Starred',
'icon' : 'star'
},
{
'id' : 1,
'handle': 'important',
'title' : 'Priority',
'icon' : 'error'
},
{
'id' : 2,
'handle': 'dueDate',
'title' : 'Sheduled',
'icon' : 'schedule'
},
{
'id' : 3,
'handle': 'today',
'title' : 'Today',
'icon' : 'today'
},
{
'id' : 4,
'handle': 'completed',
'title' : 'Done',
'icon' : 'check'
},
{
'id' : 4,
'handle': 'deleted',
'title' : 'Deleted',
'icon' : 'delete'
}
];
public static tags = [
{
'id' : 1,
'handle': 'frontend',
'title' : 'Frontend',
'color' : '#388E3C'
},
{
'id' : 2,
'handle': 'backend',
'title' : 'Backend',
'color' : '#F44336'
},
{
'id' : 3,
'handle': 'api',
'title' : 'API',
'color' : '#FF9800'
},
{
'id' : 4,
'handle': 'issue',
'title' : 'Issue',
'color' : '#0091EA'
},
{
'id' : 5,
'handle': 'mobile',
'title' : 'Mobile',
'color' : '#9C27B0'
}
];
}

View File

@@ -1,47 +0,0 @@
import { NgModule } from '@angular/core';
import { SharedModule } from '../../../../core/modules/shared.module';
import { RouterModule } from '@angular/router';
import { FuseAcademyCoursesComponent } from './courses/courses.component';
import { FuseAcademyCourseComponent } from './course/course.component';
import { AcademyCoursesService } from './courses.service';
import { AcademyCourseService } from './course.service';
const routes = [
{
path : 'courses',
component: FuseAcademyCoursesComponent,
resolve : {
academy: AcademyCoursesService
}
},
{
path : 'courses/:courseId/:courseSlug',
component: FuseAcademyCourseComponent,
resolve : {
academy: AcademyCourseService
}
},
{
path : '**',
redirectTo: 'courses'
}
];
@NgModule({
imports : [
SharedModule,
RouterModule.forChild(routes)
],
declarations: [
FuseAcademyCoursesComponent,
FuseAcademyCourseComponent
],
providers : [
AcademyCoursesService,
AcademyCourseService
]
})
export class FuseAcademyModule
{
}

View File

@@ -1,49 +0,0 @@
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { HttpClient } from '@angular/common/http';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
@Injectable()
export class AcademyCourseService implements Resolve<any>
{
onCourseChanged: BehaviorSubject<any> = new BehaviorSubject({});
constructor(private http: HttpClient)
{
}
/**
* The Academy App Main Resolver
*
* @param {ActivatedRouteSnapshot} route
* @param {RouterStateSnapshot} state
* @returns {Observable<any> | Promise<any> | any}
*/
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<any> | any
{
return new Promise((resolve, reject) => {
Promise.all([
this.getCourse(route.params.courseId, route.params.courseSlug)
]).then(
() => {
resolve();
},
reject
);
});
}
getCourse(courseId, courseSlug): Promise<any>
{
return new Promise((resolve, reject) => {
this.http.get('api/academy-course/' + courseId + '/' + courseSlug)
.subscribe((response: any) => {
this.onCourseChanged.next(response);
resolve(response);
}, reject);
});
}
}

View File

@@ -1,100 +0,0 @@
<div id="academy-course" class="page-layout simple left-sidenav">
<mat-sidenav-container>
<!-- SIDENAV -->
<mat-sidenav class="sidenav" align="start" opened="true" mode="side"
fuseMatSidenavHelper="academy-left-sidenav" mat-is-locked-open="gt-md">
<div class="sidenav-content" fusePerfectScrollbar>
<div class="steps">
<div class="step"
*ngFor="let step of course.steps; let i = index; let last = last; let first = first"
(click)="gotoStep(i)"
[ngClass]="{'current': currentStep === i, 'completed': currentStep > i, 'last': last, 'first': first}">
<div class="index">
<span>{{i + 1}}</span>
</div>
<div class="title">{{step.title}}</div>
</div>
</div>
</div>
</mat-sidenav>
<!-- / SIDENAV -->
<!-- CENTER -->
<div class="center">
<!-- HEADER -->
<div class="header mat-accent-bg p-24" fxLayout="row" fxLayoutAlign="start center">
<button mat-button class="mat-icon-button mr-16 sidenav-toggle"
fuseMatSidenavToggler="academy-left-sidenav" fxHide.gt-md>
<mat-icon>menu</mat-icon>
</button>
<button mat-button class="mat-icon-button mr-16" [routerLink]="'/apps/academy/courses'">
<mat-icon>arrow_back</mat-icon>
</button>
<div>
<h2>{{course.title}}</h2>
</div>
</div>
<!-- / HEADER -->
<!-- CONTENT -->
<div id="course-content" class="content">
<ng-container *ngFor="let step of course.steps; let i = index;">
<div class="course-step" fusePerfectScrollbar
*ngIf="currentStep === i"
[@slideIn]="animationDirection">
<div id="course-step-content" class="course-step-content" [innerHTML]="step.content"></div>
</div>
</ng-container>
</div>
<!-- / CONTENT -->
<div class="step-navigation">
<button mat-fab class="previous mat-accent white-fg"
(click)="gotoPreviousStep()"
[disabled]="currentStep === 0"
[fxHide]="currentStep === 0">
<mat-icon>chevron_left</mat-icon>
</button>
<button mat-fab class="next mat-accent white-fg"
(click)="gotoNextStep()"
[disabled]="currentStep === course.totalSteps - 1"
[fxHide]="currentStep === course.totalSteps - 1">
<mat-icon>chevron_right</mat-icon>
</button>
<button mat-fab class="done mat-green-600-bg"
routerLink="/apps/academy/courses"
[disabled]="currentStep !== course.totalSteps - 1"
[fxShow]="currentStep === course.totalSteps - 1">
<mat-icon>check</mat-icon>
</button>
</div>
</div>
<!-- / CENTER -->
</mat-sidenav-container>
</div>

View File

@@ -1,202 +0,0 @@
@import "src/app/core/scss/fuse";
#academy-course {
.mat-drawer-container {
flex: 1 !important;
> .mat-drawer-content {
flex: 1 !important;
@include media-breakpoint-up('lg') {
z-index: 52;
}
}
}
.sidenav {
.steps {
padding: 16px 0;
.step {
position: relative;
display: flex;
justify-content: flex-start;
align-items: center;
padding: 16px;
cursor: pointer;
color: rgba(0, 0, 0, 0.54);
&.current {
background: mat-color($mat-blue, 50);
color: rgba(0, 0, 0, 0.87);
.index {
span {
border: 2px solid mat-color($mat-blue, 500);
}
}
.title {
font-weight: bold;
}
}
&.completed {
color: rgba(0, 0, 0, 0.87);
.index {
span {
border: 2px solid mat-color($mat-blue, 500);
}
&:after {
border-left-color: mat-color($mat-blue, 500);
}
}
+ .step {
.index {
&:before {
border-left-color: mat-color($mat-blue, 500);
}
}
}
}
&.first {
.index {
&:before {
display: none;
}
}
}
&.last {
.index {
&:after {
display: none;
}
}
}
.index {
display: flex;
margin-right: 12px;
span {
display: flex;
align-items: center;
justify-content: center;
position: relative;
width: 28px;
min-width: 28px;
max-width: 28px;
height: 28px;
background: white;
border-radius: 100%;
border: 2px solid mat-color($mat-grey, 500);
font-weight: bold;
font-size: 12px;
z-index: 10;
}
&:before,
&:after {
position: absolute;
display: block;
content: ' ';
border-left: 1px solid mat-color($mat-grey, 300);
width: 1px;
height: 50%;
left: 29px;
z-index: 8;
}
&:before {
top: 0;
}
&:after {
bottom: 0;
}
}
.title {
display: flex;
}
}
}
}
.center {
position: relative;
.header {
height: 72px;
min-height: 72px;
max-height: 72px;
}
.content {
display: flex;
position: relative;
overflow: hidden;
height: 100%;
background: mat-color($mat-grey, 200);
.course-step {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
padding: 48px;
@media (max-width: 720px) {
padding: 0 0 120px 0;
}
.course-step-content {
padding: 24px;
max-width: 720px;
margin: 0 auto;
width: 100%;
background: white;
@include mat-elevation(4);
}
}
}
.step-navigation {
position: absolute;
display: flex;
align-items: center;
justify-content: space-between;
bottom: 32px;
max-width: 944px;
padding: 0 24px;
width: 100%;
left: 50%;
transform: translateX(-50%);
.previous {
margin-right: auto;
}
.next,
.done {
margin-left: auto;
}
}
}
}

View File

@@ -1,101 +0,0 @@
import { AfterViewInit, ChangeDetectorRef, Component, OnDestroy, OnInit, QueryList, ViewChildren, ViewEncapsulation } from '@angular/core';
import { AcademyCourseService } from '../course.service';
import { Subscription } from 'rxjs/Subscription';
import { FusePerfectScrollbarDirective } from '../../../../../core/directives/fuse-perfect-scrollbar/fuse-perfect-scrollbar.directive';
import { fuseAnimations } from '../../../../../core/animations';
@Component({
selector : 'fuse-academy-course',
templateUrl : './course.component.html',
styleUrls : ['./course.component.scss'],
encapsulation: ViewEncapsulation.None,
animations : fuseAnimations
})
export class FuseAcademyCourseComponent implements OnInit, OnDestroy, AfterViewInit
{
course: any;
courseSubscription: Subscription;
currentStep = 0;
courseStepContent;
animationDirection: 'left' | 'right' | 'none' = 'none';
@ViewChildren(FusePerfectScrollbarDirective) fuseScrollbarDirectives: QueryList<FusePerfectScrollbarDirective>;
constructor(
private courseService: AcademyCourseService,
private changeDetectorRef: ChangeDetectorRef
)
{
}
ngOnInit()
{
// Subscribe to courses
this.courseSubscription =
this.courseService.onCourseChanged
.subscribe(course => {
this.course = course;
});
}
ngAfterViewInit()
{
this.courseStepContent = this.fuseScrollbarDirectives.find((fuseScrollbarDirective) => {
return fuseScrollbarDirective.element.nativeElement.id === 'course-step-content';
});
}
ngOnDestroy()
{
this.courseSubscription.unsubscribe();
}
gotoStep(step)
{
// Decide the animation direction
this.animationDirection = this.currentStep < step ? 'left' : 'right';
// Run change detection so the change
// in the animation direction registered
this.changeDetectorRef.detectChanges();
// Set the current step
this.currentStep = step;
}
gotoNextStep()
{
if ( this.currentStep === this.course.totalSteps - 1 )
{
return;
}
// Set the animation direction
this.animationDirection = 'left';
// Run change detection so the change
// in the animation direction registered
this.changeDetectorRef.detectChanges();
// Increase the current step
this.currentStep++;
}
gotoPreviousStep()
{
if ( this.currentStep === 0 )
{
return;
}
// Set the animation direction
this.animationDirection = 'right';
// Run change detection so the change
// in the animation direction registered
this.changeDetectorRef.detectChanges();
// Decrease the current step
this.currentStep--;
}
}

View File

@@ -1,62 +0,0 @@
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { HttpClient } from '@angular/common/http';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
@Injectable()
export class AcademyCoursesService implements Resolve<any>
{
onCategoriesChanged: BehaviorSubject<any> = new BehaviorSubject({});
onCoursesChanged: BehaviorSubject<any> = new BehaviorSubject({});
constructor(private http: HttpClient)
{
}
/**
* The Academy App Main Resolver
*
* @param {ActivatedRouteSnapshot} route
* @param {RouterStateSnapshot} state
* @returns {Observable<any> | Promise<any> | any}
*/
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<any> | any
{
return new Promise((resolve, reject) => {
Promise.all([
this.getCategories(),
this.getCourses()
]).then(
() => {
resolve();
},
reject
);
});
}
getCategories(): Promise<any>
{
return new Promise((resolve, reject) => {
this.http.get('api/academy-categories')
.subscribe((response: any) => {
this.onCategoriesChanged.next(response);
resolve(response);
}, reject);
});
}
getCourses(): Promise<any>
{
return new Promise((resolve, reject) => {
this.http.get('api/academy-courses')
.subscribe((response: any) => {
this.onCoursesChanged.next(response);
resolve(response);
}, reject);
});
}
}

View File

@@ -1,97 +0,0 @@
<div id="academy-courses" class="page-layout simple" fusePerfectScrollbar>
<!-- HEADER -->
<div class="header mat-accent-bg p-16 p-sm-24" fxLayout="column" fxLayoutAlign="center center">
<div class="hero-text">
<mat-icon class="hero-icon">school</mat-icon>
<h1>WELCOME TO ACADEMY</h1>
<h3>
Our courses will step you through the process of building a small application, or adding a new feature
to an existing application.
</h3>
</div>
</div>
<!-- / HEADER -->
<!-- CONTENT -->
<div class="content p-24">
<div fxLayout="column" fxLayoutAlign="center">
<div class="filters" fxLayout="column" fxLayoutAlign="center center"
fxLayout.gt-xs="row" fxLayoutAlign.gt-xs="space-between center">
<mat-form-field class="course-search">
<input matInput placeholder="Search for a course" [(ngModel)]="searchTerm"
(input)="filterCoursesByTerm()">
</mat-form-field>
<mat-form-field class="category-selector">
<mat-select placeholder="Select Category" [(ngModel)]="currentCategory"
(change)="filterCoursesByCategory()">
<mat-option [value]="'all'">
All
</mat-option>
<mat-option *ngFor="let category of categories" [value]="category.value">
{{ category.label }}
</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="courses" fxLayout="row" fxLayoutAlign="center" fxLayoutWrap>
<div class="course" *ngFor="let course of filteredCourses" fxFlex="100" fxFlex.gt-xs="50"
fxFlex.gt-sm="33" [ngClass]="course.category">
<div class="course-content" fxLayout="column">
<div class="header" fxLayout="row" fxLayoutAlign="center center"
[ngClass]="course.category + '-bg'">
<div class="category" fxFlex>
{{course.category}}
</div>
<div class="length" fxLayout="row" fxLayoutAlign="center center">
<mat-icon class="length-icon s-20">access_time</mat-icon>
<div class="min">{{course.length}} min</div>
</div>
</div>
<div class="content" fxLayout="column" fxLayoutAlign="center center" fxFlex>
<div class="h1">{{course.title}}</div>
<div class="updated">Updated {{course.updated}}</div>
</div>
<div class="footer" fxLayout="row" fxLayoutAlign="center center">
<button mat-button color="accent"
[routerLink]="'/apps/academy/courses/' + course.id + '/' + course.slug">
START
</button>
</div>
</div>
</div>
<div class="no-courses" *ngIf="filteredCourses.length === 0">
No courses found!
</div>
</div>
</div>
</div>
<!-- / CONTENT -->
</div>

Some files were not shown because too many files have changed in this diff Show More