Shadow dom fixes (#241)

* Fix color picker

* Fix map panel CSS

* Convert logbook to use vaadin date picker

* Fix logbook clear date

* Migrate history panel to use vaadin date picker

* Remove pikaday

* Lint

* history panel: disable on loading
This commit is contained in:
Paulus Schoutsen 2017-03-19 21:55:52 -07:00 committed by GitHub
parent fe9b81fc67
commit 67b59f1976
7 changed files with 95 additions and 92 deletions

View File

@ -25,7 +25,8 @@
"vars-on-top": 0, "vars-on-top": 0,
"no-continue": 0, "no-continue": 0,
"no-param-reassign": 0, "no-param-reassign": 0,
"no-multi-assign": 0 "no-multi-assign": 0,
"radix": 0
}, },
"plugins": [ "plugins": [
"html" "html"

View File

@ -17,9 +17,9 @@
"paper-elements": "PolymerElements/paper-elements#~1.0.7", "paper-elements": "PolymerElements/paper-elements#~1.0.7",
"paper-range-slider": "IftachSadeh/paper-range-slider#~0.2.4", "paper-range-slider": "IftachSadeh/paper-range-slider#~0.2.4",
"paper-scroll-header-panel": "~1.0.16", "paper-scroll-header-panel": "~1.0.16",
"pikaday": "~1.5.1",
"polymer": "Polymer/polymer#~1.8.0", "polymer": "Polymer/polymer#~1.8.0",
"vaadin-combo-box": "vaadin/vaadin-combo-box#~1.1.5", "vaadin-combo-box": "vaadin/vaadin-combo-box#~1.1.5",
"vaadin-date-picker": "^1.2.1",
"paper-slider": "1.0.13", "paper-slider": "1.0.13",
"leaflet": "^1.0.2", "leaflet": "^1.0.2",
"polymer-sortablejs": "^0.1.3" "polymer-sortablejs": "^0.1.3"

View File

@ -8,8 +8,9 @@
<link rel="import" href="../../bower_components/app-layout/app-header/app-header.html"> <link rel="import" href="../../bower_components/app-layout/app-header/app-header.html">
<link rel="import" href="../../bower_components/app-layout/app-toolbar/app-toolbar.html"> <link rel="import" href="../../bower_components/app-layout/app-toolbar/app-toolbar.html">
<link rel="import" href="../../bower_components/vaadin-date-picker/vaadin-date-picker.html">
<link rel="import" href="../../src/components/state-history-charts.html"> <link rel="import" href="../../src/components/state-history-charts.html">
<link rel="import" href="../../src/resources/pikaday-js.html">
<link rel="import" href="../../src/components/ha-menu-button.html"> <link rel="import" href="../../src/components/ha-menu-button.html">
<link rel="import" href="../../src/data/ha-state-history-data.html"> <link rel="import" href="../../src/data/ha-state-history-data.html">
<link rel="import" href="../../src/resources/ha-style.html"> <link rel="import" href="../../src/resources/ha-style.html">
@ -18,13 +19,15 @@
<template> <template>
<style include="iron-flex ha-style"> <style include="iron-flex ha-style">
.content { .content {
padding: 16px; padding: 0 16px 16px;
} }
paper-input { vaadin-date-picker {
max-width: 200px; margin-bottom: 24px;
margin-right: 16px; margin-right: 16px;
max-width: 200px;
} }
paper-dropdown-menu { paper-dropdown-menu {
max-width: 100px; max-width: 100px;
} }
@ -33,7 +36,7 @@
<ha-state-history-data <ha-state-history-data
hass='[[hass]]' hass='[[hass]]'
filter-type='[[_filterType]]' filter-type='[[_filterType]]'
filter-value='[[_computeFilterDate(_selectedDate, _periodIndex)]]' filter-value='[[_computeFilterDate(_currentDate, _periodIndex)]]'
data='{{stateHistoryInput}}' data='{{stateHistoryInput}}'
is-loading='{{isLoadingData}}' is-loading='{{isLoadingData}}'
></ha-state-history-data> ></ha-state-history-data>
@ -47,13 +50,18 @@
<div class="flex content"> <div class="flex content">
<div class="flex layout horizontal wrap"> <div class="flex layout horizontal wrap">
<paper-input <vaadin-date-picker
label='Start date' id='picker'
id='datePicker' value='{{_currentDate}}'
value='[[_computeDateDisplay(_selectedDate)]]' label='Showing entries for'
on-focus='datepickerFocus' disabled='[[isLoadingData]]'
></paper-input> ></vaadin-date-picker>
<paper-dropdown-menu label-float label='Period'>
<paper-dropdown-menu
label-float
label='Period'
disabled='[[isLoadingData]]'
>
<paper-menu class="dropdown-content" selected="{{_periodIndex}}"> <paper-menu class="dropdown-content" selected="{{_periodIndex}}">
<paper-item>1 day</paper-item> <paper-item>1 day</paper-item>
<paper-item>3 days</paper-item> <paper-item>3 days</paper-item>
@ -107,12 +115,13 @@ Polymer({
value: false, value: false,
}, },
_selectedDate: { // ISO8601 formatted date string
type: Date, _currentDate: {
type: String,
value: function () { value: function () {
var begin = new Date(); var value = new Date();
begin.setHours(0, 0, 0, 0); value.setHours(0, 0, 0);
return begin; return value.toISOString().split('T')[0];
}, },
}, },
@ -127,32 +136,28 @@ Polymer({
}, },
attached: function () { attached: function () {
this.datePicker = new window.Pikaday({ // We are unable to parse date because we use intl api to render date
// Bind field to dummy input to prevent pikaday from overwriting // So we just return last known date.
// field value with its internal formatting. var lastFormatDate = new Date();
field: document.createElement('input'), this.$.picker.set('i18n.parseDate', function () {
trigger: this.$.datePicker.inputElement, return lastFormatDate;
onSelect: function (newDate) { });
this._selectedDate = newDate; this.$.picker.set('i18n.formatDate', function (date) {
}.bind(this), lastFormatDate = date;
return window.hassUtil.formatDate(date);
}); });
// Set the initial datePicker date, without triggering onSelect handler.
this.datePicker.setDate(this._selectedDate, true);
}, },
detached: function () { _computeFilterDate: function (_currentDate, periodIndex) {
this.datePicker.destroy(); if (!_currentDate) return undefined;
}, var parts = _currentDate.split('-');
parts[1] = parseInt(parts[1]) - 1;
_computeDateDisplay: function (date) { var startTime = new Date(parts[0], parts[1], parts[2]);
return window.hassUtil.formatDate(new Date(date)); var endTime = new Date(startTime);
},
_computeFilterDate: function (selectedDate, periodIndex) {
var endTime = new Date(selectedDate);
endTime.setDate( endTime.setDate(
selectedDate.getDate() + this._computeFilterDays(periodIndex)); startTime.getDate() + this._computeFilterDays(periodIndex));
return selectedDate.toISOString() + '?end_time=' + endTime.toISOString();
return startTime.toISOString() + '?end_time=' + endTime.toISOString();
}, },
_computeFilterDays: function (periodIndex) { _computeFilterDays: function (periodIndex) {

View File

@ -8,8 +8,9 @@
<link rel="import" href="../../bower_components/app-layout/app-header/app-header.html"> <link rel="import" href="../../bower_components/app-layout/app-header/app-header.html">
<link rel="import" href="../../bower_components/app-layout/app-toolbar/app-toolbar.html"> <link rel="import" href="../../bower_components/app-layout/app-toolbar/app-toolbar.html">
<link rel="import" href="../../bower_components/vaadin-date-picker/vaadin-date-picker.html">
<link rel="import" href="../../src/components/ha-menu-button.html"> <link rel="import" href="../../src/components/ha-menu-button.html">
<link rel="import" href="../../src/resources/pikaday-js.html">
<link rel="import" href="../../src/resources/ha-style.html"> <link rel="import" href="../../src/resources/ha-style.html">
<link rel="import" href="./ha-logbook.html"> <link rel="import" href="./ha-logbook.html">
@ -19,10 +20,17 @@
<template> <template>
<style include="ha-style"> <style include="ha-style">
.content { .content {
padding: 16px; padding: 0 16px 16px;
} }
paper-input { paper-spinner {
position: absolute;
top: 15px;
left: 186px;
}
vaadin-date-picker {
margin-bottom: 24px;
max-width: 200px; max-width: 200px;
} }
@ -35,7 +43,7 @@
hass='[[hass]]' hass='[[hass]]'
is-loading='{{isLoading}}' is-loading='{{isLoading}}'
entries='{{entries}}' entries='{{entries}}'
filter-date='[[_computeFilterDate(_selectedDate)]]' filter-date='[[_computeFilterDate(_currentDate)]]'
></ha-logbook-data> ></ha-logbook-data>
<app-header-layout has-scrolling-region> <app-header-layout has-scrolling-region>
@ -46,21 +54,20 @@
</app-toolbar> </app-toolbar>
</app-header> </app-header>
<div class="flex content"> <div class="content">
<div class='selected-date-container'>
<paper-input
label='Showing entries for'
id='datePicker'
value='[[_computeDateDisplay(_selectedDate)]]'
on-focus='datepickerFocus'
></paper-input>
<paper-spinner <paper-spinner
active='[[isLoading]]' active='[[isLoading]]'
hidden$='[[!isLoading]]' hidden$='[[!isLoading]]'
alt='Loading logbook entries' alt='Loading logbook entries'
></paper-spinner> ></paper-spinner>
</div>
<vaadin-date-picker
id='picker'
value='{{_currentDate}}'
label='Showing entries for'
disabled='[[isLoading]]'
></vaadin-date-picker>
<ha-logbook hass='[[hass]]' entries="[[entries]]" hidden$='[[isLoading]]'></ha-logbook> <ha-logbook hass='[[hass]]' entries="[[entries]]" hidden$='[[isLoading]]'></ha-logbook>
</div> </div>
</app-header-layout> </app-header-layout>
@ -86,12 +93,13 @@ Polymer({
value: false, value: false,
}, },
_selectedDate: { // ISO8601 formatted date string
_currentDate: {
type: String, type: String,
value: function () { value: function () {
var begin = new Date(); var value = new Date();
begin.setHours(0, 0, 0, 0); value.setHours(0, 0, 0);
return begin; return value.toISOString().split('T')[0];
}, },
}, },
@ -108,34 +116,24 @@ Polymer({
}, },
}, },
datepickerFocus: function () {
this.datePicker.adjustPosition();
},
attached: function () { attached: function () {
this.datePicker = new window.Pikaday({ // We are unable to parse date because we use intl api to render date
// Bind field to dummy input to prevent pikaday from overwriting // So we just return last known date.
// field value with its internal formatting. var lastFormatDate = new Date();
field: document.createElement('input'), this.$.picker.set('i18n.parseDate', function () {
trigger: this.$.datePicker.inputElement, return lastFormatDate;
onSelect: function (newDate) { });
this._selectedDate = newDate; this.$.picker.set('i18n.formatDate', function (date) {
}.bind(this), lastFormatDate = date;
return window.hassUtil.formatDate(date);
}); });
// Set the initial datePicker date, without triggering onSelect handler.
this.datePicker.setDate(this.selectedDate, true);
}, },
detached: function () { _computeFilterDate: function (_currentDate) {
this.datePicker.destroy(); if (!_currentDate) return undefined;
}, var parts = _currentDate.split('-');
parts[1] = parseInt(parts[1]) - 1;
_computeDateDisplay: function (date) { return new Date(parts[0], parts[1], parts[2]).toISOString();
return window.hassUtil.formatDate(new Date(date));
},
_computeFilterDate: function (_selectedDate) {
return _selectedDate.toISOString();
}, },
}); });
</script> </script>

