Add a relative time component to frontend

This commit is contained in:
Paulus Schoutsen 2015-02-15 21:39:01 -08:00
parent 1d56181a8c
commit b6a3524e9b
6 changed files with 60 additions and 14 deletions

View File

@ -1,6 +1,8 @@
<link rel="import" href="../bower_components/polymer/polymer.html">
<link rel="import" href="../bower_components/core-style/core-style.html">
<link rel="import" href="./loading-box.html">
<link rel="import" href="relative-ha-datetime.html">
<polymer-element name="recent-states" attributes="stateObj">
<template>
@ -18,7 +20,8 @@
{{state.state}}
</div>
<div class='data'>
{{state.last_changed | relativeHATime}}
<relative-ha-datetime datetime="{{stateObj.last_changed}}">
</relative-ha-datetime>
</div>
</div>
</template>

View File

@ -0,0 +1,41 @@
<link rel="import" href="../bower_components/polymer/polymer.html">
<link rel="import" href="../resources/moment-js.html">
<polymer-element name="relative-ha-datetime" attributes="datetime">
<template>
<span>{{ relativeTime }}</span>
</template>
<script>
var UPDATE_INTERVAL = 60000; // 60 seconds
var parseDateTime = window.hass.util.parseDateTime;
Polymer({
relativeTime: "",
parsedDateTime: null,
created: function() {
this.updateRelative = this.updateRelative.bind(this);
},
attached: function() {
this._interval = setInterval(this.updateRelative, UPDATE_INTERVAL);
},
detached: function() {
clearInterval(this._interval);
},
datetimeChanged: function(oldVal, newVal) {
this.parsedDateTime = newVal ? parseDateTime(newVal) : null;
this.updateRelative();
},
updateRelative: function() {
this.relativeTime = this.parsedDateTime ? moment(this.parsedDateTime).fromNow() : "";
},
});
</script>
</polymer-element>

View File

@ -3,6 +3,7 @@
<link rel="import" href="../bower_components/core-style/core-style.html">
<link rel="import" href="state-badge.html">
<link rel="import" href="relative-ha-datetime.html">
<polymer-element name="state-info" attributes="stateObj" noscript>
<template>
@ -36,8 +37,8 @@
</div>
<div class="time-ago">
<core-tooltip label="{{stateObj.last_changed}}" position="bottom">
{{stateObj.relativeLastChanged}}
<core-tooltip label="{{stateObj.lastChanged}}" position="bottom">
<relative-ha-datetime datetime="{{stateObj.lastChanged}}"></relative-ha-datetime>
</core-tooltip>
</div>

View File

@ -1,7 +1,6 @@
<link rel="import" href="./bower_components/polymer/polymer.html">
<script src="./home-assistant-js/dist/homeassistant.min.js"></script>
<script src="./bower_components/moment/moment.js"></script>
<link rel="import" href="./dialogs/more-info-dialog.html">
@ -10,10 +9,11 @@
var DOMAINS_WITH_MORE_INFO = ['light', 'group', 'sun', 'configurator'];
// Register some polymer filters
PolymerExpressions.prototype.relativeHATime = function(timeString) {
PolymerExpressions.prototype.HATimeToDate = function(timeString) {
if (!timeString) return;
return moment(window.hass.util.parseDateTime(timeString)).fromNow();
return window.hass.util.parseDateTime(timeString);
};
PolymerExpressions.prototype.HATimeStripDate = function(timeString) {
@ -45,12 +45,6 @@
}
}
},
relativeLastChanged: {
get: function() {
return moment(this.lastChangedAsDate).fromNow();
}
},
});
var state,

View File

@ -1,6 +1,8 @@
<link rel="import" href="../bower_components/polymer/polymer.html">
<link rel="import" href="../bower_components/core-style/core-style.html">
<link rel="import" href="../components/relative-ha-datetime.html">
<polymer-element name="more-info-sun" attributes="stateObj">
<template>
<core-style ref='ha-key-value-table'></core-style>
@ -9,7 +11,7 @@
<div layout justified horizontal class='data-entry' id='rising'>
<div class='key'>
Rising {{stateObj.attributes.next_rising | relativeHATime}}
Rising <relative-ha-datetime datetime="{{stateObj.attributes.next_rising}}"></relative-ha-datetime>
</div>
<div class='value'>
{{stateObj.attributes.next_rising | HATimeStripDate}}
@ -18,7 +20,7 @@
<div layout justified horizontal class='data-entry' id='setting'>
<div class='key'>
Setting {{stateObj.attributes.next_setting | relativeHATime}}
Setting <relative-ha-datetime datetime="{{stateObj.attributes.next_setting}}"></relative-ha-datetime>
</div>
<div class='value'>
{{stateObj.attributes.next_setting | HATimeStripDate}}

View File

@ -0,0 +1,5 @@
<!--
Wrapping JS in an HTML file will prevent it from being loaded twice.
-->
<script src="../bower_components/moment/moment.js"></script>