diff --git a/package.json b/package.json index 0c7c461873..bda7af3bed 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "babel-eslint": "^4.0.5", "babel-loader": "^5.3.2", "bower": "^1.4.1", + "eslint": "^1.1.0", "eslint-config-airbnb": "0.0.7", "eslint-plugin-react": "^3.2.1", "html-minifier": "^0.7.2", diff --git a/src/cards/state-card-configurator.js b/src/cards/state-card-configurator.js index a41210e080..3ef0ee62c1 100644 --- a/src/cards/state-card-configurator.js +++ b/src/cards/state-card-configurator.js @@ -3,7 +3,7 @@ import Polymer from '../polymer'; require('../components/state-info'); require('./state-card-display'); -export default Polymer({ +export default new Polymer({ is: 'state-card-configurator', properties: { diff --git a/src/cards/state-card-content.js b/src/cards/state-card-content.js index a331c47e03..adc3eb4800 100644 --- a/src/cards/state-card-content.js +++ b/src/cards/state-card-content.js @@ -9,18 +9,18 @@ require('./state-card-configurator'); require('./state-card-scene'); require('./state-card-media_player'); -export default Polymer({ +export default new Polymer({ is: 'state-card-content', properties: { stateObj: { type: Object, observer: 'stateObjChanged', - } + }, }, - stateObjChanged: function(newVal, oldVal) { - var root = Polymer.dom(this); + stateObjChanged(newVal, oldVal) { + const root = Polymer.dom(this); if (!newVal) { if (root.lastChild) { @@ -29,14 +29,14 @@ export default Polymer({ return; } - var newCardType = stateCardType(newVal); + const newCardType = stateCardType(newVal); - if (!oldVal || stateCardType(oldVal) != newCardType) { + if (!oldVal || stateCardType(oldVal) !== newCardType) { if (root.lastChild) { root.removeChild(root.lastChild); } - var stateCard = document.createElement("state-card-" + newCardType); + const stateCard = document.createElement(`state-card-${newCardType}`); stateCard.stateObj = newVal; root.appendChild(stateCard); } else { diff --git a/src/cards/state-card-display.js b/src/cards/state-card-display.js index 1f8d5cda5e..06d201c4f7 100644 --- a/src/cards/state-card-display.js +++ b/src/cards/state-card-display.js @@ -2,7 +2,7 @@ import Polymer from '../polymer'; require('../components/state-info'); -export default Polymer({ +export default new Polymer({ is: 'state-card-display', properties: { @@ -10,4 +10,4 @@ export default Polymer({ type: Object, }, }, -}); \ No newline at end of file +}); diff --git a/src/cards/state-card-media_player.html b/src/cards/state-card-media_player.html index 015170ed33..82f2d46807 100644 --- a/src/cards/state-card-media_player.html +++ b/src/cards/state-card-media_player.html @@ -34,7 +34,7 @@
[[computePrimaryText(stateObj, isPlaying)]]
-
[[computeSecondaryText(stateObj, isPlaying)]]
+
[[computeSecondaryText(stateObj)]]
diff --git a/src/cards/state-card-media_player.js b/src/cards/state-card-media_player.js index 6c7f04ee3e..cc5b07a90b 100644 --- a/src/cards/state-card-media_player.js +++ b/src/cards/state-card-media_player.js @@ -4,7 +4,7 @@ require('../components/state-info'); const PLAYING_STATES = ['playing', 'paused']; -export default Polymer({ +export default new Polymer({ is: 'state-card-media_player', properties: { @@ -18,33 +18,29 @@ export default Polymer({ }, }, - computeIsPlaying: function(stateObj) { + computeIsPlaying(stateObj) { return PLAYING_STATES.indexOf(stateObj.state) !== -1; }, - computePrimaryText: function(stateObj, isPlaying) { + computePrimaryText(stateObj, isPlaying) { return isPlaying ? stateObj.attributes.media_title : stateObj.stateDisplay; }, - computeSecondaryText: function(stateObj, isPlaying) { - var text; + computeSecondaryText(stateObj) { + let text; - if (stateObj.attributes.media_content_type == 'music') { + if (stateObj.attributes.media_content_type === 'music') { return stateObj.attributes.media_artist; - - } else if (stateObj.attributes.media_content_type == 'tvshow') { + } else if (stateObj.attributes.media_content_type === 'tvshow') { text = stateObj.attributes.media_series_title; if (stateObj.attributes.media_season && stateObj.attributes.media_episode) { text += ` S${stateObj.attributes.media_season}E${stateObj.attributes.media_episode}`; } return text; - } else if (stateObj.attributes.app_name) { return stateObj.attributes.app_name; - - } else { - return ''; } + return ''; }, }); diff --git a/src/cards/state-card-scene.js b/src/cards/state-card-scene.js index a07643578a..abb43f8209 100644 --- a/src/cards/state-card-scene.js +++ b/src/cards/state-card-scene.js @@ -3,7 +3,7 @@ import Polymer from '../polymer'; require('./state-card-display'); require('./state-card-toggle'); -export default Polymer({ +export default new Polymer({ is: 'state-card-scene', properties: { @@ -18,7 +18,7 @@ export default Polymer({ }, }, - computeAllowToggle: function(stateObj) { + computeAllowToggle(stateObj) { return stateObj.state === 'off' || stateObj.attributes.active_requested; }, }); diff --git a/src/cards/state-card-thermostat.js b/src/cards/state-card-thermostat.js index 89abd3cfd9..405428326f 100644 --- a/src/cards/state-card-thermostat.js +++ b/src/cards/state-card-thermostat.js @@ -2,7 +2,7 @@ import Polymer from '../polymer'; require('../components/state-info'); -export default Polymer({ +export default new Polymer({ is: 'state-card-thermostat', properties: { diff --git a/src/cards/state-card-toggle.js b/src/cards/state-card-toggle.js index 3943be5a46..d216042f9c 100644 --- a/src/cards/state-card-toggle.js +++ b/src/cards/state-card-toggle.js @@ -4,7 +4,7 @@ import Polymer from '../polymer'; require('../components/state-info'); -export default Polymer({ +export default new Polymer({ is: 'state-card-toggle', properties: { @@ -28,11 +28,11 @@ export default Polymer({ }, toggleChanged(ev) { - var newVal = ev.target.checked; + const newVal = ev.target.checked; - if(newVal && this.stateObj.state === "off") { + if (newVal && this.stateObj.state === 'off') { this.turn_on(); - } else if(!newVal && this.stateObj.state === "on") { + } else if (!newVal && this.stateObj.state === 'on') { this.turn_off(); } }, @@ -44,7 +44,7 @@ export default Polymer({ }, updateToggle(stateObj) { - this.toggleChecked = stateObj && stateObj.state === "on"; + this.toggleChecked = stateObj && stateObj.state === 'on'; }, forceStateChange() { diff --git a/src/cards/state-card.js b/src/cards/state-card.js index 408ebcdb9d..5581249c0b 100644 --- a/src/cards/state-card.js +++ b/src/cards/state-card.js @@ -4,7 +4,7 @@ import Polymer from '../polymer'; require('./state-card-content'); -export default Polymer({ +export default new Polymer({ is: 'state-card', properties: { diff --git a/src/components/display-time.js b/src/components/display-time.js index 53170464ab..03f229f85a 100644 --- a/src/components/display-time.js +++ b/src/components/display-time.js @@ -2,7 +2,7 @@ import Polymer from '../polymer'; import formatTime from '../util/format-time'; -export default Polymer({ +export default new Polymer({ is: 'display-time', properties: { diff --git a/src/components/domain-icon.js b/src/components/domain-icon.js index 819f4abee2..d6ccb3e42e 100644 --- a/src/components/domain-icon.js +++ b/src/components/domain-icon.js @@ -2,7 +2,7 @@ import Polymer from '../polymer'; import domainIcon from '../util/domain-icon'; -export default Polymer({ +export default new Polymer({ is: 'domain-icon', properties: { diff --git a/src/components/entity-list.js b/src/components/entity-list.js index b6d8831916..5cb1482747 100644 --- a/src/components/entity-list.js +++ b/src/components/entity-list.js @@ -3,7 +3,7 @@ import { entityGetters } from 'home-assistant-js'; import Polymer from '../polymer'; import nuclearObserver from '../util/bound-nuclear-behavior'; -export default Polymer({ +export default new Polymer({ is: 'entity-list', behaviors: [nuclearObserver], @@ -13,7 +13,7 @@ export default Polymer({ type: Array, bindNuclear: [ entityGetters.entityMap, - (map) => map.valueSeq().sortBy((entity) => entity.entityId).toArray() + (map) => map.valueSeq().sortBy((entity) => entity.entityId).toArray(), ], }, }, diff --git a/src/components/events-list.js b/src/components/events-list.js index dcbbec3eea..2bc858e5c2 100644 --- a/src/components/events-list.js +++ b/src/components/events-list.js @@ -3,7 +3,7 @@ import { eventGetters } from 'home-assistant-js'; import Polymer from '../polymer'; import nuclearObserver from '../util/bound-nuclear-behavior'; -export default Polymer({ +export default new Polymer({ is: 'events-list', behaviors: [nuclearObserver], @@ -13,7 +13,7 @@ export default Polymer({ type: Array, bindNuclear: [ eventGetters.entityMap, - (map) => map.valueSeq().sortBy((event) => event.event).toArray() + (map) => map.valueSeq().sortBy((event) => event.event).toArray(), ], }, }, diff --git a/src/components/ha-color-picker.js b/src/components/ha-color-picker.js index c8e65cf88c..3a87d8fa99 100644 --- a/src/components/ha-color-picker.js +++ b/src/components/ha-color-picker.js @@ -11,140 +11,141 @@ import Polymer from '../polymer'; * given red, green, blue values, return the equivalent hexidecimal value * base source: http://stackoverflow.com/a/5624139 */ -var componentToHex = function(c) { - var hex = c.toString(16); - return hex.length === 1 ? "0" + hex : hex; -}; +function componentToHex(c) { + const hex = c.toString(16); + return hex.length === 1 ? '0' + hex : hex; +} -var rgbToHex = function(color) { - return "#" + componentToHex(color.r) + componentToHex(color.g) + +function rgbToHex(color) { + return '#' + componentToHex(color.r) + componentToHex(color.g) + componentToHex(color.b); -}; +} -export default Polymer({ - is: 'ha-color-picker', +export default new Polymer({ + is: 'ha-color-picker', - properties: { - width: { - type: Number, - value: 300, - }, - height: { - type: Number, - value: 300, - }, - color: { - type: Object, - }, + properties: { + width: { + type: Number, + value: 300, }, - - listeners: { - 'mousedown': 'onMouseDown', - 'mouseup': 'onMouseUp', - 'touchstart': 'onTouchStart', - 'touchend': 'onTouchEnd', - 'tap': 'onTap', + height: { + type: Number, + value: 300, }, - - onMouseDown(e) { - this.onMouseMove(e); - this.addEventListener('mousemove', this.onMouseMove); + color: { + type: Object, }, + }, - onMouseUp(e) { - this.removeEventListener('mousemove', this.onMouseMove); - }, + listeners: { + 'mousedown': 'onMouseDown', + 'mouseup': 'onMouseUp', + 'touchstart': 'onTouchStart', + 'touchend': 'onTouchEnd', + 'tap': 'onTap', + }, - onTouchStart(e) { - this.onTouchMove(e); - this.addEventListener('touchmove', this.onTouchMove); - }, + onMouseDown(e) { + this.onMouseMove(e); + this.addEventListener('mousemove', this.onMouseMove); + }, - onTouchEnd(e) { - this.removeEventListener('touchmove', this.onTouchMove); - }, + onMouseUp() { + this.removeEventListener('mousemove', this.onMouseMove); + }, - onTap(e) { - e.stopPropagation(); - }, + onTouchStart(e) { + this.onTouchMove(e); + this.addEventListener('touchmove', this.onTouchMove); + }, - onTouchMove(e) { - var touch = e.touches[0]; - this.onColorSelect(e, {x: touch.clientX, y: touch.clientY}); - }, + onTouchEnd() { + this.removeEventListener('touchmove', this.onTouchMove); + }, - onMouseMove(e) { - e.preventDefault(); - if (this.mouseMoveIsThrottled) { - this.mouseMoveIsThrottled = false; - this.onColorSelect(e); - this.async(() => this.mouseMoveIsThrottled = true, 100); - } - }, + onTap(e) { + e.stopPropagation(); + }, - onColorSelect(e, coords) { - if (this.context) { - coords = coords || this.relativeMouseCoordinates(e); - var data = this.context.getImageData(coords.x, coords.y, 1, 1).data; + onTouchMove(e) { + const touch = e.touches[0]; + this.onColorSelect(e, {x: touch.clientX, y: touch.clientY}); + }, - this.setColor({r: data[0], g: data[1], b: data[2]}); - } - }, + onMouseMove(e) { + e.preventDefault(); + if (this.mouseMoveIsThrottled) { + this.mouseMoveIsThrottled = false; + this.onColorSelect(e); + this.async(() => this.mouseMoveIsThrottled = true, 100); + } + }, - setColor(rgb) { - //save calculated color - this.color = {hex: rgbToHex(rgb), rgb: rgb}; + onColorSelect(e, coords) { + if (this.context) { + const colorCoords = coords || this.relativeMouseCoordinates(e); + const data = this.context.getImageData(colorCoords.x, colorCoords.y, 1, 1).data; - this.fire('colorselected', { - rgb: this.color.rgb, - hex: this.color.hex - }); - }, + this.setColor({r: data[0], g: data[1], b: data[2]}); + } + }, - /** - * given a mouse click event, return x,y coordinates relative to the clicked target - * @returns object with x, y values - */ - relativeMouseCoordinates(e) { - var x = 0, y = 0; + setColor(rgb) { + // save calculated color + this.color = {hex: rgbToHex(rgb), rgb: rgb}; - if (this.canvas) { - var rect = this.canvas.getBoundingClientRect(); - x = e.clientX - rect.left; - y = e.clientY - rect.top; - } + this.fire('colorselected', { + rgb: this.color.rgb, + hex: this.color.hex, + }); + }, - return { - x: x, - y: y - }; - }, + /** + * given a mouse click event, return x,y coordinates relative to the clicked target + * @returns object with x, y values + */ + relativeMouseCoordinates(e) { + let x = 0; + let y = 0; - ready() { - this.setColor = this.setColor.bind(this); - this.mouseMoveIsThrottled = true; - this.canvas = this.children[0]; - this.context = this.canvas.getContext('2d'); + if (this.canvas) { + const rect = this.canvas.getBoundingClientRect(); + x = e.clientX - rect.left; + y = e.clientY - rect.top; + } - var colorGradient = this.context.createLinearGradient(0, 0, this.width, 0); - colorGradient.addColorStop(0, "rgb(255,0,0)"); - colorGradient.addColorStop(0.16, "rgb(255,0,255)"); - colorGradient.addColorStop(0.32, "rgb(0,0,255)"); - colorGradient.addColorStop(0.48, "rgb(0,255,255)"); - colorGradient.addColorStop(0.64, "rgb(0,255,0)"); - colorGradient.addColorStop(0.80, "rgb(255,255,0)"); - colorGradient.addColorStop(1, "rgb(255,0,0)"); - this.context.fillStyle = colorGradient; - this.context.fillRect(0, 0, this.width, this.height); + return { + x: x, + y: y, + }; + }, - var bwGradient = this.context.createLinearGradient(0, 0, 0, this.height); - bwGradient.addColorStop(0, "rgba(255,255,255,1)"); - bwGradient.addColorStop(0.5, "rgba(255,255,255,0)"); - bwGradient.addColorStop(0.5, "rgba(0,0,0,0)"); - bwGradient.addColorStop(1, "rgba(0,0,0,1)"); + ready() { + this.setColor = this.setColor.bind(this); + this.mouseMoveIsThrottled = true; + this.canvas = this.children[0]; + this.context = this.canvas.getContext('2d'); - this.context.fillStyle = bwGradient; - this.context.fillRect(0, 0, this.width, this.height); - }, + const colorGradient = this.context.createLinearGradient(0, 0, this.width, 0); + colorGradient.addColorStop(0, 'rgb(255,0,0)'); + colorGradient.addColorStop(0.16, 'rgb(255,0,255)'); + colorGradient.addColorStop(0.32, 'rgb(0,0,255)'); + colorGradient.addColorStop(0.48, 'rgb(0,255,255)'); + colorGradient.addColorStop(0.64, 'rgb(0,255,0)'); + colorGradient.addColorStop(0.80, 'rgb(255,255,0)'); + colorGradient.addColorStop(1, 'rgb(255,0,0)'); + this.context.fillStyle = colorGradient; + this.context.fillRect(0, 0, this.width, this.height); + + const bwGradient = this.context.createLinearGradient(0, 0, 0, this.height); + bwGradient.addColorStop(0, 'rgba(255,255,255,1)'); + bwGradient.addColorStop(0.5, 'rgba(255,255,255,0)'); + bwGradient.addColorStop(0.5, 'rgba(0,0,0,0)'); + bwGradient.addColorStop(1, 'rgba(0,0,0,1)'); + + this.context.fillStyle = bwGradient; + this.context.fillRect(0, 0, this.width, this.height); + }, }); diff --git a/src/components/ha-logbook.js b/src/components/ha-logbook.js index 6d7b128b45..c72dc609ab 100644 --- a/src/components/ha-logbook.js +++ b/src/components/ha-logbook.js @@ -2,7 +2,7 @@ import Polymer from '../polymer'; require('./logbook-entry'); -Polymer({ +export default new Polymer({ is: 'ha-logbook', properties: { @@ -14,5 +14,5 @@ Polymer({ noEntries(entries) { return !entries.length; - } + }, }); diff --git a/src/components/ha-sidebar.js b/src/components/ha-sidebar.js index 214ff9ff81..3aed22ea89 100644 --- a/src/components/ha-sidebar.js +++ b/src/components/ha-sidebar.js @@ -14,7 +14,7 @@ require('./stream-status'); const { entityDomainFilters } = util; -Polymer({ +export default new Polymer({ is: 'ha-sidebar', behaviors: [nuclearObserver], @@ -36,7 +36,7 @@ Polymer({ value: [], bindNuclear: [ navigationGetters.possibleEntityDomainFilters, - (domains) => domains.toArray() + (domains) => domains.toArray(), ], }, @@ -61,10 +61,10 @@ Polymer({ // if (this.menuSelected !== newVal) { // this.menuSelected = newVal; // } - var menuItems = this.querySelectorAll('.menu [data-panel]'); + const menuItems = this.querySelectorAll('.menu [data-panel]'); - for (var i = 0; i < menuItems.length; i++) { - if(menuItems[i].getAttribute('data-panel') === newVal) { + for (let i = 0; i < menuItems.length; i++) { + if (menuItems[i].getAttribute('data-panel') === newVal) { menuItems[i].classList.add('selected'); } else { menuItems[i].classList.remove('selected'); @@ -73,11 +73,11 @@ Polymer({ }, menuClicked(ev) { - var target = ev.target; - var checks = 5; + let target = ev.target; + let checks = 5; // find panel to select - while(checks && !target.getAttribute('data-panel')) { + while (checks && !target.getAttribute('data-panel')) { target = target.parentElement; checks--; } @@ -94,9 +94,9 @@ Polymer({ }, selectPanel(newChoice) { - if(newChoice === this.selected) { + if (newChoice === this.selected) { return; - } else if (newChoice == 'logout') { + } else if (newChoice === 'logout') { this.handleLogOut(); return; } diff --git a/src/components/ha-voice-command-progress.js b/src/components/ha-voice-command-progress.js index 8e2f93ebcc..defff0e5d3 100644 --- a/src/components/ha-voice-command-progress.js +++ b/src/components/ha-voice-command-progress.js @@ -3,7 +3,7 @@ import { voiceGetters } from 'home-assistant-js'; import Polymer from '../polymer'; import nuclearObserver from '../util/bound-nuclear-behavior'; -export default Polymer({ +export default new Polymer({ is: 'ha-voice-command-progress', behaviors: [nuclearObserver], diff --git a/src/components/loading-box.js b/src/components/loading-box.js index f5d858914d..06087b4929 100644 --- a/src/components/loading-box.js +++ b/src/components/loading-box.js @@ -1,5 +1,5 @@ import Polymer from '../polymer'; -export default Polymer({ +export default new Polymer({ is: 'loading-box', }); diff --git a/src/components/logbook-entry.js b/src/components/logbook-entry.js index 2420c19028..fe5c2f451a 100644 --- a/src/components/logbook-entry.js +++ b/src/components/logbook-entry.js @@ -6,11 +6,11 @@ require('./domain-icon'); require('./display-time'); require('./relative-ha-datetime'); -export default Polymer({ +export default new Polymer({ is: 'logbook-entry', - entityClicked: function(ev) { + entityClicked(ev) { ev.preventDefault(); moreInfoActions.selectEntity(this.entryObj.entityId); - } + }, }); diff --git a/src/components/relative-ha-datetime.js b/src/components/relative-ha-datetime.js index 353cb66521..f250a3734e 100644 --- a/src/components/relative-ha-datetime.js +++ b/src/components/relative-ha-datetime.js @@ -6,7 +6,7 @@ const UPDATE_INTERVAL = 60000; // 60 seconds const { parseDateTime } = util; -export default Polymer({ +export default new Polymer({ is: 'relative-ha-datetime', properties: { @@ -56,6 +56,6 @@ export default Polymer({ updateRelative() { this.relativeTime = this.parsedDateTime ? - moment(this.parsedDateTime).fromNow() : ""; + moment(this.parsedDateTime).fromNow() : ''; }, }); diff --git a/src/components/services-list.js b/src/components/services-list.js index f7f72e90eb..54307fb774 100644 --- a/src/components/services-list.js +++ b/src/components/services-list.js @@ -5,7 +5,7 @@ import nuclearObserver from '../util/bound-nuclear-behavior'; require('./domain-icon'); -export default Polymer({ +export default new Polymer({ is: 'services-list', behaviors: [nuclearObserver], @@ -15,7 +15,7 @@ export default Polymer({ type: Array, bindNuclear: [ serviceGetters.entityMap, - (map) => map.valueSeq().sortBy((domain) => domain.domain).toJS() + (map) => map.valueSeq().sortBy((domain) => domain.domain).toJS(), ], }, }, diff --git a/src/components/state-badge.js b/src/components/state-badge.js index d44e90df86..898a71cad4 100644 --- a/src/components/state-badge.js +++ b/src/components/state-badge.js @@ -4,7 +4,7 @@ import xyBriToRgb from '../util/xybri-to-rgb'; require('./domain-icon'); -export default Polymer({ +export default new Polymer({ is: 'state-badge', properties: { @@ -19,13 +19,12 @@ export default Polymer({ */ updateIconColor(newVal) { // for domain light, set color of icon to light color if available - if(newVal.domain == "light" && newVal.state == "on" && + if (newVal.domain === 'light' && newVal.state === 'on' && newVal.attributes.brightness && newVal.attributes.xy_color) { - - var rgb = xyBriToRgb(newVal.attributes.xy_color[0], - newVal.attributes.xy_color[1], - newVal.attributes.brightness); - this.$.icon.style.color = "rgb(" + rgb.map(Math.floor).join(",") + ")"; + const rgb = xyBriToRgb(newVal.attributes.xy_color[0], + newVal.attributes.xy_color[1], + newVal.attributes.brightness); + this.$.icon.style.color = 'rgb(' + rgb.map(Math.floor).join(',') + ')'; } else { this.$.icon.style.color = null; } diff --git a/src/components/state-cards.js b/src/components/state-cards.js index c151d707e9..9fa52cb9f9 100644 --- a/src/components/state-cards.js +++ b/src/components/state-cards.js @@ -2,7 +2,7 @@ import Polymer from '../polymer'; require('../cards/state-card'); -Polymer({ +export default new Polymer({ is: 'state-cards', properties: { diff --git a/src/components/state-history-chart-line.js b/src/components/state-history-chart-line.js index 72dcb0f60a..c5701d7ab7 100644 --- a/src/components/state-history-chart-line.js +++ b/src/components/state-history-chart-line.js @@ -5,7 +5,7 @@ import sortBy from 'lodash/collection/sortBy'; import Polymer from '../polymer'; -export default Polymer({ +export default new Polymer({ is: 'state-history-chart-line', properties: { @@ -42,7 +42,7 @@ export default Polymer({ this.drawChart(); }, - /************************************************** + /* ************************************************* The following code gererates line graphs for devices with continuous values(which are devices that have a unit_of_measurement values defined). On each graph the devices are grouped by their unit of measurement, eg. all @@ -66,9 +66,9 @@ export default Polymer({ return; } - var root = Polymer.dom(this); - var unit = this.unit; - var deviceStates = this.data; + const root = Polymer.dom(this); + const unit = this.unit; + const deviceStates = this.data; while (root.lastChild) { root.removeChild(root.lastChild); @@ -78,32 +78,32 @@ export default Polymer({ return; } - var chart = new google.visualization.LineChart(this); - var dataTable = new google.visualization.DataTable(); + const chart = new google.visualization.LineChart(this); + const dataTable = new google.visualization.DataTable(); dataTable.addColumn({ type: 'datetime', id: 'Time' }); - var options = { - legend: { position: 'top' }, - titlePosition: 'none', - vAxes: { - // Adds units to the left hand side of the graph - 0: {title: unit} - }, - hAxis: { - format: 'H:mm' - }, - lineWidth: 1, - chartArea:{left:'60',width:"95%"}, - explorer: { - actions: ['dragToZoom', 'rightClickToReset', 'dragToPan'], - keepInBounds: true, - axis: 'horizontal', - maxZoomIn: 0.1 - } - }; + const options = { + legend: { position: 'top' }, + titlePosition: 'none', + vAxes: { + // Adds units to the left hand side of the graph + 0: {title: unit}, + }, + hAxis: { + format: 'H:mm', + }, + lineWidth: 1, + chartArea: { left: '60', width: '95%'}, + explorer: { + actions: ['dragToZoom', 'rightClickToReset', 'dragToPan'], + keepInBounds: true, + axis: 'horizontal', + maxZoomIn: 0.1, + }, + }; - if(this.isSingleDevice) { + if (this.isSingleDevice) { options.legend.position = 'none'; options.vAxes[0].title = null; options.chartArea.left = 40; @@ -114,54 +114,51 @@ export default Polymer({ // Get a unique list of times of state changes for all the device // for a particular unit of measureent. - var times = pluck(flatten(deviceStates), "lastChangedAsDate"); + let times = pluck(flatten(deviceStates), 'lastChangedAsDate'); times = sortBy(uniq(times, (e) => e.getTime())); - var data = []; - var empty = new Array(deviceStates.length); - for(var i = 0; i < empty.length; i++) { + const data = []; + const empty = new Array(deviceStates.length); + for (let i = 0; i < empty.length; i++) { empty[i] = 0; } - var timeIndex = 1; - var endDate = new Date(); - var prevDate = times[0]; + let timeIndex = 1; + const endDate = new Date(); - for(i = 0; i < times.length; i++) { + for (i = 0; i < times.length; i++) { // because we only have state changes we add an extra point at the same time // that holds the previous state which makes the line display correctly - var beforePoint = new Date(times[i]); + const beforePoint = new Date(times[i]); data.push([beforePoint].concat(empty)); data.push([times[i]].concat(empty)); - prevDate = times[i]; timeIndex++; } data.push([endDate].concat(empty)); - var deviceCount = 0; + let deviceCount = 0; deviceStates.forEach((device) => { - var attributes = device[device.length - 1].attributes; + const attributes = device[device.length - 1].attributes; dataTable.addColumn('number', attributes.friendly_name); - var currentState = 0; - var previousState = 0; - var lastIndex = 0; - var count = 0; - var prevTime = data[0][0]; + let currentState = 0; + let previousState = 0; + let lastIndex = 0; + let count = 0; + let prevTime = data[0][0]; device.forEach((state) => { - currentState = state.state; - var start = state.lastChangedAsDate; - if(state.state == 'None') { + const start = state.lastChangedAsDate; + if (state.state === 'None') { currentState = previousState; } - for(var i = lastIndex; i < data.length; i++) { + for (let i = lastIndex; i < data.length; i++) { data[i][1 + deviceCount] = parseFloat(previousState); // this is where data gets filled in for each time for the particular device // because for each time two entries were create we fill the first one with the // previous value and the second one with the new value - if(prevTime.getTime() == data[i][0].getTime() && data[i][0].getTime() == start.getTime()) { + if (prevTime.getTime() === data[i][0].getTime() && data[i][0].getTime() === start.getTime()) { data[i][1 + deviceCount] = parseFloat(currentState); lastIndex = i; prevTime = data[i][0]; @@ -175,8 +172,8 @@ export default Polymer({ count++; }); - //fill in the rest of the Array - for(var i = lastIndex; i < data.length; i++) { + // fill in the rest of the Array + for (let i = lastIndex; i < data.length; i++) { data[i][1 + deviceCount] = parseFloat(previousState); } diff --git a/src/components/state-history-chart-timeline.js b/src/components/state-history-chart-timeline.js index a426276856..d2c5755b1a 100644 --- a/src/components/state-history-chart-timeline.js +++ b/src/components/state-history-chart-timeline.js @@ -1,6 +1,6 @@ import Polymer from '../polymer'; -export default Polymer({ +export default new Polymer({ is: 'state-history-chart-timeline', properties: { @@ -28,8 +28,8 @@ export default Polymer({ if (!this.isAttached) { return; } - var root = Polymer.dom(this); - var stateHistory = this.data; + const root = Polymer.dom(this); + const stateHistory = this.data; while (root.node.lastChild) { root.node.removeChild(root.node.lastChild); @@ -39,38 +39,40 @@ export default Polymer({ return; } - var chart = new google.visualization.Timeline(this); - var dataTable = new google.visualization.DataTable(); + const chart = new google.visualization.Timeline(this); + const dataTable = new google.visualization.DataTable(); dataTable.addColumn({ type: 'string', id: 'Entity' }); dataTable.addColumn({ type: 'string', id: 'State' }); dataTable.addColumn({ type: 'date', id: 'Start' }); dataTable.addColumn({ type: 'date', id: 'End' }); - var addRow = function(entityDisplay, stateStr, start, end) { - stateStr = stateStr.replace(/_/g, ' '); - dataTable.addRow([entityDisplay, stateStr, start, end]); - }; + function addRow(entityDisplay, stateStr, start, end) { + const stateDisplay = stateStr.replace(/_/g, ' '); + dataTable.addRow([entityDisplay, stateDisplay, start, end]); + } - var startTime = new Date( + const startTime = new Date( stateHistory.reduce((minTime, stateInfo) => Math.min( minTime, stateInfo[0].lastChangedAsDate), new Date()) ); // end time is Math.min(curTime, start time + 1 day) - var endTime = new Date(startTime); - endTime.setDate(endTime.getDate()+1); + let endTime = new Date(startTime); + endTime.setDate(endTime.getDate() + 1); if (endTime > new Date()) { endTime = new Date(); } - var numTimelines = 0; + let numTimelines = 0; // stateHistory is a list of lists of sorted state objects stateHistory.forEach((stateInfo) => { - if(stateInfo.length === 0) return; + if (stateInfo.length === 0) return; - var entityDisplay = stateInfo[0].entityDisplay; - var newLastChanged, prevState = null, prevLastChanged = null; + const entityDisplay = stateInfo[0].entityDisplay; + let newLastChanged; + let prevState = null; + let prevLastChanged = null; stateInfo.forEach((state) => { if (prevState !== null && state.state !== prevState) { @@ -94,11 +96,11 @@ export default Polymer({ height: 55 + numTimelines * 42, timeline: { - showRowLabels: stateHistory.length > 1 + showRowLabels: stateHistory.length > 1, }, hAxis: { - format: 'H:mm' + format: 'H:mm', }, }); }, diff --git a/src/components/state-history-charts.js b/src/components/state-history-charts.js index 8f5fa9b643..11de04ed27 100644 --- a/src/components/state-history-charts.js +++ b/src/components/state-history-charts.js @@ -4,7 +4,7 @@ require('./loading-box'); require('./state-history-chart-timeline'); require('./state-history-chart-line'); -export default Polymer({ +export default new Polymer({ is: 'state-history-charts', properties: { @@ -39,7 +39,7 @@ export default Polymer({ }, computeIsSingleDevice(stateHistory) { - return stateHistory && stateHistory.size == 1; + return stateHistory && stateHistory.size === 1; }, computeGroupedStateHistory(isLoading, stateHistory) { @@ -47,23 +47,23 @@ export default Polymer({ return {line: [], timeline: []}; } - var lineChartDevices = {}; - var timelineDevices = []; + const lineChartDevices = {}; + let timelineDevices = []; stateHistory.forEach((stateInfo) => { if (!stateInfo || stateInfo.size === 0) { return; } - var stateWithUnit = stateInfo.find( + const stateWithUnit = stateInfo.find( (state) => 'unit_of_measurement' in state.attributes); - var unit = stateWithUnit ? + const unit = stateWithUnit ? stateWithUnit.attributes.unit_of_measurement : false; if (!unit) { timelineDevices.push(stateInfo.toArray()); - } else if(unit in lineChartDevices) { + } else if (unit in lineChartDevices) { lineChartDevices[unit].push(stateInfo.toArray()); } else { lineChartDevices[unit] = [stateInfo.toArray()]; @@ -72,16 +72,16 @@ export default Polymer({ timelineDevices = timelineDevices.length > 0 && timelineDevices; - var unitStates = Object.keys(lineChartDevices).map( + const unitStates = Object.keys(lineChartDevices).map( (unit) => [unit, lineChartDevices[unit]]); return {line: unitStates, timeline: timelineDevices}; }, googleApiLoaded() { - google.load("visualization", "1", { - packages: ["timeline", "corechart"], - callback: () => this.apiLoaded = true + google.load('visualization', '1', { + packages: ['timeline', 'corechart'], + callback: () => this.apiLoaded = true, }); }, diff --git a/src/components/state-info.js b/src/components/state-info.js index 29e874bdc3..610e4a48f9 100644 --- a/src/components/state-info.js +++ b/src/components/state-info.js @@ -3,7 +3,7 @@ import Polymer from '../polymer'; require('./state-badge'); require('./relative-ha-datetime'); -export default Polymer({ +export default new Polymer({ is: 'state-info', properties: { diff --git a/src/components/stream-status.js b/src/components/stream-status.js index 7fd8e3e3dc..cbb3358b2a 100644 --- a/src/components/stream-status.js +++ b/src/components/stream-status.js @@ -3,7 +3,7 @@ import { streamGetters, streamActions } from 'home-assistant-js'; import Polymer from '../polymer'; import nuclearObserver from '../util/bound-nuclear-behavior'; -export default Polymer({ +export default new Polymer({ is: 'stream-status', behaviors: [nuclearObserver], @@ -20,7 +20,7 @@ export default Polymer({ }, }, - toggleChanged: function() { + toggleChanged() { if (this.isStreaming) { streamActions.stop(); } else { diff --git a/src/dialogs/more-info-dialog.js b/src/dialogs/more-info-dialog.js index b4ee82b920..d58defb95e 100644 --- a/src/dialogs/more-info-dialog.js +++ b/src/dialogs/more-info-dialog.js @@ -16,7 +16,7 @@ require('../more-infos/more-info-content'); // if you don't want the history component to show add the domain to this array const DOMAINS_WITH_NO_HISTORY = ['camera']; -export default Polymer({ +export default new Polymer({ is: 'more-info-dialog', behaviors: [nuclearObserver], @@ -32,7 +32,7 @@ export default Polymer({ type: Object, bindNuclear: [ moreInfoGetters.currentEntityHistory, - (history) => history ? [history] : false + (history) => history ? [history] : false, ], }, @@ -88,7 +88,7 @@ export default Polymer({ this.fetchHistoryData(); // allow dialog to render content before showing it so it is // positioned correctly. - this.dialogOpen = true + this.dialogOpen = true; }, 10); }, diff --git a/src/home-assistant.js b/src/home-assistant.js index d576e2089d..2cc706054e 100644 --- a/src/home-assistant.js +++ b/src/home-assistant.js @@ -2,7 +2,8 @@ import Polymer from './polymer'; import { syncGetters, - localStoragePreferences + localStoragePreferences, + startLocalStoragePreferencesSync } from 'home-assistant-js'; import nuclearObserver from './util/bound-nuclear-behavior'; @@ -11,7 +12,7 @@ import validateAuth from './util/validate-auth'; require('./layouts/login-form'); require('./layouts/home-assistant-main'); -export default Polymer({ +export default new Polymer({ is: 'home-assistant', hostAttributes: { @@ -32,16 +33,16 @@ export default Polymer({ ready() { // remove the HTML init message - var initMsg = document.getElementById('init'); + const initMsg = document.getElementById('init'); initMsg.parentElement.removeChild(initMsg); // if auth was given, tell the backend - if(this.auth) { + if (this.auth) { validateAuth(this.auth, false); } else if (localStoragePreferences.authToken) { validateAuth(localStoragePreferences.authToken, true); } - localStoragePreferences.startSync(); + startLocalStoragePreferencesSync(); }, }); diff --git a/src/layouts/home-assistant-main.js b/src/layouts/home-assistant-main.js index a03fc2ccba..cf3893e2fe 100644 --- a/src/layouts/home-assistant-main.js +++ b/src/layouts/home-assistant-main.js @@ -1,11 +1,7 @@ import { - configGetters, - entityGetters, navigationGetters, - authActions, - navigationActions, - urlSync, - util + startUrlSync, + stopUrlSync, } from 'home-assistant-js'; import nuclearObserver from '../util/bound-nuclear-behavior'; @@ -20,7 +16,7 @@ require('../layouts/partial-dev-set-state'); require('../managers/notification-manager'); require('../dialogs/more-info-dialog'); -export default Polymer({ +export default new Polymer({ is: 'home-assistant-main', behaviors: [nuclearObserver], @@ -71,19 +67,19 @@ export default Polymer({ 'open-menu': 'openDrawer', }, - openDrawer: function() { + openDrawer() { this.$.drawer.openDrawer(); }, - activePageChanged: function() { + activePageChanged() { this.$.drawer.closeDrawer(); }, - attached: function() { - urlSync.startSync(); + attached() { + startUrlSync(); }, - detached: function() { - urlSync.stopSync(); + detached() { + stopUrlSync(); }, }); diff --git a/src/layouts/login-form.js b/src/layouts/login-form.js index abbeff393b..5b17b361fb 100644 --- a/src/layouts/login-form.js +++ b/src/layouts/login-form.js @@ -5,7 +5,7 @@ import { authGetters } from 'home-assistant-js'; import nuclearObserver from '../util/bound-nuclear-behavior'; import validateAuth from '../util/validate-auth'; -export default Polymer({ +export default new Polymer({ is: 'login-form', behaviors: [nuclearObserver], @@ -37,31 +37,31 @@ export default Polymer({ 'validatingChanged(isValidating, isInvalid)', ], - validatingChanged: function(isValidating, isInvalid) { + validatingChanged(isValidating, isInvalid) { if (!isValidating && !isInvalid) { this.$.passwordInput.value = ''; } }, - isValidatingChanged: function(newVal) { + isValidatingChanged(newVal) { if (!newVal) { this.async(() => this.$.passwordInput.focus(), 10); } }, - passwordKeyDown: function(ev) { + passwordKeyDown(ev) { // validate on enter - if(ev.keyCode === 13) { + if (ev.keyCode === 13) { this.validatePassword(); ev.preventDefault(); // clear error after we start typing again - } else if(this.isInvalid) { + } else if (this.isInvalid) { this.isInvalid = false; } }, - validatePassword: function() { + validatePassword() { this.$.hideKeyboardOnFocus.focus(); validateAuth(this.$.passwordInput.value, this.$.rememberLogin.checked); diff --git a/src/layouts/partial-base.js b/src/layouts/partial-base.js index fa785abcf1..9d0cde6a11 100644 --- a/src/layouts/partial-base.js +++ b/src/layouts/partial-base.js @@ -1,6 +1,6 @@ import Polymer from '../polymer'; -export default Polymer({ +export default new Polymer({ is: 'partial-base', properties: { @@ -10,7 +10,7 @@ export default Polymer({ }, }, - toggleMenu: function() { + toggleMenu() { this.fire('open-menu'); }, }); diff --git a/src/layouts/partial-dev-call-service.js b/src/layouts/partial-dev-call-service.js index f486e8062a..0e8b3377aa 100644 --- a/src/layouts/partial-dev-call-service.js +++ b/src/layouts/partial-dev-call-service.js @@ -5,7 +5,7 @@ import Polymer from '../polymer'; require('./partial-base'); require('../components/services-list'); -export default Polymer({ +export default new Polymer({ is: 'partial-dev-call-service', properties: { @@ -36,12 +36,13 @@ export default Polymer({ }, callService() { - var serviceData; - + let serviceData; try { - serviceData = this.serviceData ? JSON.parse(this.serviceData): {}; + serviceData = this.serviceData ? JSON.parse(this.serviceData) : {}; } catch (err) { - alert("Error parsing JSON: " + err); + /* eslint-disable no-alert */ + alert(`Error parsing JSON: ${err}`); + /* eslint-enable no-alert */ return; } diff --git a/src/layouts/partial-dev-fire-event.js b/src/layouts/partial-dev-fire-event.js index 159a8dce18..cc9324e2e0 100644 --- a/src/layouts/partial-dev-fire-event.js +++ b/src/layouts/partial-dev-fire-event.js @@ -5,7 +5,7 @@ import Polymer from '../polymer'; require('./partial-base'); require('../components/events-list'); -export default Polymer({ +export default new Polymer({ is: 'partial-dev-fire-event', properties: { @@ -25,12 +25,14 @@ export default Polymer({ }, fireEvent() { - var eventData; + let eventData; try { eventData = this.eventData ? JSON.parse(this.eventData) : {}; } catch (err) { - alert("Error parsing JSON: " + err); + /* eslint-disable no-alert */ + alert(`Error parsing JSON: ${err}`); + /* eslint-enable no-alert */ return; } diff --git a/src/layouts/partial-dev-set-state.js b/src/layouts/partial-dev-set-state.js index 6270dcbf2d..d071cdfefa 100644 --- a/src/layouts/partial-dev-set-state.js +++ b/src/layouts/partial-dev-set-state.js @@ -5,7 +5,7 @@ import Polymer from '../polymer'; require('./partial-base'); require('../components/entity-list'); -export default Polymer({ +export default new Polymer({ is: 'partial-dev-set-state', properties: { @@ -26,7 +26,7 @@ export default Polymer({ }, setStateData(stateData) { - var value = stateData ? JSON.stringify(stateData, null, ' ') : ""; + const value = stateData ? JSON.stringify(stateData, null, ' ') : ''; this.$.inputData.value = value; @@ -35,7 +35,7 @@ export default Polymer({ }, entitySelected(ev) { - var state = reactor.evaluate(entityGetters.byId(ev.detail.entityId)); + const state = reactor.evaluate(entityGetters.byId(ev.detail.entityId)); this.entityId = state.entityId; this.state = state.state; @@ -43,11 +43,13 @@ export default Polymer({ }, handleSetState() { - var attr; + let attr; try { attr = this.stateAttributes ? JSON.parse(this.stateAttributes) : {}; } catch (err) { - alert("Error parsing JSON: " + err); + /* eslint-disable no-alert */ + alert(`Error parsing JSON: ${err}`); + /* eslint-enable no-alert */ return; } diff --git a/src/layouts/partial-history.js b/src/layouts/partial-history.js index 44b695ee63..65f6412c2c 100644 --- a/src/layouts/partial-history.js +++ b/src/layouts/partial-history.js @@ -1,5 +1,4 @@ import { - uiActions, entityHistoryGetters, entityHistoryActions } from 'home-assistant-js'; @@ -10,7 +9,7 @@ import nuclearObserver from '../util/bound-nuclear-behavior'; require('./partial-base'); require('../components/state-history-charts'); -export default Polymer({ +export default new Polymer({ is: 'partial-history', behaviors: [nuclearObserver], @@ -45,7 +44,7 @@ export default Polymer({ isDataLoadedChanged(newVal) { if (!newVal) { - entityHistoryActions.fetchSelectedDate(); + this.async(() => entityHistoryActions.fetchSelectedDate(), 1); } }, @@ -55,7 +54,6 @@ export default Polymer({ datepickerFocus() { this.datePicker.adjustPosition(); - this.datePicker.gotoDate(moment('2015-06-30').toDate()); }, attached() { @@ -72,4 +70,4 @@ export default Polymer({ computeContentClasses(narrow) { return 'flex content ' + (narrow ? 'narrow' : 'wide'); }, -}); \ No newline at end of file +}); diff --git a/src/layouts/partial-logbook.js b/src/layouts/partial-logbook.js index faae7c47c6..8fc139c1b3 100644 --- a/src/layouts/partial-logbook.js +++ b/src/layouts/partial-logbook.js @@ -1,4 +1,3 @@ -import moment from 'moment'; import { logbookGetters, logbookActions } from 'home-assistant-js'; import Polymer from '../polymer'; @@ -8,7 +7,7 @@ require('./partial-base'); require('../components/ha-logbook'); require('../components/loading-box'); -export default Polymer({ +export default new Polymer({ is: 'partial-logbook', behaviors: [nuclearObserver], @@ -50,8 +49,7 @@ export default Polymer({ isStaleChanged(newVal) { if (newVal) { - // isLoading wouldn't update without async <_< - this.async(() => logbookActions.fetchDate(this.selectedDate), 10); + this.async(() => logbookActions.fetchDate(this.selectedDate), 1); } }, @@ -61,7 +59,6 @@ export default Polymer({ datepickerFocus() { this.datePicker.adjustPosition(); - this.datePicker.gotoDate(moment('2015-06-30').toDate()); }, attached() { diff --git a/src/layouts/partial-states.js b/src/layouts/partial-states.js index 1145d2fa5e..2d5a9030df 100644 --- a/src/layouts/partial-states.js +++ b/src/layouts/partial-states.js @@ -19,7 +19,7 @@ require('./partial-base'); require('../components/state-cards'); require('../components/ha-voice-command-progress'); -export default Polymer({ +export default new Polymer({ is: 'partial-states', behaviors: [nuclearObserver], @@ -50,8 +50,8 @@ export default Polymer({ bindNuclear: [ voiceGetters.isVoiceSupported, configGetters.isComponentLoaded('conversation'), - (isVoiceSupported, componentLoaded) => isVoiceSupported && componentLoaded - ] + (isVoiceSupported, componentLoaded) => isVoiceSupported && componentLoaded, + ], }, isListening: { @@ -64,7 +64,7 @@ export default Polymer({ bindNuclear: [ voiceGetters.isListening, voiceGetters.isTransmitting, - (isListening, isTransmitting) => isListening || isTransmitting + (isListening, isTransmitting) => isListening || isTransmitting, ], }, diff --git a/src/managers/notification-manager.js b/src/managers/notification-manager.js index d89b0cdb42..c787d54864 100644 --- a/src/managers/notification-manager.js +++ b/src/managers/notification-manager.js @@ -3,7 +3,7 @@ import { notificationGetters } from 'home-assistant-js'; import Polymer from '../polymer'; import nuclearObserver from '../util/bound-nuclear-behavior'; -export default Polymer({ +export default new Polymer({ is: 'notification-manager', behaviors: [nuclearObserver], @@ -20,5 +20,5 @@ export default Polymer({ if (newText) { this.$.toast.show(); } - } + }, }); diff --git a/src/more-infos/more-info-camera.js b/src/more-infos/more-info-camera.js index ce0951ca23..3fa7e9b6fd 100644 --- a/src/more-infos/more-info-camera.js +++ b/src/more-infos/more-info-camera.js @@ -1,6 +1,6 @@ import Polymer from '../polymer'; -export default Polymer({ +export default new Polymer({ is: 'more-info-camera', properties: { @@ -21,9 +21,8 @@ export default Polymer({ return 'http://194.218.96.92/jpg/image.jpg'; } else if (dialogOpen) { return '/api/camera_proxy_stream/' + this.stateObj.entityId; - } else { - // Return an empty image if dialog is not open - return 'data:image/gif;base64,R0lGODlhAQABAAAAACw='; } + // Return an empty image if dialog is not open + return 'data:image/gif;base64,R0lGODlhAQABAAAAACw='; }, }); diff --git a/src/more-infos/more-info-configurator.js b/src/more-infos/more-info-configurator.js index 5667b8c246..3f8666742c 100644 --- a/src/more-infos/more-info-configurator.js +++ b/src/more-infos/more-info-configurator.js @@ -9,7 +9,7 @@ import nuclearObserver from '../util/bound-nuclear-behavior'; require('../components/loading-box'); -export default Polymer({ +export default new Polymer({ is: 'more-info-configurator', behaviors: [nuclearObserver], @@ -46,7 +46,7 @@ export default Polymer({ }, computeIsConfigurable(stateObj) { - return stateObj.state == 'configure'; + return stateObj.state === 'configure'; }, computeSubmitCaption(stateObj) { @@ -56,8 +56,8 @@ export default Polymer({ submitClicked() { this.isConfiguring = true; - var data = { - configure_id: this.stateObj.attributes.configure_id + const data = { + configure_id: this.stateObj.attributes.configure_id, }; serviceActions.callService('configurator', 'configure', data).then( diff --git a/src/more-infos/more-info-content.js b/src/more-infos/more-info-content.js index 8fda0506d5..d28bde1592 100644 --- a/src/more-infos/more-info-content.js +++ b/src/more-infos/more-info-content.js @@ -12,7 +12,7 @@ require('./more-info-media_player'); require('./more-info-camera'); require('./more-info-updater'); -export default Polymer({ +export default new Polymer({ is: 'more-info-content', properties: { @@ -28,8 +28,8 @@ export default Polymer({ }, }, - dialogOpenChanged(newVal, oldVal) { - var root = Polymer.dom(this); + dialogOpenChanged(newVal) { + const root = Polymer.dom(this); if (root.lastChild) { root.lastChild.dialogOpen = newVal; @@ -37,7 +37,7 @@ export default Polymer({ }, stateObjChanged(newVal, oldVal) { - var root = Polymer.dom(this); + const root = Polymer.dom(this); if (!newVal) { if (root.lastChild) { @@ -46,24 +46,20 @@ export default Polymer({ return; } - var newMoreInfoType = stateMoreInfoType(newVal); - - if (!oldVal || stateMoreInfoType(oldVal) != newMoreInfoType) { + const newMoreInfoType = stateMoreInfoType(newVal); + if (!oldVal || stateMoreInfoType(oldVal) !== newMoreInfoType) { if (root.lastChild) { root.removeChild(root.lastChild); } - var moreInfo = document.createElement('more-info-' + newMoreInfoType); + const moreInfo = document.createElement('more-info-' + newMoreInfoType); moreInfo.stateObj = newVal; moreInfo.dialogOpen = this.dialogOpen; root.appendChild(moreInfo); - } else { - root.lastChild.dialogOpen = this.dialogOpen; root.lastChild.stateObj = newVal; - } }, }); diff --git a/src/more-infos/more-info-default.js b/src/more-infos/more-info-default.js index b06f6e2bf0..d68b2faa27 100644 --- a/src/more-infos/more-info-default.js +++ b/src/more-infos/more-info-default.js @@ -2,7 +2,7 @@ import Polymer from '../polymer'; const FILTER_KEYS = ['entity_picture', 'friendly_name', 'unit_of_measurement']; -export default Polymer({ +export default new Polymer({ is: 'more-info-default', properties: { diff --git a/src/more-infos/more-info-group.js b/src/more-infos/more-info-group.js index 70ff0cb7df..2e26238631 100644 --- a/src/more-infos/more-info-group.js +++ b/src/more-infos/more-info-group.js @@ -8,7 +8,7 @@ import nuclearObserver from '../util/bound-nuclear-behavior'; require('../cards/state-card-content'); -export default Polymer({ +export default new Polymer({ is: 'more-info-group', behaviors: [nuclearObserver], @@ -26,7 +26,7 @@ export default Polymer({ (currentEntity, entities) => { // weird bug?? if (!currentEntity) { - return; + return []; } return currentEntity.attributes.entity_id.map( entities.get.bind(entities)); diff --git a/src/more-infos/more-info-light.js b/src/more-infos/more-info-light.js index 60bed9b2f1..7b5996f5f8 100644 --- a/src/more-infos/more-info-light.js +++ b/src/more-infos/more-info-light.js @@ -7,7 +7,7 @@ require('../components/ha-color-picker'); const ATTRIBUTE_CLASSES = ['brightness', 'xy_color']; -export default Polymer({ +export default new Polymer({ is: 'more-info-light', properties: { @@ -19,10 +19,10 @@ export default Polymer({ brightnessSliderValue: { type: Number, value: 0, - } + }, }, - stateObjChanged(newVal, oldVal) { + stateObjChanged(newVal) { if (newVal && newVal.state === 'on') { this.brightnessSliderValue = newVal.attributes.brightness; } @@ -35,27 +35,27 @@ export default Polymer({ }, brightnessSliderChanged(ev) { - var bri = parseInt(ev.target.value); + const bri = parseInt(ev.target.value, 10); - if(isNaN(bri)) return; + if (isNaN(bri)) return; - if(bri === 0) { + if (bri === 0) { serviceActions.callTurnOff(this.stateObj.entityId); } else { serviceActions.callService('light', 'turn_on', { entity_id: this.stateObj.entityId, - brightness: bri + brightness: bri, }); } }, colorPicked(ev) { - var color = ev.detail.rgb; + const color = ev.detail.rgb; serviceActions.callService('light', 'turn_on', { entity_id: this.stateObj.entityId, - rgb_color: [color.r, color.g, color.b] + rgb_color: [color.r, color.g, color.b], }); - } + }, }); diff --git a/src/more-infos/more-info-media_player.js b/src/more-infos/more-info-media_player.js index 66cf823e38..65793022fd 100644 --- a/src/more-infos/more-info-media_player.js +++ b/src/more-infos/more-info-media_player.js @@ -5,7 +5,7 @@ import attributeClassNames from '../util/attribute-class-names'; const ATTRIBUTE_CLASSES = ['volume_level']; -export default Polymer({ +export default new Polymer({ is: 'more-info-media_player', properties: { @@ -26,7 +26,7 @@ export default Polymer({ isMuted: { type: Boolean, - value: false + value: false, }, volumeSliderValue: { @@ -73,8 +73,8 @@ export default Polymer({ stateObjChanged(newVal) { if (newVal) { - this.isOff = newVal.state == 'off'; - this.isPlaying = newVal.state == 'playing'; + this.isOff = newVal.state === 'off'; + this.isPlaying = newVal.state === 'playing'; this.volumeSliderValue = newVal.attributes.volume_level * 100; this.isMuted = newVal.attributes.is_volume_muted; this.supportsPause = (newVal.attributes.supported_media_commands & 1) !== 0; @@ -94,14 +94,14 @@ export default Polymer({ }, computeIsOff(stateObj) { - return stateObj.state == 'off'; + return stateObj.state === 'off'; }, computeMuteVolumeIcon(isMuted) { return isMuted ? 'av:volume-off' : 'av:volume-up'; }, - computePlaybackControlIcon(stateObj) { + computePlaybackControlIcon() { if (this.isPlaying) { return this.supportsPause ? 'av:pause' : 'av:stop'; } @@ -121,9 +121,6 @@ export default Polymer({ }, handlePlaybackControl() { - if (this.isPlaying && !this.supportsPause) { - alert('This case is not supported yet'); - } this.callService('media_play_pause'); }, @@ -139,14 +136,14 @@ export default Polymer({ }, volumeSliderChanged(ev) { - var volPercentage = parseFloat(ev.target.value); - var vol = volPercentage > 0 ? volPercentage / 100 : 0; + const volPercentage = parseFloat(ev.target.value); + const vol = volPercentage > 0 ? volPercentage / 100 : 0; this.callService('volume_set', { volume_level: vol }); }, callService(service, data) { - data = data || {}; - data.entity_id = this.stateObj.entityId; - serviceActions.callService('media_player', service, data); + const serviceData = data || {}; + serviceData.entity_id = this.stateObj.entityId; + serviceActions.callService('media_player', service, serviceData); }, }); diff --git a/src/more-infos/more-info-script.js b/src/more-infos/more-info-script.js index 8359d7270e..f15372b210 100644 --- a/src/more-infos/more-info-script.js +++ b/src/more-infos/more-info-script.js @@ -1,6 +1,6 @@ import Polymer from '../polymer'; -export default Polymer({ +export default new Polymer({ is: 'more-info-script', properties: { diff --git a/src/more-infos/more-info-sun.js b/src/more-infos/more-info-sun.js index a37347d4bd..97d398d93d 100644 --- a/src/more-infos/more-info-sun.js +++ b/src/more-infos/more-info-sun.js @@ -4,7 +4,7 @@ import formatTime from '../util/format-time'; const { parseDateTime } = util; -export default Polymer({ +export default new Polymer({ is: 'more-info-sun', properties: { @@ -37,12 +37,12 @@ export default Polymer({ this.settingDate = parseDateTime(this.stateObj.attributes.next_setting); this.settingTime = formatTime(this.settingDate); - var root = Polymer.dom(this); + const root = Polymer.dom(this); - if(self.risingDate > self.settingDate) { + if (self.risingDate > self.settingDate) { root.appendChild(this.$.rising); } else { root.appendChild(this.$.setting); } - } + }, }); diff --git a/src/more-infos/more-info-thermostat.js b/src/more-infos/more-info-thermostat.js index cc727f9653..f74eacd0ce 100644 --- a/src/more-infos/more-info-thermostat.js +++ b/src/more-infos/more-info-thermostat.js @@ -1,12 +1,11 @@ -import { util, serviceActions } from 'home-assistant-js'; +import { serviceActions } from 'home-assistant-js'; import Polymer from '../polymer'; import attributeClassNames from '../util/attribute-class-names'; -const { temperatureUnits } = util; const ATTRIBUTE_CLASSES = ['away_mode']; -export default Polymer({ +export default new Polymer({ is: 'more-info-thermostat', properties: { @@ -32,12 +31,12 @@ export default Polymer({ }, }, - stateObjChanged(newVal, oldVal) { - this.targetTemperatureSliderValue = this.stateObj.state; - this.awayToggleChecked = this.stateObj.attributes.away_mode == 'on'; + stateObjChanged(newVal) { + this.targetTemperatureSliderValue = newVal.state; + this.awayToggleChecked = newVal.attributes.away_mode === 'on'; - this.tempMin = this.stateObj.attributes.min_temp; - this.tempMax = this.stateObj.attributes.max_temp; + this.tempMin = newVal.attributes.min_temp; + this.tempMax = newVal.attributes.max_temp; }, computeClassNames(stateObj) { @@ -45,34 +44,34 @@ export default Polymer({ }, targetTemperatureSliderChanged(ev) { - var temp = parseInt(ev.target.value); + const temp = parseInt(ev.target.value, 10); - if(isNaN(temp)) return; + if (isNaN(temp)) return; serviceActions.callService('thermostat', 'set_temperature', { entity_id: this.stateObj.entityId, - temperature: temp + temperature: temp, }); }, toggleChanged(ev) { - var newVal = ev.target.checked; + const newVal = ev.target.checked; - if(newVal && this.stateObj.attributes.away_mode === 'off') { + if (newVal && this.stateObj.attributes.away_mode === 'off') { this.service_set_away(true); - } else if(!newVal && this.stateObj.attributes.away_mode === 'on') { + } else if (!newVal && this.stateObj.attributes.away_mode === 'on') { this.service_set_away(false); } }, - service_set_away(away_mode) { + service_set_away(awayMode) { // We call stateChanged after a successful call to re-sync the toggle // with the state. It will be out of sync if our service call did not // result in the entity to be turned on. Since the state is not changing, // the resync is not called automatic. serviceActions.callService( 'thermostat', 'set_away_mode', - { away_mode, entity_id: this.stateObj.entityId }) + { away_mode: awayMode, entity_id: this.stateObj.entityId }) .then(() => this.stateObjChanged(this.stateObj)); }, diff --git a/src/more-infos/more-info-updater.js b/src/more-infos/more-info-updater.js index b474a94cb1..a796d88d15 100644 --- a/src/more-infos/more-info-updater.js +++ b/src/more-infos/more-info-updater.js @@ -1,7 +1,6 @@ -import { util } from 'home-assistant-js'; import { serviceActions } from 'home-assistant-js'; -export default Polymer({ +export default new Polymer({ is: 'more-info-updater', properties: { @@ -10,11 +9,11 @@ export default Polymer({ }, }, - updateTapped(stateObj) { - serviceActions.callService('updater', 'update', {}) + updateTapped() { + serviceActions.callService('updater', 'update', {}); }, - linkTapped(stateObj) { + linkTapped() { window.open(this.stateObj.attributes.link, '_blank'); }, }); diff --git a/src/util/bound-nuclear-behavior.js b/src/util/bound-nuclear-behavior.js index 454aeae809..4b44ee9617 100644 --- a/src/util/bound-nuclear-behavior.js +++ b/src/util/bound-nuclear-behavior.js @@ -1,5 +1,5 @@ import { reactor } from 'home-assistant-js'; -import NuclearObserver from './nuclear-behavior'; +import nuclearObserver from './nuclear-behavior'; -export default NuclearObserver(reactor); +export default nuclearObserver(reactor); diff --git a/src/util/domain-icon.js b/src/util/domain-icon.js index 411df2574f..0857f54df4 100644 --- a/src/util/domain-icon.js +++ b/src/util/domain-icon.js @@ -1,64 +1,61 @@ export default function domainIcon(domain, state) { - switch(domain) { - case "homeassistant": - return "home"; + switch (domain) { + case 'homeassistant': + return 'home'; - case "group": - return "homeassistant-24:group"; + case 'group': + return 'homeassistant-24:group'; - case "device_tracker": - return "social:person"; + case 'device_tracker': + return 'social:person'; - case "switch": - return "image:flash-on"; + case 'switch': + return 'image:flash-on'; - case "media_player": - var icon = "hardware:cast"; + case 'media_player': + let icon = 'hardware:cast'; - if (state && state !== "off" && state !== 'idle') { - icon += "-connected"; - } + if (state && state !== 'off' && state !== 'idle') { + icon += '-connected'; + } - return icon; + return icon; - case "sun": - return "image:wb-sunny"; + case 'sun': + return 'image:wb-sunny'; - case "light": - return "image:wb-incandescent"; + case 'light': + return 'image:wb-incandescent'; - case "simple_alarm": - return "social:notifications"; + case 'simple_alarm': + return 'social:notifications'; - case "notify": - return "announcement"; + case 'notify': + return 'announcement'; - case "thermostat": - return "homeassistant-100:thermostat"; + case 'thermostat': + return 'homeassistant-100:thermostat'; - case "sensor": - return "visibility"; + case 'sensor': + return 'visibility'; - case "configurator": - return "settings"; + case 'configurator': + return 'settings'; - case "conversation": - return "av:hearing"; + case 'conversation': + return 'av:hearing'; - case "script": - return "description"; + case 'script': + return 'description'; - case 'scene': - return 'social:pages'; + case 'scene': + return 'social:pages'; - case 'updater': - if(state == "update_available") { - return 'icons:cloud-download'; - } else { - return 'icons:cloud-done'; - } + case 'updater': + return state === 'update_available' ? + 'icons:cloud-download' : 'icons:cloud-done'; - default: - return "bookmark"; + default: + return 'bookmark'; } -}; +} diff --git a/src/util/format-date-time.js b/src/util/format-date-time.js index 6748bb835c..67c759954e 100644 --- a/src/util/format-date-time.js +++ b/src/util/format-date-time.js @@ -2,4 +2,4 @@ import moment from 'moment'; export default function formatDateTime(dateObj) { return moment(dateObj).format('lll'); -}; +} diff --git a/src/util/format-date.js b/src/util/format-date.js index 8f2a68c795..6ddc191dbe 100644 --- a/src/util/format-date.js +++ b/src/util/format-date.js @@ -2,4 +2,4 @@ import moment from 'moment'; export default function formatDate(dateObj) { return moment(dateObj).format('ll'); -}; \ No newline at end of file +} diff --git a/src/util/format-time.js b/src/util/format-time.js index af6b9cf551..0742eee642 100644 --- a/src/util/format-time.js +++ b/src/util/format-time.js @@ -2,4 +2,4 @@ import moment from 'moment'; export default function formatTime(dateObj) { return moment(dateObj).format('LT'); -}; +} diff --git a/src/util/nuclear-behavior.js b/src/util/nuclear-behavior.js index bb9facb54d..a2a6b785c8 100644 --- a/src/util/nuclear-behavior.js +++ b/src/util/nuclear-behavior.js @@ -1,34 +1,34 @@ export default function NuclearObserver(reactor) { return { - attached: function() { + attached() { this.__unwatchFns = Object.keys(this.properties).reduce( (unwatchFns, key) => { if (!('bindNuclear' in this.properties[key])) { return unwatchFns; } - var getter = this.properties[key].bindNuclear; - + const getter = this.properties[key].bindNuclear; if (!getter) { - throw 'Undefined getter specified for key ' + key; + throw new Error(`Undefined getter specified for key ${key}`); } - this[key] = reactor.evaluate(getter); return unwatchFns.concat(reactor.observe(getter, (val) => { if (__DEV__) { + /* eslint-disable no-console */ console.log(this, key, val); + /* eslint-enable no-console */ } this[key] = val; })); - }, []); + }, []); }, - detached: function() { + detached() { while (this.__unwatchFns.length) { this.__unwatchFns.shift()(); } }, }; -}; +} diff --git a/src/util/state-card-type.js b/src/util/state-card-type.js index e6c3f268cb..5967b111c6 100644 --- a/src/util/state-card-type.js +++ b/src/util/state-card-type.js @@ -4,11 +4,10 @@ const DOMAINS_WITH_CARD = [ 'thermostat', 'configurator', 'scene', 'media_player']; export default function stateCardType(state) { - if(DOMAINS_WITH_CARD.indexOf(state.domain) !== -1) { + if (DOMAINS_WITH_CARD.indexOf(state.domain) !== -1) { return state.domain; - } else if(reactor.evaluate(serviceGetters.canToggle(state.entityId))) { - return "toggle"; - } else { - return "display"; + } else if (reactor.evaluate(serviceGetters.canToggle(state.entityId))) { + return 'toggle'; } + return 'display'; } diff --git a/src/util/state-more-info-type.js b/src/util/state-more-info-type.js index 4c6b2f8ead..1d3892e942 100644 --- a/src/util/state-more-info-type.js +++ b/src/util/state-more-info-type.js @@ -1,12 +1,11 @@ const DOMAINS_WITH_MORE_INFO = [ 'light', 'group', 'sun', 'configurator', 'thermostat', 'script', - 'media_player', 'camera', 'updater' + 'media_player', 'camera', 'updater', ]; export default function stateMoreInfoType(state) { - if(DOMAINS_WITH_MORE_INFO.indexOf(state.domain) !== -1) { + if (DOMAINS_WITH_MORE_INFO.indexOf(state.domain) !== -1) { return state.domain; - } else { - return 'default'; } + return 'default'; }