mirror of
https://github.com/richard-loafle/fuse-angular.git
synced 2025-01-10 12:35:07 +00:00
Merge branch 'master' into skeleton
This commit is contained in:
commit
605f4d9463
2
package-lock.json
generated
2
package-lock.json
generated
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "fuse",
|
"name": "fuse",
|
||||||
"version": "5.2.9",
|
"version": "5.2.10",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "fuse",
|
"name": "fuse",
|
||||||
"version": "5.2.9",
|
"version": "5.2.10",
|
||||||
"license": "https://themeforest.net/licenses/terms/regular",
|
"license": "https://themeforest.net/licenses/terms/regular",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"ng": "ng",
|
"ng": "ng",
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
import { Component, ElementRef, HostBinding, HostListener, Inject, Input, OnDestroy, OnInit, Renderer2, ViewEncapsulation } from '@angular/core';
|
import { Component, ElementRef, HostBinding, HostListener, Input, OnDestroy, OnInit, Renderer2, ViewEncapsulation } from '@angular/core';
|
||||||
import { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';
|
import { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';
|
||||||
import { ObservableMedia } from '@angular/flex-layout';
|
import { ObservableMedia } from '@angular/flex-layout';
|
||||||
import { Subscription } from 'rxjs/Subscription';
|
import { Subscription } from 'rxjs/Subscription';
|
||||||
|
|
||||||
import { FuseSidebarService } from './sidebar.service';
|
import { FuseSidebarService } from './sidebar.service';
|
||||||
import { FuseMatchMediaService } from '@fuse/services/match-media.service';
|
import { FuseMatchMediaService } from '@fuse/services/match-media.service';
|
||||||
import { DOCUMENT } from '@angular/common';
|
import { FuseConfigService } from '@fuse/services/config.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector : 'fuse-sidebar',
|
selector : 'fuse-sidebar',
|
||||||
|
@ -21,7 +21,7 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
|
|
||||||
// Align
|
// Align
|
||||||
@Input()
|
@Input()
|
||||||
align: string;
|
align: 'left' | 'right';
|
||||||
|
|
||||||
// Open
|
// Open
|
||||||
@HostBinding('class.open')
|
@HostBinding('class.open')
|
||||||
|
@ -38,21 +38,57 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
// Folded
|
// Folded
|
||||||
@HostBinding('class.folded')
|
@HostBinding('class.folded')
|
||||||
@Input()
|
@Input()
|
||||||
set folded(value)
|
set folded(value: boolean)
|
||||||
{
|
{
|
||||||
|
// Only work if the sidebar is not closed
|
||||||
|
if ( !this.opened )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the folded
|
||||||
this._folded = value;
|
this._folded = value;
|
||||||
|
|
||||||
if ( value )
|
// Programmatically add/remove margin to the element
|
||||||
|
// that comes after or before based on the alignment
|
||||||
|
let sibling,
|
||||||
|
styleRule;
|
||||||
|
|
||||||
|
const styleValue = '64px';
|
||||||
|
|
||||||
|
// Get the sibling and set the style rule
|
||||||
|
if ( this.align === 'left' )
|
||||||
{
|
{
|
||||||
this.fold();
|
sibling = this.elementRef.nativeElement.nextElementSibling;
|
||||||
|
styleRule = 'marginLeft';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this.unfold();
|
sibling = this.elementRef.nativeElement.previousElementSibling;
|
||||||
|
styleRule = 'marginRight';
|
||||||
|
}
|
||||||
|
|
||||||
|
// If there is no sibling, return...
|
||||||
|
if ( !sibling )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If folded...
|
||||||
|
if ( value )
|
||||||
|
{
|
||||||
|
// Set the style
|
||||||
|
this.renderer.setStyle(sibling, styleRule, styleValue);
|
||||||
|
}
|
||||||
|
// If unfolded...
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Remove the style
|
||||||
|
this.renderer.removeStyle(sibling, styleRule);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get folded()
|
get folded(): boolean
|
||||||
{
|
{
|
||||||
return this._folded;
|
return this._folded;
|
||||||
}
|
}
|
||||||
|
@ -62,31 +98,31 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
unfolded: boolean;
|
unfolded: boolean;
|
||||||
|
|
||||||
// Private
|
// Private
|
||||||
private _folded = false;
|
private _folded: boolean;
|
||||||
private _wasActive: boolean;
|
private _wasActive: boolean;
|
||||||
private _backdrop: HTMLElement | null = null;
|
private _backdrop: HTMLElement | null = null;
|
||||||
private _player: AnimationPlayer;
|
private _player: AnimationPlayer;
|
||||||
private _matchMediaWatcher: Subscription;
|
private _onMediaChangeSubscription: Subscription;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
* @param renderer
|
* @param {Renderer2} renderer
|
||||||
* @param elementRef
|
* @param {ElementRef} elementRef
|
||||||
* @param animationBuilder
|
* @param {AnimationBuilder} animationBuilder
|
||||||
* @param sidebarService
|
* @param {ObservableMedia} observableMedia
|
||||||
* @param matchMedia
|
* @param {FuseConfigService} fuseConfigService
|
||||||
* @param media
|
* @param {FuseSidebarService} fuseSidebarService
|
||||||
* @param document
|
* @param {FuseMatchMediaService} fuseMatchMediaService
|
||||||
*/
|
*/
|
||||||
constructor(
|
constructor(
|
||||||
private renderer: Renderer2,
|
private renderer: Renderer2,
|
||||||
private elementRef: ElementRef,
|
private elementRef: ElementRef,
|
||||||
private animationBuilder: AnimationBuilder,
|
private animationBuilder: AnimationBuilder,
|
||||||
private sidebarService: FuseSidebarService,
|
private observableMedia: ObservableMedia,
|
||||||
private matchMedia: FuseMatchMediaService,
|
private fuseConfigService: FuseConfigService,
|
||||||
private media: ObservableMedia,
|
private fuseSidebarService: FuseSidebarService,
|
||||||
@Inject(DOCUMENT) private document: any
|
private fuseMatchMediaService: FuseMatchMediaService
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// Set the defaults
|
// Set the defaults
|
||||||
|
@ -101,7 +137,7 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
ngOnInit(): void
|
ngOnInit(): void
|
||||||
{
|
{
|
||||||
// Register the sidebar
|
// Register the sidebar
|
||||||
this.sidebarService.register(this.name, this);
|
this.fuseSidebarService.register(this.name, this);
|
||||||
|
|
||||||
// Setup alignment
|
// Setup alignment
|
||||||
this._setupAlignment();
|
this._setupAlignment();
|
||||||
|
@ -115,27 +151,35 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
*/
|
*/
|
||||||
ngOnDestroy(): void
|
ngOnDestroy(): void
|
||||||
{
|
{
|
||||||
// Unregister the sidebar
|
// If the sidebar is folded, unfold it to revert modifications
|
||||||
this.sidebarService.unregister(this.name);
|
if ( this.folded )
|
||||||
|
{
|
||||||
|
this.unfold();
|
||||||
|
}
|
||||||
|
|
||||||
// Unregister the media watcher
|
// Unregister the sidebar
|
||||||
this._matchMediaWatcher.unsubscribe();
|
this.fuseSidebarService.unregister(this.name);
|
||||||
|
|
||||||
|
// Unsubscribe from the media watcher subscription
|
||||||
|
this._onMediaChangeSubscription.unsubscribe();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup the alignment
|
* Set the sidebar alignment
|
||||||
*
|
*
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
private _setupAlignment(): void
|
private _setupAlignment(): void
|
||||||
{
|
{
|
||||||
if ( this.align === 'left' )
|
// Add the correct class name to the sidebar
|
||||||
|
// element depending on the align attribute
|
||||||
|
if ( this.align === 'right' )
|
||||||
{
|
{
|
||||||
this.renderer.addClass(this.elementRef.nativeElement, 'left-aligned');
|
this.renderer.addClass(this.elementRef.nativeElement, 'right-aligned');
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this.renderer.addClass(this.elementRef.nativeElement, 'right-aligned');
|
this.renderer.addClass(this.elementRef.nativeElement, 'left-aligned');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,12 +200,12 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
this._wasActive = false;
|
this._wasActive = false;
|
||||||
|
|
||||||
// Act on every media change
|
// Act on every media change
|
||||||
this._matchMediaWatcher =
|
this._onMediaChangeSubscription =
|
||||||
|
|
||||||
this.matchMedia.onMediaChange.subscribe(() => {
|
this.fuseMatchMediaService.onMediaChange.subscribe(() => {
|
||||||
|
|
||||||
// Get the active status
|
// Get the active status
|
||||||
const isActive = this.media.isActive(this.lockedOpen);
|
const isActive = this.observableMedia.isActive(this.lockedOpen);
|
||||||
|
|
||||||
// If the both status are the same, don't act
|
// If the both status are the same, don't act
|
||||||
if ( this._wasActive === isActive )
|
if ( this._wasActive === isActive )
|
||||||
|
@ -169,14 +213,24 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store the new active status
|
|
||||||
this._wasActive = isActive;
|
|
||||||
|
|
||||||
// Activate the lockedOpen
|
// Activate the lockedOpen
|
||||||
if ( isActive )
|
if ( isActive )
|
||||||
{
|
{
|
||||||
// Set the lockedOpen status
|
// Set the lockedOpen status
|
||||||
this.isLockedOpen = true;
|
this.isLockedOpen = true;
|
||||||
|
|
||||||
|
// Force the the opened status to true
|
||||||
|
this.opened = true;
|
||||||
|
|
||||||
|
// Read the folded setting from the config
|
||||||
|
// and fold the sidebar if it's true
|
||||||
|
if ( this.fuseConfigService.config.layout.navigationFolded )
|
||||||
|
{
|
||||||
|
this.fold();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hide the backdrop if any exists
|
||||||
|
this.hideBackdrop();
|
||||||
}
|
}
|
||||||
// De-Activate the lockedOpen
|
// De-Activate the lockedOpen
|
||||||
else
|
else
|
||||||
|
@ -186,7 +240,13 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
|
|
||||||
// Unfold the sidebar in case if it was folded
|
// Unfold the sidebar in case if it was folded
|
||||||
this.unfold();
|
this.unfold();
|
||||||
|
|
||||||
|
// Force the the opened status to close
|
||||||
|
this.opened = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Store the new active status
|
||||||
|
this._wasActive = isActive;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,9 +265,6 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
|
|
||||||
// Set the opened status
|
// Set the opened status
|
||||||
this.opened = true;
|
this.opened = true;
|
||||||
|
|
||||||
// Add a css class to the body
|
|
||||||
this.renderer.addClass(this.document.body, 'fuse-sidebar-opened');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -215,7 +272,7 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
*/
|
*/
|
||||||
close(): void
|
close(): void
|
||||||
{
|
{
|
||||||
if ( !this.opened )
|
if ( !this.opened || this.isLockedOpen )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -225,9 +282,6 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
|
|
||||||
// Set the opened status
|
// Set the opened status
|
||||||
this.opened = false;
|
this.opened = false;
|
||||||
|
|
||||||
// Remove the css class from the body
|
|
||||||
this.renderer.removeClass(this.document.body, 'fuse-sidebar-opened');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -259,9 +313,6 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
|
|
||||||
// Unfold the sidebar temporarily
|
// Unfold the sidebar temporarily
|
||||||
this.unfolded = true;
|
this.unfolded = true;
|
||||||
|
|
||||||
// Add a css class to the body
|
|
||||||
this.renderer.addClass(this.document.body, 'fuse-sidebar-folded-unfolded');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -278,9 +329,6 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
|
|
||||||
// Fold the sidebar back
|
// Fold the sidebar back
|
||||||
this.unfolded = false;
|
this.unfolded = false;
|
||||||
|
|
||||||
// Remove the css class from the body
|
|
||||||
this.renderer.removeClass(this.document.body, 'fuse-sidebar-folded-unfolded');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -288,8 +336,14 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
*/
|
*/
|
||||||
fold(): void
|
fold(): void
|
||||||
{
|
{
|
||||||
// Add a css class to the body
|
// Only work if the sidebar is not folded
|
||||||
this.renderer.addClass(this.document.body, 'fuse-sidebar-folded');
|
if ( this.folded )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fold
|
||||||
|
this.folded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -297,8 +351,14 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
*/
|
*/
|
||||||
unfold(): void
|
unfold(): void
|
||||||
{
|
{
|
||||||
// Remove the css class from the body
|
// Only work if the sidebar is folded
|
||||||
this.renderer.removeClass(this.document.body, 'fuse-sidebar-folded');
|
if ( !this.folded )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unfold
|
||||||
|
this.folded = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -306,7 +366,14 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
||||||
*/
|
*/
|
||||||
toggleFold(): void
|
toggleFold(): void
|
||||||
{
|
{
|
||||||
this.folded = !this.folded;
|
if ( this.folded )
|
||||||
|
{
|
||||||
|
this.unfold();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.fold();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
|
|
||||||
<title>Fuse2 - Angular 5+ Material Design Admin Template</title>
|
<title>Fuse - Angular 5+ Material Design Admin Template</title>
|
||||||
<base href="/">
|
<base href="/">
|
||||||
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
|
|
Loading…
Reference in New Issue
Block a user