mirror of
https://github.com/richard-loafle/fuse-angular.git
synced 2025-12-22 22:07:06 +00:00
Compare commits
74 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f35d83567e | ||
|
|
c97fd77c13 | ||
|
|
62904cdb42 | ||
|
|
d9c36cad82 | ||
|
|
d2bfc152a0 | ||
|
|
f013b2b667 | ||
|
|
9fbcc20623 | ||
|
|
0fd8a75f7d | ||
|
|
99d9552813 | ||
|
|
3bca193bcc | ||
|
|
f73ff363a5 | ||
|
|
1bf689f154 | ||
|
|
3499d89098 | ||
|
|
685cd76da2 | ||
|
|
786180958d | ||
|
|
a2f72c92d5 | ||
|
|
6b368d2e79 | ||
|
|
47c2cc721e | ||
|
|
5574e3f729 | ||
|
|
1934bad3eb | ||
|
|
ee29f20304 | ||
|
|
93c2eab584 | ||
|
|
b0f45980be | ||
|
|
7b10b2ad86 | ||
|
|
3fc510469d | ||
|
|
5d56b3bcd6 | ||
|
|
aaa14eb1e9 | ||
|
|
f43608f93b | ||
|
|
9ecd921722 | ||
|
|
98e2ff0e1e | ||
|
|
b7cb09b087 | ||
|
|
fe8b44b14c | ||
|
|
ca8ed939ae | ||
|
|
4469a2c25a | ||
|
|
895291c37c | ||
|
|
ac7e6f75bc | ||
|
|
bd8b02c82d | ||
|
|
6d594d63db | ||
|
|
6656410696 | ||
|
|
470b851eae | ||
|
|
fbe9cb83a2 | ||
|
|
13a09164ae | ||
|
|
56d9830176 | ||
|
|
be820804f2 | ||
|
|
7615bc1d03 | ||
|
|
3198663430 | ||
|
|
ad432ca31d | ||
|
|
7d26beff3d | ||
|
|
4711a27814 | ||
|
|
8205a4d5b5 | ||
|
|
4f451a74e9 | ||
|
|
8518408254 | ||
|
|
72f968b594 | ||
|
|
688b443ea8 | ||
|
|
cb89da4647 | ||
|
|
cc4a04afcb | ||
|
|
bc239571a1 | ||
|
|
c025563145 | ||
|
|
c06e99dc97 | ||
|
|
c0a1dc7c37 | ||
|
|
55e1d8b2bc | ||
|
|
533f5f3f3f | ||
|
|
4a7b70c874 | ||
|
|
c101c432dc | ||
|
|
04d1b2eff8 | ||
|
|
f800dc3286 | ||
|
|
619433f101 | ||
|
|
3e9ae83aae | ||
|
|
9400c3d748 | ||
|
|
5e4940fed9 | ||
|
|
8910e6f5dc | ||
|
|
52c5e6a18b | ||
|
|
3d9ded9a44 | ||
|
|
1be3f0066b |
@@ -9,6 +9,7 @@
|
|||||||
"outDir": "dist",
|
"outDir": "dist",
|
||||||
"assets": [
|
"assets": [
|
||||||
"assets",
|
"assets",
|
||||||
|
"app/main/content/components/angular-material",
|
||||||
"favicon.ico"
|
"favicon.ico"
|
||||||
],
|
],
|
||||||
"index": "index.html",
|
"index": "index.html",
|
||||||
@@ -37,13 +38,16 @@
|
|||||||
},
|
},
|
||||||
"lint": [
|
"lint": [
|
||||||
{
|
{
|
||||||
"project": "src/tsconfig.app.json"
|
"project": "src/tsconfig.app.json",
|
||||||
|
"exclude": "**/node_modules/**"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"project": "src/tsconfig.spec.json"
|
"project": "src/tsconfig.spec.json",
|
||||||
|
"exclude": "**/node_modules/**"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"project": "e2e/tsconfig.e2e.json"
|
"project": "e2e/tsconfig.e2e.json",
|
||||||
|
"exclude": "**/node_modules/**"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"test": {
|
"test": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Fuse2
|
# Fuse2
|
||||||
|
|
||||||
Material Design Admin Template with Angular 4+ and Angular Material 2
|
Material Design Admin Template with Angular 5+ and Angular Material 2
|
||||||
|
|
||||||
## Development server
|
## Development server
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import { Fuse2Page } from './app.po';
|
import { AppPage } from './app.po';
|
||||||
|
|
||||||
describe('fuse2 App', () => {
|
describe('angular5 App', () => {
|
||||||
let page: Fuse2Page;
|
let page: AppPage;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
page = new Fuse2Page();
|
page = new AppPage();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display welcome message', () => {
|
it('should display welcome message', () => {
|
||||||
page.navigateTo();
|
page.navigateTo();
|
||||||
expect(page.getParagraphText()).toEqual('Welcome to app!!');
|
expect(page.getParagraphText()).toEqual('Welcome to app!');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
import { browser, by, element } from 'protractor';
|
import { AppPage } from './app.po';
|
||||||
|
|
||||||
export class Fuse2Page {
|
describe('Fuse App', () => {
|
||||||
navigateTo() {
|
let page: AppPage;
|
||||||
return browser.get('/');
|
|
||||||
}
|
|
||||||
|
|
||||||
getParagraphText() {
|
beforeEach(() => {
|
||||||
return element(by.css('app-root h1')).getText();
|
page = new AppPage();
|
||||||
}
|
});
|
||||||
}
|
|
||||||
|
it('should display welcome message', () => {
|
||||||
|
page.navigateTo();
|
||||||
|
expect(page.getParagraphText()).toEqual('Welcome to app!');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -2,10 +2,12 @@
|
|||||||
"extends": "../tsconfig.json",
|
"extends": "../tsconfig.json",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "../out-tsc/e2e",
|
"outDir": "../out-tsc/e2e",
|
||||||
|
"baseUrl": "./",
|
||||||
"module": "commonjs",
|
"module": "commonjs",
|
||||||
"target": "es5",
|
"target": "es5",
|
||||||
"types": [
|
"types": [
|
||||||
"jasmine",
|
"jasmine",
|
||||||
|
"jasminewd2",
|
||||||
"node"
|
"node"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,33 @@
|
|||||||
// Karma configuration file, see link for more information
|
// Karma configuration file, see link for more information
|
||||||
// https://karma-runner.github.io/0.13/config/configuration-file.html
|
// https://karma-runner.github.io/1.0/config/configuration-file.html
|
||||||
|
|
||||||
module.exports = function (config) {
|
module.exports = function (config) {
|
||||||
config.set({
|
config.set({
|
||||||
basePath: '',
|
basePath: '',
|
||||||
frameworks: ['jasmine', '@angular/cli'],
|
frameworks: ['jasmine', '@angular/cli'],
|
||||||
plugins: [
|
plugins: [
|
||||||
require('karma-jasmine'),
|
require('karma-jasmine'),
|
||||||
require('karma-chrome-launcher'),
|
require('karma-chrome-launcher'),
|
||||||
require('karma-jasmine-html-reporter'),
|
require('karma-jasmine-html-reporter'),
|
||||||
require('karma-coverage-istanbul-reporter'),
|
require('karma-coverage-istanbul-reporter'),
|
||||||
require('@angular/cli/plugins/karma')
|
require('@angular/cli/plugins/karma')
|
||||||
],
|
],
|
||||||
client:{
|
client:{
|
||||||
clearContext: false // leave Jasmine Spec Runner output visible in browser
|
clearContext: false // leave Jasmine Spec Runner output visible in browser
|
||||||
},
|
},
|
||||||
coverageIstanbulReporter: {
|
coverageIstanbulReporter: {
|
||||||
reports: [ 'html', 'lcovonly' ],
|
reports: [ 'html', 'lcovonly' ],
|
||||||
fixWebpackSourcePaths: true
|
fixWebpackSourcePaths: true
|
||||||
},
|
},
|
||||||
angularCli: {
|
angularCli: {
|
||||||
environment: 'dev'
|
environment: 'dev'
|
||||||
},
|
},
|
||||||
reporters: ['progress', 'kjhtml'],
|
reporters: ['progress', 'kjhtml'],
|
||||||
port: 9876,
|
port: 9876,
|
||||||
colors: true,
|
colors: true,
|
||||||
logLevel: config.LOG_INFO,
|
logLevel: config.LOG_INFO,
|
||||||
autoWatch: true,
|
autoWatch: true,
|
||||||
browsers: ['Chrome'],
|
browsers: ['Chrome'],
|
||||||
singleRun: false
|
singleRun: false
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
4628
package-lock.json
generated
4628
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
89
package.json
89
package.json
@@ -1,75 +1,74 @@
|
|||||||
{
|
{
|
||||||
"name": "fuse2",
|
"name": "fuse2",
|
||||||
"version": "1.1.0",
|
"version": "1.2.0",
|
||||||
"license": "",
|
"license": "",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"ng": "ng",
|
"ng": "ng",
|
||||||
"start": "ng serve",
|
"start": "ng serve",
|
||||||
"start-hmr": "ng serve --hmr -e=hmr -sm=false",
|
"start-hmr": "ng serve --hmr -e=hmr -sm=false",
|
||||||
"start-hmr-sourcemaps": "ng serve --hmr -e=hmr",
|
"start-hmr-sourcemaps": "ng serve --hmr -e=hmr",
|
||||||
"build": "node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build",
|
"build": "node --max_old_space_size=6144 ./node_modules/@angular/cli/bin/ng build --dev",
|
||||||
"build-prod": "node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build --prod",
|
"build-prod": "node --max_old_space_size=6144 ./node_modules/@angular/cli/bin/ng build --prod",
|
||||||
"test": "ng test",
|
"test": "ng test",
|
||||||
"lint": "ng lint",
|
"lint": "ng lint",
|
||||||
"e2e": "ng e2e"
|
"e2e": "ng e2e"
|
||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@angular/animations": "4.4.3",
|
"@agm/core": "1.0.0-beta.2",
|
||||||
"@angular/cdk": "2.0.0-beta.10",
|
"@angular/animations": "5.0.0",
|
||||||
"@angular/common": "4.4.3",
|
"@angular/cdk": "2.0.0-beta.12",
|
||||||
"@angular/compiler": "4.4.3",
|
"@angular/common": "5.0.0",
|
||||||
"@angular/core": "4.4.3",
|
"@angular/compiler": "5.0.0",
|
||||||
"@angular/flex-layout": "2.0.0-beta.9",
|
"@angular/core": "5.0.0",
|
||||||
"@angular/forms": "4.4.3",
|
"@angular/flex-layout": "2.0.0-beta.10",
|
||||||
"@angular/http": "4.4.3",
|
"@angular/forms": "5.0.0",
|
||||||
"@angular/material": "2.0.0-beta.10",
|
"@angular/http": "5.0.0",
|
||||||
"@angular/platform-browser": "4.4.3",
|
"@angular/material": "2.0.0-beta.12",
|
||||||
"@angular/platform-browser-dynamic": "4.4.3",
|
"@angular/platform-browser": "5.0.0",
|
||||||
"@angular/router": "4.4.3",
|
"@angular/platform-browser-dynamic": "5.0.0",
|
||||||
"@swimlane/ngx-charts": "6.0.2",
|
"@angular/router": "5.0.0",
|
||||||
"@swimlane/ngx-datatable": "9.3.1",
|
"@ngx-translate/core": "8.0.0",
|
||||||
"@swimlane/ngx-dnd": "3.0.0",
|
"@swimlane/ngx-charts": "6.1.0",
|
||||||
"angular-calendar": "0.19.0",
|
"@swimlane/ngx-datatable": "10.4.0",
|
||||||
"angular-in-memory-web-api": "0.3.2",
|
"@withinpixels/ngx-dnd": "3.1.0",
|
||||||
|
"angular-calendar": "0.21.3",
|
||||||
|
"angular-in-memory-web-api": "0.5.1",
|
||||||
|
"angular2-markdown": "1.6.0",
|
||||||
"classlist.js": "1.1.20150312",
|
"classlist.js": "1.1.20150312",
|
||||||
"core-js": "2.5.0",
|
"core-js": "2.5.1",
|
||||||
"d3": "4.10.0",
|
"d3": "4.11.0",
|
||||||
"hammerjs": "2.0.8",
|
"hammerjs": "2.0.8",
|
||||||
"highlight.js": "9.12.0",
|
"highlight.js": "9.12.0",
|
||||||
"intl": "1.2.5",
|
"intl": "1.2.5",
|
||||||
"md2": "0.0.28",
|
"moment": "2.19.1",
|
||||||
"moment": "2.18.1",
|
"ngx-color-picker": "4.4.0",
|
||||||
"ngx-color-picker": "4.3.1",
|
"ngx-cookie-service": "1.0.9",
|
||||||
"ngx-cookie-service": "1.0.7",
|
"perfect-scrollbar": "1.0.3",
|
||||||
"ngx-perfect-scrollbar": "4.6.2",
|
"rxjs": "5.5.2",
|
||||||
"perfect-scrollbar": "0.8.1",
|
|
||||||
"rxjs": "5.4.3",
|
|
||||||
"web-animations-js": "2.3.1",
|
"web-animations-js": "2.3.1",
|
||||||
"zone.js": "0.8.17"
|
"zone.js": "0.8.18"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular/cli": "1.4.2",
|
"@angular/cli": "1.5.0",
|
||||||
"@angular/compiler-cli": "4.4.3",
|
"@angular/compiler-cli": "5.0.0",
|
||||||
"@angular/language-service": "4.4.3",
|
"@angular/language-service": "5.0.0",
|
||||||
"@angularclass/hmr": "2.1.3",
|
"@angularclass/hmr": "2.1.3",
|
||||||
"@ngtools/webpack": "1.7.1",
|
"@types/jasmine": "2.5.54",
|
||||||
"@types/jasmine": "2.6.0",
|
"@types/jasminewd2": "2.0.3",
|
||||||
"@types/jasminewd2": "2.0.2",
|
"@types/node": "6.0.90",
|
||||||
"@types/node": "6.0.88",
|
"codelyzer": "3.2.2",
|
||||||
"codelyzer": "3.0.1",
|
"jasmine-core": "2.6.4",
|
||||||
"jasmine-core": "2.6.2",
|
"jasmine-spec-reporter": "4.1.1",
|
||||||
"jasmine-spec-reporter": "4.1.0",
|
|
||||||
"karma": "1.7.1",
|
"karma": "1.7.1",
|
||||||
"karma-chrome-launcher": "2.1.1",
|
"karma-chrome-launcher": "2.1.1",
|
||||||
"karma-cli": "1.0.1",
|
"karma-cli": "1.0.1",
|
||||||
"karma-coverage-istanbul-reporter": "1.2.1",
|
"karma-coverage-istanbul-reporter": "1.3.0",
|
||||||
"karma-jasmine": "1.1.0",
|
"karma-jasmine": "1.1.0",
|
||||||
"karma-jasmine-html-reporter": "0.2.2",
|
"karma-jasmine-html-reporter": "0.2.2",
|
||||||
"node-sass": "4.5.3",
|
|
||||||
"protractor": "5.1.2",
|
"protractor": "5.1.2",
|
||||||
"ts-node": "3.0.4",
|
"ts-node": "3.2.2",
|
||||||
"tslint": "5.3.2",
|
"tslint": "5.7.0",
|
||||||
"typescript": "2.3.3"
|
"typescript": "2.4.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,25 +4,25 @@
|
|||||||
const { SpecReporter } = require('jasmine-spec-reporter');
|
const { SpecReporter } = require('jasmine-spec-reporter');
|
||||||
|
|
||||||
exports.config = {
|
exports.config = {
|
||||||
allScriptsTimeout: 11000,
|
allScriptsTimeout: 11000,
|
||||||
specs: [
|
specs: [
|
||||||
'./e2e/**/*.e2e-spec.ts'
|
'./e2e/**/*.e2e-spec.ts'
|
||||||
],
|
],
|
||||||
capabilities: {
|
capabilities: {
|
||||||
'browserName': 'chrome'
|
'browserName': 'chrome'
|
||||||
},
|
},
|
||||||
directConnect: true,
|
directConnect: true,
|
||||||
baseUrl: 'http://localhost:4200/',
|
baseUrl: 'http://localhost:4200/',
|
||||||
framework: 'jasmine',
|
framework: 'jasmine',
|
||||||
jasmineNodeOpts: {
|
jasmineNodeOpts: {
|
||||||
showColors: true,
|
showColors: true,
|
||||||
defaultTimeoutInterval: 30000,
|
defaultTimeoutInterval: 30000,
|
||||||
print: function() {}
|
print: function() {}
|
||||||
},
|
},
|
||||||
onPrepare() {
|
onPrepare() {
|
||||||
require('ts-node').register({
|
require('ts-node').register({
|
||||||
project: 'e2e/tsconfig.e2e.json'
|
project: 'e2e/tsconfig.e2e.json'
|
||||||
});
|
});
|
||||||
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
|
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { FuseSplashScreenService } from './core/services/splash-screen.service';
|
import { FuseSplashScreenService } from './core/services/splash-screen.service';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector : 'fuse-root',
|
selector : 'fuse-root',
|
||||||
@@ -8,7 +9,18 @@ import { FuseSplashScreenService } from './core/services/splash-screen.service';
|
|||||||
})
|
})
|
||||||
export class AppComponent
|
export class AppComponent
|
||||||
{
|
{
|
||||||
constructor(private fuseSplashScreen: FuseSplashScreenService)
|
constructor(
|
||||||
|
private fuseSplashScreen: FuseSplashScreenService,
|
||||||
|
private translate: TranslateService
|
||||||
|
)
|
||||||
{
|
{
|
||||||
|
// Add languages
|
||||||
|
this.translate.addLangs(['en', 'tr']);
|
||||||
|
|
||||||
|
// Set the default language
|
||||||
|
this.translate.setDefaultLang('en');
|
||||||
|
|
||||||
|
// Use a language
|
||||||
|
this.translate.use('en');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ import { FuseConfigService } from './core/services/config.service';
|
|||||||
import { FuseNavigationService } from './core/components/navigation/navigation.service';
|
import { FuseNavigationService } from './core/components/navigation/navigation.service';
|
||||||
import { ComponentsThirdPartyModule } from './main/content/components-third-party/components-third-party.module';
|
import { ComponentsThirdPartyModule } from './main/content/components-third-party/components-third-party.module';
|
||||||
import { ServicesModule } from './main/content/services/services.module';
|
import { ServicesModule } from './main/content/services/services.module';
|
||||||
|
import { FuseAngularMaterialModule } from './main/content/components/angular-material/angular-material.module';
|
||||||
|
import { MarkdownModule } from 'angular2-markdown';
|
||||||
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
|
|
||||||
const appRoutes: Routes = [
|
const appRoutes: Routes = [
|
||||||
{
|
{
|
||||||
@@ -33,6 +36,10 @@ const appRoutes: Routes = [
|
|||||||
path : 'apps/calendar',
|
path : 'apps/calendar',
|
||||||
loadChildren: './main/content/apps/calendar/calendar.module#FuseCalendarModule'
|
loadChildren: './main/content/apps/calendar/calendar.module#FuseCalendarModule'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path : 'apps/e-commerce',
|
||||||
|
loadChildren: './main/content/apps/e-commerce/e-commerce.module#FuseEcommerceModule'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path : 'apps/todo',
|
path : 'apps/todo',
|
||||||
loadChildren: './main/content/apps/todo/todo.module#FuseTodoModule'
|
loadChildren: './main/content/apps/todo/todo.module#FuseTodoModule'
|
||||||
@@ -66,8 +73,13 @@ const appRoutes: Routes = [
|
|||||||
BrowserAnimationsModule,
|
BrowserAnimationsModule,
|
||||||
RouterModule.forRoot(appRoutes),
|
RouterModule.forRoot(appRoutes),
|
||||||
SharedModule,
|
SharedModule,
|
||||||
|
MarkdownModule.forRoot(),
|
||||||
|
TranslateModule.forRoot(),
|
||||||
|
|
||||||
InMemoryWebApiModule.forRoot(FuseFakeDbService, {delay: 0}),
|
InMemoryWebApiModule.forRoot(FuseFakeDbService, {
|
||||||
|
delay : 0,
|
||||||
|
passThruUnknownUrl: true
|
||||||
|
}),
|
||||||
|
|
||||||
FuseMainModule,
|
FuseMainModule,
|
||||||
|
|
||||||
@@ -77,6 +89,7 @@ const appRoutes: Routes = [
|
|||||||
UIModule,
|
UIModule,
|
||||||
ServicesModule,
|
ServicesModule,
|
||||||
ComponentsModule,
|
ComponentsModule,
|
||||||
|
FuseAngularMaterialModule,
|
||||||
ComponentsThirdPartyModule
|
ComponentsThirdPartyModule
|
||||||
],
|
],
|
||||||
providers : [
|
providers : [
|
||||||
|
|||||||
@@ -33,21 +33,21 @@ export const fuseAnimations = [
|
|||||||
stagger('50ms', [
|
stagger('50ms', [
|
||||||
animateChild()
|
animateChild()
|
||||||
])
|
])
|
||||||
])),
|
], {optional: true})),
|
||||||
transition('void => 100',
|
transition('void => 100',
|
||||||
query('@*',
|
query('@*',
|
||||||
[
|
[
|
||||||
stagger('100ms', [
|
stagger('100ms', [
|
||||||
animateChild()
|
animateChild()
|
||||||
])
|
])
|
||||||
])),
|
], {optional: true})),
|
||||||
transition('void => 200',
|
transition('void => 200',
|
||||||
query('@*',
|
query('@*',
|
||||||
[
|
[
|
||||||
stagger('200ms', [
|
stagger('200ms', [
|
||||||
animateChild()
|
animateChild()
|
||||||
])
|
])
|
||||||
]))
|
], {optional: true}))
|
||||||
]),
|
]),
|
||||||
|
|
||||||
trigger('fadeInOut', [
|
trigger('fadeInOut', [
|
||||||
@@ -129,6 +129,17 @@ export const fuseAnimations = [
|
|||||||
transition('* => void', animate('300ms'))
|
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', [
|
trigger('routerTransitionLeft', [
|
||||||
|
|
||||||
transition('* => *', [
|
transition('* => *', [
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<h1 md-dialog-title>Confirm</h1>
|
<h1 matDialogTitle>Confirm</h1>
|
||||||
<div md-dialog-content>{{confirmMessage}}</div>
|
<div mat-dialog-content>{{confirmMessage}}</div>
|
||||||
<div md-dialog-actions class="pt-24">
|
<div mat-dialog-actions class="pt-24">
|
||||||
<button md-raised-button class="mat-accent mr-16" (click)="dialogRef.close(true)">Confirm</button>
|
<button mat-raised-button class="mat-accent mr-16" (click)="dialogRef.close(true)">Confirm</button>
|
||||||
<button md-button (click)="dialogRef.close(false)">Cancel</button>
|
<button mat-button (click)="dialogRef.close(false)">Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { MdDialogRef } from '@angular/material';
|
import { MatDialogRef } from '@angular/material';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector : 'fuse-confirm-dialog',
|
selector : 'fuse-confirm-dialog',
|
||||||
@@ -10,7 +10,7 @@ export class FuseConfirmDialogComponent implements OnInit
|
|||||||
{
|
{
|
||||||
public confirmMessage: string;
|
public confirmMessage: string;
|
||||||
|
|
||||||
constructor(public dialogRef: MdDialogRef<FuseConfirmDialogComponent>)
|
constructor(public dialogRef: MatDialogRef<FuseConfirmDialogComponent>)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
65
src/app/core/components/copier/copier.service.ts
Normal file
65
src/app/core/components/copier/copier.service.ts
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/**
|
||||||
|
* 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Component, Input, OnInit } from '@angular/core';
|
import { Component, Input, OnInit } from '@angular/core';
|
||||||
import * as moment from 'moment';
|
import * as moment from 'moment';
|
||||||
import { Observable } from 'rxjs/Rx';
|
import { Observable } from 'rxjs/Observable';
|
||||||
|
import 'rxjs/add/observable/interval';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector : 'fuse-countdown',
|
selector : 'fuse-countdown',
|
||||||
|
|||||||
@@ -1,100 +1,100 @@
|
|||||||
<div class="demo-sidenav">
|
<div class="demo-sidenav">
|
||||||
<md-list>
|
<mat-list>
|
||||||
<h3 md-subheader>Sidenav Demo</h3>
|
<h3 matSubheader>Sidenav Demo</h3>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 1</span>
|
<span>Sidenav Item 1</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 2</span>
|
<span>Sidenav Item 2</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 3</span>
|
<span>Sidenav Item 3</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 4</span>
|
<span>Sidenav Item 4</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 5</span>
|
<span>Sidenav Item 5</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 6</span>
|
<span>Sidenav Item 6</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 7</span>
|
<span>Sidenav Item 7</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 8</span>
|
<span>Sidenav Item 8</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 9</span>
|
<span>Sidenav Item 9</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 10</span>
|
<span>Sidenav Item 10</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 11</span>
|
<span>Sidenav Item 11</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 12</span>
|
<span>Sidenav Item 12</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 13</span>
|
<span>Sidenav Item 13</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 14</span>
|
<span>Sidenav Item 14</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 15</span>
|
<span>Sidenav Item 15</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<md-list-item>
|
<mat-list-item>
|
||||||
<span>Sidenav Item 16</span>
|
<span>Sidenav Item 16</span>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
</md-list>
|
</mat-list>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,23 +1,23 @@
|
|||||||
<button md-icon-button
|
<button mat-icon-button
|
||||||
type="button"
|
type="button"
|
||||||
class="mat-elevation-z1"
|
class="mat-elevation-z1"
|
||||||
[mdMenuTriggerFor]="colorMenu"
|
[matMenuTriggerFor]="colorMenu"
|
||||||
(onMenuOpen)="onMenuOpen()"
|
(onMenuOpen)="onMenuOpen()"
|
||||||
[ngClass]="'md-'+selectedPalette+'-'+selectedHue+'-bg'">
|
[ngClass]="'mat-'+selectedPalette+'-'+selectedHue+'-bg'">
|
||||||
<md-icon>palette</md-icon>
|
<mat-icon>palette</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<md-menu #colorMenu="mdMenu" class="fuse-material-color-picker-menu">
|
<mat-menu #colorMenu="matMenu" class="fuse-material-color-picker-menu">
|
||||||
|
|
||||||
<header [ngClass]="selectedColor?.class || 'md-accent-bg'"
|
<header [ngClass]="selectedColor?.class || 'mat-accent-bg'"
|
||||||
class="mat-elevation-z4"
|
class="mat-elevation-z4"
|
||||||
fxLayout="row"
|
fxLayout="row"
|
||||||
fxLayoutAlign="space-between center">
|
fxLayoutAlign="space-between center">
|
||||||
|
|
||||||
<button md-icon-button
|
<button mat-icon-button
|
||||||
[style.visibility]="view==='hues'?'visible':'hidden'"
|
[style.visibility]="view==='hues'?'visible':'hidden'"
|
||||||
(click)="$event.stopPropagation();backToPaletteSelection()" aria-label="Palette">
|
(click)="$event.stopPropagation();backToPaletteSelection()" aria-label="Palette">
|
||||||
<md-icon class="s-20">arrow_back</md-icon>
|
<mat-icon class="s-20">arrow_back</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<span *ngIf="selectedColor?.palette">
|
<span *ngIf="selectedColor?.palette">
|
||||||
@@ -28,11 +28,11 @@
|
|||||||
Select Color
|
Select Color
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<button md-icon-button
|
<button mat-icon-button
|
||||||
class="remove-color-button"
|
class="remove-color-button"
|
||||||
(click)="removeColor()"
|
(click)="removeColor()"
|
||||||
aria-label="Remove Color">
|
aria-label="Remove Color">
|
||||||
<md-icon class="s-20">delete</md-icon>
|
<mat-icon class="s-20">delete</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
@@ -47,10 +47,10 @@
|
|||||||
fxLayoutAlign="start start"
|
fxLayoutAlign="start start"
|
||||||
class="colors" fusePerfectScrollbar>
|
class="colors" fusePerfectScrollbar>
|
||||||
<div class="color"
|
<div class="color"
|
||||||
[ngClass]="'md-'+color.key+'-bg'"
|
[ngClass]="'mat-'+color.key+'-bg'"
|
||||||
*ngFor="let color of (colors | keys)"
|
*ngFor="let color of (colors | keys)"
|
||||||
(click)="$event.stopPropagation();selectPalette(color.key)"
|
(click)="$event.stopPropagation();selectPalette(color.key)"
|
||||||
fxLayout="row" fxLayoutAlign="start end" md-ink-ripple>
|
fxLayout="row" fxLayoutAlign="start end" mat-ink-ripple>
|
||||||
<span class="label">
|
<span class="label">
|
||||||
{{color.key}}
|
{{color.key}}
|
||||||
</span>
|
</span>
|
||||||
@@ -67,16 +67,16 @@
|
|||||||
<div class="color"
|
<div class="color"
|
||||||
*ngFor="let hue of hues"
|
*ngFor="let hue of hues"
|
||||||
[fxHide]="selectedPalette === 'white' && hue !== '500'|| selectedPalette === 'black' && hue !== '500'"
|
[fxHide]="selectedPalette === 'white' && hue !== '500'|| selectedPalette === 'black' && hue !== '500'"
|
||||||
[ngClass]="'md-'+selectedPalette+'-'+hue+'-bg'"
|
[ngClass]="'mat-'+selectedPalette+'-'+hue+'-bg'"
|
||||||
(click)="selectHue(hue)"
|
(click)="selectHue(hue)"
|
||||||
fxLayout="row" fxLayoutAlign="start end" md-ink-ripple>
|
fxLayout="row" fxLayoutAlign="start end" mat-ink-ripple>
|
||||||
<span class="label">
|
<span class="label">
|
||||||
{{hue}}
|
{{hue}}
|
||||||
</span>
|
</span>
|
||||||
<md-icon *ngIf="selectedHue === hue" class="s-16">check</md-icon>
|
<mat-icon *ngIf="selectedHue === hue" class="s-16">check</mat-icon>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</md-menu>
|
</mat-menu>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
min-height: 258px;
|
min-height: 258px;
|
||||||
height: 308px;
|
height: 308px;
|
||||||
background-color: #f7f7f7;
|
background-color: #F7F7F7;
|
||||||
|
|
||||||
.view {
|
.view {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
md-icon {
|
mat-icon {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 2px;
|
top: 2px;
|
||||||
right: 2px;
|
right: 2px;
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ export class FuseMaterialColorPickerComponent implements OnInit, OnChanges
|
|||||||
{
|
{
|
||||||
this.selectedBg = MatColors.getColor(this.selectedPalette)[this.selectedHue];
|
this.selectedBg = MatColors.getColor(this.selectedPalette)[this.selectedHue];
|
||||||
this.selectedFg = MatColors.getColor(this.selectedPalette).contrast[this.selectedHue];
|
this.selectedFg = MatColors.getColor(this.selectedPalette).contrast[this.selectedHue];
|
||||||
this.selectedClass = 'md-' + this.selectedPalette + '-' + this.selectedHue + '-bg';
|
this.selectedClass = 'mat-' + this.selectedPalette + '-' + this.selectedHue + '-bg';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<a class="nav-link" md-ripple>
|
<a class="nav-link" matRipple>
|
||||||
<md-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</md-icon>
|
<mat-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</mat-icon>
|
||||||
<span class="nav-link-title">{{item.title}}</span>
|
<span class="nav-link-title">{{item.title}}</span>
|
||||||
<md-icon class="collapse-arrow">keyboard_arrow_right</md-icon>
|
<mat-icon class="collapse-arrow">keyboard_arrow_right</mat-icon>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<div class="children" [ngClass]="{'open': isOpen}">
|
<div class="children" [ngClass]="{'open': isOpen}">
|
||||||
@@ -11,6 +11,7 @@
|
|||||||
<ng-container *ngFor="let item of item.children">
|
<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-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=='collapse'" [item]="item"></fuse-nav-horizontal-collapse>
|
||||||
|
<fuse-nav-horizontal-collapse *ngIf="item.type=='group'" [item]="item"></fuse-nav-horizontal-collapse>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,18 @@
|
|||||||
<a class="nav-link" md-ripple
|
<a class="nav-link" *ngIf="item.url" [routerLink]="[item.url]" routerLinkActive="active"
|
||||||
[routerLink]="[item.url]" routerLinkActive="active">
|
[routerLinkActiveOptions]="{exact: item.exactMatch || false}" matRipple>
|
||||||
<md-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</md-icon>
|
<mat-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</mat-icon>
|
||||||
<span class="nav-link-title">{{item.title}}</span>
|
<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>
|
<span class="nav-link-badge" *ngIf="item.badge"
|
||||||
|
[ngStyle]="{'background-color': item.badge.bg,'color': item.badge.fg}">
|
||||||
|
{{item.badge.title}}
|
||||||
|
</span>
|
||||||
</a>
|
</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">{{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>
|
||||||
|
</span>
|
||||||
@@ -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=='group'" [item]="item"></fuse-nav-horizontal-collapse>
|
||||||
<fuse-nav-horizontal-collapse *ngIf="item.type=='collapse'" [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=='nav-item'" [item]="item"></fuse-nav-horizontal-item>
|
<fuse-nav-horizontal-item *ngIf="item.type=='item'" [item]="item"></fuse-nav-horizontal-item>
|
||||||
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ export class FuseNavigationComponent implements OnDestroy
|
|||||||
|
|
||||||
ngOnDestroy()
|
ngOnDestroy()
|
||||||
{
|
{
|
||||||
console.warn('destroyed');
|
|
||||||
this.navigationModelChangeSubscription.unsubscribe();
|
this.navigationModelChangeSubscription.unsubscribe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { BehaviorSubject } from 'rxjs/BehaviorSubject';
|
|||||||
@Injectable()
|
@Injectable()
|
||||||
export class FuseNavigationService
|
export class FuseNavigationService
|
||||||
{
|
{
|
||||||
|
onNavCollapseToggle = new EventEmitter<any>();
|
||||||
onNavCollapseToggled = new EventEmitter<any>();
|
onNavCollapseToggled = new EventEmitter<any>();
|
||||||
onNavigationModelChange: BehaviorSubject<any> = new BehaviorSubject({});
|
onNavigationModelChange: BehaviorSubject<any> = new BehaviorSubject({});
|
||||||
navigationModel: NavigationModel;
|
navigationModel: NavigationModel;
|
||||||
@@ -18,6 +19,7 @@ export class FuseNavigationService
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get navigation model
|
* Get navigation model
|
||||||
|
*
|
||||||
* @returns {any[]}
|
* @returns {any[]}
|
||||||
*/
|
*/
|
||||||
getNavigationModel()
|
getNavigationModel()
|
||||||
@@ -27,19 +29,125 @@ export class FuseNavigationService
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the navigation model
|
* Set the navigation model
|
||||||
|
*
|
||||||
* @param model
|
* @param model
|
||||||
*/
|
*/
|
||||||
setNavigationModel(model)
|
setNavigationModel(model)
|
||||||
{
|
{
|
||||||
// console.log(model);
|
|
||||||
|
|
||||||
this.navigationModel = model;
|
this.navigationModel = model;
|
||||||
|
|
||||||
console.log(this.navigationModel);
|
|
||||||
|
|
||||||
this.onNavigationModelChange.next(this.navigationModel.model);
|
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
|
* Get flattened navigation array
|
||||||
* @param navigationItems
|
* @param navigationItems
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
<a class="nav-link" md-ripple (click)="toggleOpen($event)">
|
<a class="nav-link" matRipple (click)="toggleOpen($event)">
|
||||||
<md-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</md-icon>
|
<mat-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</mat-icon>
|
||||||
<span class="nav-link-title">{{item.title}}</span>
|
<span class="nav-link-title">{{item.title}}</span>
|
||||||
<md-icon class="collapse-arrow">keyboard_arrow_right</md-icon>
|
<mat-icon class="collapse-arrow">keyboard_arrow_right</mat-icon>
|
||||||
</a>
|
</a>
|
||||||
<div class="children" [@slideInOut]="isOpen">
|
<div class="children" [@slideInOut]="isOpen">
|
||||||
<ng-container *ngFor="let item of item.children">
|
<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-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-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>
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ export class FuseNavVerticalCollapseComponent implements OnInit
|
|||||||
this.navigationService.onNavCollapseToggled
|
this.navigationService.onNavCollapseToggled
|
||||||
.subscribe(
|
.subscribe(
|
||||||
(clickedItem) => {
|
(clickedItem) => {
|
||||||
if ( clickedItem.children )
|
if ( clickedItem && clickedItem.children )
|
||||||
{
|
{
|
||||||
// Check if the clicked item is one
|
// Check if the clicked item is one
|
||||||
// of the children of this item
|
// of the children of this item
|
||||||
@@ -82,6 +82,7 @@ export class FuseNavVerticalCollapseComponent implements OnInit
|
|||||||
|
|
||||||
// Navigation collapse toggled...
|
// Navigation collapse toggled...
|
||||||
this.navigationService.onNavCollapseToggled.emit(this.item);
|
this.navigationService.onNavCollapseToggled.emit(this.item);
|
||||||
|
this.navigationService.onNavCollapseToggle.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -95,6 +96,7 @@ export class FuseNavVerticalCollapseComponent implements OnInit
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.isOpen = true;
|
this.isOpen = true;
|
||||||
|
this.navigationService.onNavCollapseToggle.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -107,6 +109,7 @@ export class FuseNavVerticalCollapseComponent implements OnInit
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.isOpen = false;
|
this.isOpen = false;
|
||||||
|
this.navigationService.onNavCollapseToggle.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -163,7 +166,7 @@ export class FuseNavVerticalCollapseComponent implements OnInit
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( parent.children[i].url === url )
|
if ( parent.children[i].url === url || url.includes(parent.children[i].url) )
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { Component, HostBinding, Input, OnInit } from '@angular/core';
|
|||||||
})
|
})
|
||||||
export class FuseNavVerticalGroupComponent implements OnInit
|
export class FuseNavVerticalGroupComponent implements OnInit
|
||||||
{
|
{
|
||||||
@HostBinding('class') classes = 'nav-group';
|
@HostBinding('class') classes = 'nav-group nav-item';
|
||||||
@Input() item: any;
|
@Input() item: any;
|
||||||
|
|
||||||
constructor()
|
constructor()
|
||||||
|
|||||||
@@ -1,6 +1,18 @@
|
|||||||
<a class="nav-link" md-ripple
|
<a class="nav-link" *ngIf="item.url" [routerLink]="[item.url]" routerLinkActive="active"
|
||||||
[routerLink]="[item.url]" routerLinkActive="active">
|
[routerLinkActiveOptions]="{exact: item.exactMatch || false}" matRipple>
|
||||||
<md-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</md-icon>
|
<mat-icon class="nav-link-icon" *ngIf="item.icon">{{item.icon}}</mat-icon>
|
||||||
<span class="nav-link-title">{{item.title}}</span>
|
<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>
|
<span class="nav-link-badge" *ngIf="item.badge"
|
||||||
|
[ngStyle]="{'background-color': item.badge.bg,'color': item.badge.fg}">
|
||||||
|
{{item.badge.title}}
|
||||||
|
</span>
|
||||||
</a>
|
</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">{{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>
|
||||||
|
</span>
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
<div class="fuse-search-bar" [ngClass]="{'expanded':!collapsed}" fxFlex="0 1 auto">
|
<div class="fuse-search-bar" [ngClass]="{'expanded':!collapsed}" fxFlex="0 1 auto">
|
||||||
<div [ngClass]="toolbarColor" fxLayout="row" fxLayoutAlign="start center" fxFlex>
|
<div [ngClass]="toolbarColor" fxLayout="row" fxLayoutAlign="start center" fxFlex>
|
||||||
<label for="fuse-search-bar-input">
|
<label for="fuse-search-bar-input">
|
||||||
<button md-icon-button class="fuse-search-bar-expander" aria-label="Expand Search Bar" (click)="expand()"
|
<button mat-icon-button class="fuse-search-bar-expander" aria-label="Expand Search Bar" (click)="expand()"
|
||||||
*ngIf="collapsed">
|
*ngIf="collapsed">
|
||||||
<md-icon class="s-24">search</md-icon>
|
<mat-icon class="s-24">search</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<!--<span class="fuse-search-bar-loader" fxLayout="row" fxLayoutAlign="center center" *ngIf="!collapsed">
|
<!--<span class="fuse-search-bar-loader" fxLayout="row" fxLayoutAlign="center center" *ngIf="!collapsed">
|
||||||
<md-progress-spinner color="md-accent" mode="indeterminate"></md-progress-spinner>
|
<mat-progress-spinner color="mat-accent" mode="indeterminate"></mat-progress-spinner>
|
||||||
</span>-->
|
</span>-->
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<input id="fuse-search-bar-input" class="ml-24" type="text" placeholder="Search" (input)="search($event)" fxFlex>
|
<input id="fuse-search-bar-input" class="ml-24" type="text" placeholder="Search" (input)="search($event)" fxFlex>
|
||||||
|
|
||||||
<button md-icon-button class="fuse-search-bar-collapser md-icon-button" (click)="collapse()"
|
<button mat-icon-button class="fuse-search-bar-collapser mat-icon-button" (click)="collapse()"
|
||||||
aria-label="Collapse Search Bar">
|
aria-label="Collapse Search Bar">
|
||||||
<md-icon class="s-24">close</md-icon>
|
<mat-icon class="s-24">close</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
<div class="shortcuts-mobile-toggle" *ngIf="!mobileShortcutsPanelActive" fxLayout="row" fxLayoutAlign="start center"
|
<div class="shortcuts-mobile-toggle" *ngIf="!mobileShortcutsPanelActive" fxLayout="row" fxLayoutAlign="start center"
|
||||||
fxHide fxShow.lt-md>
|
fxHide fxShow.lt-md>
|
||||||
<button md-icon-button (click)="showMobileShortcutsPanel()">
|
<button mat-icon-button (click)="showMobileShortcutsPanel()">
|
||||||
<md-icon class="amber-600-fg">star</md-icon>
|
<mat-icon class="amber-600-fg">star</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -16,8 +16,8 @@
|
|||||||
<div class="w-40 h-40 p-4" fxLayout="row" fxLayoutAlign="center center"
|
<div class="w-40 h-40 p-4" fxLayout="row" fxLayoutAlign="center center"
|
||||||
*ngFor="let shortcutItem of shortcutItems">
|
*ngFor="let shortcutItem of shortcutItems">
|
||||||
|
|
||||||
<a md-icon-button mdTooltip="{{shortcutItem.title}}" [routerLink]="shortcutItem.url">
|
<a mat-icon-button matTooltip="{{shortcutItem.title}}" [routerLink]="shortcutItem.url">
|
||||||
<md-icon *ngIf="shortcutItem.icon">{{shortcutItem.icon}}</md-icon>
|
<mat-icon *ngIf="shortcutItem.icon">{{shortcutItem.icon}}</mat-icon>
|
||||||
<span *ngIf="!shortcutItem.icon" class="h2 secondary-text text-bold">
|
<span *ngIf="!shortcutItem.icon" class="h2 secondary-text text-bold">
|
||||||
{{shortcutItem.title.substr(0, 1).toUpperCase()}}
|
{{shortcutItem.title.substr(0, 1).toUpperCase()}}
|
||||||
</span>
|
</span>
|
||||||
@@ -25,64 +25,64 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button md-icon-button [mdMenuTriggerFor]="addMenu" md-tooltip="Click to add/remove shortcut"
|
<button mat-icon-button [matMenuTriggerFor]="addMenu" matTooltip="Click to add/remove shortcut"
|
||||||
(onMenuOpen)="onMenuOpen()">
|
(onMenuOpen)="onMenuOpen()">
|
||||||
<md-icon class="amber-600-fg">star</md-icon>
|
<mat-icon class="amber-600-fg">star</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="shortcuts-mobile-close" fxLayout="row" fxLayoutAlign="start center" fxHide fxShow.lt-md>
|
<div class="shortcuts-mobile-close" fxLayout="row" fxLayoutAlign="start center" fxHide fxShow.lt-md>
|
||||||
<button md-icon-button (click)="hideMobileShortcutsPanel()">
|
<button mat-icon-button (click)="hideMobileShortcutsPanel()">
|
||||||
<md-icon>close</md-icon>
|
<mat-icon>close</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<md-menu #addMenu="mdMenu" class="w-240">
|
<mat-menu #addMenu="matMenu" class="w-240">
|
||||||
|
|
||||||
<md-input-container class="px-16 w-100-p" (click)="$event.stopPropagation()" floatPlaceholder="never">
|
<mat-form-field 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)">
|
<input #searchInput matInput placeholder="Search for an app or a page" (input)="search($event)">
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
<md-nav-list *ngIf="!searching" style="max-height: 312px; overflow: auto" fusePerfectScrollbar>
|
<mat-nav-list *ngIf="!searching" style="max-height: 312px; overflow: auto" fusePerfectScrollbar>
|
||||||
|
|
||||||
<md-list-item *ngFor="let shortcutItem of shortcutItems"
|
<mat-list-item *ngFor="let shortcutItem of shortcutItems"
|
||||||
(click)="toggleShortcut($event, shortcutItem)">
|
(click)="toggleShortcut($event, shortcutItem)">
|
||||||
<div class="w-100-p" fxLayout="row" fxLayoutAlign="start center">
|
<div class="w-100-p" fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon md-list-icon class="mr-8" *ngIf="shortcutItem.icon">{{shortcutItem.icon}}</md-icon>
|
<mat-icon mat-list-icon class="mr-8" *ngIf="shortcutItem.icon">{{shortcutItem.icon}}</mat-icon>
|
||||||
<span class="h2 w-32 h-32 p-4 mr-8 secondary-text text-bold" fxLayout="row"
|
<span class="h2 w-32 h-32 p-4 mr-8 secondary-text text-bold" fxLayout="row"
|
||||||
fxLayoutAlign="center center" *ngIf="!shortcutItem.icon">
|
fxLayoutAlign="center center" *ngIf="!shortcutItem.icon">
|
||||||
{{shortcutItem.title.substr(0, 1).toUpperCase()}}
|
{{shortcutItem.title.substr(0, 1).toUpperCase()}}
|
||||||
</span>
|
</span>
|
||||||
<p md-line fxFlex>{{shortcutItem.title}}</p>
|
<p matLine fxFlex>{{shortcutItem.title}}</p>
|
||||||
<md-icon class="ml-8">star</md-icon>
|
<mat-icon class="ml-8">star</mat-icon>
|
||||||
</div>
|
</div>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
<md-list-item *ngIf="shortcutItems.length === 0">
|
<mat-list-item *ngIf="shortcutItems.length === 0">
|
||||||
<p>
|
<p>
|
||||||
<small>No shortcuts yet!</small>
|
<small>No shortcuts yet!</small>
|
||||||
</p>
|
</p>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
</md-nav-list>
|
</mat-nav-list>
|
||||||
|
|
||||||
<md-nav-list *ngIf="searching" style="max-height: 312px; overflow: auto" fusePerfectScrollbar>
|
<mat-nav-list *ngIf="searching" style="max-height: 312px; overflow: auto" fusePerfectScrollbar>
|
||||||
<md-list-item *ngFor="let navigationItem of filteredNavigationItems"
|
<mat-list-item *ngFor="let navigationItem of filteredNavigationItems"
|
||||||
(click)="toggleShortcut($event, navigationItem)">
|
(click)="toggleShortcut($event, navigationItem)">
|
||||||
<div class="w-100-p" fxLayout="row" fxLayoutAlign="start center">
|
<div class="w-100-p" fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon md-list-icon class="mr-8" *ngIf="navigationItem.icon">{{navigationItem.icon}}</md-icon>
|
<mat-icon mat-list-icon class="mr-8" *ngIf="navigationItem.icon">{{navigationItem.icon}}</mat-icon>
|
||||||
<span class="h2 w-32 h-32 p-4 mr-8 secondary-text text-bold" fxLayout="row"
|
<span class="h2 w-32 h-32 p-4 mr-8 secondary-text text-bold" fxLayout="row"
|
||||||
fxLayoutAlign="center center" *ngIf="!navigationItem.icon">
|
fxLayoutAlign="center center" *ngIf="!navigationItem.icon">
|
||||||
{{navigationItem.title.substr(0, 1).toUpperCase()}}
|
{{navigationItem.title.substr(0, 1).toUpperCase()}}
|
||||||
</span>
|
</span>
|
||||||
<p md-line fxFlex>{{navigationItem.title}}</p>
|
<p matLine fxFlex>{{navigationItem.title}}</p>
|
||||||
<md-icon class="ml-8" *ngIf="isInShortcuts(navigationItem)">star</md-icon>
|
<mat-icon class="ml-8" *ngIf="isInShortcuts(navigationItem)">star</mat-icon>
|
||||||
</div>
|
</div>
|
||||||
</md-list-item>
|
</mat-list-item>
|
||||||
</md-nav-list>
|
</mat-nav-list>
|
||||||
</md-menu>
|
</mat-menu>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,50 +1,56 @@
|
|||||||
<button #openButton md-icon-button class="open-button md-primary-bg mat-elevation-z2" (click)="openBar()">
|
<button #openButton mat-icon-button class="open-button mat-primary-bg mat-elevation-z2" (click)="openBar()">
|
||||||
<md-icon>settings</md-icon>
|
<mat-icon>settings</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div class="theme-options-panel-overlay" #overlay [fxHide]="barClosed" [@fadeInOut]="!barClosed"></div>
|
<div class="theme-options-panel-overlay" #overlay [fxHide]="barClosed" [@fadeInOut]="!barClosed"></div>
|
||||||
|
|
||||||
<div #panel class="theme-options-panel md-white-bg mat-elevation-z8">
|
<div #panel class="theme-options-panel mat-white-bg mat-elevation-z8">
|
||||||
|
|
||||||
<button md-icon-button class="close-button" (click)="closeBar()">
|
<button mat-icon-button class="close-button" (click)="closeBar()">
|
||||||
<md-icon>close</md-icon>
|
<mat-icon>close</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div class="theme-options-panel-inner" fxLayout="column" fxLayoutAlign="start start">
|
<div class="theme-options-panel-inner" fxLayout="column" fxLayoutAlign="start start">
|
||||||
|
|
||||||
<h3>Navigation:</h3>
|
<h3>Navigation:</h3>
|
||||||
<md-radio-group [(ngModel)]="fuseSettings.layout.navigation" (ngModelChange)="onSettingsChange()"
|
<mat-radio-group [(ngModel)]="fuseSettings.layout.navigation" (ngModelChange)="onSettingsChange()"
|
||||||
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
|
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
|
||||||
<md-radio-button class="mr-8 mb-8" value="top">Top</md-radio-button>
|
<mat-radio-button class="mr-8 mb-8" value="top">Top</mat-radio-button>
|
||||||
<md-radio-button class="mr-8 mb-8" value="left">Left</md-radio-button>
|
<mat-radio-button class="mr-8 mb-8" value="left">Left</mat-radio-button>
|
||||||
<md-radio-button class="mr-8 mb-8" value="right">Right</md-radio-button>
|
<mat-radio-button class="mr-8 mb-8" value="right">Right</mat-radio-button>
|
||||||
<md-radio-button class="mr-8 mb-8" value="none">None</md-radio-button>
|
<mat-radio-button class="mr-8 mb-8" value="none">None</mat-radio-button>
|
||||||
</md-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
|
<h3>Navigation Fold (for vertical navigation):</h3>
|
||||||
|
<mat-slide-toggle [(ngModel)]="fuseSettings.layout.navigationFolded"
|
||||||
|
(change)="onSettingsChange()">
|
||||||
|
Folded
|
||||||
|
</mat-slide-toggle>
|
||||||
|
|
||||||
<h3 class="mt-24">Toolbar:</h3>
|
<h3 class="mt-24">Toolbar:</h3>
|
||||||
<md-radio-group [(ngModel)]="fuseSettings.layout.toolbar" (ngModelChange)="onSettingsChange()"
|
<mat-radio-group [(ngModel)]="fuseSettings.layout.toolbar" (ngModelChange)="onSettingsChange()"
|
||||||
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
|
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
|
||||||
<md-radio-button class="mr-8 mb-8" value="below">Below</md-radio-button>
|
<mat-radio-button class="mr-8 mb-8" value="below">Below</mat-radio-button>
|
||||||
<md-radio-button class="mr-8 mb-8" value="above">Above</md-radio-button>
|
<mat-radio-button class="mr-8 mb-8" value="above">Above</mat-radio-button>
|
||||||
<md-radio-button class="mr-8 mb-8" value="none">None</md-radio-button>
|
<mat-radio-button class="mr-8 mb-8" value="none">None</mat-radio-button>
|
||||||
</md-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
<h3 class="mt-24">Footer:</h3>
|
<h3 class="mt-24">Footer:</h3>
|
||||||
<md-radio-group [(ngModel)]="fuseSettings.layout.footer" (ngModelChange)="onSettingsChange()"
|
<mat-radio-group [(ngModel)]="fuseSettings.layout.footer" (ngModelChange)="onSettingsChange()"
|
||||||
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
|
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
|
||||||
<md-radio-button class="mr-8 mb-8" value="below">Below</md-radio-button>
|
<mat-radio-button class="mr-8 mb-8" value="below">Below</mat-radio-button>
|
||||||
<md-radio-button class="mr-8 mb-8" value="above">Above</md-radio-button>
|
<mat-radio-button class="mr-8 mb-8" value="above">Above</mat-radio-button>
|
||||||
<md-radio-button class="mr-8 mb-8" value="none">None</md-radio-button>
|
<mat-radio-button class="mr-8 mb-8" value="none">None</mat-radio-button>
|
||||||
</md-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
<h3 class="mt-24">Layout Mode:</h3>
|
<h3 class="mt-24">Layout Mode:</h3>
|
||||||
<md-radio-group [(ngModel)]="fuseSettings.layout.mode" (ngModelChange)="onSettingsChange()"
|
<mat-radio-group [(ngModel)]="fuseSettings.layout.mode" (ngModelChange)="onSettingsChange()"
|
||||||
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
|
fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign="start start" fxLayoutWrap>
|
||||||
<md-radio-button class="mr-8 mb-8" value="boxed">Boxed</md-radio-button>
|
<mat-radio-button class="mr-8 mb-8" value="boxed">Boxed</mat-radio-button>
|
||||||
<md-radio-button class="mr-8 mb-8" value="fullwidth">Fullwidth</md-radio-button>
|
<mat-radio-button class="mr-8 mb-8" value="fullwidth">Fullwidth</mat-radio-button>
|
||||||
</md-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<h3>Colors:</h3>
|
<h3>Colors:</h3>
|
||||||
<div class="colors">
|
<div class="colors">
|
||||||
@@ -69,30 +75,31 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<h3>Router Animation:</h3>
|
<h3>Router Animation:</h3>
|
||||||
<md-select class="p-0" [(ngModel)]="fuseSettings.routerAnimation">
|
<mat-form-field class="w-100-p">
|
||||||
<md-option value="none">
|
<mat-select class="p-0" [(ngModel)]="fuseSettings.routerAnimation">
|
||||||
None
|
<mat-option value="none">
|
||||||
</md-option>
|
None
|
||||||
<md-option value="slideUp">
|
</mat-option>
|
||||||
Slide up
|
<mat-option value="slideUp">
|
||||||
</md-option>
|
Slide up
|
||||||
<md-option value="slideDown">
|
</mat-option>
|
||||||
Slide down
|
<mat-option value="slideDown">
|
||||||
</md-option>
|
Slide down
|
||||||
<md-option value="slideRight">
|
</mat-option>
|
||||||
Slide right
|
<mat-option value="slideRight">
|
||||||
</md-option>
|
Slide right
|
||||||
<md-option value="slideLeft">
|
</mat-option>
|
||||||
Slide left
|
<mat-option value="slideLeft">
|
||||||
</md-option>
|
Slide left
|
||||||
<md-option value="fadeIn">
|
</mat-option>
|
||||||
Fade in
|
<mat-option value="fadeIn">
|
||||||
</md-option>
|
Fade in
|
||||||
</md-select>
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
display: block;
|
display: block;
|
||||||
right: 0;
|
right: 0;
|
||||||
top: 160px;
|
top: 160px;
|
||||||
|
z-index: 998;
|
||||||
|
|
||||||
&.bar-closed .theme-options-panel {
|
&.bar-closed .theme-options-panel {
|
||||||
display: none;
|
display: none;
|
||||||
@@ -48,7 +49,7 @@
|
|||||||
color: rgba(0, 0, 0, 0.54);
|
color: rgba(0, 0, 0, 0.54);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-divider{
|
.mat-divider {
|
||||||
display: block !important;
|
display: block !important;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 24px 0 16px 0;
|
margin: 24px 0 16px 0;
|
||||||
@@ -102,7 +103,7 @@
|
|||||||
opacity: .75;
|
opacity: .75;
|
||||||
z-index: 998;
|
z-index: 998;
|
||||||
|
|
||||||
md-icon {
|
mat-icon {
|
||||||
animation: rotating 3s linear infinite;
|
animation: rotating 3s linear infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { style, animate, AnimationBuilder, AnimationPlayer } from '@angular/anim
|
|||||||
import { Subscription } from 'rxjs/Subscription';
|
import { Subscription } from 'rxjs/Subscription';
|
||||||
import { FuseConfigService } from '../../services/config.service';
|
import { FuseConfigService } from '../../services/config.service';
|
||||||
import { fuseAnimations } from '../../animations';
|
import { fuseAnimations } from '../../animations';
|
||||||
|
import { FuseNavigationService } from '../navigation/navigation.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector : 'fuse-theme-options',
|
selector : 'fuse-theme-options',
|
||||||
@@ -26,6 +27,7 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||||||
constructor(
|
constructor(
|
||||||
private animationBuilder: AnimationBuilder,
|
private animationBuilder: AnimationBuilder,
|
||||||
private fuseConfig: FuseConfigService,
|
private fuseConfig: FuseConfigService,
|
||||||
|
private navigationService: FuseNavigationService,
|
||||||
private renderer: Renderer2
|
private renderer: Renderer2
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -38,6 +40,27 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||||||
this.fuseSettings = newSettings;
|
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()
|
ngOnInit()
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export class FuseIfOnDomDirective implements AfterContentChecked
|
|||||||
{
|
{
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.viewContainer.createEmbeddedView(this.templateRef);
|
this.viewContainer.createEmbeddedView(this.templateRef);
|
||||||
}, 350);
|
}, 300);
|
||||||
this.isCreated = true;
|
this.isCreated = true;
|
||||||
}
|
}
|
||||||
else if ( this.isCreated && !document.body.contains(this.element.nativeElement) )
|
else if ( this.isCreated && !document.body.contains(this.element.nativeElement) )
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { AfterViewInit, Directive, ElementRef, NgZone, OnDestroy, OnInit } from '@angular/core';
|
import { AfterViewInit, Directive, ElementRef, OnDestroy, OnInit } from '@angular/core';
|
||||||
import * as Ps from 'perfect-scrollbar';
|
import PerfectScrollbar from 'perfect-scrollbar';
|
||||||
import { FuseConfigService } from '../../services/config.service';
|
import { FuseConfigService } from '../../services/config.service';
|
||||||
import { Subscription } from 'rxjs/Subscription';
|
import { Subscription } from 'rxjs/Subscription';
|
||||||
import { Platform } from '@angular/cdk/platform';
|
import { Platform } from '@angular/cdk/platform';
|
||||||
@@ -13,10 +13,10 @@ export class FusePerfectScrollbarDirective implements OnInit, AfterViewInit, OnD
|
|||||||
isDisableCustomScrollbars = false;
|
isDisableCustomScrollbars = false;
|
||||||
isMobile = false;
|
isMobile = false;
|
||||||
isInitialized = true;
|
isInitialized = true;
|
||||||
|
ps;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private element: ElementRef,
|
private element: ElementRef,
|
||||||
private zone: NgZone,
|
|
||||||
private fuseConfig: FuseConfigService,
|
private fuseConfig: FuseConfigService,
|
||||||
private platform: Platform
|
private platform: Platform
|
||||||
)
|
)
|
||||||
@@ -48,11 +48,8 @@ export class FusePerfectScrollbarDirective implements OnInit, AfterViewInit, OnD
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.zone.runOutsideAngular(() => {
|
// Initialize the perfect-scrollbar
|
||||||
|
this.ps = new PerfectScrollbar(this.element.nativeElement);
|
||||||
// Initialize the perfect-scrollbar
|
|
||||||
Ps.initialize(this.element.nativeElement);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy()
|
ngOnDestroy()
|
||||||
@@ -65,7 +62,7 @@ export class FusePerfectScrollbarDirective implements OnInit, AfterViewInit, OnD
|
|||||||
this.onSettingsChanged.unsubscribe();
|
this.onSettingsChanged.unsubscribe();
|
||||||
|
|
||||||
// Destroy the perfect-scrollbar
|
// Destroy the perfect-scrollbar
|
||||||
Ps.destroy(this.element.nativeElement);
|
this.ps.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
update()
|
update()
|
||||||
@@ -76,7 +73,7 @@ export class FusePerfectScrollbarDirective implements OnInit, AfterViewInit, OnD
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update the perfect-scrollbar
|
// Update the perfect-scrollbar
|
||||||
Ps.update(this.element.nativeElement);
|
this.ps.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy()
|
destroy()
|
||||||
@@ -126,7 +123,6 @@ export class FusePerfectScrollbarDirective implements OnInit, AfterViewInit, OnD
|
|||||||
|
|
||||||
// PS has weird event sending order, this is a workaround for that
|
// PS has weird event sending order, this is a workaround for that
|
||||||
this.update();
|
this.update();
|
||||||
|
|
||||||
this.update();
|
this.update();
|
||||||
}
|
}
|
||||||
else if ( value !== this.element.nativeElement[target] )
|
else if ( value !== this.element.nativeElement[target] )
|
||||||
|
|||||||
@@ -0,0 +1,99 @@
|
|||||||
|
import { Directive, Input, OnInit, HostListener, OnDestroy, HostBinding } from '@angular/core';
|
||||||
|
import { MatSidenav } from '@angular/material';
|
||||||
|
import { FuseMatSidenavHelperService } from 'app/core/directives/mat-sidenav-helper/mat-sidenav-helper.service';
|
||||||
|
import { FuseMatchMedia } from '../../services/match-media.service';
|
||||||
|
import { ObservableMedia } from '@angular/flex-layout';
|
||||||
|
import { Subscription } from 'rxjs/Subscription';
|
||||||
|
|
||||||
|
@Directive({
|
||||||
|
selector: '[fuseMatSidenavHelper]'
|
||||||
|
})
|
||||||
|
export class FuseMatSidenavHelperDirective implements OnInit, OnDestroy
|
||||||
|
{
|
||||||
|
matchMediaSubscription: Subscription;
|
||||||
|
|
||||||
|
@HostBinding('class.mat-is-locked-open') isLockedOpen = true;
|
||||||
|
@HostBinding('class.mat-stop-transition') stopTransition = 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) )
|
||||||
|
{
|
||||||
|
setTimeout(() => {
|
||||||
|
this.isLockedOpen = true;
|
||||||
|
this.matSidenav.mode = 'side';
|
||||||
|
this.matSidenav.open();
|
||||||
|
});
|
||||||
|
this.stopTransition = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setTimeout(() => {
|
||||||
|
this.isLockedOpen = false;
|
||||||
|
this.matSidenav.mode = 'over';
|
||||||
|
this.matSidenav.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
this.stopTransition = false;
|
||||||
|
}, 3000);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.matchMediaSubscription = this.fuseMatchMedia.onMediaChange.subscribe(() => {
|
||||||
|
if ( this.observableMedia.isActive(this.matIsLockedOpenBreakpoint) )
|
||||||
|
{
|
||||||
|
setTimeout(() => {
|
||||||
|
this.isLockedOpen = true;
|
||||||
|
this.matSidenav.mode = 'side';
|
||||||
|
this.matSidenav.open();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setTimeout(() => {
|
||||||
|
this.isLockedOpen = false;
|
||||||
|
this.matSidenav.mode = 'over';
|
||||||
|
this.matSidenav.close();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { MdSidenav } from '@angular/material';
|
import { MatSidenav } from '@angular/material';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class FuseMdSidenavHelperService
|
export class FuseMatSidenavHelperService
|
||||||
{
|
{
|
||||||
sidenavInstances: MdSidenav[];
|
sidenavInstances: MatSidenav[];
|
||||||
|
|
||||||
constructor()
|
constructor()
|
||||||
{
|
{
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -82,10 +82,12 @@ export class FuseUtils
|
|||||||
{
|
{
|
||||||
function S4()
|
function S4()
|
||||||
{
|
{
|
||||||
return (((1 + Math.random()) * 0x10000) || 0).toString(16).substring(1);
|
return Math.floor((1 + Math.random()) * 0x10000)
|
||||||
|
.toString(16)
|
||||||
|
.substring(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (S4() + S4());
|
return S4() + S4();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static toggleInArray(item, array)
|
public static toggleInArray(item, array)
|
||||||
@@ -99,4 +101,14 @@ export class FuseUtils
|
|||||||
array.splice(array.indexOf(item), 1);
|
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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,106 +1,108 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import {
|
import {
|
||||||
MdAutocompleteModule,
|
MatAutocompleteModule,
|
||||||
MdButtonModule,
|
MatButtonModule,
|
||||||
MdButtonToggleModule,
|
MatButtonToggleModule,
|
||||||
MdCheckboxModule,
|
MatCheckboxModule,
|
||||||
MdToolbarModule,
|
MatToolbarModule,
|
||||||
MdTooltipModule,
|
MatTooltipModule,
|
||||||
MdCardModule,
|
MatCardModule,
|
||||||
MdChipsModule,
|
MatChipsModule,
|
||||||
MdCoreModule,
|
MatDatepickerModule,
|
||||||
MdDatepickerModule,
|
MatDialogModule,
|
||||||
MdDialogModule,
|
MatExpansionModule,
|
||||||
MdExpansionModule,
|
MatFormFieldModule,
|
||||||
MdGridListModule,
|
MatGridListModule,
|
||||||
MdIconModule,
|
MatIconModule,
|
||||||
MdInputModule,
|
MatInputModule,
|
||||||
MdListModule,
|
MatListModule,
|
||||||
MdMenuModule,
|
MatMenuModule,
|
||||||
MdNativeDateModule,
|
MatNativeDateModule,
|
||||||
MdPaginatorModule,
|
MatPaginatorModule,
|
||||||
MdProgressBarModule,
|
MatProgressBarModule,
|
||||||
MdProgressSpinnerModule,
|
MatProgressSpinnerModule,
|
||||||
MdRadioModule,
|
MatRadioModule,
|
||||||
MdRippleModule,
|
MatRippleModule,
|
||||||
MdSelectModule,
|
MatSelectModule,
|
||||||
MdSidenavModule,
|
MatSidenavModule,
|
||||||
MdSliderModule,
|
MatSliderModule,
|
||||||
MdSlideToggleModule,
|
MatSlideToggleModule,
|
||||||
MdSnackBarModule,
|
MatSnackBarModule,
|
||||||
MdSortModule,
|
MatSortModule,
|
||||||
MdTableModule,
|
MatTableModule,
|
||||||
MdTabsModule
|
MatTabsModule,
|
||||||
|
MatStepperModule
|
||||||
} from '@angular/material';
|
} from '@angular/material';
|
||||||
import { CdkTableModule } from '@angular/cdk/table';
|
import { CdkTableModule } from '@angular/cdk/table';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
MdAutocompleteModule,
|
MatAutocompleteModule,
|
||||||
MdButtonModule,
|
MatButtonModule,
|
||||||
MdButtonToggleModule,
|
MatButtonToggleModule,
|
||||||
MdCardModule,
|
MatCardModule,
|
||||||
MdCheckboxModule,
|
MatCheckboxModule,
|
||||||
MdChipsModule,
|
MatChipsModule,
|
||||||
MdCoreModule,
|
MatDatepickerModule,
|
||||||
MdDatepickerModule,
|
MatDialogModule,
|
||||||
MdDialogModule,
|
MatExpansionModule,
|
||||||
MdExpansionModule,
|
MatFormFieldModule,
|
||||||
MdGridListModule,
|
MatGridListModule,
|
||||||
MdIconModule,
|
MatIconModule,
|
||||||
MdInputModule,
|
MatInputModule,
|
||||||
MdListModule,
|
MatListModule,
|
||||||
MdMenuModule,
|
MatMenuModule,
|
||||||
MdNativeDateModule,
|
MatNativeDateModule,
|
||||||
MdPaginatorModule,
|
MatPaginatorModule,
|
||||||
MdProgressBarModule,
|
MatProgressBarModule,
|
||||||
MdProgressSpinnerModule,
|
MatProgressSpinnerModule,
|
||||||
MdRadioModule,
|
MatRadioModule,
|
||||||
MdRippleModule,
|
MatRippleModule,
|
||||||
MdSelectModule,
|
MatSelectModule,
|
||||||
MdSidenavModule,
|
MatSidenavModule,
|
||||||
MdSliderModule,
|
MatSliderModule,
|
||||||
MdSlideToggleModule,
|
MatSlideToggleModule,
|
||||||
MdSnackBarModule,
|
MatSnackBarModule,
|
||||||
MdSortModule,
|
MatStepperModule,
|
||||||
MdTableModule,
|
MatSortModule,
|
||||||
MdTabsModule,
|
MatTableModule,
|
||||||
MdToolbarModule,
|
MatTabsModule,
|
||||||
MdTooltipModule,
|
MatToolbarModule,
|
||||||
|
MatTooltipModule,
|
||||||
CdkTableModule
|
CdkTableModule
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
MdAutocompleteModule,
|
MatAutocompleteModule,
|
||||||
MdButtonModule,
|
MatButtonModule,
|
||||||
MdButtonToggleModule,
|
MatButtonToggleModule,
|
||||||
MdCardModule,
|
MatCardModule,
|
||||||
MdCheckboxModule,
|
MatCheckboxModule,
|
||||||
MdChipsModule,
|
MatChipsModule,
|
||||||
MdCoreModule,
|
MatDatepickerModule,
|
||||||
MdDatepickerModule,
|
MatDialogModule,
|
||||||
MdDialogModule,
|
MatExpansionModule,
|
||||||
MdExpansionModule,
|
MatGridListModule,
|
||||||
MdGridListModule,
|
MatIconModule,
|
||||||
MdIconModule,
|
MatInputModule,
|
||||||
MdInputModule,
|
MatListModule,
|
||||||
MdListModule,
|
MatMenuModule,
|
||||||
MdMenuModule,
|
MatNativeDateModule,
|
||||||
MdNativeDateModule,
|
MatPaginatorModule,
|
||||||
MdPaginatorModule,
|
MatProgressBarModule,
|
||||||
MdProgressBarModule,
|
MatProgressSpinnerModule,
|
||||||
MdProgressSpinnerModule,
|
MatRadioModule,
|
||||||
MdRadioModule,
|
MatRippleModule,
|
||||||
MdRippleModule,
|
MatSelectModule,
|
||||||
MdSelectModule,
|
MatSidenavModule,
|
||||||
MdSidenavModule,
|
MatSliderModule,
|
||||||
MdSliderModule,
|
MatSlideToggleModule,
|
||||||
MdSlideToggleModule,
|
MatSnackBarModule,
|
||||||
MdSnackBarModule,
|
MatStepperModule,
|
||||||
MdSortModule,
|
MatSortModule,
|
||||||
MdTableModule,
|
MatTableModule,
|
||||||
MdTabsModule,
|
MatTabsModule,
|
||||||
MdToolbarModule,
|
MatToolbarModule,
|
||||||
MdTooltipModule,
|
MatTooltipModule,
|
||||||
CdkTableModule
|
CdkTableModule
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -5,27 +5,29 @@ import { CommonModule } from '@angular/common';
|
|||||||
import { MaterialModule } from './material.module';
|
import { MaterialModule } from './material.module';
|
||||||
import { FlexLayoutModule } from '@angular/flex-layout';
|
import { FlexLayoutModule } from '@angular/flex-layout';
|
||||||
import { ColorPickerModule } from 'ngx-color-picker';
|
import { ColorPickerModule } from 'ngx-color-picker';
|
||||||
import { NgxDnDModule } from '@swimlane/ngx-dnd';
|
import { NgxDnDModule } from '@withinpixels/ngx-dnd';
|
||||||
import { NgxDatatableModule } from '@swimlane/ngx-datatable';
|
import { NgxDatatableModule } from '@swimlane/ngx-datatable';
|
||||||
|
|
||||||
import { FuseMdSidenavHelperDirective, FuseMdSidenavTogglerDirective } from '../directives/md-sidenav-helper/md-sidenav-helper.directive';
|
import { FuseMatSidenavHelperDirective, FuseMatSidenavTogglerDirective } from '../directives/mat-sidenav-helper/mat-sidenav-helper.directive';
|
||||||
import { FusePipesModule } from '../pipes/pipes.module';
|
import { FusePipesModule } from '../pipes/pipes.module';
|
||||||
import { FuseConfirmDialogComponent } from '../components/confirm-dialog/confirm-dialog.component';
|
import { FuseConfirmDialogComponent } from '../components/confirm-dialog/confirm-dialog.component';
|
||||||
import { FuseCountdownComponent } from '../components/countdown/countdown.component';
|
import { FuseCountdownComponent } from '../components/countdown/countdown.component';
|
||||||
import { FuseMatchMedia } from '../services/match-media.service';
|
import { FuseMatchMedia } from '../services/match-media.service';
|
||||||
import { FuseNavbarVerticalService } from '../../main/navbar/vertical/navbar-vertical.service';
|
import { FuseNavbarVerticalService } from '../../main/navbar/vertical/navbar-vertical.service';
|
||||||
import { FuseMdSidenavHelperService } from '../directives/md-sidenav-helper/md-sidenav-helper.service';
|
import { FuseMatSidenavHelperService } from '../directives/mat-sidenav-helper/mat-sidenav-helper.service';
|
||||||
import { FuseHljsComponent } from '../components/hljs/hljs.component';
|
import { FuseHljsComponent } from '../components/hljs/hljs.component';
|
||||||
import { FusePerfectScrollbarDirective } from '../directives/fuse-perfect-scrollbar/fuse-perfect-scrollbar.directive';
|
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 { FuseIfOnDomDirective } from '../directives/fuse-if-on-dom/fuse-if-on-dom.directive';
|
||||||
import { FuseMaterialColorPickerComponent } from '../components/material-color-picker/material-color-picker.component';
|
import { FuseMaterialColorPickerComponent } from '../components/material-color-picker/material-color-picker.component';
|
||||||
import { Md2Module } from 'md2';
|
import { FuseTranslationLoaderService } from '../services/translation-loader.service';
|
||||||
import { CookieService } from 'ngx-cookie-service';
|
import { CookieService } from 'ngx-cookie-service';
|
||||||
|
import { MarkdownModule } from 'angular2-markdown';
|
||||||
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations : [
|
declarations : [
|
||||||
FuseMdSidenavHelperDirective,
|
FuseMatSidenavHelperDirective,
|
||||||
FuseMdSidenavTogglerDirective,
|
FuseMatSidenavTogglerDirective,
|
||||||
FuseConfirmDialogComponent,
|
FuseConfirmDialogComponent,
|
||||||
FuseCountdownComponent,
|
FuseCountdownComponent,
|
||||||
FuseHljsComponent,
|
FuseHljsComponent,
|
||||||
@@ -43,15 +45,15 @@ import { CookieService } from 'ngx-cookie-service';
|
|||||||
ColorPickerModule,
|
ColorPickerModule,
|
||||||
NgxDnDModule,
|
NgxDnDModule,
|
||||||
NgxDatatableModule,
|
NgxDatatableModule,
|
||||||
Md2Module
|
MarkdownModule
|
||||||
],
|
],
|
||||||
exports : [
|
exports : [
|
||||||
FlexLayoutModule,
|
FlexLayoutModule,
|
||||||
MaterialModule,
|
MaterialModule,
|
||||||
CommonModule,
|
CommonModule,
|
||||||
FormsModule,
|
FormsModule,
|
||||||
FuseMdSidenavHelperDirective,
|
FuseMatSidenavHelperDirective,
|
||||||
FuseMdSidenavTogglerDirective,
|
FuseMatSidenavTogglerDirective,
|
||||||
FusePipesModule,
|
FusePipesModule,
|
||||||
FuseCountdownComponent,
|
FuseCountdownComponent,
|
||||||
FuseHljsComponent,
|
FuseHljsComponent,
|
||||||
@@ -62,7 +64,8 @@ import { CookieService } from 'ngx-cookie-service';
|
|||||||
NgxDatatableModule,
|
NgxDatatableModule,
|
||||||
FuseIfOnDomDirective,
|
FuseIfOnDomDirective,
|
||||||
FuseMaterialColorPickerComponent,
|
FuseMaterialColorPickerComponent,
|
||||||
Md2Module
|
MarkdownModule,
|
||||||
|
TranslateModule
|
||||||
],
|
],
|
||||||
entryComponents: [
|
entryComponents: [
|
||||||
FuseConfirmDialogComponent
|
FuseConfirmDialogComponent
|
||||||
@@ -71,7 +74,8 @@ import { CookieService } from 'ngx-cookie-service';
|
|||||||
CookieService,
|
CookieService,
|
||||||
FuseMatchMedia,
|
FuseMatchMedia,
|
||||||
FuseNavbarVerticalService,
|
FuseNavbarVerticalService,
|
||||||
FuseMdSidenavHelperService
|
FuseMatSidenavHelperService,
|
||||||
|
FuseTranslationLoaderService
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
@import '~@swimlane/ngx-datatable/release/themes/material.css';
|
@import '~@swimlane/ngx-datatable/release/themes/material.css';
|
||||||
@import '~@swimlane/ngx-datatable/release/assets/icons.css';
|
@import '~@swimlane/ngx-datatable/release/assets/icons.css';
|
||||||
// Perfect scrollbar
|
// Perfect scrollbar
|
||||||
@import '~perfect-scrollbar/dist/css/perfect-scrollbar.min.css';
|
@import '~perfect-scrollbar/css/perfect-scrollbar.css';
|
||||||
// Fuse
|
// Fuse
|
||||||
@import "fuse";
|
@import "fuse";
|
||||||
|
|
||||||
@@ -25,6 +25,7 @@
|
|||||||
@import "partials/angular-material-fix";
|
@import "partials/angular-material-fix";
|
||||||
@import "partials/typography";
|
@import "partials/typography";
|
||||||
@import "partials/page-layouts";
|
@import "partials/page-layouts";
|
||||||
|
@import "partials/cards";
|
||||||
@import "partials/navigation";
|
@import "partials/navigation";
|
||||||
@import "partials/forms";
|
@import "partials/forms";
|
||||||
@import "partials/toolbar";
|
@import "partials/toolbar";
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Fix: "Icon button ripple radius is not correct on Edge & Safari"
|
||||||
.mat-icon-button {
|
.mat-icon-button {
|
||||||
|
|
||||||
.mat-button-ripple {
|
.mat-button-ripple {
|
||||||
@@ -5,11 +6,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
md-sidenav-container {
|
// Fix: "Sidenav opening with animations for the first time"
|
||||||
|
mat-sidenav-container {
|
||||||
|
|
||||||
md-sidenav {
|
mat-sidenav {
|
||||||
|
|
||||||
&[md-is-locked-open].md-stop-transition {
|
&[mat-is-locked-open].mat-stop-transition {
|
||||||
transition: none !important;
|
transition: none !important;
|
||||||
transform: translate3d(0, 0, 0) !important;
|
transform: translate3d(0, 0, 0) !important;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
@@ -39,3 +41,21 @@ md-sidenav-container {
|
|||||||
.mat-drawer-content {
|
.mat-drawer-content {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fix: "Inconsistent font sizes across elements"
|
||||||
|
.mat-input-wrapper {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-checkbox {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-radio-button {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-pseudo-checkbox-checked:after {
|
||||||
|
width: 14px;
|
||||||
|
height: 7px;
|
||||||
|
}
|
||||||
|
|||||||
154
src/app/core/scss/partials/_cards.scss
Normal file
154
src/app/core/scss/partials/_cards.scss
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
.fuse-card {
|
||||||
|
max-width: 320px;
|
||||||
|
min-width: 320px;
|
||||||
|
background: white;
|
||||||
|
border-radius: 2px;
|
||||||
|
@include mat-elevation(2);
|
||||||
|
|
||||||
|
&.variable-width {
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-rich-media {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
position: absolute;
|
||||||
|
right: 16px;
|
||||||
|
bottom: 16px;
|
||||||
|
left: 16px;
|
||||||
|
font-size: 20px;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-media-header {
|
||||||
|
display: flex;
|
||||||
|
padding: 16px;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
&.medium {
|
||||||
|
align-items: flex-start;
|
||||||
|
|
||||||
|
.card-rich-media {
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.large {
|
||||||
|
align-items: flex-start;
|
||||||
|
|
||||||
|
.card-rich-media {
|
||||||
|
width: 160px;
|
||||||
|
height: 160px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-primary-title {
|
||||||
|
padding: 0 16px 0 0;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-rich-media {
|
||||||
|
width: 80px;
|
||||||
|
height: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ div {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-avatar-header {
|
||||||
|
display: flex;
|
||||||
|
padding: 16px;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.card-avatar {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 100%;
|
||||||
|
margin-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-avatar-title {
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-subtitle {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-primary-title {
|
||||||
|
padding: 16px;
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-subtitle {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ div {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-supporting-text {
|
||||||
|
padding: 16px;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.75;
|
||||||
|
|
||||||
|
+ div {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-actions {
|
||||||
|
display: flex;
|
||||||
|
padding: 8px;
|
||||||
|
|
||||||
|
&.icon-buttons {
|
||||||
|
padding: 0 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.align-center {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.align-right {
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-button {
|
||||||
|
min-width: 0 !important;
|
||||||
|
padding: 0 8px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-expander {
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ div {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-expand-area {
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.card-expanded-supporting-text {
|
||||||
|
padding: 8px 16px 16px 16px;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.75;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -51,14 +51,16 @@ $matColorHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400
|
|||||||
// If the base text color is black...
|
// If the base text color is black...
|
||||||
@if (rgba(black, 1) == rgba($baseTextColor, 1)) {
|
@if (rgba(black, 1) == rgba($baseTextColor, 1)) {
|
||||||
|
|
||||||
&.secondary-text,
|
|
||||||
.secondary-text,
|
|
||||||
.mat-icon,
|
.mat-icon,
|
||||||
.icon,
|
.icon {
|
||||||
.md2-datepicker-button {
|
|
||||||
color: rgba(0, 0, 0, 0.54);
|
color: rgba(0, 0, 0, 0.54);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.secondary-text,
|
||||||
|
.secondary-text {
|
||||||
|
color: rgba(0, 0, 0, 0.54) !important;
|
||||||
|
}
|
||||||
|
|
||||||
&.hint-text,
|
&.hint-text,
|
||||||
.hint-text,
|
.hint-text,
|
||||||
&.disabled-text,
|
&.disabled-text,
|
||||||
@@ -80,8 +82,7 @@ $matColorHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400
|
|||||||
@else {
|
@else {
|
||||||
|
|
||||||
.mat-icon,
|
.mat-icon,
|
||||||
.icon,
|
.icon {
|
||||||
.md2-datepicker-button {
|
|
||||||
color: rgba(255, 255, 255, 1);
|
color: rgba(255, 255, 255, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,49 +112,60 @@ $matColorHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400
|
|||||||
@mixin generateMaterialElementColors($contrastColor) {
|
@mixin generateMaterialElementColors($contrastColor) {
|
||||||
|
|
||||||
// If the contrast color is white...
|
// If the contrast color is white...
|
||||||
$foreground: $mat-dark-theme-foreground;
|
$fuseForeground: (
|
||||||
|
base: white,
|
||||||
|
text: white,
|
||||||
|
hint-text: rgba(white, 0.5),
|
||||||
|
divider: rgba(white, 0.12),
|
||||||
|
);
|
||||||
|
|
||||||
// If the contrast color is black...
|
// If the contrast color is black...
|
||||||
@if (rgba(black, 1) == rgba($contrastColor, 1)) {
|
@if (rgba(black, 1) == rgba($contrastColor, 1)) {
|
||||||
$foreground: $mat-light-theme-foreground;
|
|
||||||
|
$fuseForeground: (
|
||||||
|
base: black,
|
||||||
|
hint-text: rgba(black, 0.38),
|
||||||
|
divider: rgba(black, 0.12),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Native Input
|
// Native Input
|
||||||
input[type="text"] {
|
input[type="text"] {
|
||||||
color: mat-color($foreground, base);
|
color: map_get($fuseForeground, base);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Input
|
// Input
|
||||||
.mat-input-placeholder {
|
.mat-input-placeholder {
|
||||||
color: mat-color($foreground, hint-text);
|
color: map_get($fuseForeground, hint-text);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-input-underline {
|
.mat-input-underline {
|
||||||
background-color: mat-color($foreground, divider);
|
background-color: map_get($fuseForeground, divider);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Select
|
// Select
|
||||||
.mat-select-trigger,
|
.mat-select-trigger,
|
||||||
.mat-select-arrow {
|
.mat-select-arrow {
|
||||||
color: mat-color($foreground, hint-text);
|
color: map_get($fuseForeground, hint-text);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-select-underline {
|
.mat-select-underline {
|
||||||
background-color: mat-color($foreground, divider);
|
background-color: map_get($fuseForeground, divider);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-select-disabled .mat-select-value,
|
.mat-select-disabled .mat-select-value,
|
||||||
.mat-select-arrow,
|
.mat-select-arrow,
|
||||||
.mat-select-trigger {
|
.mat-select-trigger {
|
||||||
color: mat-color($foreground, hint-text);
|
color: map_get($fuseForeground, hint-text);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-select-content, .mat-select-panel-done-animating {
|
.mat-select-content,
|
||||||
background: mat-color($background, card);
|
.mat-select-panel-done-animating {
|
||||||
|
background: map_get($background, card);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-select-value {
|
.mat-select-value {
|
||||||
color: mat-color($foreground, text);
|
color: map_get($fuseForeground, text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,7 +176,7 @@ $matColorHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400
|
|||||||
background-color: $color !important;
|
background-color: $color !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.md-#{$colorName}#{$hue}-bg {
|
.mat-#{$colorName}#{$hue}-bg {
|
||||||
background-color: $color !important;
|
background-color: $color !important;
|
||||||
color: $contrastColor !important;
|
color: $contrastColor !important;
|
||||||
|
|
||||||
@@ -175,6 +187,11 @@ $matColorHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400
|
|||||||
// Generate material element colors
|
// Generate material element colors
|
||||||
// based on current contrast color
|
// based on current contrast color
|
||||||
@include generateMaterialElementColors($contrastColor);
|
@include generateMaterialElementColors($contrastColor);
|
||||||
|
|
||||||
|
&[disabled] {
|
||||||
|
background-color: rgba($color, .12) !important;
|
||||||
|
color: rgba($contrastColor, .26) !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.#{$colorName}#{$hue}-fg {
|
.#{$colorName}#{$hue}-fg {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
body {
|
body {
|
||||||
|
|
||||||
> md-sidenav-container {
|
> mat-sidenav-container {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
i,
|
i,
|
||||||
md-icon {
|
mat-icon {
|
||||||
color: rgba(0, 0, 0, 0.54);
|
color: rgba(0, 0, 0, 0.54);
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
width: 24px;
|
width: 24px;
|
||||||
|
|||||||
@@ -46,14 +46,14 @@
|
|||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
md-icon.status {
|
mat-icon.status {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 28px;
|
top: 28px;
|
||||||
left: 28px;
|
left: 28px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
md-icon.status {
|
mat-icon.status {
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
|
|
||||||
&.online {
|
&.online {
|
||||||
@@ -116,7 +116,7 @@ md-icon.status {
|
|||||||
max-height: 48px;
|
max-height: 48px;
|
||||||
height: 48px;
|
height: 48px;
|
||||||
|
|
||||||
md-icon {
|
mat-icon {
|
||||||
margin: 0 16px 0 0;
|
margin: 0 16px 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,7 +142,7 @@ md-icon.status {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
md-divider {
|
mat-divider {
|
||||||
margin: 8px 0;
|
margin: 8px 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -196,7 +196,7 @@ md-icon.status {
|
|||||||
background-color: #FFFFFF;
|
background-color: #FFFFFF;
|
||||||
width: 280px;
|
width: 280px;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
margin: 24px 24px 0 0;
|
margin: 12px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
&.style-1 {
|
&.style-1 {
|
||||||
@@ -234,7 +234,7 @@ md-icon.status {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
md-divider {
|
mat-divider {
|
||||||
margin: 16px 32px;
|
margin: 16px 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.nav-group {
|
.nav-group {
|
||||||
|
display: block;
|
||||||
|
|
||||||
> .group-title {
|
> .group-title {
|
||||||
position: relative;
|
position: relative;
|
||||||
@@ -103,7 +104,9 @@
|
|||||||
|
|
||||||
> .nav-item {
|
> .nav-item {
|
||||||
|
|
||||||
> .nav-link {
|
> .nav-link,
|
||||||
|
&.nav-group > .group-title,
|
||||||
|
&.nav-group > .group-items > .nav-item > .nav-link {
|
||||||
padding-left: 56px;
|
padding-left: 56px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,7 +114,9 @@
|
|||||||
|
|
||||||
> .nav-item {
|
> .nav-item {
|
||||||
|
|
||||||
> .nav-link {
|
> .nav-link,
|
||||||
|
&.nav-group > .group-title,
|
||||||
|
&.nav-group > .group-items > .nav-item > .nav-link {
|
||||||
padding-left: 72px;
|
padding-left: 72px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -190,6 +195,10 @@
|
|||||||
|
|
||||||
> .nav-item {
|
> .nav-item {
|
||||||
|
|
||||||
|
> .nav-link {
|
||||||
|
height: 56px;
|
||||||
|
}
|
||||||
|
|
||||||
&.nav-collapse {
|
&.nav-collapse {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
|
|||||||
max-height: $carded-toolbar-height;
|
max-height: $carded-toolbar-height;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
> .content {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
@@ -112,12 +112,12 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
|
|||||||
// Single scroll
|
// Single scroll
|
||||||
&.single-scroll {
|
&.single-scroll {
|
||||||
|
|
||||||
> md-sidenav-container {
|
> mat-sidenav-container {
|
||||||
flex: 1 0 auto;
|
flex: 1 0 auto;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
> md-sidenav-container {
|
> mat-sidenav-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
background: none;
|
background: none;
|
||||||
@@ -132,11 +132,11 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
|
|||||||
min-width: 240px;
|
min-width: 240px;
|
||||||
max-width: 240px;
|
max-width: 240px;
|
||||||
height: auto;
|
height: auto;
|
||||||
z-index: 2;
|
z-index: 4;
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
@include mat-elevation(7);
|
@include mat-elevation(7);
|
||||||
|
|
||||||
&.md-is-locked-open {
|
&.mat-is-locked-open {
|
||||||
background: none;
|
background: none;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
@@ -145,6 +145,12 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
|
|||||||
height: $carded-header-height;
|
height: $carded-header-height;
|
||||||
min-height: $carded-header-height;
|
min-height: $carded-header-height;
|
||||||
max-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 {
|
.content {
|
||||||
@@ -175,6 +181,12 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
|
|||||||
height: $carded-header-height-without-toolbar;
|
height: $carded-header-height-without-toolbar;
|
||||||
min-height: $carded-header-height-without-toolbar;
|
min-height: $carded-header-height-without-toolbar;
|
||||||
max-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 {
|
.content-card {
|
||||||
@@ -210,17 +222,73 @@ $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
|
||||||
&.left-sidenav {
|
&.left-sidenav {
|
||||||
|
|
||||||
// Sidenav
|
// Sidenav
|
||||||
> md-sidenav-container {
|
> mat-sidenav-container {
|
||||||
|
|
||||||
.sidenav {
|
.sidenav {
|
||||||
|
|
||||||
&.md-is-locked-open {
|
&.mat-is-locked-open {
|
||||||
|
|
||||||
~ .mat-sidenav-content,
|
~ .mat-sidenav-content,
|
||||||
~ .mat-drawer-content {
|
~ .mat-drawer-content {
|
||||||
@@ -238,12 +306,12 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
|
|||||||
&.right-sidenav {
|
&.right-sidenav {
|
||||||
|
|
||||||
// Sidenav
|
// Sidenav
|
||||||
> md-sidenav-container {
|
> mat-sidenav-container {
|
||||||
|
|
||||||
.sidenav {
|
.sidenav {
|
||||||
order: 999;
|
order: 999;
|
||||||
|
|
||||||
&.md-is-locked-open {
|
&.mat-is-locked-open {
|
||||||
|
|
||||||
~ .mat-sidenav-content,
|
~ .mat-sidenav-content,
|
||||||
~ .mat-drawer-content {
|
~ .mat-drawer-content {
|
||||||
@@ -295,7 +363,7 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
|
|||||||
// Single scroll
|
// Single scroll
|
||||||
&.single-scroll {
|
&.single-scroll {
|
||||||
|
|
||||||
> md-sidenav-container {
|
> mat-sidenav-container {
|
||||||
flex: 1 0 auto;
|
flex: 1 0 auto;
|
||||||
|
|
||||||
> .mat-sidenav-content,
|
> .mat-sidenav-content,
|
||||||
@@ -309,7 +377,7 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
|
|||||||
// Inner Sidenav
|
// Inner Sidenav
|
||||||
&.inner-sidenav {
|
&.inner-sidenav {
|
||||||
|
|
||||||
> md-sidenav-container {
|
> mat-sidenav-container {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
|
||||||
.sidenav {
|
.sidenav {
|
||||||
@@ -338,10 +406,9 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
> md-sidenav-container {
|
> mat-sidenav-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
//flex-direction: row;
|
|
||||||
flex: 1;
|
flex: 1;
|
||||||
background: none;
|
background: none;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
@@ -354,7 +421,7 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
|
|||||||
z-index: 51;
|
z-index: 51;
|
||||||
@include mat-elevation(7);
|
@include mat-elevation(7);
|
||||||
|
|
||||||
&.md-is-locked-open {
|
&.mat-is-locked-open {
|
||||||
width: 220px;
|
width: 220px;
|
||||||
min-width: 220px;
|
min-width: 220px;
|
||||||
max-width: 220px;
|
max-width: 220px;
|
||||||
@@ -440,7 +507,7 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
|
|||||||
&.left-sidenav,
|
&.left-sidenav,
|
||||||
&.right-sidenav {
|
&.right-sidenav {
|
||||||
|
|
||||||
> md-sidenav-container {
|
> mat-sidenav-container {
|
||||||
flex: 1 0 auto;
|
flex: 1 0 auto;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -458,7 +525,7 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
|
|||||||
&.left-sidenav,
|
&.left-sidenav,
|
||||||
&.right-sidenav {
|
&.right-sidenav {
|
||||||
|
|
||||||
> md-sidenav-container {
|
> mat-sidenav-container {
|
||||||
flex: 1 0 auto !important;
|
flex: 1 0 auto !important;
|
||||||
|
|
||||||
> .mat-sidenav-content,
|
> .mat-sidenav-content,
|
||||||
@@ -483,7 +550,7 @@ $top-bg-image: url('assets/images/backgrounds/header-bg.png');
|
|||||||
&.left-sidenav,
|
&.left-sidenav,
|
||||||
&.right-sidenav {
|
&.right-sidenav {
|
||||||
|
|
||||||
> md-sidenav-container {
|
> mat-sidenav-container {
|
||||||
|
|
||||||
> .mat-sidenav-content,
|
> .mat-sidenav-content,
|
||||||
> .mat-drawer-content {
|
> .mat-drawer-content {
|
||||||
|
|||||||
@@ -4,8 +4,9 @@
|
|||||||
|
|
||||||
@media all {
|
@media all {
|
||||||
|
|
||||||
/* Never show page break in normal view */
|
/* Never show page breaks in normal view */
|
||||||
.page-break {
|
.page-break-after,
|
||||||
|
.page-break-before {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13,22 +14,30 @@
|
|||||||
|
|
||||||
@media print {
|
@media print {
|
||||||
|
|
||||||
/* Page Styles */
|
/* html and body tweaks */
|
||||||
@page {
|
html, body {
|
||||||
//margin: 0.5cm;
|
height: auto !important;
|
||||||
|
overflow: initial !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Page break */
|
/* Page breaks */
|
||||||
.page-break {
|
.page-break-after {
|
||||||
display: block;
|
display: block;
|
||||||
break-after: always;
|
|
||||||
page-break-after: always;
|
page-break-after: always;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-break-before {
|
||||||
|
display: block;
|
||||||
|
page-break-before: always;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* General styles */
|
/* General styles */
|
||||||
fuse-root {
|
fuse-root {
|
||||||
|
|
||||||
fuse-navbar,
|
fuse-navbar-vertical,
|
||||||
|
fuse-navbar-horizontal,
|
||||||
fuse-toolbar,
|
fuse-toolbar,
|
||||||
fuse-footer,
|
fuse-footer,
|
||||||
fuse-quick-panel,
|
fuse-quick-panel,
|
||||||
@@ -41,11 +50,16 @@
|
|||||||
.ps {
|
.ps {
|
||||||
overflow: visible !important;
|
overflow: visible !important;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Printable page specific styles */
|
.mat-drawer-container,
|
||||||
.printable {
|
.mat-sidenav-container {
|
||||||
overflow: visible !important;
|
background-color: white !important;
|
||||||
height: auto !important;
|
|
||||||
|
.mat-drawer-content,
|
||||||
|
.mat-sidenav-content {
|
||||||
|
overflow: initial !important;
|
||||||
|
height: auto !important
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -28,7 +28,7 @@ html, body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Reset non angular-material input's default browser/os styles
|
// Reset non angular-material input's default browser/os styles
|
||||||
*:not(md-input-container) {
|
*:not(mat-input-container) {
|
||||||
|
|
||||||
> input {
|
> input {
|
||||||
border: none;
|
border: none;
|
||||||
@@ -55,7 +55,7 @@ html, body {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*:not(md-input-container) {
|
*:not(mat-input-container) {
|
||||||
|
|
||||||
> input[type="button"],
|
> input[type="button"],
|
||||||
> button,
|
> button,
|
||||||
|
|||||||
@@ -55,6 +55,7 @@
|
|||||||
min-height: 48px;
|
min-height: 48px;
|
||||||
transition: none;
|
transition: none;
|
||||||
padding: 0 24px;
|
padding: 0 24px;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -82,6 +83,16 @@
|
|||||||
|
|
||||||
.datatable-pager {
|
.datatable-pager {
|
||||||
margin: 0 0 0 24px;
|
margin: 0 0 0 24px;
|
||||||
|
|
||||||
|
.pager {
|
||||||
|
|
||||||
|
li {
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
.ps {
|
.ps {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
> .ps__scrollbar-y-rail {
|
> .ps__rail-x {
|
||||||
z-index: 99999;
|
z-index: 99999;
|
||||||
}
|
}
|
||||||
|
|
||||||
> .ps__scrollbar-y-rail {
|
> .ps__rail-y {
|
||||||
z-index: 99999;
|
z-index: 99999;
|
||||||
|
left: auto !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
@import "highlight";
|
@import "highlight";
|
||||||
|
@import "prism";
|
||||||
@import "perfect-scrollbar";
|
@import "perfect-scrollbar";
|
||||||
@import "ngx-datatable";
|
@import "ngx-datatable";
|
||||||
@import "ngx-color-picker";
|
@import "ngx-color-picker";
|
||||||
|
|||||||
269
src/app/core/scss/partials/plugins/_prism.scss
Normal file
269
src/app/core/scss/partials/plugins/_prism.scss
Normal file
@@ -0,0 +1,269 @@
|
|||||||
|
// Edit the sixteen color-value variables, and create your own syntax highlighter colorscheme
|
||||||
|
|
||||||
|
$base00: #263238;
|
||||||
|
$base01: #2C393F;
|
||||||
|
$base02: #37474F;
|
||||||
|
$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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,18 +22,19 @@ export class FuseConfigService
|
|||||||
// Set the default settings
|
// Set the default settings
|
||||||
this.defaultSettings = {
|
this.defaultSettings = {
|
||||||
layout : {
|
layout : {
|
||||||
navigation: 'left', // 'right', 'left', 'top', 'none'
|
navigation : 'left', // 'right', 'left', 'top', 'none'
|
||||||
toolbar : 'below', // 'above', 'below', 'none'
|
navigationFolded: false, // true, false
|
||||||
footer : 'below', // 'above', 'below', 'none'
|
toolbar : 'below', // 'above', 'below', 'none'
|
||||||
mode : 'fullwidth' // 'boxed', 'fullwidth'
|
footer : 'below', // 'above', 'below', 'none'
|
||||||
|
mode : 'fullwidth' // 'boxed', 'fullwidth'
|
||||||
},
|
},
|
||||||
colorClasses : {
|
colorClasses : {
|
||||||
toolbar: 'md-white-500-bg',
|
toolbar: 'mat-white-500-bg',
|
||||||
navbar : 'md-fuse-dark-500-bg',
|
navbar : 'mat-fuse-dark-700-bg',
|
||||||
footer : 'md-fuse-dark-700-bg'
|
footer : 'mat-fuse-dark-900-bg'
|
||||||
},
|
},
|
||||||
customScrollbars: true,
|
customScrollbars: true,
|
||||||
routerAnimation : 'fadeIn'
|
routerAnimation : 'fadeIn' // fadeIn, slideUp, slideDown, slideRight, slideLeft
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,6 +45,7 @@ export class FuseConfigService
|
|||||||
this.defaultSettings.customScrollbars = false;
|
this.defaultSettings.customScrollbars = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set the settings from the default settings
|
||||||
this.settings = Object.assign({}, this.defaultSettings);
|
this.settings = Object.assign({}, this.defaultSettings);
|
||||||
|
|
||||||
// Reload the default settings on every navigation start
|
// Reload the default settings on every navigation start
|
||||||
@@ -58,7 +60,6 @@ export class FuseConfigService
|
|||||||
|
|
||||||
// Create the behavior subject
|
// Create the behavior subject
|
||||||
this.onSettingsChanged = new BehaviorSubject(this.settings);
|
this.onSettingsChanged = new BehaviorSubject(this.settings);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -67,7 +68,10 @@ export class FuseConfigService
|
|||||||
*/
|
*/
|
||||||
setSettings(settings)
|
setSettings(settings)
|
||||||
{
|
{
|
||||||
|
// Set the settings from the given object
|
||||||
this.settings = Object.assign({}, this.settings, settings);
|
this.settings = Object.assign({}, this.settings, settings);
|
||||||
|
|
||||||
|
// Trigger the event
|
||||||
this.onSettingsChanged.next(this.settings);
|
this.onSettingsChanged.next(this.settings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
27
src/app/core/services/translation-loader.service.ts
Normal file
27
src/app/core/services/translation-loader.service.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
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);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
3962
src/app/fuse-fake-db/e-commerce.ts
Normal file
3962
src/app/fuse-fake-db/e-commerce.ts
Normal file
File diff suppressed because it is too large
Load Diff
61
src/app/fuse-fake-db/faq.ts
Normal file
61
src/app/fuse-fake-db/faq.ts
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
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.'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -13,6 +13,9 @@ import { QuickPanelFakeDb } from './quick-panel';
|
|||||||
import { IconsFakeDb } from './icons';
|
import { IconsFakeDb } from './icons';
|
||||||
import { ProjectsDashboardDb } from './projects-dashboard';
|
import { ProjectsDashboardDb } from './projects-dashboard';
|
||||||
import { ScrumboardFakeDb } from './scrumboard';
|
import { ScrumboardFakeDb } from './scrumboard';
|
||||||
|
import { FaqFakeDb } from './faq';
|
||||||
|
import { KnowledgeBaseFakeDb } from './knowledge-base';
|
||||||
|
import { ECommerceFakeDb } from './e-commerce';
|
||||||
|
|
||||||
export class FuseFakeDbService implements InMemoryDbService
|
export class FuseFakeDbService implements InMemoryDbService
|
||||||
{
|
{
|
||||||
@@ -44,7 +47,12 @@ export class FuseFakeDbService implements InMemoryDbService
|
|||||||
'icons' : IconsFakeDb.icons,
|
'icons' : IconsFakeDb.icons,
|
||||||
'projects-dashboard-projects': ProjectsDashboardDb.projects,
|
'projects-dashboard-projects': ProjectsDashboardDb.projects,
|
||||||
'projects-dashboard-widgets' : ProjectsDashboardDb.widgets,
|
'projects-dashboard-widgets' : ProjectsDashboardDb.widgets,
|
||||||
'scrumboard-boards' : ScrumboardFakeDb.boards
|
'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
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
113
src/app/fuse-fake-db/knowledge-base.ts
Normal file
113
src/app/fuse-fake-db/knowledge-base.ts
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
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 author’s 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'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -1622,7 +1622,7 @@ export class ProjectsDashboardDb
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
'value' : 'Wireframing',
|
'value' : 'Wireframing',
|
||||||
'classes': 'md-primary-bg',
|
'classes': 'mat-primary-bg',
|
||||||
'icon' : ''
|
'icon' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1654,7 +1654,7 @@ export class ProjectsDashboardDb
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
'value' : 'Design',
|
'value' : 'Design',
|
||||||
'classes': 'md-green-bg',
|
'classes': 'mat-green-bg',
|
||||||
'icon' : ''
|
'icon' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1686,7 +1686,7 @@ export class ProjectsDashboardDb
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
'value' : 'Coding',
|
'value' : 'Coding',
|
||||||
'classes': 'md-red-bg',
|
'classes': 'mat-red-bg',
|
||||||
'icon' : ''
|
'icon' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1718,7 +1718,7 @@ export class ProjectsDashboardDb
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
'value' : 'Marketing',
|
'value' : 'Marketing',
|
||||||
'classes': 'md-accent-bg',
|
'classes': 'mat-accent-bg',
|
||||||
'icon' : ''
|
'icon' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1750,7 +1750,7 @@ export class ProjectsDashboardDb
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
'value' : 'Extra',
|
'value' : 'Extra',
|
||||||
'classes': 'md-orange-bg',
|
'classes': 'mat-orange-bg',
|
||||||
'icon' : ''
|
'icon' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ export class ScrumboardFakeDb
|
|||||||
'time' : '45 mins. ago'
|
'time' : '45 mins. ago'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
'due' : 'Tue Aug 29 2017 13:16:34 GMT+0300 (Turkey Standard Time)'
|
'due' : '2017-08-29T10:16:34.000Z'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5637273da9b93bb84743a0f9',
|
'id' : '5637273da9b93bb84743a0f9',
|
||||||
@@ -274,7 +274,7 @@ export class ScrumboardFakeDb
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
'activities' : [],
|
'activities' : [],
|
||||||
'due' : 'Fri Sep 07 2018 15:00:00 GMT+0300 (Turkey Standard Time)'
|
'due' : '2018-09-07T12:00:00.000Z'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : 'f6b9d7a9247e5d794a081927',
|
'id' : 'f6b9d7a9247e5d794a081927',
|
||||||
@@ -365,7 +365,7 @@ export class ScrumboardFakeDb
|
|||||||
'checkItemsChecked': 0,
|
'checkItemsChecked': 0,
|
||||||
'comments' : [],
|
'comments' : [],
|
||||||
'activities' : [],
|
'activities' : [],
|
||||||
'due' : 'Wed Mar 08 2017 12:00:00 GMT+0300 (Turkey Standard Time)'
|
'due' : '2017-03-08T09:00:00.000Z'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '80ed.24ad3b18e2668.f28fbbceeeff9.5a834620a42f1.5909be19a2bf2.6c4a54947ce2d.da356b0c1',
|
'id' : '80ed.24ad3b18e2668.f28fbbceeeff9.5a834620a42f1.5909be19a2bf2.6c4a54947ce2d.da356b0c1',
|
||||||
@@ -536,7 +536,7 @@ export class ScrumboardFakeDb
|
|||||||
'checkItemsChecked': 3,
|
'checkItemsChecked': 3,
|
||||||
'comments' : [],
|
'comments' : [],
|
||||||
'activities' : [],
|
'activities' : [],
|
||||||
'due' : 'Fri Feb 02 2017 14:20:34 GMT+0300 (Turkey Standard Time)'
|
'due' : '2017-02-02T11:20:34.000Z'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
'members' : [
|
'members' : [
|
||||||
@@ -565,22 +565,22 @@ export class ScrumboardFakeDb
|
|||||||
{
|
{
|
||||||
'id' : '26022e4129ad3a5sc28b36cd',
|
'id' : '26022e4129ad3a5sc28b36cd',
|
||||||
'name' : 'High Priority',
|
'name' : 'High Priority',
|
||||||
'color': 'md-red-500-bg'
|
'color': 'mat-red-500-bg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '56027e4119ad3a5dc28b36cd',
|
'id' : '56027e4119ad3a5dc28b36cd',
|
||||||
'name' : 'Design',
|
'name' : 'Design',
|
||||||
'color': 'md-orange-400-bg'
|
'color': 'mat-orange-400-bg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5640635e19ad3a5dc21416b2',
|
'id' : '5640635e19ad3a5dc21416b2',
|
||||||
'name' : 'App',
|
'name' : 'App',
|
||||||
'color': 'md-blue-600-bg'
|
'color': 'mat-blue-600-bg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '6540635g19ad3s5dc31412b2',
|
'id' : '6540635g19ad3s5dc31412b2',
|
||||||
'name' : 'Feature',
|
'name' : 'Feature',
|
||||||
'color': 'md-green-400-bg'
|
'color': 'mat-green-400-bg'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -769,17 +769,17 @@ export class ScrumboardFakeDb
|
|||||||
{
|
{
|
||||||
'id' : '56027e4119ad3a5dc28b36cd',
|
'id' : '56027e4119ad3a5dc28b36cd',
|
||||||
'name' : 'Design',
|
'name' : 'Design',
|
||||||
'color': 'md-red-500-bg'
|
'color': 'mat-red-500-bg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5640635e19ad3a5dc21416b2',
|
'id' : '5640635e19ad3a5dc21416b2',
|
||||||
'name' : 'App',
|
'name' : 'App',
|
||||||
'color': 'md-blue-500-bg'
|
'color': 'mat-blue-500-bg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '6540635g19ad3s5dc31412b2',
|
'id' : '6540635g19ad3s5dc31412b2',
|
||||||
'name' : 'Feature',
|
'name' : 'Feature',
|
||||||
'color': 'md-green-400-bg'
|
'color': 'mat-green-400-bg'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
<div class="logo mb-16 mb-sm-0" fxLayout="row" fxLayoutAlign="start center">
|
<div class="logo mb-16 mb-sm-0" fxLayout="row" fxLayoutAlign="start center">
|
||||||
|
|
||||||
<md-icon class="logo-icon" *fuseIfOnDom [@animate]="{value:'*',params:{delay:'50ms',scale:'0.2'}}">today</md-icon>
|
<mat-icon class="logo-icon" *fuseIfOnDom [@animate]="{value:'*',params:{delay:'50ms',scale:'0.2'}}">today</mat-icon>
|
||||||
|
|
||||||
<span class="logo-text" *fuseIfOnDom [@animate]="{value:'*',params:{delay:'100ms',x:'-25px'}}">Calendar</span>
|
<span class="logo-text" *fuseIfOnDom [@animate]="{value:'*',params:{delay:'100ms',x:'-25px'}}">Calendar</span>
|
||||||
|
|
||||||
@@ -18,32 +18,32 @@
|
|||||||
<!-- TOOLBAR -->
|
<!-- TOOLBAR -->
|
||||||
<div class="toolbar" fxLayout="row" fxLayoutAlign="start center">
|
<div class="toolbar" fxLayout="row" fxLayoutAlign="start center">
|
||||||
|
|
||||||
<button md-button class="mat-icon-button" aria-label="Search" md-tooltip="Search">
|
<button mat-button class="mat-icon-button" aria-label="Search" matTooltip="Search">
|
||||||
<md-icon>search</md-icon>
|
<mat-icon>search</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button md-button class="mat-icon-button"
|
<button mat-button class="mat-icon-button"
|
||||||
mwlCalendarToday
|
mwlCalendarToday
|
||||||
[(viewDate)]="viewDate"
|
[(viewDate)]="viewDate"
|
||||||
(viewDateChange)="selectedDay = {date:$event}"
|
(viewDateChange)="selectedDay = {date:$event}"
|
||||||
aria-label="Today" md-tooltip="Today">
|
aria-label="Today" matTooltip="Today">
|
||||||
<!--(click)="selectedDay = viewDate"-->
|
<!--(click)="selectedDay = viewDate"-->
|
||||||
<md-icon>today</md-icon>
|
<mat-icon>today</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button md-button class="mat-icon-button" (click)="view='day'"
|
<button mat-button class="mat-icon-button" (click)="view='day'"
|
||||||
aria-label="Day" md-tooltip="Day">
|
aria-label="Day" matTooltip="Day">
|
||||||
<md-icon>view_day</md-icon>
|
<mat-icon>view_day</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button md-button class="mat-icon-button" (click)="view='week'"
|
<button mat-button class="mat-icon-button" (click)="view='week'"
|
||||||
aria-label="Week" md-tooltip="Week">
|
aria-label="Week" matTooltip="Week">
|
||||||
<md-icon>view_week</md-icon>
|
<mat-icon>view_week</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button md-button class="mat-icon-button" (click)="view='month'"
|
<button mat-button class="mat-icon-button" (click)="view='month'"
|
||||||
aria-label="Month" md-tooltip="Month">
|
aria-label="Month" matTooltip="Month">
|
||||||
<md-icon>view_module</md-icon>
|
<mat-icon>view_module</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -53,35 +53,35 @@
|
|||||||
<div class="header-bottom" fxLayout="row" fxLayoutAlign="center center"
|
<div class="header-bottom" fxLayout="row" fxLayoutAlign="center center"
|
||||||
*fuseIfOnDom [@animate]="{value:'*',params:{delay:'150ms'}}">
|
*fuseIfOnDom [@animate]="{value:'*',params:{delay:'150ms'}}">
|
||||||
|
|
||||||
<button md-button class="mat-icon-button arrow"
|
<button mat-button class="mat-icon-button arrow"
|
||||||
mwlCalendarPreviousView
|
mwlCalendarPreviousView
|
||||||
[view]="view"
|
[view]="view"
|
||||||
[(viewDate)]="viewDate"
|
[(viewDate)]="viewDate"
|
||||||
(viewDateChange)="selectedDay = {date:$event}"
|
(viewDateChange)="selectedDay = {date:$event}"
|
||||||
aria-label="Previous">
|
aria-label="Previous">
|
||||||
<md-icon>chevron_left</md-icon>
|
<mat-icon>chevron_left</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div class="title">
|
<div class="title">
|
||||||
{{ viewDate | calendarDate:(view + 'ViewTitle'):'en' }}
|
{{ viewDate | calendarDate:(view + 'ViewTitle'):'en' }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button md-button class="mat-icon-button arrow"
|
<button mat-button class="mat-icon-button arrow"
|
||||||
mwlCalendarNextView
|
mwlCalendarNextView
|
||||||
[view]="view"
|
[view]="view"
|
||||||
[(viewDate)]="viewDate"
|
[(viewDate)]="viewDate"
|
||||||
(viewDateChange)="selectedDay = {date:$event}"
|
(viewDateChange)="selectedDay = {date:$event}"
|
||||||
aria-label="Next">
|
aria-label="Next">
|
||||||
<md-icon>chevron_right</md-icon>
|
<mat-icon>chevron_right</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<!-- / HEADER BOTTOM -->
|
<!-- / HEADER BOTTOM -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- ADD EVENT BUTTON -->
|
<!-- ADD EVENT BUTTON -->
|
||||||
<button md-fab class="add-event-button mat-warn" (click)="addEvent()" aria-label="Add event"
|
<button mat-fab class="add-event-button mat-warn" (click)="addEvent()" aria-label="Add event"
|
||||||
*fuseIfOnDom [@animate]="{value:'*',params:{delay:'300ms',scale:'0.2'}}">
|
*fuseIfOnDom [@animate]="{value:'*',params:{delay:'300ms',scale:'0.2'}}">
|
||||||
<md-icon>add</md-icon>
|
<mat-icon>add</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<!-- / ADD EVENT BUTTON -->
|
<!-- / ADD EVENT BUTTON -->
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -303,7 +303,7 @@
|
|||||||
z-index: 10;
|
z-index: 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
md-icon {
|
mat-icon {
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { startOfDay, endOfDay, subDays, addDays, endOfMonth, isSameDay, isSameMonth, addHours } from 'date-fns';
|
import { startOfDay, endOfDay, subDays, addDays, endOfMonth, isSameDay, isSameMonth, addHours } from 'date-fns';
|
||||||
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
|
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
|
||||||
import { Subject } from 'rxjs/Subject';
|
import { Subject } from 'rxjs/Subject';
|
||||||
import { MdDialog, MdDialogRef } from '@angular/material';
|
import { MatDialog, MatDialogRef } from '@angular/material';
|
||||||
import { FuseCalendarEventFormDialogComponent } from './event-form/event-form.component';
|
import { FuseCalendarEventFormDialogComponent } from './event-form/event-form.component';
|
||||||
import { FormGroup } from '@angular/forms';
|
import { FormGroup } from '@angular/forms';
|
||||||
import { CalendarEventModel } from './event.model';
|
import { CalendarEventModel } from './event.model';
|
||||||
@@ -38,12 +38,12 @@ export class FuseCalendarComponent implements OnInit
|
|||||||
|
|
||||||
dialogRef: any;
|
dialogRef: any;
|
||||||
|
|
||||||
confirmDialogRef: MdDialogRef<FuseConfirmDialogComponent>;
|
confirmDialogRef: MatDialogRef<FuseConfirmDialogComponent>;
|
||||||
|
|
||||||
selectedDay: any;
|
selectedDay: any;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
public dialog: MdDialog,
|
public dialog: MatDialog,
|
||||||
public calendarService: CalendarService
|
public calendarService: CalendarService
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
|
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs/Observable';
|
||||||
import { Http } from '@angular/http';
|
|
||||||
import { Subject } from 'rxjs/Subject';
|
import { Subject } from 'rxjs/Subject';
|
||||||
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CalendarService implements Resolve<any>
|
export class CalendarService implements Resolve<any>
|
||||||
@@ -10,7 +10,7 @@ export class CalendarService implements Resolve<any>
|
|||||||
events: any;
|
events: any;
|
||||||
onEventsUpdated = new Subject<any>();
|
onEventsUpdated = new Subject<any>();
|
||||||
|
|
||||||
constructor(private http: Http)
|
constructor(private http: HttpClient)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -34,8 +34,8 @@ export class CalendarService implements Resolve<any>
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
|
||||||
this.http.get('api/calendar/events')
|
this.http.get('api/calendar/events')
|
||||||
.subscribe(response => {
|
.subscribe((response: any) => {
|
||||||
this.events = response.json().data.data;
|
this.events = response.data;
|
||||||
this.onEventsUpdated.next(this.events);
|
this.onEventsUpdated.next(this.events);
|
||||||
resolve(this.events);
|
resolve(this.events);
|
||||||
}, reject);
|
}, reject);
|
||||||
@@ -49,7 +49,7 @@ export class CalendarService implements Resolve<any>
|
|||||||
id : 'events',
|
id : 'events',
|
||||||
data: [...events]
|
data: [...events]
|
||||||
})
|
})
|
||||||
.subscribe(response => {
|
.subscribe((response: any) => {
|
||||||
this.getEvents();
|
this.getEvents();
|
||||||
}, reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,40 +1,40 @@
|
|||||||
<div class="dialog-content-wrapper">
|
<div class="dialog-content-wrapper">
|
||||||
<md-toolbar md-dialog-title class="mat-accent m-0">
|
<mat-toolbar matDialogTitle class="mat-accent m-0">
|
||||||
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
<span class="title dialog-title">{{dialogTitle}}</span>
|
<span class="title dialog-title">{{dialogTitle}}</span>
|
||||||
<button md-button class="mat-icon-button"
|
<button mat-button class="mat-icon-button"
|
||||||
(click)="dialogRef.close()"
|
(click)="dialogRef.close()"
|
||||||
aria-label="Close dialog">
|
aria-label="Close dialog">
|
||||||
<md-icon>close</md-icon>
|
<mat-icon>close</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</md-toolbar>
|
</mat-toolbar>
|
||||||
|
|
||||||
<div md-dialog-content class="p-24 m-0" fusePerfectScrollbar>
|
<div mat-dialog-content class="p-24 m-0" fusePerfectScrollbar>
|
||||||
|
|
||||||
<form name="eventForm" [formGroup]="eventForm" class="event-form w-100-p" fxLayout="column" fxFlex>
|
<form name="eventForm" [formGroup]="eventForm" class="event-form w-100-p" fxLayout="column" fxFlex>
|
||||||
|
|
||||||
<md-input-container class="w-100-p">
|
<mat-form-field class="w-100-p">
|
||||||
<input mdInput
|
<input matInput
|
||||||
name="title"
|
name="title"
|
||||||
formControlName="title"
|
formControlName="title"
|
||||||
placeholder="Title"
|
placeholder="Title"
|
||||||
required>
|
required>
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
|
|
||||||
<div class="py-16" fxFlex="1 0 auto" fxLayout="row">
|
<div class="py-16" fxFlex="1 0 auto" fxLayout="row">
|
||||||
<md-slide-toggle
|
<mat-slide-toggle
|
||||||
name="allDay"
|
name="allDay"
|
||||||
formControlName="allDay"
|
formControlName="allDay"
|
||||||
class="mr-24"
|
class="mr-24"
|
||||||
aria-label="All day">
|
aria-label="All day">
|
||||||
All Day
|
All Day
|
||||||
</md-slide-toggle>
|
</mat-slide-toggle>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="py-16" fxFlex="1 0 auto" fxLayout="row" formGroupName="color">
|
<div class="py-16" fxFlex="1 0 auto" fxLayout="row" formGroupName="color">
|
||||||
<md-input-container class="mr-24" fxFlex>
|
<mat-form-field class="mr-24" fxFlex>
|
||||||
<input mdInput
|
<input matInput
|
||||||
name="primary color"
|
name="primary color"
|
||||||
formControlName="primary"
|
formControlName="primary"
|
||||||
placeholder="Primary color"
|
placeholder="Primary color"
|
||||||
@@ -43,9 +43,9 @@
|
|||||||
[cpPresetColors]="presetColors"
|
[cpPresetColors]="presetColors"
|
||||||
[style.background]="event.color.primary"
|
[style.background]="event.color.primary"
|
||||||
(colorPickerChange)="event.color.primary = $event; eventForm.patchValue({color:{primary:$event}})"/>
|
(colorPickerChange)="event.color.primary = $event; eventForm.patchValue({color:{primary:$event}})"/>
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
<md-input-container fxFlex>
|
<mat-form-field fxFlex>
|
||||||
<input mdInput
|
<input matInput
|
||||||
name="secondary color"
|
name="secondary color"
|
||||||
formControlName="secondary"
|
formControlName="secondary"
|
||||||
placeholder="Secondary color"
|
placeholder="Secondary color"
|
||||||
@@ -54,62 +54,66 @@
|
|||||||
[cpPresetColors]="presetColors"
|
[cpPresetColors]="presetColors"
|
||||||
[style.background]="event.color.secondary"
|
[style.background]="event.color.secondary"
|
||||||
(colorPickerChange)="event.color.secondary = $event; eventForm.patchValue({color:{secondary:$event}})"/>
|
(colorPickerChange)="event.color.secondary = $event; eventForm.patchValue({color:{secondary:$event}})"/>
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div fxFlex="1 0 auto" fxLayout="row">
|
<div fxFlex="1 0 auto" fxLayout="row">
|
||||||
|
|
||||||
<md-form-field class="mr-24" fxFlex>
|
<mat-form-field class="mr-24" fxFlex>
|
||||||
<input mdInput [mdDatepicker]="startDatePicker" placeholder="Start Date">
|
<input matInput [matDatepicker]="startDatePicker" placeholder="Start Date"
|
||||||
<md-datepicker-toggle mdSuffix [for]="startDatePicker"></md-datepicker-toggle>
|
name="start"
|
||||||
<md-datepicker #startDatePicker></md-datepicker>
|
formControlName="start">
|
||||||
</md-form-field>
|
<mat-datepicker-toggle matSuffix [for]="startDatePicker"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #startDatePicker></mat-datepicker>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
<md-input-container class="no-errors-spacer" fxFlex md-no-float>
|
<mat-form-field class="no-errors-spacer" fxFlex mat-no-float>
|
||||||
<input mdInput placeholder="Start Time">
|
<input matInput placeholder="Start Time">
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div fxFlex="1 0 auto" fxLayout="row">
|
<div fxFlex="1 0 auto" fxLayout="row">
|
||||||
|
|
||||||
<md-form-field class="mr-24" fxFlex>
|
<mat-form-field class="mr-24" fxFlex>
|
||||||
<input mdInput [mdDatepicker]="endDatePicker" placeholder="End Date">
|
<input matInput [matDatepicker]="endDatePicker" placeholder="End Date"
|
||||||
<md-datepicker-toggle mdSuffix [for]="endDatePicker"></md-datepicker-toggle>
|
name="end"
|
||||||
<md-datepicker #endDatePicker></md-datepicker>
|
formControlName="end">
|
||||||
</md-form-field>
|
<mat-datepicker-toggle matSuffix [for]="endDatePicker"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #endDatePicker></mat-datepicker>
|
||||||
|
</mat-form-field>
|
||||||
|
|
||||||
<md-input-container class="no-errors-spacer" fxFlex md-no-float>
|
<mat-form-field class="no-errors-spacer" fxFlex mat-no-float>
|
||||||
<input mdInput placeholder="End Time">
|
<input matInput placeholder="End Time">
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<md-input-container formGroupName="meta" class="w-100-p">
|
<mat-form-field formGroupName="meta" class="w-100-p">
|
||||||
<input mdInput
|
<input matInput
|
||||||
name="location"
|
name="location"
|
||||||
formControlName="location"
|
formControlName="location"
|
||||||
placeholder="Location">
|
placeholder="Location">
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
|
|
||||||
<md-input-container formGroupName="meta" class="w-100-p">
|
<mat-form-field formGroupName="meta" class="w-100-p">
|
||||||
|
|
||||||
<textarea mdInput
|
<textarea matInput
|
||||||
formControlName="notes"
|
formControlName="notes"
|
||||||
placeholder="Notes"
|
placeholder="Notes"
|
||||||
md-maxlength="250"
|
mat-maxlength="250"
|
||||||
max-rows="4">
|
max-rows="4">
|
||||||
</textarea>
|
</textarea>
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div md-dialog-actions class="m-0 p-16" fxLayout="row" fxLayoutAlign="space-between center">
|
<div mat-dialog-actions class="m-0 p-16" fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
|
|
||||||
<button *ngIf="action !=='edit'"
|
<button *ngIf="action !=='edit'"
|
||||||
md-raised-button
|
mat-raised-button
|
||||||
(click)="dialogRef.close(eventForm)"
|
(click)="dialogRef.close(eventForm)"
|
||||||
class="save-button mat-accent"
|
class="save-button mat-accent"
|
||||||
[disabled]="eventForm.invalid"
|
[disabled]="eventForm.invalid"
|
||||||
@@ -118,7 +122,7 @@
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button *ngIf="action ==='edit'"
|
<button *ngIf="action ==='edit'"
|
||||||
md-raised-button
|
mat-raised-button
|
||||||
(click)="dialogRef.close(['save',eventForm])"
|
(click)="dialogRef.close(['save',eventForm])"
|
||||||
class="save-button mat-accent"
|
class="save-button mat-accent"
|
||||||
[disabled]="eventForm.invalid"
|
[disabled]="eventForm.invalid"
|
||||||
@@ -127,12 +131,12 @@
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button *ngIf="action ==='edit'"
|
<button *ngIf="action ==='edit'"
|
||||||
md-button
|
mat-button
|
||||||
class="mat-icon-button"
|
class="mat-icon-button"
|
||||||
(click)="dialogRef.close(['delete',eventForm])"
|
(click)="dialogRef.close(['delete',eventForm])"
|
||||||
aria-label="Delete"
|
aria-label="Delete"
|
||||||
md-tooltip="Delete">
|
matTooltip="Delete">
|
||||||
<md-icon>delete</md-icon>
|
<mat-icon>delete</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
import { Component, Inject, OnInit, ViewEncapsulation } from '@angular/core';
|
import { Component, Inject, OnInit, ViewEncapsulation } from '@angular/core';
|
||||||
import { MD_DIALOG_DATA, MdDialogRef } from '@angular/material';
|
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
|
||||||
import { CalendarEvent } from 'angular-calendar';
|
import { CalendarEvent } from 'angular-calendar';
|
||||||
import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
|
import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
|
||||||
import { CalendarEventModel } from '../event.model';
|
import { CalendarEventModel } from '../event.model';
|
||||||
import { MatColors } from '../../../../../core/matColors';
|
import { MatColors } from '../../../../../core/matColors';
|
||||||
import 'rxjs/Rx';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector : 'fuse-calendar-event-form-dialog',
|
selector : 'fuse-calendar-event-form-dialog',
|
||||||
@@ -22,8 +21,8 @@ export class FuseCalendarEventFormDialogComponent implements OnInit
|
|||||||
presetColors = MatColors.presets;
|
presetColors = MatColors.presets;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
public dialogRef: MdDialogRef<FuseCalendarEventFormDialogComponent>,
|
public dialogRef: MatDialogRef<FuseCalendarEventFormDialogComponent>,
|
||||||
@Inject(MD_DIALOG_DATA) private data: any,
|
@Inject(MAT_DIALOG_DATA) private data: any,
|
||||||
private formBuilder: FormBuilder
|
private formBuilder: FormBuilder
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<div class="big-circle mat-elevation-z1 app-logo" fxLayout="column" fxLayoutAlign="center center"
|
<div class="big-circle mat-elevation-z1 app-logo" fxLayout="column" fxLayoutAlign="center center"
|
||||||
*fuseIfOnDom [@animate]="{value:'*',params:{delay:'50ms',scale:'0.2'}}">
|
*fuseIfOnDom [@animate]="{value:'*',params:{delay:'50ms',scale:'0.2'}}">
|
||||||
|
|
||||||
<md-icon class="s-64 s-md-128">chat</md-icon>
|
<mat-icon class="s-64 s-mat-128">chat</mat-icon>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
<span fxHide fxShow.gt-md class="app-message" *fuseIfOnDom [@animate]="{value:'*',params:{delay:'200ms',y:'50px'}}">Select contact to start the chat!..</span>
|
<span fxHide fxShow.gt-md class="app-message" *fuseIfOnDom [@animate]="{value:'*',params:{delay:'200ms',y:'50px'}}">Select contact to start the chat!..</span>
|
||||||
|
|
||||||
<button md-raised-button fxHide.gt-md class="" fuseMdSidenavToggler="chat-left-sidenav">
|
<button mat-raised-button fxHide.gt-md class="" fuseMatSidenavToggler="chat-left-sidenav">
|
||||||
Select contact to start the chat!..
|
Select contact to start the chat!..
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
line-height: 160px;
|
line-height: 160px;
|
||||||
}
|
}
|
||||||
|
|
||||||
md-icon {
|
mat-icon {
|
||||||
color: mat-color($accent);
|
color: mat-color($accent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,23 +2,23 @@
|
|||||||
<div class="chat" fxFlex fxLayout="column">
|
<div class="chat" fxFlex fxLayout="column">
|
||||||
|
|
||||||
<!-- CHAT TOOLBAR -->
|
<!-- CHAT TOOLBAR -->
|
||||||
<md-toolbar class="chat-toolbar">
|
<mat-toolbar class="chat-toolbar">
|
||||||
|
|
||||||
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
|
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
|
|
||||||
<!-- RESPONSIVE CHATS BUTTON-->
|
<!-- RESPONSIVE CHATS BUTTON-->
|
||||||
<div md-button fxHide.gt-md class="responsive-chats-button mat-icon-button mr-16"
|
<div mat-button fxHide.gt-md class="responsive-chats-button mat-icon-button mr-16"
|
||||||
fuseMdSidenavToggler="chat-left-sidenav"
|
fuseMatSidenavToggler="chat-left-sidenav"
|
||||||
aria-label="chats button">
|
aria-label="chats button">
|
||||||
<md-icon class="s-36">chat</md-icon>
|
<mat-icon class="s-36">chat</mat-icon>
|
||||||
</div>
|
</div>
|
||||||
<!-- / RESPONSIVE CHATS BUTTON-->
|
<!-- / RESPONSIVE CHATS BUTTON-->
|
||||||
|
|
||||||
<!-- CHAT CONTACT-->
|
<!-- CHAT CONTACT-->
|
||||||
<div class="chat-contact" fxLayout="row" fxLayoutAlign="start center"
|
<div class="chat-contact" fxLayout="row" fxLayoutAlign="start center"
|
||||||
fuseMdSidenavToggler="chat-right-sidenav" (click)="selectContact()">
|
fuseMatSidenavToggler="chat-right-sidenav" (click)="selectContact()">
|
||||||
|
|
||||||
<div class="avatar-wrapper">
|
<div class="avatar-wrapper">
|
||||||
|
|
||||||
@@ -26,9 +26,9 @@
|
|||||||
class="avatar"
|
class="avatar"
|
||||||
alt="{{contact.name}}"/>
|
alt="{{contact.name}}"/>
|
||||||
|
|
||||||
<md-icon class="s-16 status"
|
<mat-icon class="s-16 status"
|
||||||
[ngClass]="contact.status">
|
[ngClass]="contact.status">
|
||||||
</md-icon>
|
</mat-icon>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="chat-contact-name">
|
<div class="chat-contact-name">
|
||||||
@@ -40,20 +40,20 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button md-button class="mat-icon-button" [mdMenuTriggerFor]="contactMenu"
|
<button mat-button class="mat-icon-button" [matMenuTriggerFor]="contactMenu"
|
||||||
aria-label="more">
|
aria-label="more">
|
||||||
<md-icon>more_vert</md-icon>
|
<mat-icon>more_vert</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<md-menu #contactMenu="mdMenu">
|
<mat-menu #contactMenu="matMenu">
|
||||||
<button md-menu-item fuseMdSidenavToggler="chat-right-sidenav" (click)="selectContact()">
|
<button mat-menu-item fuseMatSidenavToggler="chat-right-sidenav" (click)="selectContact()">
|
||||||
Contact Info
|
Contact Info
|
||||||
</button>
|
</button>
|
||||||
</md-menu>
|
</mat-menu>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</md-toolbar>
|
</mat-toolbar>
|
||||||
<!-- / CHAT TOOLBAR -->
|
<!-- / CHAT TOOLBAR -->
|
||||||
|
|
||||||
<!-- CHAT CONTENT -->
|
<!-- CHAT CONTENT -->
|
||||||
@@ -98,13 +98,13 @@
|
|||||||
fxLayout="row"
|
fxLayout="row"
|
||||||
fxLayoutAlign="start center">
|
fxLayoutAlign="start center">
|
||||||
|
|
||||||
<md-input-container class="" fxFlex floatPlaceholder="never">
|
<mat-form-field class="" fxFlex floatPlaceholder="never">
|
||||||
<textarea mdInput #replyInput placeholder="Type and hit enter to send message"
|
<textarea matInput #replyInput placeholder="Type and hit enter to send message"
|
||||||
ngModel name="message"></textarea>
|
ngModel name="message"></textarea>
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
|
|
||||||
<button md-fab class="" type="submit" aria-label="Send message">
|
<button mat-fab class="" type="submit" aria-label="Send message">
|
||||||
<md-icon>send</md-icon>
|
<mat-icon>send</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
#chat-content {
|
#chat-content {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
|
overflow: auto;
|
||||||
|
|
||||||
.message-row {
|
.message-row {
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
@@ -107,7 +108,7 @@
|
|||||||
|
|
||||||
.reply-form {
|
.reply-form {
|
||||||
|
|
||||||
md-input-container {
|
mat-form-field {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding-right: 16px;
|
padding-right: 16px;
|
||||||
|
|
||||||
@@ -120,12 +121,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.md-errors-spacer {
|
.mat-errors-spacer {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.md-button {
|
.mat-button {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<div id="chat" class="page-layout carded fullwidth">
|
<div id="chat" class="page-layout carded fullwidth">
|
||||||
|
|
||||||
<!-- TOP BACKGROUND -->
|
<!-- TOP BACKGROUND -->
|
||||||
<div class="top-bg md-accent-bg"></div>
|
<div class="top-bg mat-accent-bg"></div>
|
||||||
<!-- / TOP BACKGROUND -->
|
<!-- / TOP BACKGROUND -->
|
||||||
|
|
||||||
<!-- CENTER -->
|
<!-- CENTER -->
|
||||||
@@ -10,13 +10,13 @@
|
|||||||
<!-- CONTENT CARD -->
|
<!-- CONTENT CARD -->
|
||||||
<div class="content-card">
|
<div class="content-card">
|
||||||
|
|
||||||
<md-sidenav-container>
|
<mat-sidenav-container>
|
||||||
|
|
||||||
<!-- LEFT SIDENAV -->
|
<!-- LEFT SIDENAV -->
|
||||||
<md-sidenav class="sidenav mat-sidenav-opened" align="start" opened="true" mode="side"
|
<mat-sidenav class="sidenav mat-sidenav-opened" align="start" opened="true" mode="side"
|
||||||
fuseMdSidenavHelper="chat-left-sidenav" md-is-locked-open="gt-md">
|
fuseMatSidenavHelper="chat-left-sidenav" mat-is-locked-open="gt-md">
|
||||||
<fuse-chat-left-sidenav></fuse-chat-left-sidenav>
|
<fuse-chat-left-sidenav></fuse-chat-left-sidenav>
|
||||||
</md-sidenav>
|
</mat-sidenav>
|
||||||
<!-- / LEFT SIDENAV -->
|
<!-- / LEFT SIDENAV -->
|
||||||
|
|
||||||
<!-- CONTENT -->
|
<!-- CONTENT -->
|
||||||
@@ -26,13 +26,13 @@
|
|||||||
<!-- / CONTENT -->
|
<!-- / CONTENT -->
|
||||||
|
|
||||||
<!-- RIGHT SIDENAV -->
|
<!-- RIGHT SIDENAV -->
|
||||||
<md-sidenav class="sidenav mat-sidenav-opened" align="end" opened="false" mode="over"
|
<mat-sidenav class="sidenav mat-sidenav-opened" align="end" opened="false" mode="over"
|
||||||
fuseMdSidenavHelper="chat-right-sidenav">
|
fuseMatSidenavHelper="chat-right-sidenav">
|
||||||
<fuse-chat-right-sidenav></fuse-chat-right-sidenav>
|
<fuse-chat-right-sidenav></fuse-chat-right-sidenav>
|
||||||
</md-sidenav>
|
</mat-sidenav>
|
||||||
<!-- / RIGHT SIDENAV -->
|
<!-- / RIGHT SIDENAV -->
|
||||||
|
|
||||||
</md-sidenav-container>
|
</mat-sidenav-container>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- / CONTENT CARD -->
|
<!-- / CONTENT CARD -->
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
md-sidenav {
|
mat-sidenav {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
width: 400px;
|
width: 400px;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
|
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs/Observable';
|
||||||
import { Http } from '@angular/http';
|
import { HttpClient } from '@angular/common/http';
|
||||||
import { Subject } from 'rxjs/Subject';
|
import { Subject } from 'rxjs/Subject';
|
||||||
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
|
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
|
||||||
import { FuseUtils } from '../../../../core/fuseUtils';
|
import { FuseUtils } from '../../../../core/fuseUtils';
|
||||||
@@ -19,7 +19,7 @@ export class ChatService implements Resolve<any>
|
|||||||
onLeftSidenavViewChanged = new Subject<any>();
|
onLeftSidenavViewChanged = new Subject<any>();
|
||||||
onRightSidenavViewChanged = new Subject<any>();
|
onRightSidenavViewChanged = new Subject<any>();
|
||||||
|
|
||||||
constructor(private http: Http)
|
constructor(private http: HttpClient)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,8 +47,8 @@ export class ChatService implements Resolve<any>
|
|||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.http.get('api/chat-chats/' + chatItem.id)
|
this.http.get('api/chat-chats/' + chatItem.id)
|
||||||
.subscribe(response => {
|
.subscribe((response: any) => {
|
||||||
const chat = response.json().data;
|
const chat = response;
|
||||||
|
|
||||||
const chatContact = this.contacts.find((contact) => {
|
const chatContact = this.contacts.find((contact) => {
|
||||||
return contact.id === contactId;
|
return contact.id === contactId;
|
||||||
@@ -105,7 +105,7 @@ export class ChatService implements Resolve<any>
|
|||||||
* Post the created chat
|
* Post the created chat
|
||||||
*/
|
*/
|
||||||
this.http.post('api/chat-chats', {...chat})
|
this.http.post('api/chat-chats', {...chat})
|
||||||
.subscribe(response => {
|
.subscribe((response: any) => {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Post the new the user data
|
* Post the new the user data
|
||||||
@@ -150,7 +150,7 @@ export class ChatService implements Resolve<any>
|
|||||||
updateUserData(userData)
|
updateUserData(userData)
|
||||||
{
|
{
|
||||||
this.http.post('api/chat-user/' + this.user.id, userData)
|
this.http.post('api/chat-user/' + this.user.id, userData)
|
||||||
.subscribe(response => {
|
.subscribe((response: any) => {
|
||||||
this.user = userData;
|
this.user = userData;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -211,8 +211,8 @@ export class ChatService implements Resolve<any>
|
|||||||
{
|
{
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.http.get('api/chat-contacts')
|
this.http.get('api/chat-contacts')
|
||||||
.subscribe(response => {
|
.subscribe((response: any) => {
|
||||||
resolve(response.json().data);
|
resolve(response);
|
||||||
}, reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -225,8 +225,8 @@ export class ChatService implements Resolve<any>
|
|||||||
{
|
{
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.http.get('api/chat-chats')
|
this.http.get('api/chat-chats')
|
||||||
.subscribe(response => {
|
.subscribe((response: any) => {
|
||||||
resolve(response.json().data);
|
resolve(response);
|
||||||
}, reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -239,8 +239,8 @@ export class ChatService implements Resolve<any>
|
|||||||
{
|
{
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.http.get('api/chat-user')
|
this.http.get('api/chat-user')
|
||||||
.subscribe(response => {
|
.subscribe((response: any) => {
|
||||||
resolve(response.json().data[0]);
|
resolve(response[0]);
|
||||||
}, reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<!-- SIDENAV HEADER -->
|
<!-- SIDENAV HEADER -->
|
||||||
<div class="sidenav-header">
|
<div class="sidenav-header">
|
||||||
<!-- CHATS TOOLBAR -->
|
<!-- CHATS TOOLBAR -->
|
||||||
<md-toolbar>
|
<mat-toolbar>
|
||||||
|
|
||||||
<!-- TOOLBAR TOP -->
|
<!-- TOOLBAR TOP -->
|
||||||
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
@@ -12,75 +12,75 @@
|
|||||||
<!-- USER AVATAR -->
|
<!-- USER AVATAR -->
|
||||||
<img (click)="changeLeftSidenavView('user')"
|
<img (click)="changeLeftSidenavView('user')"
|
||||||
src="{{user.avatar}}"
|
src="{{user.avatar}}"
|
||||||
class="md-avatar avatar"
|
class="mat-avatar avatar"
|
||||||
alt="{{user.name}}"/>
|
alt="{{user.name}}"/>
|
||||||
<!-- / USER AVATAR -->
|
<!-- / USER AVATAR -->
|
||||||
|
|
||||||
<md-icon class="s-16 status" [ngClass]="user.status" [mdMenuTriggerFor]="userStatusMenu"></md-icon>
|
<mat-icon class="s-16 status" [ngClass]="user.status" [matMenuTriggerFor]="userStatusMenu"></mat-icon>
|
||||||
|
|
||||||
<!-- USER STATUS -->
|
<!-- USER STATUS -->
|
||||||
<md-menu id="user-status-menu" #userStatusMenu="mdMenu">
|
<mat-menu id="user-status-menu" #userStatusMenu="matMenu">
|
||||||
|
|
||||||
<button md-menu-item (click)="setUserStatus('online')">
|
<button mat-menu-item (click)="setUserStatus('online')">
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon class="s-16 status online"></md-icon>
|
<mat-icon class="s-16 status online"></mat-icon>
|
||||||
<span>Online</span>
|
<span>Online</span>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button md-menu-item (click)="setUserStatus('away')">
|
<button mat-menu-item (click)="setUserStatus('away')">
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon class="s-16 status away"></md-icon>
|
<mat-icon class="s-16 status away"></mat-icon>
|
||||||
<span>Away</span>
|
<span>Away</span>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button md-menu-item (click)="setUserStatus('do-not-disturb')">
|
<button mat-menu-item (click)="setUserStatus('do-not-disturb')">
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon class="s-16 status do-not-disturb"></md-icon>
|
<mat-icon class="s-16 status do-not-disturb"></mat-icon>
|
||||||
<span>Do not disturb</span>
|
<span>Do not disturb</span>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button md-menu-item (click)="setUserStatus('offline')">
|
<button mat-menu-item (click)="setUserStatus('offline')">
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon class="s-16 status offline"></md-icon>
|
<mat-icon class="s-16 status offline"></mat-icon>
|
||||||
<span>Offline</span>
|
<span>Offline</span>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
</md-menu>
|
</mat-menu>
|
||||||
<!-- / USER STATUS -->
|
<!-- / USER STATUS -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- / USER AVATAR -->
|
<!-- / USER AVATAR -->
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button md-button class="mat-icon-button"
|
<button mat-button class="mat-icon-button"
|
||||||
[mdMenuTriggerFor]="userMenu"
|
[matMenuTriggerFor]="userMenu"
|
||||||
aria-label="more">
|
aria-label="more">
|
||||||
<md-icon>more_vert</md-icon>
|
<mat-icon>more_vert</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<md-menu #userMenu="mdMenu">
|
<mat-menu #userMenu="matMenu">
|
||||||
<button md-menu-item (click)="changeLeftSidenavView('user')">
|
<button mat-menu-item (click)="changeLeftSidenavView('user')">
|
||||||
Profile
|
Profile
|
||||||
</button>
|
</button>
|
||||||
<button md-menu-item (click)="logout()">
|
<button mat-menu-item (click)="logout()">
|
||||||
Logout
|
Logout
|
||||||
</button>
|
</button>
|
||||||
</md-menu>
|
</mat-menu>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- / TOOLBAR TOP -->
|
<!-- / TOOLBAR TOP -->
|
||||||
|
|
||||||
<!-- TOOLBAR BOTTOM -->
|
<!-- TOOLBAR BOTTOM -->
|
||||||
<md-toolbar-row>
|
<mat-toolbar-row>
|
||||||
|
|
||||||
<!-- SEARCH -->
|
<!-- SEARCH -->
|
||||||
<div class="search-wrapper" fxFlex fxLayout="row" fxLayoutAlign="start center">
|
<div class="search-wrapper" fxFlex fxLayout="row" fxLayoutAlign="start center">
|
||||||
|
|
||||||
<div class="search" fxFlex fxLayout="row" fxLayoutAlign="start center">
|
<div class="search" fxFlex fxLayout="row" fxLayoutAlign="start center">
|
||||||
|
|
||||||
<md-icon>search</md-icon>
|
<mat-icon>search</mat-icon>
|
||||||
|
|
||||||
<input [(ngModel)]="searchText" type="text" placeholder="Search or start new chat" fxFlex>
|
<input [(ngModel)]="searchText" type="text" placeholder="Search or start new chat" fxFlex>
|
||||||
|
|
||||||
@@ -88,10 +88,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- / SEARCH -->
|
<!-- / SEARCH -->
|
||||||
|
|
||||||
</md-toolbar-row>
|
</mat-toolbar-row>
|
||||||
<!-- / TOOLBAR BOTTOM -->
|
<!-- / TOOLBAR BOTTOM -->
|
||||||
|
|
||||||
</md-toolbar>
|
</mat-toolbar>
|
||||||
<!-- / CHATS TOOLBAR -->
|
<!-- / CHATS TOOLBAR -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -106,11 +106,11 @@
|
|||||||
<!-- CHATS LIST-->
|
<!-- CHATS LIST-->
|
||||||
<div class="chat-list" fxLayout="column">
|
<div class="chat-list" fxLayout="column">
|
||||||
|
|
||||||
<div md-subheader *ngIf="(user.chatList | filter: searchText).length > 0">
|
<div matSubheader *ngIf="(user.chatList | filter: searchText).length > 0">
|
||||||
Chats
|
Chats
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button md-button class="contact"
|
<button mat-button class="contact"
|
||||||
*ngFor="let chat of user.chatList | filter: searchText"
|
*ngFor="let chat of user.chatList | filter: searchText"
|
||||||
(click)="getChat(chat.contactId)" ngClass="{'unread':contact.unread}"
|
(click)="getChat(chat.contactId)" ngClass="{'unread':contact.unread}"
|
||||||
[@animate]="{value:'*',params:{y:'100%'}}">
|
[@animate]="{value:'*',params:{y:'100%'}}">
|
||||||
@@ -121,7 +121,7 @@
|
|||||||
<img [src]="contacts |getById:chat.contactId:'avatar'"
|
<img [src]="contacts |getById:chat.contactId:'avatar'"
|
||||||
class="avatar"
|
class="avatar"
|
||||||
alt="{{contacts |getById:chat.contactId:'name'}}"/>
|
alt="{{contacts |getById:chat.contactId:'name'}}"/>
|
||||||
<md-icon class="s-16 status" [ngClass]="contacts |getById:chat.contactId:'status'"></md-icon>
|
<mat-icon class="s-16 status" [ngClass]="contacts |getById:chat.contactId:'status'"></mat-icon>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div fxLayout="row" fxFlex>
|
<div fxLayout="row" fxFlex>
|
||||||
@@ -146,19 +146,19 @@
|
|||||||
<!-- CONTACTS LIST-->
|
<!-- CONTACTS LIST-->
|
||||||
<div class="contact-list" fxLayout="column">
|
<div class="contact-list" fxLayout="column">
|
||||||
|
|
||||||
<div md-subheader *ngIf="(contacts| filter: searchText).length > 0">
|
<div matSubheader *ngIf="(contacts| filter: searchText).length > 0">
|
||||||
Contacts
|
Contacts
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button md-button class="contact"
|
<button mat-button class="contact"
|
||||||
*ngFor="let contact of contacts| filter: searchText"
|
*ngFor="let contact of contacts| filter: searchText"
|
||||||
(click)="getChat(contact.id)"
|
(click)="getChat(contact.id)"
|
||||||
[@animate]="{value:'*',params:{y:'100%'}}">
|
[@animate]="{value:'*',params:{y:'100%'}}">
|
||||||
|
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
<div class="avatar-wrapper" fxFlex="0 1 auto">
|
<div class="avatar-wrapper" fxFlex="0 1 auto">
|
||||||
<img src="{{contact.avatar}}" class="md-avatar avatar" alt="{{contact.name}}"/>
|
<img src="{{contact.avatar}}" class="mat-avatar avatar" alt="{{contact.name}}"/>
|
||||||
<md-icon class="s-16 status" [ngClass]="contact.status"></md-icon>
|
<mat-icon class="s-16 status" [ngClass]="contact.status"></mat-icon>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="" fxLayout="column" fxLayoutAlign="center start">
|
<div class="" fxLayout="column" fxLayoutAlign="center start">
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
.sidenav-header {
|
.sidenav-header {
|
||||||
|
|
||||||
md-toolbar {
|
mat-toolbar {
|
||||||
border-bottom: 1px solid rgba(0, 0, 0, .08);
|
border-bottom: 1px solid rgba(0, 0, 0, .08);
|
||||||
|
|
||||||
.avatar-wrapper {
|
.avatar-wrapper {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { ChatService } from '../../../chat.service';
|
import { ChatService } from '../../../chat.service';
|
||||||
import { FuseMdSidenavHelperService } from '../../../../../../../core/directives/md-sidenav-helper/md-sidenav-helper.service';
|
import { FuseMatSidenavHelperService } from '../../../../../../../core/directives/mat-sidenav-helper/mat-sidenav-helper.service';
|
||||||
import { ObservableMedia } from '@angular/flex-layout';
|
import { ObservableMedia } from '@angular/flex-layout';
|
||||||
import { fuseAnimations } from '../../../../../../../core/animations';
|
import { fuseAnimations } from '../../../../../../../core/animations';
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ export class FuseChatChatsSidenavComponent implements OnInit
|
|||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private chatService: ChatService,
|
private chatService: ChatService,
|
||||||
private fuseMdSidenavService: FuseMdSidenavHelperService,
|
private fuseMatSidenavService: FuseMatSidenavHelperService,
|
||||||
public media: ObservableMedia
|
public media: ObservableMedia
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -50,7 +50,7 @@ export class FuseChatChatsSidenavComponent implements OnInit
|
|||||||
|
|
||||||
if ( !this.media.isActive('gt-md') )
|
if ( !this.media.isActive('gt-md') )
|
||||||
{
|
{
|
||||||
this.fuseMdSidenavService.getSidenav('chat-left-sidenav').toggle();
|
this.fuseMatSidenavService.getSidenav('chat-left-sidenav').toggle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,29 +2,29 @@
|
|||||||
<div class="sidenav-header">
|
<div class="sidenav-header">
|
||||||
|
|
||||||
<!-- USER TOOLBAR -->
|
<!-- USER TOOLBAR -->
|
||||||
<md-toolbar>
|
<mat-toolbar>
|
||||||
|
|
||||||
<!-- TOOLBAR TOP -->
|
<!-- TOOLBAR TOP -->
|
||||||
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
|
|
||||||
<button md-button class="mat-icon-button" (click)="changeLeftSidenavView('chats')" aria-label="back">
|
<button mat-button class="mat-icon-button" (click)="changeLeftSidenavView('chats')" aria-label="back">
|
||||||
<md-icon>arrow_back</md-icon>
|
<mat-icon>arrow_back</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- / TOOLBAR TOP -->
|
<!-- / TOOLBAR TOP -->
|
||||||
|
|
||||||
<!-- TOOLBAR BOTTOM -->
|
<!-- TOOLBAR BOTTOM -->
|
||||||
<md-toolbar-row class="toolbar-bottom" fxLayout="column" fxLayoutAlign="center center">
|
<mat-toolbar-row class="toolbar-bottom" fxLayout="column" fxLayoutAlign="center center">
|
||||||
|
|
||||||
<img [src]="user.avatar" class="avatar user-avatar huge" alt="{{user.name}}"/>
|
<img [src]="user.avatar" class="avatar user-avatar huge" alt="{{user.name}}"/>
|
||||||
|
|
||||||
<div class="user-name my-8">{{user.name}}</div>
|
<div class="user-name my-8">{{user.name}}</div>
|
||||||
|
|
||||||
</md-toolbar-row>
|
</mat-toolbar-row>
|
||||||
<!-- / TOOLBAR BOTTOM -->
|
<!-- / TOOLBAR BOTTOM -->
|
||||||
|
|
||||||
</md-toolbar>
|
</mat-toolbar>
|
||||||
<!-- / USER TOOLBAR -->
|
<!-- / USER TOOLBAR -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -32,47 +32,47 @@
|
|||||||
<div class="sidenav-content p-16" fusePerfectScrollbar fxFlex>
|
<div class="sidenav-content p-16" fusePerfectScrollbar fxFlex>
|
||||||
|
|
||||||
<!-- USER MOOD -->
|
<!-- USER MOOD -->
|
||||||
<md-card>
|
<mat-card>
|
||||||
|
|
||||||
<form [formGroup]="userForm" fxLayout="column">
|
<form [formGroup]="userForm" fxLayout="column">
|
||||||
|
|
||||||
<md-input-container class="mb-24" fxFlex="0 1 auto">
|
<mat-form-field class="mb-24" fxFlex="0 1 auto">
|
||||||
<textarea mdInput placeholder="Mood" name="mood"
|
<textarea matInput placeholder="Mood" name="mood"
|
||||||
formControlName="mood" rows="3"></textarea>
|
formControlName="mood" rows="3"></textarea>
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
|
|
||||||
<md-radio-group formControlName="status" fxLayout="column">
|
<mat-radio-group formControlName="status" fxLayout="column">
|
||||||
|
|
||||||
<md-radio-button value="online" class="py-8">
|
<mat-radio-button value="online" class="py-8">
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon class="status online mr-8"></md-icon>
|
<mat-icon class="status online mr-8"></mat-icon>
|
||||||
<span class="mat-h4 m-0">Online</span>
|
<span class="mat-h4 m-0">Online</span>
|
||||||
</div>
|
</div>
|
||||||
</md-radio-button>
|
</mat-radio-button>
|
||||||
|
|
||||||
<md-radio-button value="away" class="py-8">
|
<mat-radio-button value="away" class="py-8">
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon class="status away mr-8"></md-icon>
|
<mat-icon class="status away mr-8"></mat-icon>
|
||||||
<span class="mat-h4 m-0">Away</span>
|
<span class="mat-h4 m-0">Away</span>
|
||||||
</div>
|
</div>
|
||||||
</md-radio-button>
|
</mat-radio-button>
|
||||||
|
|
||||||
<md-radio-button value="do-not-disturb" class="py-8">
|
<mat-radio-button value="do-not-disturb" class="py-8">
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon class="status do-not-disturb mr-8"></md-icon>
|
<mat-icon class="status do-not-disturb mr-8"></mat-icon>
|
||||||
<span class="mat-h4 m-0">Do not disturb</span>
|
<span class="mat-h4 m-0">Do not disturb</span>
|
||||||
</div>
|
</div>
|
||||||
</md-radio-button>
|
</mat-radio-button>
|
||||||
|
|
||||||
<md-radio-button value="offline" class="py-8">
|
<mat-radio-button value="offline" class="py-8">
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon class="status offline mr-8"></md-icon>
|
<mat-icon class="status offline mr-8"></mat-icon>
|
||||||
<span class="mat-h4 m-0">Offline</span>
|
<span class="mat-h4 m-0">Offline</span>
|
||||||
</div>
|
</div>
|
||||||
</md-radio-button>
|
</mat-radio-button>
|
||||||
</md-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</md-card>
|
</mat-card>
|
||||||
<!-- / USER MOOD -->
|
<!-- / USER MOOD -->
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
md-toolbar {
|
mat-toolbar {
|
||||||
background-color: mat-color($accent);
|
background-color: mat-color($accent);
|
||||||
color: map-get($accent, default-contrast);
|
color: map-get($accent, default-contrast);
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import { Component, OnDestroy, OnInit } from '@angular/core';
|
import { Component, OnDestroy, OnInit } from '@angular/core';
|
||||||
import { ChatService } from '../../../chat.service';
|
import { ChatService } from '../../../chat.service';
|
||||||
import { FormControl, FormGroup } from '@angular/forms';
|
import { FormControl, FormGroup } from '@angular/forms';
|
||||||
import 'rxjs/Rx';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector : 'fuse-chat-user-sidenav',
|
selector : 'fuse-chat-user-sidenav',
|
||||||
|
|||||||
@@ -2,31 +2,31 @@
|
|||||||
<div class="sidenav-header" *ngIf="contact">
|
<div class="sidenav-header" *ngIf="contact">
|
||||||
|
|
||||||
<!-- CONTACT TOOLBAR -->
|
<!-- CONTACT TOOLBAR -->
|
||||||
<md-toolbar>
|
<mat-toolbar>
|
||||||
|
|
||||||
<!-- TOOLBAR TOP -->
|
<!-- TOOLBAR TOP -->
|
||||||
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
|
|
||||||
<div>Contact Info</div>
|
<div>Contact Info</div>
|
||||||
|
|
||||||
<button md-button class="mat-icon-button" fuseMdSidenavToggler="chat-right-sidenav" aria-label="close">
|
<button mat-button class="mat-icon-button" fuseMatSidenavToggler="chat-right-sidenav" aria-label="close">
|
||||||
<md-icon>close</md-icon>
|
<mat-icon>close</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- / TOOLBAR TOP -->
|
<!-- / TOOLBAR TOP -->
|
||||||
|
|
||||||
<!-- TOOLBAR BOTTOM -->
|
<!-- TOOLBAR BOTTOM -->
|
||||||
<md-toolbar-row class="toolbar-bottom" fxLayout="column" fxLayoutAlign="center center">
|
<mat-toolbar-row class="toolbar-bottom" fxLayout="column" fxLayoutAlign="center center">
|
||||||
|
|
||||||
<img [src]="contact.avatar" class="avatar contact-avatar huge" alt="{{contact.name}}"/>
|
<img [src]="contact.avatar" class="avatar contact-avatar huge" alt="{{contact.name}}"/>
|
||||||
|
|
||||||
<div class="contact-name my-8">{{contact.name}}</div>
|
<div class="contact-name my-8">{{contact.name}}</div>
|
||||||
|
|
||||||
</md-toolbar-row>
|
</mat-toolbar-row>
|
||||||
<!-- / TOOLBAR BOTTOM -->
|
<!-- / TOOLBAR BOTTOM -->
|
||||||
|
|
||||||
</md-toolbar>
|
</mat-toolbar>
|
||||||
<!-- / CONTACT TOOLBAR -->
|
<!-- / CONTACT TOOLBAR -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -34,14 +34,14 @@
|
|||||||
<div class="sidenav-content p-16" fusePerfectScrollbar fxFlex *ngIf="contact">
|
<div class="sidenav-content p-16" fusePerfectScrollbar fxFlex *ngIf="contact">
|
||||||
|
|
||||||
<!-- CONTACT MOOD -->
|
<!-- CONTACT MOOD -->
|
||||||
<md-card>
|
<mat-card>
|
||||||
|
|
||||||
<md-input-container fxFlex>
|
<mat-form-field fxFlex>
|
||||||
<textarea mdInput placeholder="Mood" name="mood"
|
<textarea matInput placeholder="Mood" name="mood"
|
||||||
[value]="contact.mood" rows="3" disabled>
|
[value]="contact.mood" rows="3" disabled>
|
||||||
</textarea>
|
</textarea>
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
|
|
||||||
</md-card>
|
</mat-card>
|
||||||
<!-- / CONTACT MOOD -->
|
<!-- / CONTACT MOOD -->
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
md-toolbar {
|
mat-toolbar {
|
||||||
background-color: mat-color($accent);
|
background-color: mat-color($accent);
|
||||||
color: map-get($accent, default-contrast);
|
color: map-get($accent, default-contrast);
|
||||||
|
|
||||||
|
|||||||
@@ -1,104 +1,104 @@
|
|||||||
<div class="dialog-content-wrapper">
|
<div class="dialog-content-wrapper">
|
||||||
<md-toolbar md-dialog-title class="mat-accent m-0">
|
<mat-toolbar matDialogTitle class="mat-accent m-0">
|
||||||
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
<span class="title dialog-title">{{dialogTitle}}</span>
|
<span class="title dialog-title">{{dialogTitle}}</span>
|
||||||
<button md-button class="mat-icon-button"
|
<button mat-button class="mat-icon-button"
|
||||||
(click)="dialogRef.close()"
|
(click)="dialogRef.close()"
|
||||||
aria-label="Close dialog">
|
aria-label="Close dialog">
|
||||||
<md-icon>close</md-icon>
|
<mat-icon>close</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<md-toolbar-row class="toolbar-bottom py-8 py-sm-16" fxLayout="column" fxLayoutAlign="center center">
|
<mat-toolbar-row class="toolbar-bottom py-8 py-sm-16" fxLayout="column" fxLayoutAlign="center center">
|
||||||
<img [src]="contact.avatar" class=" avatar contact-avatar huge"
|
<img [src]="contact.avatar" class=" avatar contact-avatar huge"
|
||||||
[alt]="contact.name"/>
|
[alt]="contact.name"/>
|
||||||
<div class="contact-name">{{contact.name}}</div>
|
<div class="contact-name">{{contact.name}}</div>
|
||||||
</md-toolbar-row>
|
</mat-toolbar-row>
|
||||||
</md-toolbar>
|
</mat-toolbar>
|
||||||
|
|
||||||
<div md-dialog-content class="p-24 m-0" fusePerfectScrollbar>
|
<div mat-dialog-content class="p-24 m-0" fusePerfectScrollbar>
|
||||||
|
|
||||||
<form [formGroup]="contactForm">
|
<form [formGroup]="contactForm">
|
||||||
|
|
||||||
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
||||||
<md-icon class="mr-12 mt-12">account_circle</md-icon>
|
<mat-icon class="mr-12 mt-12">account_circle</mat-icon>
|
||||||
<md-input-container fxFlex>
|
<mat-form-field fxFlex>
|
||||||
<input name="name" formControlName="name" placeholder="Name" mdInput required>
|
<input name="name" formControlName="name" placeholder="Name" matInput required>
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
||||||
<md-icon class="mr-12 mt-12"></md-icon>
|
<mat-icon class="mr-12 mt-12"></mat-icon>
|
||||||
<md-input-container fxFlex>
|
<mat-form-field fxFlex>
|
||||||
<input name="lastName" formControlName="lastName" placeholder="Lastname" mdInput>
|
<input name="lastName" formControlName="lastName" placeholder="Lastname" matInput>
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
||||||
<md-icon class="mr-12 mt-12">star</md-icon>
|
<mat-icon class="mr-12 mt-12">star</mat-icon>
|
||||||
<md-input-container fxFlex>
|
<mat-form-field fxFlex>
|
||||||
<input name="nickname" formControlName="nickname" mdInput placeholder="Nickname">
|
<input name="nickname" formControlName="nickname" matInput placeholder="Nickname">
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
||||||
<md-icon class="mr-12 mt-12">phone</md-icon>
|
<mat-icon class="mr-12 mt-12">phone</mat-icon>
|
||||||
<md-input-container fxFlex>
|
<mat-form-field fxFlex>
|
||||||
<input formControlName="phone" mdInput placeholder="Phone number">
|
<input formControlName="phone" matInput placeholder="Phone number">
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
||||||
<md-icon class="mr-12 mt-12">email</md-icon>
|
<mat-icon class="mr-12 mt-12">email</mat-icon>
|
||||||
<md-input-container fxFlex>
|
<mat-form-field fxFlex>
|
||||||
<input name="email" formControlName="email" mdInput type="email" placeholder="Email">
|
<input name="email" formControlName="email" matInput type="email" placeholder="Email">
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
||||||
<md-icon class="mr-12 mt-12">domain</md-icon>
|
<mat-icon class="mr-12 mt-12">domain</mat-icon>
|
||||||
<md-input-container fxFlex>
|
<mat-form-field fxFlex>
|
||||||
<input name="company" formControlName="company" mdInput placeholder="Company">
|
<input name="company" formControlName="company" matInput placeholder="Company">
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
||||||
<md-icon class="mr-12 mt-12">work</md-icon>
|
<mat-icon class="mr-12 mt-12">work</mat-icon>
|
||||||
<md-input-container fxFlex>
|
<mat-form-field fxFlex>
|
||||||
<input name="jobTitle" formControlName="jobTitle" mdInput placeholder="Job title">
|
<input name="jobTitle" formControlName="jobTitle" matInput placeholder="Job title">
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
||||||
<md-form-field class="mr-24" fxFlex>
|
<mat-form-field class="mr-24" fxFlex>
|
||||||
<input mdInput [mdDatepicker]="birthdayDatePicker" placeholder="Birthday">
|
<input matInput [matDatepicker]="birthdayDatePicker" placeholder="Birthday">
|
||||||
<md-datepicker-toggle mdSuffix [for]="birthdayDatePicker"></md-datepicker-toggle>
|
<mat-datepicker-toggle matSuffix [for]="birthdayDatePicker"></mat-datepicker-toggle>
|
||||||
<md-datepicker #birthdayDatePicker></md-datepicker>
|
<mat-datepicker #birthdayDatePicker></mat-datepicker>
|
||||||
</md-form-field>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
<div class="mb-24" fxLayout="row" fxLayoutAlign="start start">
|
||||||
<md-icon class="mr-12 mt-12">home</md-icon>
|
<mat-icon class="mr-12 mt-12">home</mat-icon>
|
||||||
<md-input-container fxFlex>
|
<mat-form-field fxFlex>
|
||||||
<input name="address" formControlName="address" mdInput placeholder="Address">
|
<input name="address" formControlName="address" matInput placeholder="Address">
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div fxLayout="row" class="textarea-wrapper" fxLayoutAlign="start start">
|
<div fxLayout="row" class="textarea-wrapper" fxLayoutAlign="start start">
|
||||||
<md-icon class="mr-12 mt-12">note</md-icon>
|
<mat-icon class="mr-12 mt-12">note</mat-icon>
|
||||||
<md-input-container fxFlex>
|
<mat-form-field fxFlex>
|
||||||
<textarea name="notes" formControlName="notes" placeholder="Notes" mdInput type="text" max-rows="4"></textarea>
|
<textarea name="notes" formControlName="notes" placeholder="Notes" matInput type="text" max-rows="4"></textarea>
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div md-dialog-actions class="m-0 p-16" fxLayout="row" fxLayoutAlign="space-between center">
|
<div mat-dialog-actions class="m-0 p-16" fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
|
|
||||||
<button *ngIf="action !=='edit'"
|
<button *ngIf="action !=='edit'"
|
||||||
md-raised-button
|
mat-raised-button
|
||||||
(click)="dialogRef.close(contactForm)"
|
(click)="dialogRef.close(contactForm)"
|
||||||
class="save-button mat-accent"
|
class="save-button mat-accent"
|
||||||
[disabled]="contactForm.invalid"
|
[disabled]="contactForm.invalid"
|
||||||
@@ -107,7 +107,7 @@
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button *ngIf="action ==='edit'"
|
<button *ngIf="action ==='edit'"
|
||||||
md-raised-button
|
mat-raised-button
|
||||||
(click)="dialogRef.close(['save',contactForm])"
|
(click)="dialogRef.close(['save',contactForm])"
|
||||||
class="save-button mat-accent"
|
class="save-button mat-accent"
|
||||||
[disabled]="contactForm.invalid"
|
[disabled]="contactForm.invalid"
|
||||||
@@ -116,12 +116,12 @@
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button *ngIf="action ==='edit'"
|
<button *ngIf="action ==='edit'"
|
||||||
md-button
|
mat-button
|
||||||
class="mat-icon-button"
|
class="mat-icon-button"
|
||||||
(click)="dialogRef.close(['delete',contactForm])"
|
(click)="dialogRef.close(['delete',contactForm])"
|
||||||
aria-label="Delete"
|
aria-label="Delete"
|
||||||
md-tooltip="Delete">
|
matTooltip="Delete">
|
||||||
<md-icon>delete</md-icon>
|
<mat-icon>delete</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import { Component, Inject, OnInit, ViewEncapsulation } from '@angular/core';
|
import { Component, Inject, OnInit, ViewEncapsulation } from '@angular/core';
|
||||||
import { MD_DIALOG_DATA, MdDialogRef } from '@angular/material';
|
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
|
||||||
import { CalendarEvent } from 'angular-calendar';
|
import { CalendarEvent } from 'angular-calendar';
|
||||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||||
import 'rxjs/Rx';
|
|
||||||
import { Contact } from '../contact.model';
|
import { Contact } from '../contact.model';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@@ -21,8 +20,8 @@ export class FuseContactsContactFormDialogComponent implements OnInit
|
|||||||
contact: Contact;
|
contact: Contact;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
public dialogRef: MdDialogRef<FuseContactsContactFormDialogComponent>,
|
public dialogRef: MatDialogRef<FuseContactsContactFormDialogComponent>,
|
||||||
@Inject(MD_DIALOG_DATA) private data: any,
|
@Inject(MAT_DIALOG_DATA) private data: any,
|
||||||
private formBuilder: FormBuilder
|
private formBuilder: FormBuilder
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,106 +1,106 @@
|
|||||||
<md-table #table [dataSource]="dataSource"
|
<mat-table #table [dataSource]="dataSource"
|
||||||
[@animateStagger]="{value:'50'}">
|
[@animateStagger]="{value:'50'}">
|
||||||
<!-- Checkbox Column -->
|
<!-- Checkbox Column -->
|
||||||
<ng-container cdkColumnDef="checkbox">
|
<ng-container cdkColumnDef="checkbox">
|
||||||
<md-header-cell *cdkHeaderCellDef></md-header-cell>
|
<mat-header-cell *cdkHeaderCellDef></mat-header-cell>
|
||||||
<md-cell *cdkCellDef="let contact">
|
<mat-cell *cdkCellDef="let contact">
|
||||||
<md-checkbox [(ngModel)]="checkboxes[contact.id]" (ngModelChange)="onSelectedChange(contact.id)"
|
<mat-checkbox [(ngModel)]="checkboxes[contact.id]" (ngModelChange)="onSelectedChange(contact.id)"
|
||||||
(click)="$event.stopPropagation()">
|
(click)="$event.stopPropagation()">
|
||||||
</md-checkbox>
|
</mat-checkbox>
|
||||||
</md-cell>
|
</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Avatar Column -->
|
<!-- Avatar Column -->
|
||||||
<ng-container cdkColumnDef="avatar">
|
<ng-container cdkColumnDef="avatar">
|
||||||
<md-header-cell *cdkHeaderCellDef></md-header-cell>
|
<mat-header-cell *cdkHeaderCellDef></mat-header-cell>
|
||||||
<md-cell *cdkCellDef="let contact">
|
<mat-cell *cdkCellDef="let contact">
|
||||||
<img class="avatar" *ngIf="contact.avatar" [alt]="contact.name"
|
<img class="avatar" *ngIf="contact.avatar" [alt]="contact.name"
|
||||||
[src]="contact.avatar"/>
|
[src]="contact.avatar"/>
|
||||||
</md-cell>
|
</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Name Column -->
|
<!-- Name Column -->
|
||||||
<ng-container cdkColumnDef="name">
|
<ng-container cdkColumnDef="name">
|
||||||
<md-header-cell *cdkHeaderCellDef>Name</md-header-cell>
|
<mat-header-cell *cdkHeaderCellDef>Name</mat-header-cell>
|
||||||
<md-cell *cdkCellDef="let contact">
|
<mat-cell *cdkCellDef="let contact">
|
||||||
<p class="text-truncate font-weight-600">{{contact.name}} {{contact.lastName}}</p>
|
<p class="text-truncate font-weight-600">{{contact.name}} {{contact.lastName}}</p>
|
||||||
</md-cell>
|
</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Email Column -->
|
<!-- Email Column -->
|
||||||
<ng-container cdkColumnDef="email">
|
<ng-container cdkColumnDef="email">
|
||||||
<md-header-cell *cdkHeaderCellDef fxHide fxShow.gt-sm>Email</md-header-cell>
|
<mat-header-cell *cdkHeaderCellDef fxHide fxShow.gt-sm>Email</mat-header-cell>
|
||||||
<md-cell *cdkCellDef="let contact" fxHide fxShow.gt-sm>
|
<mat-cell *cdkCellDef="let contact" fxHide fxShow.gt-sm>
|
||||||
<p class="email text-truncate">
|
<p class="email text-truncate">
|
||||||
{{contact.email}}
|
{{contact.email}}
|
||||||
</p>
|
</p>
|
||||||
</md-cell>
|
</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Phone Column -->
|
<!-- Phone Column -->
|
||||||
<ng-container cdkColumnDef="phone">
|
<ng-container cdkColumnDef="phone">
|
||||||
<md-header-cell *cdkHeaderCellDef fxHide fxShow.gt-md>Phone</md-header-cell>
|
<mat-header-cell *cdkHeaderCellDef fxHide fxShow.gt-md>Phone</mat-header-cell>
|
||||||
<md-cell *cdkCellDef="let contact" fxHide fxShow.gt-md>
|
<mat-cell *cdkCellDef="let contact" fxHide fxShow.gt-md>
|
||||||
<p class="phone text-truncate">
|
<p class="phone text-truncate">
|
||||||
{{contact.phone}}
|
{{contact.phone}}
|
||||||
</p>
|
</p>
|
||||||
</md-cell>
|
</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Job Title Column -->
|
<!-- Job Title Column -->
|
||||||
<ng-container cdkColumnDef="jobTitle">
|
<ng-container cdkColumnDef="jobTitle">
|
||||||
<md-header-cell *cdkHeaderCellDef fxHide fxShow.gt-lg>Job title</md-header-cell>
|
<mat-header-cell *cdkHeaderCellDef fxHide fxShow.gt-lg>Job title</mat-header-cell>
|
||||||
<md-cell *cdkCellDef="let contact" fxHide fxShow.gt-lg>
|
<mat-cell *cdkCellDef="let contact" fxHide fxShow.gt-lg>
|
||||||
<p class="job-title text-truncate">
|
<p class="job-title text-truncate">
|
||||||
{{contact.jobTitle}}
|
{{contact.jobTitle}}
|
||||||
</p>
|
</p>
|
||||||
</md-cell>
|
</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Company Column -->
|
<!-- Company Column -->
|
||||||
<ng-container cdkColumnDef="company">
|
<ng-container cdkColumnDef="company">
|
||||||
<md-header-cell *cdkHeaderCellDef fxHide fxShow.gt-lg>Company</md-header-cell>
|
<mat-header-cell *cdkHeaderCellDef fxHide fxShow.gt-lg>Company</mat-header-cell>
|
||||||
<md-cell *cdkCellDef="let contact" fxHide fxShow.gt-lg>
|
<mat-cell *cdkCellDef="let contact" fxHide fxShow.gt-lg>
|
||||||
<p class="company text-truncate">
|
<p class="company text-truncate">
|
||||||
{{contact.company}}
|
{{contact.company}}
|
||||||
</p>
|
</p>
|
||||||
</md-cell>
|
</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Buttons Column -->
|
<!-- Buttons Column -->
|
||||||
<ng-container cdkColumnDef="buttons">
|
<ng-container cdkColumnDef="buttons">
|
||||||
<md-header-cell *cdkHeaderCellDef></md-header-cell>
|
<mat-header-cell *cdkHeaderCellDef></mat-header-cell>
|
||||||
<md-cell *cdkCellDef="let contact">
|
<mat-cell *cdkCellDef="let contact">
|
||||||
<div fxFlex="row" fxLayoutAlign="end center">
|
<div fxFlex="row" fxLayoutAlign="end center">
|
||||||
<button md-icon-button (click)="$event.stopPropagation();toggleStar(contact.id)" aria-label="Toggle star">
|
<button mat-icon-button (click)="$event.stopPropagation();toggleStar(contact.id)" aria-label="Toggle star">
|
||||||
<md-icon *ngIf="user.starred.includes(contact.id)">star</md-icon>
|
<mat-icon *ngIf="user.starred.includes(contact.id)">star</mat-icon>
|
||||||
<md-icon *ngIf="!user.starred.includes(contact.id)">star_outline</md-icon>
|
<mat-icon *ngIf="!user.starred.includes(contact.id)">star_outline</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button md-icon-button [mdMenuTriggerFor]="moreMenu" aria-label="More"
|
<button mat-icon-button [matMenuTriggerFor]="moreMenu" aria-label="More"
|
||||||
(click)="$event.stopPropagation();">
|
(click)="$event.stopPropagation();">
|
||||||
<md-icon>more_vert</md-icon>
|
<mat-icon>more_vert</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<md-menu #moreMenu="mdMenu">
|
<mat-menu #moreMenu="matMenu">
|
||||||
<button md-menu-item aria-label="remove" (click)="deleteContact(contact)">
|
<button mat-menu-item aria-label="remove" (click)="deleteContact(contact)">
|
||||||
<md-icon>delete</md-icon>
|
<mat-icon>delete</mat-icon>
|
||||||
<span>Remove</span>
|
<span>Remove</span>
|
||||||
</button>
|
</button>
|
||||||
</md-menu>
|
</mat-menu>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</md-cell>
|
</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<md-header-row *cdkHeaderRowDef="displayedColumns"></md-header-row>
|
<mat-header-row *cdkHeaderRowDef="displayedColumns"></mat-header-row>
|
||||||
<md-row *cdkRowDef="let contact; columns: displayedColumns;"
|
<mat-row *cdkRowDef="let contact; columns: displayedColumns;"
|
||||||
class="contact"
|
class="contact"
|
||||||
(click)="editContact(contact)"
|
(click)="editContact(contact)"
|
||||||
[ngClass]="{'md-light-blue-50-bg':checkboxes[contact.id]}"
|
[ngClass]="{'mat-light-blue-50-bg':checkboxes[contact.id]}"
|
||||||
md-ripple
|
matRipple
|
||||||
[@animate]="{value:'*',params:{y:'100%'}}">
|
[@animate]="{value:'*',params:{y:'100%'}}">
|
||||||
</md-row>
|
</mat-row>
|
||||||
</md-table>
|
</mat-table>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
.mat-row {
|
.mat-row {
|
||||||
position: relative;
|
position: relative;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding-right: 8px;
|
padding: 8px 8px 8px 24px;
|
||||||
|
|
||||||
.mat-cell {
|
.mat-cell {
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { Component, OnInit, TemplateRef, ViewChild } from '@angular/core';
|
|||||||
import { ContactsService } from '../contacts.service';
|
import { ContactsService } from '../contacts.service';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs/Observable';
|
||||||
import { FuseContactsContactFormDialogComponent } from '../contact-form/contact-form.component';
|
import { FuseContactsContactFormDialogComponent } from '../contact-form/contact-form.component';
|
||||||
import { MdDialog, MdDialogRef } from '@angular/material';
|
import { MatDialog, MatDialogRef } from '@angular/material';
|
||||||
import { FuseConfirmDialogComponent } from '../../../../../core/components/confirm-dialog/confirm-dialog.component';
|
import { FuseConfirmDialogComponent } from '../../../../../core/components/confirm-dialog/confirm-dialog.component';
|
||||||
import { FormGroup } from '@angular/forms';
|
import { FormGroup } from '@angular/forms';
|
||||||
import { DataSource } from '@angular/cdk/collections';
|
import { DataSource } from '@angular/cdk/collections';
|
||||||
@@ -27,11 +27,11 @@ export class FuseContactsContactListComponent implements OnInit
|
|||||||
|
|
||||||
dialogRef: any;
|
dialogRef: any;
|
||||||
|
|
||||||
confirmDialogRef: MdDialogRef<FuseConfirmDialogComponent>;
|
confirmDialogRef: MatDialogRef<FuseConfirmDialogComponent>;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private contactsService: ContactsService,
|
private contactsService: ContactsService,
|
||||||
public dialog: MdDialog
|
public dialog: MatDialog
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.contactsService.onContactsChanged.subscribe(contacts => {
|
this.contactsService.onContactsChanged.subscribe(contacts => {
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
<div id="contacts" class="page-layout simple left-sidenav inner-sidenav">
|
<div id="contacts" class="page-layout simple left-sidenav inner-sidenav">
|
||||||
|
|
||||||
<!-- HEADER -->
|
<!-- HEADER -->
|
||||||
<div class="header md-accent-bg p-16 p-sm-24" fxLayout="column" fxLayoutAlign="start start"
|
<div class="header mat-accent-bg p-16 p-sm-24" fxLayout="column" fxLayoutAlign="start start"
|
||||||
fxLayout.gt-xs="row" fxLayoutAlign.gt-xs="space-between center">
|
fxLayout.gt-xs="row" fxLayoutAlign.gt-xs="space-between center">
|
||||||
|
|
||||||
<!-- APP TITLE -->
|
<!-- APP TITLE -->
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
|
|
||||||
<button md-button class="mat-icon-button sidenav-toggle mr-12"
|
<button mat-button class="mat-icon-button sidenav-toggle mr-12"
|
||||||
fuseMdSidenavToggler="contacts-main-sidenav"
|
fuseMatSidenavToggler="contacts-main-sidenav"
|
||||||
fxHide.gt-md>
|
fxHide.gt-md>
|
||||||
<md-icon>menu</md-icon>
|
<mat-icon>menu</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div class="logo" fxLayout="row" fxLayoutAlign="start center">
|
<div class="logo" fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon class="logo-icon mr-16" *fuseIfOnDom [@animate]="{value:'*',params:{delay:'50ms',scale:'0.2'}}">account_box</md-icon>
|
<mat-icon class="logo-icon mr-16" *fuseIfOnDom [@animate]="{value:'*',params:{delay:'50ms',scale:'0.2'}}">account_box</mat-icon>
|
||||||
<span class="logo-text h1" *fuseIfOnDom [@animate]="{value:'*',params:{delay:'100ms',x:'-25px'}}">Contacts</span>
|
<span class="logo-text h1" *fuseIfOnDom [@animate]="{value:'*',params:{delay:'100ms',x:'-25px'}}">Contacts</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -24,11 +24,11 @@
|
|||||||
<!-- SEARCH -->
|
<!-- SEARCH -->
|
||||||
<div class="search-input-wrapper mt-16 ml-8 m-sm-0" fxLayout="row" fxLayoutAlign="start center">
|
<div class="search-input-wrapper mt-16 ml-8 m-sm-0" fxLayout="row" fxLayoutAlign="start center">
|
||||||
<label for="search" class="mr-8">
|
<label for="search" class="mr-8">
|
||||||
<md-icon>search</md-icon>
|
<mat-icon>search</mat-icon>
|
||||||
</label>
|
</label>
|
||||||
<md-input-container md-no-float class="m-0" floatPlaceholder="never">
|
<mat-form-field mat-no-float class="m-0" floatPlaceholder="never">
|
||||||
<input mdInput [formControl]="searchInput" id="search" placeholder="Search for anything">
|
<input matInput [formControl]="searchInput" id="search" placeholder="Search for anything">
|
||||||
</md-input-container>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
<!-- / SEARCH -->
|
<!-- / SEARCH -->
|
||||||
|
|
||||||
@@ -36,25 +36,25 @@
|
|||||||
<!-- / HEADER -->
|
<!-- / HEADER -->
|
||||||
|
|
||||||
<!-- SELECTED BAR -->
|
<!-- SELECTED BAR -->
|
||||||
<fuse-selected-bar class="md-accent-600-bg" *ngIf="hasSelectedContacts" [@slideInTop]></fuse-selected-bar>
|
<fuse-selected-bar class="mat-accent-600-bg" *ngIf="hasSelectedContacts" [@slideInTop]></fuse-selected-bar>
|
||||||
<!-- / SELECTED BAR -->
|
<!-- / SELECTED BAR -->
|
||||||
|
|
||||||
<md-sidenav-container>
|
<mat-sidenav-container>
|
||||||
|
|
||||||
<!-- SIDENAV -->
|
<!-- SIDENAV -->
|
||||||
<md-sidenav class="sidenav mat-sidenav-opened" align="start" opened="true" mode="side"
|
<mat-sidenav class="sidenav mat-sidenav-opened" align="start" opened="true" mode="side"
|
||||||
fuseMdSidenavHelper="contacts-main-sidenav" md-is-locked-open="gt-sm">
|
fuseMatSidenavHelper="contacts-main-sidenav" mat-is-locked-open="gt-sm">
|
||||||
|
|
||||||
<fuse-contacts-main-sidenav *fuseIfOnDom [@animate]="{value:'*'}"></fuse-contacts-main-sidenav>
|
<fuse-contacts-main-sidenav *fuseIfOnDom [@animate]="{value:'*'}"></fuse-contacts-main-sidenav>
|
||||||
|
|
||||||
</md-sidenav>
|
</mat-sidenav>
|
||||||
<!-- / SIDENAV -->
|
<!-- / SIDENAV -->
|
||||||
|
|
||||||
<!-- CENTER -->
|
<!-- CENTER -->
|
||||||
<div class="center p-24 pb-56 pr-sm-92" fusePerfectScrollbar>
|
<div class="center p-24 pb-56 pr-sm-92" fusePerfectScrollbar>
|
||||||
|
|
||||||
<!-- CONTENT -->
|
<!-- CONTENT -->
|
||||||
<div class="content md-white-bg mat-elevation-z4">
|
<div class="content mat-white-bg mat-elevation-z4">
|
||||||
|
|
||||||
<fuse-contacts-contact-list></fuse-contacts-contact-list>
|
<fuse-contacts-contact-list></fuse-contacts-contact-list>
|
||||||
|
|
||||||
@@ -64,13 +64,13 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- / CENTER -->
|
<!-- / CENTER -->
|
||||||
|
|
||||||
</md-sidenav-container>
|
</mat-sidenav-container>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- ADD CONTACT BUTTON -->
|
<!-- ADD CONTACT BUTTON -->
|
||||||
<button md-fab class="md-accent-bg" id="add-contact-button" (click)="newContact()" aria-label="add contact"
|
<button mat-fab class="mat-accent-bg" id="add-contact-button" (click)="newContact()" aria-label="add contact"
|
||||||
*fuseIfOnDom [@animate]="{value:'*', params:{delay:'300ms',scale:'.2'}}">
|
*fuseIfOnDom [@animate]="{value:'*', params:{delay:'300ms',scale:'.2'}}">
|
||||||
<md-icon>person_add</md-icon>
|
<mat-icon>person_add</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<!-- / ADD CONTACT BUTTON -->
|
<!-- / ADD CONTACT BUTTON -->
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#add-contact-button {
|
#add-contact-button {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 12px;
|
bottom: 12px;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { ContactsService } from './contacts.service';
|
|||||||
import { fuseAnimations } from '../../../../core/animations';
|
import { fuseAnimations } from '../../../../core/animations';
|
||||||
import { FormControl, FormGroup } from '@angular/forms';
|
import { FormControl, FormGroup } from '@angular/forms';
|
||||||
import { FuseContactsContactFormDialogComponent } from './contact-form/contact-form.component';
|
import { FuseContactsContactFormDialogComponent } from './contact-form/contact-form.component';
|
||||||
import { MdDialog } from '@angular/material';
|
import { MatDialog } from '@angular/material';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector : 'fuse-contacts',
|
selector : 'fuse-contacts',
|
||||||
@@ -20,7 +20,7 @@ export class FuseContactsComponent implements OnInit
|
|||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private contactsService: ContactsService,
|
private contactsService: ContactsService,
|
||||||
public dialog: MdDialog
|
public dialog: MatDialog
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.searchInput = new FormControl('');
|
this.searchInput = new FormControl('');
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
|
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs/Observable';
|
||||||
import { Http } from '@angular/http';
|
import { HttpClient } from '@angular/common/http';
|
||||||
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
|
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
|
||||||
import { Contact } from './contact.model';
|
import { Contact } from './contact.model';
|
||||||
import { FuseUtils } from '../../../../core/fuseUtils';
|
import { FuseUtils } from '../../../../core/fuseUtils';
|
||||||
@@ -23,7 +23,7 @@ export class ContactsService implements Resolve<any>
|
|||||||
searchText: string;
|
searchText: string;
|
||||||
filterBy: string;
|
filterBy: string;
|
||||||
|
|
||||||
constructor(private http: Http)
|
constructor(private http: HttpClient)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,9 +65,9 @@ export class ContactsService implements Resolve<any>
|
|||||||
{
|
{
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.http.get('api/contacts-contacts')
|
this.http.get('api/contacts-contacts')
|
||||||
.subscribe(response => {
|
.subscribe((response: any) => {
|
||||||
|
|
||||||
this.contacts = response.json().data;
|
this.contacts = response;
|
||||||
|
|
||||||
if ( this.filterBy === 'starred' )
|
if ( this.filterBy === 'starred' )
|
||||||
{
|
{
|
||||||
@@ -103,8 +103,8 @@ export class ContactsService implements Resolve<any>
|
|||||||
{
|
{
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.http.get('api/contacts-user/5725a6802d10e277a0f35724')
|
this.http.get('api/contacts-user/5725a6802d10e277a0f35724')
|
||||||
.subscribe(response => {
|
.subscribe((response: any) => {
|
||||||
this.user = response.json().data;
|
this.user = response;
|
||||||
this.onUserDataChanged.next(this.user);
|
this.onUserDataChanged.next(this.user);
|
||||||
resolve(this.user);
|
resolve(this.user);
|
||||||
}, reject);
|
}, reject);
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<div fxFlex fxLayout="row" fxLayoutAlign="start center" class="p-24">
|
<div fxFlex fxLayout="row" fxLayoutAlign="start center" class="p-24">
|
||||||
|
|
||||||
<div class="close-button-wrapper" fxFlex="0 1 auto" fxFlex.gt-sm="220px" (click)="deselectAll()">
|
<div class="close-button-wrapper" fxFlex="0 1 auto" fxFlex.gt-sm="220px" (click)="deselectAll()">
|
||||||
<button class="p-8" md-button fxLayout="row" fxLayoutAlign="start center">
|
<button class="p-8" mat-button fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon class="mr-8">arrow_back</md-icon>
|
<mat-icon class="mr-8">arrow_back</mat-icon>
|
||||||
<span class="text-uppercase">Back</span>
|
<span class="text-uppercase">Back</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -15,19 +15,19 @@
|
|||||||
<span>selected</span>
|
<span>selected</span>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<button md-icon-button [mdMenuTriggerFor]="selectMenu">
|
<button mat-icon-button [matMenuTriggerFor]="selectMenu">
|
||||||
<md-icon>arrow_drop_down</md-icon>
|
<mat-icon>arrow_drop_down</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<md-menu #selectMenu="mdMenu">
|
<mat-menu #selectMenu="matMenu">
|
||||||
<button md-menu-item (click)="selectAll()">Select all</button>
|
<button mat-menu-item (click)="selectAll()">Select all</button>
|
||||||
<button md-menu-item (click)="deselectAll()">Deselect all</button>
|
<button mat-menu-item (click)="deselectAll()">Deselect all</button>
|
||||||
</md-menu>
|
</mat-menu>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="multi-select-actions">
|
<div class="multi-select-actions">
|
||||||
<button md-icon-button (click)="deleteSelectedContacts()" aria-label="delete selected">
|
<button mat-icon-button (click)="deleteSelectedContacts()" aria-label="delete selected">
|
||||||
<md-icon>delete</md-icon>
|
<mat-icon>delete</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { ContactsService } from '../contacts.service';
|
import { ContactsService } from '../contacts.service';
|
||||||
import { MdDialog, MdDialogRef } from '@angular/material';
|
import { MatDialog, MatDialogRef } from '@angular/material';
|
||||||
import { FuseConfirmDialogComponent } from '../../../../../core/components/confirm-dialog/confirm-dialog.component';
|
import { FuseConfirmDialogComponent } from '../../../../../core/components/confirm-dialog/confirm-dialog.component';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@@ -13,11 +13,11 @@ export class FuseContactsSelectedBarComponent implements OnInit
|
|||||||
selectedContacts: string[];
|
selectedContacts: string[];
|
||||||
hasSelectedContacts: boolean;
|
hasSelectedContacts: boolean;
|
||||||
isIndeterminate: boolean;
|
isIndeterminate: boolean;
|
||||||
confirmDialogRef: MdDialogRef<FuseConfirmDialogComponent>;
|
confirmDialogRef: MatDialogRef<FuseConfirmDialogComponent>;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private contactsService: ContactsService,
|
private contactsService: ContactsService,
|
||||||
public dialog: MdDialog
|
public dialog: MatDialog
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.contactsService.onSelectedContactsChanged
|
this.contactsService.onSelectedContactsChanged
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<div class="sidenav-content">
|
<div class="sidenav-content">
|
||||||
|
|
||||||
<div class="card md-white-bg">
|
<div class="card mat-white-bg">
|
||||||
<!-- SIDENAV HEADER -->
|
<!-- SIDENAV HEADER -->
|
||||||
<div class="header p-24" fxLayout="row" fxLayoutAlign="start center">
|
<div class="header p-24" fxLayout="row" fxLayoutAlign="start center">
|
||||||
|
|
||||||
@@ -18,19 +18,19 @@
|
|||||||
<div class="nav">
|
<div class="nav">
|
||||||
|
|
||||||
<div class="nav-item" aria-label="inbox">
|
<div class="nav-item" aria-label="inbox">
|
||||||
<a class="nav-link" md-ripple (click)="changeFilter('all')" [ngClass]="{'active':filterBy ==='all'}">
|
<a class="nav-link" matRipple (click)="changeFilter('all')" [ngClass]="{'active':filterBy ==='all'}">
|
||||||
<span class="title">All Contacts</span>
|
<span class="title">All Contacts</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="nav-item" aria-label="frequently contacted" (click)="changeFilter('frequent')">
|
<div class="nav-item" aria-label="frequently contacted" (click)="changeFilter('frequent')">
|
||||||
<a class="nav-link" md-ripple [ngClass]="{'active':filterBy ==='frequent'}">
|
<a class="nav-link" matRipple [ngClass]="{'active':filterBy ==='frequent'}">
|
||||||
<div class="title">Freequently contacted</div>
|
<div class="title">Freequently contacted</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="nav-item" aria-label="starred" (click)="changeFilter('starred')">
|
<div class="nav-item" aria-label="starred" (click)="changeFilter('starred')">
|
||||||
<a class="nav-link" md-ripple [ngClass]="{'active':filterBy ==='starred'}">
|
<a class="nav-link" matRipple [ngClass]="{'active':filterBy ==='starred'}">
|
||||||
<div class="title">Starred Contacts</div>
|
<div class="title">Starred Contacts</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
<div id="dashboard-project" class="page-layout simple right-sidenav" fxLayout="row">
|
<div id="dashboard-project" class="page-layout simple right-sidenav" fxLayout="row">
|
||||||
|
|
||||||
<md-sidenav-container>
|
<mat-sidenav-container>
|
||||||
|
|
||||||
<!-- CENTER -->
|
<!-- CENTER -->
|
||||||
<div class="center" fxFlex fusePerfectScrollbar>
|
<div class="center" fusePerfectScrollbar>
|
||||||
|
|
||||||
<!-- HEADER -->
|
<!-- HEADER -->
|
||||||
<div class="header md-accent-bg p-24 pb-0" fxLayout="column" fxLayoutAlign="space-between">
|
<div class="header mat-accent-bg p-24 pb-0" fxLayout="column" fxLayoutAlign="space-between">
|
||||||
|
|
||||||
<div fxLayout="row" fxLayoutAlign="space-between start">
|
<div fxLayout="row" fxLayoutAlign="space-between start">
|
||||||
|
|
||||||
<span class="mat-display-1 mb-0 welcome-message" *fuseIfOnDom [@animate]="{value:'*',params:{x:'50px'}}">Welcome back, John!</span>
|
<span class="mat-display-1 mb-0 welcome-message" *fuseIfOnDom [@animate]="{value:'*',params:{x:'50px'}}">Welcome back, John!</span>
|
||||||
|
|
||||||
<button md-icon-button fuseMdSidenavToggler="dashboards-right-sidenav" fxHide.gt-md>
|
<button mat-icon-button fuseMatSidenavToggler="dashboards-right-sidenav" fxHide.gt-md>
|
||||||
<md-icon>menu</md-icon>
|
<mat-icon>menu</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -21,15 +21,15 @@
|
|||||||
|
|
||||||
<div class="selected-project">{{selectedProject.name}}</div>
|
<div class="selected-project">{{selectedProject.name}}</div>
|
||||||
|
|
||||||
<button md-icon-button class="project-selector" [mdMenuTriggerFor]="projectsMenu" aria-label="Select project">
|
<button mat-icon-button class="project-selector" [matMenuTriggerFor]="projectsMenu" aria-label="Select project">
|
||||||
<md-icon>more_horiz</md-icon>
|
<mat-icon>more_horiz</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<md-menu #projectsMenu="mdMenu">
|
<mat-menu #projectsMenu="matMenu">
|
||||||
<button md-menu-item *ngFor="let project of projects" (click)="selectedProject = project">
|
<button mat-menu-item *ngFor="let project of projects" (click)="selectedProject = project">
|
||||||
<span>{{project.name}}</span>
|
<span>{{project.name}}</span>
|
||||||
</button>
|
</button>
|
||||||
</md-menu>
|
</mat-menu>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- / HEADER -->
|
<!-- / HEADER -->
|
||||||
@@ -37,9 +37,9 @@
|
|||||||
<!-- CONTENT -->
|
<!-- CONTENT -->
|
||||||
<div class="content">
|
<div class="content">
|
||||||
|
|
||||||
<md-tab-group dynamicHeight>
|
<mat-tab-group dynamicHeight>
|
||||||
|
|
||||||
<md-tab label="Home">
|
<mat-tab label="Home">
|
||||||
|
|
||||||
<div class="widget-group p-12" fxLayout="row" fxFlex="100" fxLayoutWrap *fuseIfOnDom [@animateStagger]="{value:'50'}">
|
<div class="widget-group p-12" fxLayout="row" fxFlex="100" fxLayoutWrap *fuseIfOnDom [@animateStagger]="{value:'50'}">
|
||||||
|
|
||||||
@@ -47,20 +47,20 @@
|
|||||||
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-md="25">
|
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-md="25">
|
||||||
|
|
||||||
<!-- Front -->
|
<!-- Front -->
|
||||||
<div class="fuse-widget-front md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-front mat-white-bg mat-elevation-z2">
|
||||||
<div class="pl-16 pr-8 py-16 h-52" fxLayout="row" fxLayoutAlign="space-between center">
|
<div class="pl-16 pr-8 py-16 h-52" fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
<md-select class="simplified font-size-16" [(ngModel)]="widgets.widget1.currentRange"
|
<mat-form-field>
|
||||||
aria-label="Change range">
|
<mat-select class="simplified font-size-16" [(ngModel)]="widgets.widget1.currentRange"
|
||||||
<md-option *ngFor="let range of widgets.widget1.ranges | keys"
|
aria-label="Change range">
|
||||||
[value]="range.key">
|
<mat-option *ngFor="let range of widgets.widget1.ranges | keys"
|
||||||
{{range.value}}
|
[value]="range.key">
|
||||||
</md-option>
|
{{range.value}}
|
||||||
</md-select>
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
<button md-icon-button fuseWidgetToggle aria-label="more">
|
</mat-form-field>
|
||||||
<md-icon>more_vert</md-icon>
|
<button mat-icon-button fuseWidgetToggle aria-label="more">
|
||||||
|
<mat-icon>more_vert</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="pt-8 pb-32" fxLayout="column" fxLayoutAlign="center center">
|
<div class="pt-8 pb-32" fxLayout="column" fxLayoutAlign="center center">
|
||||||
@@ -78,10 +78,10 @@
|
|||||||
<!-- / Front -->
|
<!-- / Front -->
|
||||||
|
|
||||||
<!-- Back -->
|
<!-- Back -->
|
||||||
<div class="fuse-widget-back p-16 pt-32 md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-back p-16 pt-32 mat-white-bg mat-elevation-z2">
|
||||||
<button md-icon-button fuseWidgetToggle class="fuse-widget-flip-button"
|
<button mat-icon-button fuseWidgetToggle class="fuse-widget-flip-button"
|
||||||
aria-label="Flip widget">
|
aria-label="Flip widget">
|
||||||
<md-icon class="s-16">close</md-icon>
|
<mat-icon class="s-16">close</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
@@ -97,12 +97,12 @@
|
|||||||
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-md="25">
|
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-md="25">
|
||||||
|
|
||||||
<!-- Front -->
|
<!-- Front -->
|
||||||
<div class="fuse-widget-front md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-front mat-white-bg mat-elevation-z2">
|
||||||
<div class="pl-16 pr-8 py-16 h-52" fxLayout="row" fxLayoutAlign="space-between center">
|
<div class="pl-16 pr-8 py-16 h-52" fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
<div class="h3">{{widgets.widget2.title}}</div>
|
<div class="h3">{{widgets.widget2.title}}</div>
|
||||||
|
|
||||||
<button md-icon-button fuseWidgetToggle class="fuse-widget-flip-button" aria-label="more">
|
<button mat-icon-button fuseWidgetToggle class="fuse-widget-flip-button" aria-label="more">
|
||||||
<md-icon>more_vert</md-icon>
|
<mat-icon>more_vert</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -121,10 +121,10 @@
|
|||||||
<!-- / Front -->
|
<!-- / Front -->
|
||||||
|
|
||||||
<!-- Back -->
|
<!-- Back -->
|
||||||
<div class="fuse-widget-back p-16 pt-32 md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-back p-16 pt-32 mat-white-bg mat-elevation-z2">
|
||||||
<button md-icon-button fuseWidgetToggle class="fuse-widget-flip-button"
|
<button mat-icon-button fuseWidgetToggle class="fuse-widget-flip-button"
|
||||||
aria-label="Flip widget">
|
aria-label="Flip widget">
|
||||||
<md-icon class="s-16">close</md-icon>
|
<mat-icon class="s-16">close</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
@@ -140,12 +140,12 @@
|
|||||||
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-md="25">
|
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-md="25">
|
||||||
|
|
||||||
<!-- Front -->
|
<!-- Front -->
|
||||||
<div class="fuse-widget-front md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-front mat-white-bg mat-elevation-z2">
|
||||||
<div class="pl-16 pr-8 py-16 h-52" fxLayout="row" fxLayoutAlign="space-between center">
|
<div class="pl-16 pr-8 py-16 h-52" fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
<div class="h3">{{widgets.widget3.title}}</div>
|
<div class="h3">{{widgets.widget3.title}}</div>
|
||||||
|
|
||||||
<button md-icon-button fuseWidgetToggle class="fuse-widget-flip-button" aria-label="more">
|
<button mat-icon-button fuseWidgetToggle class="fuse-widget-flip-button" aria-label="more">
|
||||||
<md-icon>more_vert</md-icon>
|
<mat-icon>more_vert</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -164,10 +164,10 @@
|
|||||||
<!-- / Front -->
|
<!-- / Front -->
|
||||||
|
|
||||||
<!-- Back -->
|
<!-- Back -->
|
||||||
<div class="fuse-widget-back p-16 pt-32 md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-back p-16 pt-32 mat-white-bg mat-elevation-z2">
|
||||||
<button md-icon-button fuseWidgetToggle class="fuse-widget-flip-button"
|
<button mat-icon-button fuseWidgetToggle class="fuse-widget-flip-button"
|
||||||
aria-label="Flip widget">
|
aria-label="Flip widget">
|
||||||
<md-icon class="s-16">close</md-icon>
|
<mat-icon class="s-16">close</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
@@ -183,12 +183,12 @@
|
|||||||
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-md="25">
|
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-md="25">
|
||||||
|
|
||||||
<!-- Front -->
|
<!-- Front -->
|
||||||
<div class="fuse-widget-front md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-front mat-white-bg mat-elevation-z2">
|
||||||
<div class="pl-16 pr-8 py-16 h-52" fxLayout="row" fxLayoutAlign="space-between center">
|
<div class="pl-16 pr-8 py-16 h-52" fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
<div class="h3">{{widgets.widget4.title}}</div>
|
<div class="h3">{{widgets.widget4.title}}</div>
|
||||||
|
|
||||||
<button md-icon-button fuseWidgetToggle class="fuse-widget-flip-button" aria-label="more">
|
<button mat-icon-button fuseWidgetToggle class="fuse-widget-flip-button" aria-label="more">
|
||||||
<md-icon>more_vert</md-icon>
|
<mat-icon>more_vert</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -206,10 +206,10 @@
|
|||||||
<!-- / Front -->
|
<!-- / Front -->
|
||||||
|
|
||||||
<!-- Back -->
|
<!-- Back -->
|
||||||
<div class="fuse-widget-back p-16 pt-32 md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-back p-16 pt-32 mat-white-bg mat-elevation-z2">
|
||||||
<button md-icon-button fuseWidgetToggle class="fuse-widget-flip-button"
|
<button mat-icon-button fuseWidgetToggle class="fuse-widget-flip-button"
|
||||||
aria-label="Flip widget">
|
aria-label="Flip widget">
|
||||||
<md-icon class="s-16">close</md-icon>
|
<mat-icon class="s-16">close</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
@@ -226,14 +226,14 @@
|
|||||||
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="row" fxFlex="100">
|
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="row" fxFlex="100">
|
||||||
|
|
||||||
<!-- Front -->
|
<!-- Front -->
|
||||||
<div class="fuse-widget-front md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-front mat-white-bg mat-elevation-z2">
|
||||||
|
|
||||||
<div class="px-16 border-bottom" fxLayout="row" fxLayoutAlign="space-between center" fxLayoutWrap>
|
<div class="px-16 border-bottom" fxLayout="row" fxLayoutAlign="space-between center" fxLayoutWrap>
|
||||||
|
|
||||||
<div fxFlex class="py-8 h3">{{widgets.widget5.title}}</div>
|
<div fxFlex class="py-8 h3">{{widgets.widget5.title}}</div>
|
||||||
|
|
||||||
<div fxFlex="0 1 auto" class="py-8" fxLayout="row">
|
<div fxFlex="0 1 auto" class="py-8" fxLayout="row">
|
||||||
<button md-button class="px-16"
|
<button mat-button class="px-16"
|
||||||
*ngFor="let range of widgets.widget5.ranges | keys"
|
*ngFor="let range of widgets.widget5.ranges | keys"
|
||||||
(click)="widget5.currentRange = range.key"
|
(click)="widget5.currentRange = range.key"
|
||||||
[disabled]="widget5.currentRange == range.key">
|
[disabled]="widget5.currentRange == range.key">
|
||||||
@@ -302,18 +302,18 @@
|
|||||||
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-sm="50">
|
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-sm="50">
|
||||||
|
|
||||||
<!-- Front -->
|
<!-- Front -->
|
||||||
<div class="fuse-widget-front md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-front mat-white-bg mat-elevation-z2">
|
||||||
|
|
||||||
<div class="px-16 border-bottom" fxLayout="row" fxLayoutAlign="space-between center">
|
<div class="px-16 border-bottom" fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
<div class="h3">{{widgets.widget6.title}}</div>
|
<div class="h3">{{widgets.widget6.title}}</div>
|
||||||
<div class="py-16">
|
<mat-form-field>
|
||||||
<md-select class="simplified" [(ngModel)]="widget6.currentRange" aria-label="Change range">
|
<mat-select class="simplified" [(ngModel)]="widget6.currentRange" aria-label="Change range">
|
||||||
<md-option *ngFor="let range of widgets.widget6.ranges | keys"
|
<mat-option *ngFor="let range of widgets.widget6.ranges | keys"
|
||||||
[value]="range.key">
|
[value]="range.key">
|
||||||
{{range.value}}
|
{{range.value}}
|
||||||
</md-option>
|
</mat-option>
|
||||||
</md-select>
|
</mat-select>
|
||||||
</div>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="h-400">
|
<div class="h-400">
|
||||||
@@ -352,20 +352,19 @@
|
|||||||
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-sm="50">
|
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-sm="50">
|
||||||
|
|
||||||
<!-- Front -->
|
<!-- Front -->
|
||||||
<div class="fuse-widget-front md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-front mat-white-bg mat-elevation-z2">
|
||||||
|
|
||||||
<div class="px-16 border-bottom" fxLayout="row" fxLayoutAlign="space-between center">
|
<div class="px-16 border-bottom" fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
<div class="h3">{{widgets.widget7.title}}</div>
|
<div class="h3">{{widgets.widget7.title}}</div>
|
||||||
|
<mat-form-field>
|
||||||
<div class="py-16">
|
<mat-select class="simplified" [(ngModel)]="widget7.currentRange"
|
||||||
<md-select class="simplified" [(ngModel)]="widget7.currentRange"
|
aria-label="Change range">
|
||||||
aria-label="Change range">
|
<mat-option *ngFor="let range of widgets.widget7.ranges | keys"
|
||||||
<md-option *ngFor="let range of widgets.widget7.ranges | keys"
|
[value]="range.key">
|
||||||
[value]="range.key">
|
|
||||||
{{range.value}}
|
{{range.value}}
|
||||||
</md-option>
|
</mat-option>
|
||||||
</md-select>
|
</mat-select>
|
||||||
</div>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="p-16" fxLayout="row" fxLayoutAlign="space-between center"
|
<div class="p-16" fxLayout="row" fxLayoutAlign="space-between center"
|
||||||
@@ -378,8 +377,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button md-icon-button aria-label="More information">
|
<button mat-icon-button aria-label="More information">
|
||||||
<md-icon>more_vert</md-icon>
|
<mat-icon>more_vert</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -393,9 +392,9 @@
|
|||||||
<!-- / WIDGET GROUP -->
|
<!-- / WIDGET GROUP -->
|
||||||
|
|
||||||
|
|
||||||
</md-tab>
|
</mat-tab>
|
||||||
|
|
||||||
<md-tab label="Budget Summary">
|
<mat-tab label="Budget Summary">
|
||||||
|
|
||||||
<!-- WIDGET GROUP -->
|
<!-- WIDGET GROUP -->
|
||||||
<div class="widget-group" fxLayout="row" fxFlex="100" fxLayoutWrap *fuseIfOnDom [@animateStagger]="{value:'50'}">
|
<div class="widget-group" fxLayout="row" fxFlex="100" fxLayoutWrap *fuseIfOnDom [@animateStagger]="{value:'50'}">
|
||||||
@@ -404,12 +403,12 @@
|
|||||||
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-sm="50">
|
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-sm="50">
|
||||||
|
|
||||||
<!-- Front -->
|
<!-- Front -->
|
||||||
<div class="fuse-widget-front md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-front mat-white-bg mat-elevation-z2">
|
||||||
<div class="h3 p-16">
|
<div class="h3 p-16">
|
||||||
{{widgets.widget8.title}}
|
{{widgets.widget8.title}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
<div class="h-400">
|
<div class="h-400">
|
||||||
<ngx-charts-pie-chart
|
<ngx-charts-pie-chart
|
||||||
@@ -435,19 +434,17 @@
|
|||||||
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-sm="50">
|
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="column" fxFlex="100" fxFlex.gt-sm="50">
|
||||||
|
|
||||||
<!-- Front -->
|
<!-- Front -->
|
||||||
<div class="fuse-widget-front md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-front mat-white-bg mat-elevation-z2">
|
||||||
<div class="px-16 border-bottom" fxLayout="row" fxLayoutAlign="space-between center">
|
<div class="px-16 border-bottom" fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
<div class="h3">{{widgets.widget9.title}}</div>
|
<div class="h3">{{widgets.widget9.title}}</div>
|
||||||
|
<mat-form-field>
|
||||||
<div class="py-16">
|
<mat-select [(ngModel)]="widget9.currentRange" aria-label="Change range">
|
||||||
<md-select [(ngModel)]="widget9.currentRange" aria-label="Change range">
|
<mat-option *ngFor="let range of widgets.widget9.ranges | keys"
|
||||||
<md-option *ngFor="let range of widgets.widget9.ranges | keys"
|
[value]="range.key">
|
||||||
[value]="range.key">
|
|
||||||
{{range.value}}
|
{{range.value}}
|
||||||
</md-option>
|
</mat-option>
|
||||||
</md-select>
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="p-16" fxLayout="column" fxLayoutAlign="center" fxLayout.gt-xs="row"
|
<div class="p-16" fxLayout="column" fxLayoutAlign="center" fxLayout.gt-xs="row"
|
||||||
@@ -549,7 +546,7 @@
|
|||||||
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="row" fxFlex="100">
|
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="row" fxFlex="100">
|
||||||
|
|
||||||
<!-- Front -->
|
<!-- Front -->
|
||||||
<div class="fuse-widget-front md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-front mat-white-bg mat-elevation-z2">
|
||||||
|
|
||||||
<div class="simple-table-container" ms-responsive-table>
|
<div class="simple-table-container" ms-responsive-table>
|
||||||
<div class=" table-title">
|
<div class=" table-title">
|
||||||
@@ -569,10 +566,10 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let row of widgets.widget10.table.rows">
|
<tr *ngFor="let row of widgets.widget10.table.rows">
|
||||||
<td *ngFor="let cell of row">
|
<td *ngFor="let cell of row">
|
||||||
<span class="p-4" [class]="cell.classes">
|
<span class="p-4" [ngClass]="cell.classes">
|
||||||
{{cell.value}}
|
{{cell.value}}
|
||||||
</span>
|
</span>
|
||||||
<md-icon *ngIf="cell.icon" class="s-16">{{cell.icon}}</md-icon>
|
<mat-icon *ngIf="cell.icon" class="s-16">{{cell.icon}}</mat-icon>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -588,9 +585,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- / WIDGET GROUP -->
|
<!-- / WIDGET GROUP -->
|
||||||
|
|
||||||
</md-tab>
|
</mat-tab>
|
||||||
|
|
||||||
<md-tab label="Team Members">
|
<mat-tab label="Team Members">
|
||||||
|
|
||||||
<!-- WIDGET GROUP -->
|
<!-- WIDGET GROUP -->
|
||||||
<div class="widget-group" fxLayout="row" fxFlex="100" fxLayoutWrap *fuseIfOnDom [@animateStagger]="{value:'50'}">
|
<div class="widget-group" fxLayout="row" fxFlex="100" fxLayoutWrap *fuseIfOnDom [@animateStagger]="{value:'50'}">
|
||||||
@@ -599,7 +596,7 @@
|
|||||||
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="row" fxFlex="100">
|
<fuse-widget [@animate]="{value:'*',params:{y:'100%'}}" class="widget" fxLayout="row" fxFlex="100">
|
||||||
|
|
||||||
<!-- Front -->
|
<!-- Front -->
|
||||||
<div class="fuse-widget-front md-white-bg mat-elevation-z2">
|
<div class="fuse-widget-front mat-white-bg mat-elevation-z2">
|
||||||
|
|
||||||
<div class="p-24 mb-8 border-bottom" fxLayout="row" fxLayoutAlign="space-between center">
|
<div class="p-24 mb-8 border-bottom" fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
<div class="h2">{{widgets.widget11.title}}</div>
|
<div class="h2">{{widgets.widget11.title}}</div>
|
||||||
@@ -608,70 +605,70 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<md-table #table [dataSource]="widget11.dataSource">
|
<mat-table #table [dataSource]="widget11.dataSource">
|
||||||
|
|
||||||
<!-- Avatar Column -->
|
<!-- Avatar Column -->
|
||||||
<ng-container cdkColumnDef="avatar">
|
<ng-container cdkColumnDef="avatar">
|
||||||
<md-header-cell fxFlex="64px" *cdkHeaderCellDef></md-header-cell>
|
<mat-header-cell fxFlex="64px" *cdkHeaderCellDef></mat-header-cell>
|
||||||
<md-cell fxFlex="64px" *cdkCellDef="let contact">
|
<mat-cell fxFlex="64px" *cdkCellDef="let contact">
|
||||||
<img class="avatar" *ngIf="contact.avatar" [alt]="contact.name"
|
<img class="avatar" *ngIf="contact.avatar" [alt]="contact.name"
|
||||||
[src]="contact.avatar"/>
|
[src]="contact.avatar"/>
|
||||||
</md-cell>
|
</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Name Column -->
|
<!-- Name Column -->
|
||||||
<ng-container cdkColumnDef="name">
|
<ng-container cdkColumnDef="name">
|
||||||
<md-header-cell *cdkHeaderCellDef>Name</md-header-cell>
|
<mat-header-cell *cdkHeaderCellDef>Name</mat-header-cell>
|
||||||
<md-cell *cdkCellDef="let contact">
|
<mat-cell *cdkCellDef="let contact">
|
||||||
<p class="text-truncate font-weight-600">{{contact.name}} {{contact.lastName}}</p>
|
<p class="text-truncate font-weight-600">{{contact.name}} {{contact.lastName}}</p>
|
||||||
</md-cell>
|
</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Position Column -->
|
<!-- Position Column -->
|
||||||
<ng-container cdkColumnDef="position">
|
<ng-container cdkColumnDef="position">
|
||||||
<md-header-cell *cdkHeaderCellDef fxHide fxShow.gt-sm>Position</md-header-cell>
|
<mat-header-cell *cdkHeaderCellDef fxHide fxShow.gt-sm>Position</mat-header-cell>
|
||||||
<md-cell *cdkCellDef="let contact" fxHide fxShow.gt-sm>
|
<mat-cell *cdkCellDef="let contact" fxHide fxShow.gt-sm>
|
||||||
<p class="position text-truncate">
|
<p class="position text-truncate">
|
||||||
{{contact.position}}
|
{{contact.position}}
|
||||||
</p>
|
</p>
|
||||||
</md-cell>
|
</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Office Column -->
|
<!-- Office Column -->
|
||||||
<ng-container cdkColumnDef="office">
|
<ng-container cdkColumnDef="office">
|
||||||
<md-header-cell *cdkHeaderCellDef fxHide fxShow.gt-md>Office</md-header-cell>
|
<mat-header-cell *cdkHeaderCellDef fxHide fxShow.gt-md>Office</mat-header-cell>
|
||||||
<md-cell *cdkCellDef="let contact" fxHide fxShow.gt-md>
|
<mat-cell *cdkCellDef="let contact" fxHide fxShow.gt-md>
|
||||||
<p class="office text-truncate">
|
<p class="office text-truncate">
|
||||||
{{contact.office}}
|
{{contact.office}}
|
||||||
</p>
|
</p>
|
||||||
</md-cell>
|
</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
|
|
||||||
<!-- Email Column -->
|
<!-- Email Column -->
|
||||||
<ng-container cdkColumnDef="email">
|
<ng-container cdkColumnDef="email">
|
||||||
<md-header-cell *cdkHeaderCellDef fxHide fxShow.gt-sm>Email</md-header-cell>
|
<mat-header-cell *cdkHeaderCellDef fxHide fxShow.gt-sm>Email</mat-header-cell>
|
||||||
<md-cell *cdkCellDef="let contact" fxHide fxShow.gt-sm>
|
<mat-cell *cdkCellDef="let contact" fxHide fxShow.gt-sm>
|
||||||
<p class="email text-truncate">
|
<p class="email text-truncate">
|
||||||
{{contact.email}}
|
{{contact.email}}
|
||||||
</p>
|
</p>
|
||||||
</md-cell>
|
</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Phone Column -->
|
<!-- Phone Column -->
|
||||||
<ng-container cdkColumnDef="phone">
|
<ng-container cdkColumnDef="phone">
|
||||||
<md-header-cell *cdkHeaderCellDef fxHide fxShow.gt-md>Phone</md-header-cell>
|
<mat-header-cell *cdkHeaderCellDef fxHide fxShow.gt-md>Phone</mat-header-cell>
|
||||||
<md-cell *cdkCellDef="let contact" fxHide fxShow.gt-md>
|
<mat-cell *cdkCellDef="let contact" fxHide fxShow.gt-md>
|
||||||
<p class="phone text-truncate">
|
<p class="phone text-truncate">
|
||||||
{{contact.phone}}
|
{{contact.phone}}
|
||||||
</p>
|
</p>
|
||||||
</md-cell>
|
</mat-cell>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<md-header-row *cdkHeaderRowDef="widgets.widget11.table.columns"></md-header-row>
|
<mat-header-row *cdkHeaderRowDef="widgets.widget11.table.columns"></mat-header-row>
|
||||||
<md-row *cdkRowDef="let contact; columns: widgets.widget11.table.columns;">
|
<mat-row *cdkRowDef="let contact; columns: widgets.widget11.table.columns;">
|
||||||
</md-row>
|
</mat-row>
|
||||||
</md-table>
|
</mat-table>
|
||||||
</div>
|
</div>
|
||||||
<!-- / Front -->
|
<!-- / Front -->
|
||||||
|
|
||||||
@@ -681,8 +678,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- / WIDGET GROUP -->
|
<!-- / WIDGET GROUP -->
|
||||||
|
|
||||||
</md-tab>
|
</mat-tab>
|
||||||
</md-tab-group>
|
</mat-tab-group>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- / CONTENT -->
|
<!-- / CONTENT -->
|
||||||
@@ -691,7 +688,7 @@
|
|||||||
<!-- / CENTER -->
|
<!-- / CENTER -->
|
||||||
|
|
||||||
<!-- SIDENAV -->
|
<!-- SIDENAV -->
|
||||||
<md-sidenav class="sidenav mat-sidenav-opened" align="end" mode="side" opened="true" fuseMdSidenavHelper="dashboards-right-sidenav" md-is-locked-open="gt-md">
|
<mat-sidenav class="sidenav mat-sidenav-opened" align="end" mode="side" opened="true" fuseMatSidenavHelper="dashboards-right-sidenav" mat-is-locked-open="gt-md">
|
||||||
|
|
||||||
<div class="sidenav-content" fusePerfectScrollbar>
|
<div class="sidenav-content" fusePerfectScrollbar>
|
||||||
|
|
||||||
@@ -709,15 +706,15 @@
|
|||||||
<div class="h3">{{dateNow | date: 'EEEE, h:m:ss'}}</div>
|
<div class="h3">{{dateNow | date: 'EEEE, h:m:ss'}}</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button md-icon-button [mdMenuTriggerFor]="moreMenu" aria-label="more">
|
<button mat-icon-button [matMenuTriggerFor]="moreMenu" aria-label="more">
|
||||||
<md-icon>more_vert</md-icon>
|
<mat-icon>more_vert</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<md-menu #moreMenu="mdMenu">
|
<mat-menu #moreMenu="matMenu">
|
||||||
<button md-menu-item aria-label="Flip widget">
|
<button mat-menu-item aria-label="Flip widget">
|
||||||
Details
|
Details
|
||||||
</button>
|
</button>
|
||||||
</md-menu>
|
</mat-menu>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -735,7 +732,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
</div>
|
</div>
|
||||||
<!-- / Front -->
|
<!-- / Front -->
|
||||||
|
|
||||||
@@ -751,28 +748,28 @@
|
|||||||
<div class="pl-16 pr-8 py-16" fxLayout="row" fxLayoutAlign="space-between center">
|
<div class="pl-16 pr-8 py-16" fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
|
|
||||||
<div class="h4" fxLayout="row" fxLayoutAlign="start center">
|
<div class="h4" fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon class="mr-8">place</md-icon>
|
<mat-icon class="mr-8">place</mat-icon>
|
||||||
{{widgets.weatherWidget.locations[widgets.weatherWidget.currentLocation].name}}
|
{{widgets.weatherWidget.locations[widgets.weatherWidget.currentLocation].name}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button md-icon-button [mdMenuTriggerFor]="moreMenu" aria-label="more">
|
<button mat-icon-button [matMenuTriggerFor]="moreMenu" aria-label="more">
|
||||||
<md-icon>more_vert</md-icon>
|
<mat-icon>more_vert</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<md-menu #moreMenu="mdMenu">
|
<mat-menu #moreMenu="matMenu">
|
||||||
<button md-menu-item aria-label="Flip widget">
|
<button mat-menu-item aria-label="Flip widget">
|
||||||
Details
|
Details
|
||||||
</button>
|
</button>
|
||||||
</md-menu>
|
</mat-menu>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="p-16 pb-32" fxLayout="column" fxLayoutAlign="center center">
|
<div class="p-16 pb-32" fxLayout="column" fxLayoutAlign="center center">
|
||||||
|
|
||||||
<div fxLayout="row" fxLayoutAlign="center center">
|
<div fxLayout="row" fxLayoutAlign="center center">
|
||||||
<md-icon fontSet="meteocons" [fontIcon]="widgets.weatherWidget.locations[widgets.weatherWidget.currentLocation].icon"
|
<mat-icon fontSet="meteocons" [fontIcon]="widgets.weatherWidget.locations[widgets.weatherWidget.currentLocation].icon"
|
||||||
class="icon s-40 mr-16"></md-icon>
|
class="icon s-40 mr-16"></mat-icon>
|
||||||
<span class="mat-display-2 m-0 font-weight-300 secondary-text">
|
<span class="mat-display-2 m-0 font-weight-300 secondary-text">
|
||||||
{{widgets.weatherWidget.locations[widgets.weatherWidget.currentLocation].temp[widgets.weatherWidget.tempUnit]}}
|
{{widgets.weatherWidget.locations[widgets.weatherWidget.currentLocation].temp[widgets.weatherWidget.tempUnit]}}
|
||||||
</span>
|
</span>
|
||||||
@@ -783,7 +780,7 @@
|
|||||||
|
|
||||||
<div class="grey-300-bg p-16" fxLayout="row" fxLayoutAlign="space-between center">
|
<div class="grey-300-bg p-16" fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon fontSet="meteocons" fontIcon="icon-windy" class="mr-8 s-16"></md-icon>
|
<mat-icon fontSet="meteocons" fontIcon="icon-windy" class="mr-8 s-16"></mat-icon>
|
||||||
<span>
|
<span>
|
||||||
{{widgets.weatherWidget.locations[widgets.weatherWidget.currentLocation].windSpeed[widgets.weatherWidget.speedUnit]}}
|
{{widgets.weatherWidget.locations[widgets.weatherWidget.currentLocation].windSpeed[widgets.weatherWidget.speedUnit]}}
|
||||||
</span>
|
</span>
|
||||||
@@ -791,12 +788,12 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon fontSet="meteocons" fontIcon="icon-compass" class="mr-8 s-16"></md-icon>
|
<mat-icon fontSet="meteocons" fontIcon="icon-compass" class="mr-8 s-16"></mat-icon>
|
||||||
<span>{{widgets.weatherWidget.locations[widgets.weatherWidget.currentLocation].windDirection}}</span>
|
<span>{{widgets.weatherWidget.locations[widgets.weatherWidget.currentLocation].windDirection}}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon fontSet="meteocons" fontIcon="icon-rainy" class="mr-8 s-16"></md-icon>
|
<mat-icon fontSet="meteocons" fontIcon="icon-rainy" class="mr-8 s-16"></mat-icon>
|
||||||
<span>{{widgets.weatherWidget.locations[widgets.weatherWidget.currentLocation].rainProbability}}</span>
|
<span>{{widgets.weatherWidget.locations[widgets.weatherWidget.currentLocation].rainProbability}}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -806,7 +803,7 @@
|
|||||||
*ngFor="let day of widgets.weatherWidget.locations[widgets.weatherWidget.currentLocation].next3Days">
|
*ngFor="let day of widgets.weatherWidget.locations[widgets.weatherWidget.currentLocation].next3Days">
|
||||||
<span class="h4">{{day.name}}</span>
|
<span class="h4">{{day.name}}</span>
|
||||||
<div fxLayout="row" fxLayoutAlign="start center">
|
<div fxLayout="row" fxLayoutAlign="start center">
|
||||||
<md-icon fontSet="meteocons" [fontIcon]="day.icon" class="mr-16"></md-icon>
|
<mat-icon fontSet="meteocons" [fontIcon]="day.icon" class="mr-16"></mat-icon>
|
||||||
<span class="h2">{{day.temp[widgets.weatherWidget.tempUnit]}}</span>
|
<span class="h2">{{day.temp[widgets.weatherWidget.tempUnit]}}</span>
|
||||||
<span class="h2 font-weight-300 secondary-text text-super">°</span>
|
<span class="h2 font-weight-300 secondary-text text-super">°</span>
|
||||||
<span class="h2 font-weight-300 secondary-text">{{widgets.weatherWidget.tempUnit}}</span>
|
<span class="h2 font-weight-300 secondary-text">{{widgets.weatherWidget.tempUnit}}</span>
|
||||||
@@ -814,7 +811,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<md-divider></md-divider>
|
<mat-divider></mat-divider>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- / Front -->
|
<!-- / Front -->
|
||||||
@@ -826,9 +823,9 @@
|
|||||||
<!-- / WIDGET GROUP -->
|
<!-- / WIDGET GROUP -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</md-sidenav>
|
</mat-sidenav>
|
||||||
<!-- / SIDENAV -->
|
<!-- / SIDENAV -->
|
||||||
|
|
||||||
</md-sidenav-container>
|
</mat-sidenav-container>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
#dashboard-project {
|
#dashboard-project {
|
||||||
|
|
||||||
md-sidenav-container {
|
mat-sidenav-container {
|
||||||
|
|
||||||
|
.mat-drawer-content,
|
||||||
|
.mat-sidenav-content {
|
||||||
|
flex: 1 1 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.center {
|
.center {
|
||||||
|
|
||||||
@@ -23,7 +28,7 @@
|
|||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
background: rgba(0, 0, 0, 0.12);
|
background: rgba(0, 0, 0, 0.12);
|
||||||
|
|
||||||
md-icon {
|
mat-icon {
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -32,7 +37,7 @@
|
|||||||
> .content {
|
> .content {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
|
||||||
md-tab-group {
|
mat-tab-group {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
.mat-tab-body-wrapper {
|
.mat-tab-body-wrapper {
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user