Update sidebar

This commit is contained in:
Paulus Schoutsen 2016-03-14 23:52:56 -07:00
parent a310a4026a
commit cabf477867
4 changed files with 86 additions and 57 deletions

View File

@ -8,7 +8,7 @@
"license": "MIT", "license": "MIT",
"private": true, "private": true,
"devDependencies": { "devDependencies": {
"polymer": "Polymer/polymer#~1.2.4", "polymer": "Polymer/polymer#~1.3.1",
"pikaday": "1.4", "pikaday": "1.4",
"leaflet-map": "1.2.0", "leaflet-map": "1.2.0",
"iron-elements": "PolymerElements/iron-elements#~1.0.8", "iron-elements": "PolymerElements/iron-elements#~1.0.8",

View File

@ -1,6 +1,7 @@
<link rel='import' href='../../bower_components/polymer/polymer.html'> <link rel='import' href='../../bower_components/polymer/polymer.html'>
<link rel='import' href='../../bower_components/paper-header-panel/paper-header-panel.html'> <link rel='import' href='../../bower_components/paper-header-panel/paper-header-panel.html'>
<link rel='import' href='../../bower_components/paper-toolbar/paper-toolbar.html'> <link rel='import' href='../../bower_components/paper-toolbar/paper-toolbar.html'>
<link rel='import' href='../../bower_components/paper-menu/paper-menu.html'>
<link rel='import' href='../../bower_components/iron-icon/iron-icon.html'> <link rel='import' href='../../bower_components/iron-icon/iron-icon.html'>
<link rel='import' href='../../bower_components/paper-item/paper-item.html'> <link rel='import' href='../../bower_components/paper-item/paper-item.html'>
<link rel='import' href='../../bower_components/paper-item/paper-icon-item.html'> <link rel='import' href='../../bower_components/paper-item/paper-icon-item.html'>
@ -10,6 +11,14 @@
<dom-module id='ha-sidebar'> <dom-module id='ha-sidebar'>
<style> <style>
:host {
--sidebar-text: {
opacity: var(--dark-primary-opacity);
font-weight: 500;
font-size: 14px;
}
}
.sidenav { .sidenav {
-ms-user-select: none; -ms-user-select: none;
-webkit-user-select: none; -webkit-user-select: none;
@ -17,29 +26,49 @@
} }
paper-toolbar { paper-toolbar {
--paper-toolbar-title: {
text-align: left;
margin-left: 0px !important;
};
--paper-toolbar-background: #fff; --paper-toolbar-background: #fff;
--paper-toolbar-color: #000; --paper-toolbar-color: #000;
opacity: var(--dark-primary-opacity);
border-bottom: 1px solid #e0e0e0;
} }
div.title { paper-menu {
text-align: left; padding-bottom: 0;
margin-left: 24px !important;
}
div.menu {
color: var(--secondary-text-color);
margin-top: 8px;
} }
paper-icon-item { paper-icon-item {
padding-left: 24px; --paper-icon-item: {
cursor: pointer; cursor: pointer;
font-weight: 500;
} }
paper-icon-item.selected { --paper-item-icon: {
color: #000;
opacity: var(--dark-secondary-opacity);
};
--paper-item-selected: {
color: var(--default-primary-color); color: var(--default-primary-color);
background-color: #f0f0f0; background-color: #e8e8e8;
opacity: 1;
}
}
paper-icon-item.iron-selected {
--paper-item-icon: {
color: var(--default-primary-color);
opacity: 1;
};
}
paper-icon-item .item-text {
@apply(--sidebar-text);
}
paper-icon-item.iron-selected .item-text {
opacity: 1;
} }
paper-icon-item.logout { paper-icon-item.logout {
@ -47,78 +76,92 @@
} }
.divider { .divider {
border-top: 1px solid #e0e0e0; height: 1px;
background-color: #000;
margin: 4px 0;
opacity: var(--dark-divider-opacity)
} }
.text { .streaming {
@apply(--sidebar-text);
}
.subheader {
@apply(--sidebar-text);
padding: 16px; padding: 16px;
font-size: 14px;
font-weight: 500;
} }
.dev-tools { .dev-tools {
padding: 0 8px; padding: 0 8px;
opacity: var(--dark-secondary-opacity);
} }
</style> </style>
<template> <template>
<paper-header-panel mode='scroll' class='sidenav fit'> <paper-header-panel mode='scroll' class='sidenav fit'>
<paper-toolbar> <paper-toolbar>
<!-- forces paper toolbar to style title appropriate -->
<paper-icon-button icon='mdi:menu' hidden$='[[!narrow]]' on-tap='toggleMenu'></paper-icon-button>
<div class="title">Home Assistant</div> <div class="title">Home Assistant</div>
<paper-icon-button icon='mdi:chevron-left' hidden$='[[narrow]]' on-tap='toggleMenu'></paper-icon-button>
</paper-toolbar> </paper-toolbar>
<div class='menu'> <paper-menu attr-for-selected='data-panel' selected='[[selected]]' on-iron-select='menuSelect'>
<paper-icon-item on-tap='menuClicked' data-panel='states'> <paper-icon-item on-tap='menuClicked' data-panel='states'>
<iron-icon item-icon icon='mdi:apps'></iron-icon> States <iron-icon item-icon icon='mdi:apps'></iron-icon>
<span class='item-text'>States</span>
</paper-icon-item> </paper-icon-item>
<paper-icon-item on-tap='menuClicked' data-panel='map'> <paper-icon-item on-tap='menuClicked' data-panel='map'>
<iron-icon item-icon icon='mdi:account-location'></iron-icon> <iron-icon item-icon icon='mdi:account-location'></iron-icon>
Map <span class='item-text'>Map</span>
</paper-icon-item> </paper-icon-item>
<template is='dom-if' if='[[hasHistoryComponent]]'> <template is='dom-if' if='[[hasHistoryComponent]]'>
<paper-icon-item on-tap='menuClicked' data-panel='history'> <paper-icon-item on-tap='menuClicked' data-panel='history'>
<iron-icon item-icon icon='mdi:poll-box'></iron-icon> <iron-icon item-icon icon='mdi:poll-box'></iron-icon>
History <span class='item-text'>History</span>
</paper-icon-item> </paper-icon-item>
</template> </template>
<template is='dom-if' if='[[hasLogbookComponent]]'> <template is='dom-if' if='[[hasLogbookComponent]]'>
<paper-icon-item on-tap='menuClicked' data-panel='logbook'> <paper-icon-item on-tap='menuClicked' data-panel='logbook'>
<iron-icon item-icon icon='mdi:format-list-bulleted-type'></iron-icon> <iron-icon item-icon icon='mdi:format-list-bulleted-type'></iron-icon>
Logbook <span class='item-text'>Logbook</span>
</paper-icon-item> </paper-icon-item>
</template> </template>
<paper-icon-item on-tap='menuClicked' data-panel='logout' class='logout'> <paper-icon-item on-tap='menuClicked' data-panel='logout' class='logout'>
<iron-icon item-icon icon='mdi:exit-to-app'></iron-icon> <iron-icon item-icon icon='mdi:exit-to-app'></iron-icon>
Log Out <span class='item-text'>Log Out</span>
</paper-icon-item> </paper-icon-item>
</paper-menu>
<paper-item class='divider horizontal layout justified'> <div>
<div>Streaming updates</div> <div class='divider'></div>
<paper-item class='horizontal layout justified'>
<div class='streaming'>Streaming updates</div>
<stream-status></stream-status> <stream-status></stream-status>
</paper-item> </paper-item>
<div class='text label divider'>Developer Tools</div> <div class='divider'></div>
<div class='subheader'>Developer Tools</div>
<div class='dev-tools layout horizontal justified'> <div class='dev-tools layout horizontal justified'>
<paper-icon-button <paper-icon-button
icon='mdi:remote' data-panel='devService' icon='mdi:remote' data-panel='devService'
on-tap='handleDevClick'></paper-icon-button> on-tap='menuClicked'></paper-icon-button>
<paper-icon-button <paper-icon-button
icon='mdi:code-tags' data-panel='devState' icon='mdi:code-tags' data-panel='devState'
on-tap='handleDevClick'></paper-icon-button> on-tap='menuClicked'></paper-icon-button>
<paper-icon-button <paper-icon-button
icon='mdi:radio-tower' data-panel='devEvent' icon='mdi:radio-tower' data-panel='devEvent'
on-tap='handleDevClick'></paper-icon-button> on-tap='menuClicked'></paper-icon-button>
<paper-icon-button <paper-icon-button
icon='mdi:file-xml' data-panel='devTemplate' icon='mdi:file-xml' data-panel='devTemplate'
on-tap='handleDevClick'></paper-icon-button> on-tap='menuClicked'></paper-icon-button>
<paper-icon-button <paper-icon-button
icon='mdi:information-outline' data-panel='devInfo' icon='mdi:information-outline' data-panel='devInfo'
on-tap='handleDevClick'></paper-icon-button> on-tap='menuClicked'></paper-icon-button>
</div> </div>
</div> </div>
</paper-header-panel> </paper-header-panel>

View File

@ -26,10 +26,14 @@ export default new Polymer({
type: String, type: String,
}, },
narrow: {
type: Boolean,
},
selected: { selected: {
type: String, type: String,
bindNuclear: navigationGetters.activePane, bindNuclear: navigationGetters.activePane,
observer: 'selectedChanged', // observer: 'selectedChanged',
}, },
hasHistoryComponent: { hasHistoryComponent: {
@ -43,20 +47,8 @@ export default new Polymer({
}, },
}, },
selectedChanged(newVal) { menuSelect(ev) {
if (document.activeElement) { this.updateStyles();
document.activeElement.blur();
}
const menuItems = this.querySelectorAll('.menu [data-panel]');
for (let idx = 0; idx < menuItems.length; idx++) {
if (menuItems[idx].getAttribute('data-panel') === newVal) {
menuItems[idx].classList.add('selected');
} else {
menuItems[idx].classList.remove('selected');
}
}
}, },
menuClicked(ev) { menuClicked(ev) {
@ -74,12 +66,6 @@ export default new Polymer({
} }
}, },
handleDevClick(ev) {
// prevent it from highlighting first menu item
document.activeElement.blur();
this.menuClicked(ev);
},
toggleMenu() { toggleMenu() {
this.fire('close-menu'); this.fire('close-menu');
}, },

View File

@ -28,7 +28,7 @@
force-narrow='[[computeForceNarrow(narrow, showSidebar)]]' force-narrow='[[computeForceNarrow(narrow, showSidebar)]]'
responsive-width='0' disable-swipe='[[isSelectedMap]]' responsive-width='0' disable-swipe='[[isSelectedMap]]'
disable-edge-swipe='[[isSelectedMap]]'> disable-edge-swipe='[[isSelectedMap]]'>
<ha-sidebar drawer></ha-sidebar> <ha-sidebar drawer narrow='[[narrow]]'></ha-sidebar>
<template is='dom-if' if='[[isSelectedStates]]'> <template is='dom-if' if='[[isSelectedStates]]'>
<partial-cards main narrow='[[narrow]]' show-menu='[[showSidebar]]'></partial-cards> <partial-cards main narrow='[[narrow]]' show-menu='[[showSidebar]]'></partial-cards>