diff --git a/src/app/pages/pages.component.ts b/src/app/pages/pages.component.ts index 662c28a1..951dc021 100644 --- a/src/app/pages/pages.component.ts +++ b/src/app/pages/pages.component.ts @@ -2,7 +2,7 @@ import {Component, ViewEncapsulation} from 'angular2/core'; import {RouteConfig, Router} from 'angular2/router'; import {Dashboard} from './dashboard'; -import {PageTop} from '../theme'; +import {PageTop, Sidebar} from '../theme'; /* * App Component @@ -12,8 +12,8 @@ import {PageTop} from '../theme'; selector: 'pages', encapsulation: ViewEncapsulation.None, styles: [], - directives: [PageTop], - template: `` + directives: [PageTop, Sidebar], + template: `` }) @RouteConfig([ { path: '/dashboard', name: 'Dashboard', component: Dashboard, useAsDefault: true }, @@ -25,4 +25,4 @@ export class Pages { console.log('Pages'); } -} \ No newline at end of file +} diff --git a/src/app/theme/index.ts b/src/app/theme/index.ts index f0cdab54..91a4fc9a 100644 --- a/src/app/theme/index.ts +++ b/src/app/theme/index.ts @@ -1,2 +1,3 @@ export * from './pageTop'; export * from './msgCenter'; +export * from './sidebar'; diff --git a/src/app/theme/sidebar/index.ts b/src/app/theme/sidebar/index.ts new file mode 100644 index 00000000..075e6239 --- /dev/null +++ b/src/app/theme/sidebar/index.ts @@ -0,0 +1 @@ +export * from './sidebar.component'; diff --git a/src/app/theme/sidebar/sidebar.component.ts b/src/app/theme/sidebar/sidebar.component.ts new file mode 100644 index 00000000..70cecaae --- /dev/null +++ b/src/app/theme/sidebar/sidebar.component.ts @@ -0,0 +1,10 @@ +import {Component, ViewEncapsulation} from 'angular2/core'; + +@Component({ + selector: 'sidebar', + styles: [ require('./sidebar.scss') ], + template: require('./sidebar.html'), + directives: [], + pipes: [] +}) +export class Sidebar {} diff --git a/src/app/theme/sidebar/sidebar.html b/src/app/theme/sidebar/sidebar.html new file mode 100644 index 00000000..9e38cc04 --- /dev/null +++ b/src/app/theme/sidebar/sidebar.html @@ -0,0 +1,5 @@ + diff --git a/src/app/theme/sidebar/sidebar.scss b/src/app/theme/sidebar/sidebar.scss new file mode 100644 index 00000000..87f5e542 --- /dev/null +++ b/src/app/theme/sidebar/sidebar.scss @@ -0,0 +1,274 @@ +@import '../sass/conf/conf'; + +$sidebar-width: 180px; +$angle-left: "\f100"; +$angle-right: "\f101"; + +.al-sidebar { + width: $sidebar-width; + top: $top-height; + left: 0; + z-index: 904; + display: block; + min-height: 100%; + @include bg-translucent-dark(0.5); + height: 100%; + position: fixed; +} + +.al-sidebar-list { + margin: 0; + padding: 18px 0 0 0; + list-style: none; +} + +.al-sidebar-sublist .subitem-submenu-list { + padding-left: 15px; +} + +.subitem-submenu-link { + .fa { + top: 7px; + } +} + +.al-sidebar-list-item { + display: block; + position: relative; + float: none; + padding: 0; + &.selected:not(.with-sub-menu) { + background-color: $primary; + a.al-sidebar-list-link { + color: $default; + b { + color: $default; + } + } + } +} + +a.al-sidebar-list-link { + display: block; + height: 42px; + padding-left: 18px; + text-shadow: none; + font-size: 13px; + text-decoration: none; + color: #ffffff; + line-height: 42px; + white-space: nowrap; + overflow: hidden; + cursor: pointer; + &:hover { + color: $primary; + b { + color: $primary; + } + } + i { + margin-right: 18px; + width: 16px; + display: inline-block; + } + b { + display: block; + opacity: 1; + width: 14px; + height: 14px; + line-height: 14px; + text-shadow: none; + font-size: 18px; + position: absolute; + right: 10px; + top: 12px; + padding: 0; + text-align: center; + color: #cccccc; + } +} + +.slimScrollBar, .slimScrollRail { + border-radius: 0px !important; + width: 4px !important; + left: 176px; +} + +@mixin layout-collapsed() { + .al-main { + margin-left: 50px; + } + + .al-footer { + padding-left: 83px + } +} + +@mixin default-sublist() { + padding: 0; + list-style: none; + position: relative; + display: none; + &.expanded { + display: block; + } + > li { + display: block; + float: none; + padding: 0; + border-bottom: none; + position: relative; + a { + display: block; + text-shadow: none; + font-size: 13px; + text-decoration: none; + color: #ffffff; + padding-left: 52px; + height: auto; + line-height: 29px; + &:hover { + color: $primary; + } + } + &.selected:not(.with-sub-menu) > a { + border: none; + background-color: $primary; + &:hover { + color: $default; + } + } + + } +} + +.al-sidebar-sublist { + @include default-sublist(); +} + +.sidebar-hover-elem{ + width: 4px; + background: $primary; + position: absolute; + top: -150px; + left: 176px; + transition: all 0.5s ease; + transition-property: top, height; + height: 42px; + display: block; +} + +.sidebar-select-elem { + display: block; + top: 94px; +} + +@mixin sidebar-collapsed() { + .al-sidebar { + width: 52px; + + .fa-angle-down, .fa-angle-up { + opacity: 0; + } + + .al-sidebar-sublist { + position: absolute; + top: -1px; + left: 52px; + @include bg-translucent-dark(0.8); + width: 0; + display: block; + overflow: hidden; + transition: width 0.5s ease; + &.slide-right { + width: 135px; + } + &:before { + display: none; + } + li { + &:before { + display: none; + } + a { + padding-left: 18px; + padding-right: 18px; + min-width: 130px; + white-space: nowrap; + } + } + } + + .sidebar-hover-elem, .sidebar-select-elem { + left: 48px; + } + } +} + +@mixin sidebar-hidden() { + .al-sidebar { + width: 0; + } + .sidebar-hover-elem, .sidebar-select-elem { + display: none; + } +} + +@mixin sidebar-overlap() { + .al-sidebar { + width: $sidebar-width; + @include bg-translucent-dark(0.75); + transition: width 0.5s ease; + + .fa-angle-down, .fa-angle-up { + opacity: 1; + } + + .al-sidebar-sublist { + @include default-sublist(); + top: auto; + left: auto; + background: none; + width: auto; + overflow: visible; + transition: none; + } + + .sidebar-hover-elem, .sidebar-select-elem { + left: $sidebar-width - 4; + transition: left 0.5s ease; + } + } +} + +@media (min-width: 1200px) { + .menu-collapsed { + @include layout-collapsed(); + } +} + +@media (min-width: $resXS + 1) { + .menu-collapsed { + @include sidebar-collapsed(); + } +} + +@media (max-width: 1200px) and (min-width: $resXS) { + @include layout-collapsed(); +} + +@media (max-width: 1200px) { + @include sidebar-overlap(); +} + +@media (max-width: $resXS) { + .menu-collapsed { + @include sidebar-hidden(); + } + .al-main { + margin-left: 0; + } + .al-footer { + padding-left: 0; + } +}