View File

@ -5,7 +5,6 @@
<link rel="import" href="../../bower_components/app-layout/app-toolbar/app-toolbar.html"> <link rel="import" href="../../bower_components/app-layout/app-toolbar/app-toolbar.html">
<script src="../../bower_components/leaflet/dist/leaflet.js"></script> <script src="../../bower_components/leaflet/dist/leaflet.js"></script>
<link rel="stylesheet" href="../../bower_components/leaflet/dist/leaflet.css" />
<link rel="import" href="../../src/components/ha-menu-button.html"> <link rel="import" href="../../src/components/ha-menu-button.html">
@ -13,6 +12,8 @@
<dom-module id="ha-panel-map"> <dom-module id="ha-panel-map">
<template> <template>
<link rel="stylesheet" href="../../bower_components/leaflet/dist/leaflet.css" />
<style include="ha-style"> <style include="ha-style">
#map { #map {
height: calc(100% - 64px); height: calc(100% - 64px);

View File

@ -8,7 +8,7 @@
} }
</style> </style>
<canvas width='[[width]]' height='[[height]]'></canvas> <canvas width='[[width]]' height='[[height]]' id='canvas'></canvas>
</template> </template>
</dom-module> </dom-module>
@ -107,7 +107,7 @@ Polymer({
ready: function () { ready: function () {
this.setColor = this.setColor.bind(this); this.setColor = this.setColor.bind(this);
this.mouseMoveIsThrottled = true; this.mouseMoveIsThrottled = true;
this.canvas = this.children[0]; this.canvas = this.$.canvas;
this.context = this.canvas.getContext('2d'); this.context = this.canvas.getContext('2d');
this.drawGradient(); this.drawGradient();
}, },

View File

@ -1,2 +0,0 @@
<script src="../../bower_components/pikaday/pikaday.js"></script>
<link href="../../bower_components/pikaday/css/pikaday.css" media="all" rel="stylesheet" />