From 5678b952a50233ce0ddb612cce56cad5a7fd7fd1 Mon Sep 17 00:00:00 2001 From: Jon Ziebell Date: Sat, 6 Aug 2022 23:46:10 -0400 Subject: [PATCH] Finished floor plan switcher and converted all buttons to tiles --- css/dashboard.css | 2 +- js/beestat/floor_plan.js | 59 ++++ js/component/alert.js | 4 +- js/component/button.js | 278 ------------------ .../card/air_quality_not_supported.js | 2 +- js/component/card/comparison_settings.js | 8 +- js/component/card/floor_plan_editor.js | 2 +- js/component/card/my_home.js | 26 +- js/component/card/patreon.js | 10 +- js/component/floor_plan.js | 39 ++- js/component/header.js | 4 +- js/component/menu.js | 6 +- js/component/modal.js | 4 +- .../modal/air_quality_detail_custom.js | 12 +- js/component/modal/change_floor_plan.js | 130 +++----- js/component/modal/change_system_type.js | 8 +- js/component/modal/change_thermostat.js | 125 +++----- js/component/modal/create_floor_plan.js | 4 +- js/component/modal/delete_floor_plan.js | 4 +- js/component/modal/download_data.js | 20 +- js/component/modal/enjoy_beestat.js | 6 +- js/component/modal/newsletter.js | 6 +- js/component/modal/patreon_status.js | 2 +- .../modal/runtime_sensor_detail_custom.js | 12 +- .../modal/runtime_thermostat_detail_custom.js | 12 +- .../runtime_thermostat_summary_custom.js | 8 +- .../{button_group.js => tile_group.js} | 130 ++++---- js/js.php | 7 +- 28 files changed, 303 insertions(+), 627 deletions(-) create mode 100644 js/beestat/floor_plan.js delete mode 100644 js/component/button.js rename js/component/{button_group.js => tile_group.js} (71%) diff --git a/css/dashboard.css b/css/dashboard.css index 6a61e10..d0877fc 100644 --- a/css/dashboard.css +++ b/css/dashboard.css @@ -593,6 +593,6 @@ input[type=radio] { .icon.f16:before { font-size: 16px; } .icon.f24:before { font-size: 24px; } -.icon.f36:before { font-size: 36px; } +.icon.f32:before { font-size: 32px; } .icon.f48:before { font-size: 48px; } .icon.f64:before { font-size: 64px; } diff --git a/js/beestat/floor_plan.js b/js/beestat/floor_plan.js new file mode 100644 index 0000000..bf533d7 --- /dev/null +++ b/js/beestat/floor_plan.js @@ -0,0 +1,59 @@ +beestat.floor_plan = {}; + +/** + * Get the area of an entire floor plan. + * + * @param {number} floor_plan_id + * + * @return {number} The area of the floor plan in sqft. + */ +beestat.floor_plan.get_area = function(floor_plan_id) { + const floor_plan = beestat.cache.floor_plan[floor_plan_id]; + let area = 0; + + floor_plan.data.groups.forEach(function(group) { + area += beestat.floor_plan.get_area_group(group, false); + }); + + return Math.round(area); +}; + +/** + * Get the area of a single floor plan group. + * + * @param {object} group The group. + * @param {boolean} round Whether or not to round the result. + * + * @return {number} Area of the group in sqft. + */ +beestat.floor_plan.get_area_group = function(group, round = true) { + let area = 0; + + group.rooms.forEach(function(room) { + area += beestat.floor_plan.get_area_room(room, false); + }); + + if (round === true) { + return Math.round(area); + } + + return area; +}; + +/** + * Get the area of a single floor plan room. + * + * @param {object} room The room. + * @param {boolean} round Whether or not to round the result. + * + * @return {number} Area of the room in sqft. + */ +beestat.floor_plan.get_area_room = function(room, round = true) { + let area = Math.abs(ClipperLib.Clipper.Area(room.points) / 144); + + if (round === true) { + return Math.round(area); + } + + return area; +}; diff --git a/js/component/alert.js b/js/component/alert.js index b9b720a..f0043ef 100644 --- a/js/component/alert.js +++ b/js/component/alert.js @@ -241,7 +241,7 @@ beestat.component.alert.prototype.decorate_detail_ = function(parent) { }); button_container.appendChild(dismiss_container); - (new beestat.component.button()) + (new beestat.component.tile()) .set_icon('bell_off') .set_text('Dismiss') .set_background_color(beestat.style.color.red.dark) @@ -278,7 +278,7 @@ beestat.component.alert.prototype.decorate_detail_ = function(parent) { }); button_container.appendChild(restore_container); - (new beestat.component.button()) + (new beestat.component.tile()) .set_icon('bell') .set_text('Restore') .set_background_color(beestat.style.color.red.dark) diff --git a/js/component/button.js b/js/component/button.js deleted file mode 100644 index e5e448f..0000000 --- a/js/component/button.js +++ /dev/null @@ -1,278 +0,0 @@ -/** - * A button-shaped component with text, an icon, and a background color. - */ -beestat.component.button = function() { - beestat.component.apply(this, arguments); -}; -beestat.extend(beestat.component.button, beestat.component); - -/** - * Decorate - * - * @param {rocket.Elements} parent - */ -beestat.component.button.prototype.decorate_ = function(parent) { - var self = this; - - var border_radius; - if (this.type_ === 'pill') { - border_radius = '32px'; - } else { - border_radius = beestat.style.size.border_radius; - } - - this.button_ = $.createElement('div') - .style({ - 'display': 'inline-block', - 'background': this.background_color_, - 'color': this.text_color_, - 'user-select': 'none', - 'border-radius': border_radius, - 'padding-top': '3px', - 'padding-bottom': '3px', - 'transition': 'color 200ms ease, background 200ms ease' - }); - parent.appendChild(this.button_); - - if (this.title_ !== undefined) { - this.button_.setAttribute('title', this.title_); - } - - if (this.icon_ !== undefined && this.text_ !== undefined) { - // Text + Icon - this.button_.style({ - 'padding-left': (beestat.style.size.gutter / 2), - 'padding-right': (beestat.style.size.gutter / 2) - }); - - (new beestat.component.icon(this.icon_)) - .set_text(this.text_) - .set_bubble_text(this.bubble_text_) - .set_bubble_color(this.bubble_color_) - .render(this.button_); - } else if (this.icon_ === undefined && this.text_ !== undefined) { - // Text only - this.button_.style({ - 'padding': '0px ' + (beestat.style.size.gutter / 2) + 'px', - 'line-height': '32px' - }); - this.button_.innerText(this.text_); - } else { - // Icon only - this.button_.style({ - 'width': '32px', - 'text-align': 'center' - }); - - (new beestat.component.icon(this.icon_)) - .set_text(this.text_) - .set_bubble_text(this.bubble_text_) - .set_bubble_color(this.bubble_color_) - .render(this.button_); - } - - if ( - this.text_hover_color_ !== undefined || - this.background_hover_color_ !== undefined - ) { - this.button_.style({'cursor': 'pointer'}); - - var mouseenter_style = {}; - if (this.text_hover_color_ !== undefined) { - mouseenter_style.color = this.text_hover_color_; - } - if (this.background_hover_color_ !== undefined) { - mouseenter_style.background = this.background_hover_color_; - } - - var mouseleave_style = {}; - mouseleave_style.color = - (this.text_color_ !== undefined) ? this.text_color_ : ''; - mouseleave_style.background = - (this.background_color_ !== undefined) ? this.background_color_ : ''; - - this.button_.addEventListener('mouseenter', function() { - self.button_.style(mouseenter_style); - }); - this.button_.addEventListener('mouseleave', function() { - self.button_.style(mouseleave_style); - }); - } - - this.button_.addEventListener('click', function() { - self.dispatchEvent('click'); - }); - - this.button_.addEventListener('mousedown', function() { - self.dispatchEvent('mousedown'); - }); -}; - -/** - * Set the text. - * - * @param {string} text - * - * @return {beestat.component.button} This. - */ -beestat.component.button.prototype.set_text = function(text) { - this.text_ = text; - if (this.rendered_ === true) { - this.rerender(); - } - return this; -}; - -/** - * Set the icon. - * - * @param {string} icon - * - * @return {beestat.component.button} This. - */ -beestat.component.button.prototype.set_icon = function(icon) { - this.icon_ = icon; - if (this.rendered_ === true) { - this.rerender(); - } - return this; -}; - -/** - * Set the background color. - * - * @param {string} background_color - * - * @return {beestat.component.button} This. - */ -beestat.component.button.prototype.set_background_color = function(background_color) { - this.background_color_ = background_color; - if (this.rendered_ === true) { - this.rerender(); - } - return this; -}; - -/** - * Set the text color. - * - * @param {string} text_color - * - * @return {beestat.component.button} This. - */ -beestat.component.button.prototype.set_text_color = function(text_color) { - this.text_color_ = text_color; - if (this.rendered_ === true) { - this.rerender(); - } - return this; -}; - -/** - * Set the background hover color. - * - * @param {string} background_hover_color - * - * @return {beestat.component.button} This. - */ -beestat.component.button.prototype.set_background_hover_color = function(background_hover_color) { - this.background_hover_color_ = background_hover_color; - if (this.rendered_ === true) { - this.rerender(); - } - return this; -}; - -/** - * Set the text hover color. - * - * @param {string} text_hover_color - * - * @return {beestat.component.button} This. - */ -beestat.component.button.prototype.set_text_hover_color = function(text_hover_color) { - this.text_hover_color_ = text_hover_color; - if (this.rendered_ === true) { - this.rerender(); - } - return this; -}; - -/** - * Set the type. - * - * @param {string} type Valid value is "pill" for now. - * - * @return {beestat.component.button} This. - */ -beestat.component.button.prototype.set_type = function(type) { - this.type_ = type; - if (this.rendered_ === true) { - this.rerender(); - } - return this; -}; - -/** - * Set the text of the bubble. - * - * @param {string} bubble_text - * - * @return {beestat.component.button} This. - */ -beestat.component.button.prototype.set_bubble_text = function(bubble_text) { - this.bubble_text_ = bubble_text; - if (this.rendered_ === true) { - this.rerender(); - } - return this; -}; - -/** - * Set the color of the bubble. - * - * @param {string} bubble_color - * - * @return {beestat.component.button} This. - */ -beestat.component.button.prototype.set_bubble_color = function(bubble_color) { - this.bubble_color_ = bubble_color; - if (this.rendered_ === true) { - this.rerender(); - } - return this; -}; - -/** - * Set the title for the button. - * - * @param {string} title - * - * @return {beestat.component.button} This. - */ -beestat.component.button.prototype.set_title = function(title) { - this.title_ = title; - if (this.rendered_ === true) { - this.rerender(); - } - return this; -}; - -/** - * Do the normal event listener stuff. - * - * @return {beestat.component.button} This. - */ -beestat.component.button.prototype.addEventListener = function() { - rocket.EventTarget.prototype.addEventListener.apply(this, arguments); - return this; -}; - -/** - * Get the bounding box for the button. - * - * @return {array} The bounding box. - */ -beestat.component.button.prototype.getBoundingClientRect = function() { - return this.button_.getBoundingClientRect(); -}; diff --git a/js/component/card/air_quality_not_supported.js b/js/component/card/air_quality_not_supported.js index 2b7531d..b12b4d8 100644 --- a/js/component/card/air_quality_not_supported.js +++ b/js/component/card/air_quality_not_supported.js @@ -15,7 +15,7 @@ beestat.component.card.air_quality_not_supported.prototype.decorate_contents_ = parent.style('background', beestat.style.color.blue.light); parent.appendChild($.createElement('p').innerText('Access to Air Quality information requires a compatible thermostat. Support beestat by buying through this affiliate link.')); - new beestat.component.button() + new beestat.component.tile() .set_icon('open_in_new') .set_text('Buy an ecobee Smart Thermostat Premium on Amazon') .set_background_color(beestat.style.color.green.dark) diff --git a/js/component/card/comparison_settings.js b/js/component/card/comparison_settings.js index e70ca37..4b698c0 100644 --- a/js/component/card/comparison_settings.js +++ b/js/component/card/comparison_settings.js @@ -151,9 +151,9 @@ beestat.component.card.comparison_settings.prototype.decorate_region_ = function var color = beestat.style.color.green.base; - var button_group = new beestat.component.button_group(); + var button_group = new beestat.component.tile_group(); regions.forEach(function(region) { - var button = new beestat.component.button() + var button = new beestat.component.tile() .set_background_hover_color(color) .set_text_color('#fff') .set_text(region.charAt(0).toUpperCase() + region.slice(1)); @@ -233,9 +233,9 @@ beestat.component.card.comparison_settings.prototype.decorate_property_ = functi var color = beestat.style.color.purple.base; - var button_group = new beestat.component.button_group(); + var button_group = new beestat.component.tile_group(); property_types.forEach(function(property_type) { - var button = new beestat.component.button() + var button = new beestat.component.tile() .set_background_hover_color(color) .set_text_color('#fff') .set_text(property_type.text); diff --git a/js/component/card/floor_plan_editor.js b/js/component/card/floor_plan_editor.js index 0f0d59e..313207b 100644 --- a/js/component/card/floor_plan_editor.js +++ b/js/component/card/floor_plan_editor.js @@ -53,7 +53,7 @@ beestat.component.card.floor_plan_editor.prototype.decorate_contents_ = function parent.appendChild(center_container); center_container.appendChild($.createElement('p').innerText('You haven\'t created any floor plans yet.')); - const get_started_button = new beestat.component.button() + const get_started_button = new beestat.component.tile() .set_icon('home_plus') .set_text('Get Started') .set_background_color(beestat.style.color.green.dark) diff --git a/js/component/card/my_home.js b/js/component/card/my_home.js index 64d204b..b18b61a 100644 --- a/js/component/card/my_home.js +++ b/js/component/card/my_home.js @@ -56,20 +56,20 @@ beestat.component.card.my_home.prototype.decorate_system_type_ = function(parent ); const cool_stages_string = cool_stages > 1 ? ' (2 Stage)' : ''; - var button_group = new beestat.component.button_group(); - button_group.add_button(new beestat.component.button() + var button_group = new beestat.component.tile_group(); + button_group.add_button(new beestat.component.tile() .set_type('pill') .set_background_color(beestat.series.compressor_heat_1.color) .set_text_color('#fff') .set_icon('fire') .set_text(heat.charAt(0).toUpperCase() + heat.slice(1) + heat_stages_string)); - button_group.add_button(new beestat.component.button() + button_group.add_button(new beestat.component.tile() .set_type('pill') .set_background_color(beestat.series.auxiliary_heat_1.color) .set_text_color('#fff') .set_icon('fire') .set_text(auxiliary_heat.charAt(0).toUpperCase() + auxiliary_heat.slice(1))); - button_group.add_button(new beestat.component.button() + button_group.add_button(new beestat.component.tile() .set_type('pill') .set_background_color(beestat.series.compressor_cool_1.color) .set_text_color('#fff') @@ -109,9 +109,9 @@ beestat.component.card.my_home.prototype.decorate_region_ = function(parent) { region = null; } - var button_group = new beestat.component.button_group(); + var button_group = new beestat.component.tile_group(); if (region !== null) { - var button = new beestat.component.button() + var button = new beestat.component.tile() .set_type('pill') .set_background_color(beestat.style.color.green.base) .set_text_color('#fff') @@ -119,7 +119,7 @@ beestat.component.card.my_home.prototype.decorate_region_ = function(parent) { .set_text(region); button_group.add_button(button); } else { - button_group.add_button(new beestat.component.button() + button_group.add_button(new beestat.component.tile() .set_type('pill') .set_background_color(beestat.style.color.gray.dark) .set_text_color('#fff') @@ -139,10 +139,10 @@ beestat.component.card.my_home.prototype.decorate_property_ = function(parent) { (new beestat.component.title('Property')).render(parent); - var button_group = new beestat.component.button_group(); + var button_group = new beestat.component.tile_group(); if (thermostat.property.structure_type !== null) { - button_group.add_button(new beestat.component.button() + button_group.add_button(new beestat.component.tile() .set_type('pill') .set_background_color(beestat.style.color.purple.base) .set_text_color('#fff') @@ -159,7 +159,7 @@ beestat.component.card.my_home.prototype.decorate_property_ = function(parent) { thermostat.property.structure_type === 'semi-detached' ) ) { - button_group.add_button(new beestat.component.button() + button_group.add_button(new beestat.component.tile() .set_type('pill') .set_background_color(beestat.style.color.purple.base) .set_text_color('#fff') @@ -169,7 +169,7 @@ beestat.component.card.my_home.prototype.decorate_property_ = function(parent) { } if (thermostat.property.square_feet !== null) { - button_group.add_button(new beestat.component.button() + button_group.add_button(new beestat.component.tile() .set_type('pill') .set_background_color(beestat.style.color.purple.base) .set_text_color('#fff') @@ -178,7 +178,7 @@ beestat.component.card.my_home.prototype.decorate_property_ = function(parent) { } if (thermostat.property.age !== null) { - button_group.add_button(new beestat.component.button() + button_group.add_button(new beestat.component.tile() .set_type('pill') .set_background_color(beestat.style.color.purple.base) .set_text_color('#fff') @@ -187,7 +187,7 @@ beestat.component.card.my_home.prototype.decorate_property_ = function(parent) { } if (button_group.get_buttons().length === 0) { - button_group.add_button(new beestat.component.button() + button_group.add_button(new beestat.component.tile() .set_type('pill') .set_background_color(beestat.style.color.gray.dark) .set_text_color('#fff') diff --git a/js/component/card/patreon.js b/js/component/card/patreon.js index 163d6a2..a127912 100644 --- a/js/component/card/patreon.js +++ b/js/component/card/patreon.js @@ -28,9 +28,13 @@ beestat.component.card.patreon.prototype.decorate_contents_ = function(parent) { parent.style('background', beestat.style.color.green.base); - new beestat.component.button() + new beestat.component.tile() .set_icon('heart') - .set_text('Support this project on Patreon!') + .set_size('large') + .set_text([ + 'Support this project on Patreon!', + 'Your contribution matters' + ]) .set_background_color(beestat.style.color.green.dark) .set_background_hover_color(beestat.style.color.green.light) .addEventListener('click', function() { @@ -54,7 +58,7 @@ beestat.component.card.patreon.prototype.get_title_ = function() { * @param {rocket.Elements} parent */ beestat.component.card.patreon.prototype.decorate_top_right_ = function(parent) { - new beestat.component.button() + new beestat.component.tile() .set_type('pill') .set_icon('close') .set_text_color('#fff') diff --git a/js/component/floor_plan.js b/js/component/floor_plan.js index 2b02b91..a2c3168 100644 --- a/js/component/floor_plan.js +++ b/js/component/floor_plan.js @@ -351,16 +351,16 @@ beestat.component.floor_plan.prototype.update_toolbar = function() { this.button_group_floors_.dispose(); } - this.button_group_ = new beestat.component.button_group(); + this.button_group_ = new beestat.component.tile_group(); // Add floor - this.button_group_.add_button(new beestat.component.button() + this.button_group_.add_button(new beestat.component.tile() .set_icon('layers') .set_text_color(beestat.style.color.lightblue.base) ); // Add room - this.button_group_.add_button(new beestat.component.button() + this.button_group_.add_button(new beestat.component.tile() .set_icon('card_plus_outline') .set_title('Add Room [R]') .set_text_color(beestat.style.color.gray.light) @@ -370,7 +370,7 @@ beestat.component.floor_plan.prototype.update_toolbar = function() { ); // Remove room - const remove_room_button = new beestat.component.button() + const remove_room_button = new beestat.component.tile() .set_icon('card_remove_outline') .set_title('Remove Room [Delete]') .set_background_color(beestat.style.color.bluegray.base); @@ -387,7 +387,7 @@ beestat.component.floor_plan.prototype.update_toolbar = function() { } // Add point - const add_point_button = new beestat.component.button() + const add_point_button = new beestat.component.tile() .set_icon('vector_square_plus') .set_title('Add Point [Double click]') .set_background_color(beestat.style.color.bluegray.base); @@ -404,7 +404,7 @@ beestat.component.floor_plan.prototype.update_toolbar = function() { } // Remove point - const remove_point_button = new beestat.component.button() + const remove_point_button = new beestat.component.tile() .set_background_color(beestat.style.color.bluegray.base) .set_title('Remove Point [Delete]') .set_icon('vector_square_remove'); @@ -434,7 +434,7 @@ beestat.component.floor_plan.prototype.update_toolbar = function() { snapping_title = 'Enable Snapping [S]'; } - this.button_group_.add_button(new beestat.component.button() + this.button_group_.add_button(new beestat.component.tile() .set_icon(snapping_icon) .set_title(snapping_title) .set_text_color(beestat.style.color.gray.light) @@ -444,7 +444,7 @@ beestat.component.floor_plan.prototype.update_toolbar = function() { ); // Zoom in - const zoom_in_button = new beestat.component.button() + const zoom_in_button = new beestat.component.tile() .set_icon('magnify_plus_outline') .set_title('Zoom In') .set_background_color(beestat.style.color.bluegray.base); @@ -465,7 +465,7 @@ beestat.component.floor_plan.prototype.update_toolbar = function() { } // Zoom out - const zoom_out_button = new beestat.component.button() + const zoom_out_button = new beestat.component.tile() .set_icon('magnify_minus_outline') .set_title('Zoom out') .set_background_color(beestat.style.color.bluegray.base); @@ -489,11 +489,11 @@ beestat.component.floor_plan.prototype.update_toolbar = function() { this.button_group_.render(this.toolbar_container_); // FLOORS - this.button_group_floors_ = new beestat.component.button_group(); + this.button_group_floors_ = new beestat.component.tile_group(); const floor_plan = beestat.cache.floor_plan[this.floor_plan_id_]; floor_plan.data.groups.forEach(function(group) { - const button = new beestat.component.button() + const button = new beestat.component.tile() .set_title(group.name) .set_text_hover_color(beestat.style.color.lightblue.light) .set_text_color(beestat.style.color.lightblue.base); @@ -534,20 +534,15 @@ beestat.component.floor_plan.prototype.update_infobox = function() { if (this.state_.active_room !== undefined) { parts.push(this.state_.active_room.name || 'Unnamed Room'); parts.push( - Math.abs( - Math.round( - ClipperLib.Clipper.Area(this.state_.active_room.points) / 144 - ) - ).toLocaleString() + ' sqft' + beestat.floor_plan.get_area_room(this.state_.active_room) + .toLocaleString() + ' sqft' ); } else { parts.push(this.state_.active_group.name || 'Unnamed Floor'); - let area = 0; - this.state_.active_group.rooms.forEach(function(room) { - area += Math.abs(ClipperLib.Clipper.Area(room.points)); - }); - - parts.push(Math.round(area / 144).toLocaleString() + ' sqft'); + parts.push( + beestat.floor_plan.get_area_group(this.state_.active_group) + .toLocaleString() + ' sqft' + ); } this.infobox_container_.innerText(parts.join(' • ')); }; diff --git a/js/component/header.js b/js/component/header.js index cc6d993..8096f6d 100644 --- a/js/component/header.js +++ b/js/component/header.js @@ -90,9 +90,9 @@ beestat.component.header.prototype.decorate_ = function(parent) { }); row.appendChild(column_navigation); - var button_group = new beestat.component.button_group(); + var button_group = new beestat.component.tile_group(); pages.forEach(function(page) { - var button = new beestat.component.button() + var button = new beestat.component.tile() .set_icon(page.icon) .set_text_color(beestat.style.color.bluegray.dark); diff --git a/js/component/menu.js b/js/component/menu.js index 644f0d8..5dc7701 100644 --- a/js/component/menu.js +++ b/js/component/menu.js @@ -11,7 +11,7 @@ beestat.component.menu.prototype.decorate_ = function(parent) { this.menu_items_ = []; - this.icon_ = new beestat.component.button() + this.icon_ = new beestat.component.tile() .set_type('pill') .set_icon('dots_vertical') .set_bubble_text(this.bubble_text_) @@ -67,14 +67,14 @@ beestat.component.menu.prototype.dispose = function() { beestat.component.menu.prototype.open_ = function() { var self = this; - var position = this.icon_.getBoundingClientRect(); + var position = this.icon_.get_container().getBoundingClientRect(); var container = $.createElement('div') .style({ 'background': '#fff', 'color': '#444', 'position': 'absolute', - 'top': position.bottom + 'px', + 'top': (position.bottom + window.scrollY) + 'px', 'right': (window.innerWidth - position.right) + 'px', 'transition': 'all 200ms ease', 'transform': 'scale(0)', diff --git a/js/component/modal.js b/js/component/modal.js index 44e1adf..7250664 100644 --- a/js/component/modal.js +++ b/js/component/modal.js @@ -203,7 +203,7 @@ beestat.component.modal.prototype.decorate_title_ = function(parent) { beestat.component.modal.prototype.decorate_close_ = function(parent) { var self = this; - var close = new beestat.component.button() + var close = new beestat.component.tile() .set_type('pill') .set_icon('close') .set_text_color(beestat.style.color.gray.dark) @@ -245,7 +245,7 @@ beestat.component.modal.prototype.decorate_buttons_ = function(parent) { }); parent.appendChild(container); - var button_group = new beestat.component.button_group(); + var button_group = new beestat.component.tile_group(); buttons.forEach(function(button) { button_group.add_button(button); }); diff --git a/js/component/modal/air_quality_detail_custom.js b/js/component/modal/air_quality_detail_custom.js index 18301fc..f86af9c 100644 --- a/js/component/modal/air_quality_detail_custom.js +++ b/js/component/modal/air_quality_detail_custom.js @@ -43,9 +43,9 @@ beestat.component.modal.air_quality_detail_custom.prototype.decorate_contents_ = beestat.component.modal.air_quality_detail_custom.prototype.decorate_range_type_ = function(parent) { var self = this; - var button_group = new beestat.component.button_group(); + var button_group = new beestat.component.tile_group(); - button_group.add_button(new beestat.component.button() + button_group.add_button(new beestat.component.tile() .set_background_hover_color(beestat.style.color.lightblue.base) .set_text_color('#fff') .set_background_color( @@ -59,7 +59,7 @@ beestat.component.modal.air_quality_detail_custom.prototype.decorate_range_type_ self.rerender(); })); - button_group.add_button(new beestat.component.button() + button_group.add_button(new beestat.component.tile() .set_background_hover_color(beestat.style.color.lightblue.base) .set_text_color('#fff') .set_background_color( @@ -294,7 +294,7 @@ beestat.component.modal.air_quality_detail_custom.prototype.get_title_ = functio beestat.component.modal.air_quality_detail_custom.prototype.get_buttons_ = function() { var self = this; - var cancel = new beestat.component.button() + var cancel = new beestat.component.tile() .set_background_color('#fff') .set_text_color(beestat.style.color.gray.base) .set_text_hover_color(beestat.style.color.red.base) @@ -310,12 +310,12 @@ beestat.component.modal.air_quality_detail_custom.prototype.get_buttons_ = funct this.state_.error.invalid_range_end === true || this.state_.error.out_of_sync_range === true ) { - save = new beestat.component.button() + save = new beestat.component.tile() .set_background_color(beestat.style.color.gray.base) .set_text_color('#fff') .set_text('Save'); } else { - save = new beestat.component.button() + save = new beestat.component.tile() .set_background_color(beestat.style.color.green.base) .set_background_hover_color(beestat.style.color.green.light) .set_text_color('#fff') diff --git a/js/component/modal/change_floor_plan.js b/js/component/modal/change_floor_plan.js index b668799..b88a92b 100644 --- a/js/component/modal/change_floor_plan.js +++ b/js/component/modal/change_floor_plan.js @@ -6,112 +6,55 @@ beestat.component.modal.change_floor_plan = function() { }; beestat.extend(beestat.component.modal.change_floor_plan, beestat.component.modal); +/** + * Decorate + * + * @param {rocket.Elements} parent + */ beestat.component.modal.change_floor_plan.prototype.decorate_contents_ = function(parent) { - var self = this; + const self = this; - var container = $.createElement('div') - .style({ - 'display': 'grid', - 'grid-template-columns': 'repeat(auto-fill, minmax(200px, 1fr))', - 'margin': '0 0 16px -16px' - }); - parent.appendChild(container); + const p = document.createElement('p'); + p.innerText = 'You have multiple floor plans; which one would you like to view?'; + parent.appendChild(p); + + const grid = document.createElement('div'); + grid.style.display = 'grid'; + grid.style.gridTemplateColumns = 'repeat(auto-fit, minmax(150px, 1fr))'; + grid.style.columnGap = beestat.style.size.gutter + 'px'; + grid.style.rowGap = beestat.style.size.gutter + 'px'; + parent.appendChild(grid); var sorted_floor_plans = $.values(beestat.cache.floor_plan) .sort(function(a, b) { return a.name > b.name; }); + let div; sorted_floor_plans.forEach(function(floor_plan) { - var div = $.createElement('div') - .style({ - 'padding': '16px 0 0 16px' - }); - container.appendChild(div); + div = document.createElement('div'); + grid.appendChild(div); - self.decorate_floor_plan_(div, floor_plan.floor_plan_id); + const tile = new beestat.component.tile.floor_plan(floor_plan.floor_plan_id) + .set_text_color('#fff') + .set_display('block'); + + if (floor_plan.floor_plan_id === beestat.setting('floor_plan_id')) { + tile.set_background_color(beestat.style.color.lightblue.base); + } else { + tile + .set_background_color(beestat.style.color.bluegray.base) + .set_background_hover_color(beestat.style.color.lightblue.base) + .addEventListener('click', function() { + beestat.setting('floor_plan_id', floor_plan.floor_plan_id); + self.dispose(); + }); + } + + tile.render($(div)); }); }; -/** - * Decorate the floor plan. - * - * @param {rocket.Elements} parent - * @param {number} floor_plan_id - */ -beestat.component.modal.change_floor_plan.prototype.decorate_floor_plan_ = function(parent, floor_plan_id) { - const self = this; - - var floor_plan = beestat.cache.floor_plan[floor_plan_id]; - - var container_height = 60; - var gutter = beestat.style.size.gutter / 2; - var floor_plan_height = container_height - (gutter * 2); - - var container = $.createElement('div') - .style({ - 'height': container_height, - 'border-radius': container_height, - 'padding-right': (beestat.style.size.gutter / 2), - 'transition': 'background 200ms ease', - 'user-select': 'none' - }); - - if (floor_plan_id == beestat.cache.floor_plan[beestat.setting('floor_plan_id')].floor_plan_id) { - container.style({ - 'background': '#4b6584', - 'color': '#fff' - }); - } else { - container.style({ - 'cursor': 'pointer' - }); - - container - .addEventListener('mouseover', function() { - container.style('background', beestat.style.color.gray.base); - }) - .addEventListener('mouseout', function() { - container.style('background', ''); - }) - .addEventListener('click', function() { - container.removeEventListener(); - self.dispose(); - beestat.setting('floor_plan_id', floor_plan_id); - }); - } - - parent.appendChild(container); - - var left = $.createElement('div') - .style({ - 'background': beestat.style.color.bluegray.dark, - 'font-weight': beestat.style.font_weight.light, - 'border-radius': '50%', - 'width': floor_plan_height, - 'height': floor_plan_height, - 'line-height': floor_plan_height, - 'color': '#fff', - 'font-size': '20px', - 'text-align': 'center', - 'float': 'left', - 'margin': gutter - }) - .innerHTML(''); - container.appendChild(left); - - var right = $.createElement('div') - .style({ - 'line-height': container_height, - 'font-weight': beestat.style.font_weight.bold, - 'white-space': 'nowrap', - 'overflow': 'hidden', - 'text-overflow': 'ellipsis' - }) - .innerHTML(floor_plan.name); - container.appendChild(right); -}; - /** * Get title. * @@ -120,3 +63,4 @@ beestat.component.modal.change_floor_plan.prototype.decorate_floor_plan_ = funct beestat.component.modal.change_floor_plan.prototype.get_title_ = function() { return 'Change Floor Plan'; }; + diff --git a/js/component/modal/change_system_type.js b/js/component/modal/change_system_type.js index 8566291..e32cd79 100644 --- a/js/component/modal/change_system_type.js +++ b/js/component/modal/change_system_type.js @@ -62,14 +62,14 @@ beestat.component.modal.change_system_type.prototype.decorate_contents_ = functi key ); - let button_group = new beestat.component.button_group(); + let button_group = new beestat.component.tile_group(); options[key].forEach(function(system_type) { let text = system_type.charAt(0).toUpperCase() + system_type.slice(1); if (thermostat.system_type.detected[key].equipment === system_type) { text += ' [Detected]'; } - let button = new beestat.component.button() + let button = new beestat.component.tile() .set_background_hover_color(colors[key]) .set_text_color('#fff') .set_text(text) @@ -113,7 +113,7 @@ beestat.component.modal.change_system_type.prototype.get_buttons_ = function() { var self = this; - var cancel = new beestat.component.button() + var cancel = new beestat.component.tile() .set_background_color('#fff') .set_text_color(beestat.style.color.gray.base) .set_text_hover_color(beestat.style.color.red.base) @@ -122,7 +122,7 @@ beestat.component.modal.change_system_type.prototype.get_buttons_ = function() { self.dispose(); }); - var save = new beestat.component.button() + var save = new beestat.component.tile() .set_background_color(beestat.style.color.green.base) .set_background_hover_color(beestat.style.color.green.light) .set_text_color('#fff') diff --git a/js/component/modal/change_thermostat.js b/js/component/modal/change_thermostat.js index 34d968d..02ea7f0 100644 --- a/js/component/modal/change_thermostat.js +++ b/js/component/modal/change_thermostat.js @@ -6,110 +6,59 @@ beestat.component.modal.change_thermostat = function() { }; beestat.extend(beestat.component.modal.change_thermostat, beestat.component.modal); +/** + * Decorate + * + * @param {rocket.Elements} parent + */ beestat.component.modal.change_thermostat.prototype.decorate_contents_ = function(parent) { - var self = this; + const p = document.createElement('p'); + p.innerText = 'You have multiple thermostats; which one would you like to view?'; + parent.appendChild(p); - var container = $.createElement('div') - .style({ - 'display': 'grid', - 'grid-template-columns': 'repeat(auto-fill, minmax(200px, 1fr))', - 'margin': '0 0 16px -16px' - }); - parent.appendChild(container); + const grid = document.createElement('div'); + grid.style.display = 'grid'; + grid.style.gridTemplateColumns = 'repeat(auto-fit, minmax(150px, 1fr))'; + grid.style.columnGap = beestat.style.size.gutter + 'px'; + grid.style.rowGap = beestat.style.size.gutter + 'px'; + parent.appendChild(grid); var sorted_thermostats = $.values(beestat.cache.thermostat) .sort(function(a, b) { return a.name > b.name; }); + let div; sorted_thermostats.forEach(function(thermostat) { - var div = $.createElement('div') - .style({ - 'padding': '16px 0 0 16px' - }); - container.appendChild(div); + div = document.createElement('div'); + grid.appendChild(div); - self.decorate_thermostat_(div, thermostat.thermostat_id); - }); -}; + const tile = new beestat.component.tile.thermostat(thermostat.thermostat_id) + .set_text_color('#fff') + .set_display('block'); -beestat.component.modal.change_thermostat.prototype.decorate_thermostat_ = function(parent, thermostat_id) { - var thermostat = beestat.cache.thermostat[thermostat_id]; - - var container_height = 60; - var gutter = beestat.style.size.gutter / 2; - var thermostat_height = container_height - (gutter * 2); - - var container = $.createElement('div') - .style({ - 'height': container_height, - 'border-radius': container_height, - 'padding-right': (beestat.style.size.gutter / 2), - 'transition': 'background 200ms ease', - 'user-select': 'none' - }); - - if (thermostat_id == beestat.cache.thermostat[beestat.setting('thermostat_id')].thermostat_id) { - container.style({ - 'background': '#4b6584', - 'color': '#fff' - }); - } else { - container.style({ - 'cursor': 'pointer' - }); - - container - .addEventListener('mouseover', function() { - container.style('background', beestat.style.color.gray.base); - }) - .addEventListener('mouseout', function() { - container.style('background', ''); - }) - .addEventListener('click', function() { - container.removeEventListener(); - beestat.setting('thermostat_id', thermostat_id, function() { - window.location.reload(); + if (thermostat.thermostat_id === beestat.setting('thermostat_id')) { + tile.set_background_color(beestat.style.color.lightblue.base); + } else { + tile + .set_background_color(beestat.style.color.bluegray.base) + .set_background_hover_color(beestat.style.color.lightblue.base) + .addEventListener('click', function() { + beestat.setting('thermostat_id', thermostat.thermostat_id, function() { + window.location.reload(); + }); }); - }); - } + } - parent.appendChild(container); - - var temperature = beestat.temperature({ - 'temperature': thermostat.temperature, - 'round': 0 + tile.render($(div)); }); - - var left = $.createElement('div') - .style({ - 'background': beestat.thermostat.get_color(thermostat_id), - 'font-weight': beestat.style.font_weight.light, - 'border-radius': '50%', - 'width': thermostat_height, - 'height': thermostat_height, - 'line-height': thermostat_height, - 'color': '#fff', - 'font-size': '20px', - 'text-align': 'center', - 'float': 'left', - 'margin': gutter - }) - .innerHTML(temperature); - container.appendChild(left); - - var right = $.createElement('div') - .style({ - 'line-height': container_height, - 'font-weight': beestat.style.font_weight.bold, - 'white-space': 'nowrap', - 'overflow': 'hidden', - 'text-overflow': 'ellipsis' - }) - .innerHTML(thermostat.name); - container.appendChild(right); }; +/** + * Get title. + * + * @return {string} Title. + */ beestat.component.modal.change_thermostat.prototype.get_title_ = function() { return 'Change Thermostat'; }; diff --git a/js/component/modal/create_floor_plan.js b/js/component/modal/create_floor_plan.js index fb5a82e..8b33e45 100644 --- a/js/component/modal/create_floor_plan.js +++ b/js/component/modal/create_floor_plan.js @@ -185,7 +185,7 @@ beestat.component.modal.create_floor_plan.prototype.get_title_ = function() { beestat.component.modal.create_floor_plan.prototype.get_buttons_ = function() { const self = this; - const cancel = new beestat.component.button() + const cancel = new beestat.component.tile() .set_background_color('#fff') .set_text_color(beestat.style.color.gray.base) .set_text_hover_color(beestat.style.color.red.base) @@ -194,7 +194,7 @@ beestat.component.modal.create_floor_plan.prototype.get_buttons_ = function() { self.dispose(); }); - const save = new beestat.component.button() + const save = new beestat.component.tile() .set_background_color(beestat.style.color.green.base) .set_background_hover_color(beestat.style.color.green.light) .set_text_color('#fff') diff --git a/js/component/modal/delete_floor_plan.js b/js/component/modal/delete_floor_plan.js index bb5ebcb..5a673f8 100644 --- a/js/component/modal/delete_floor_plan.js +++ b/js/component/modal/delete_floor_plan.js @@ -50,7 +50,7 @@ beestat.component.modal.delete_floor_plan.prototype.get_title_ = function() { beestat.component.modal.delete_floor_plan.prototype.get_buttons_ = function() { const self = this; - const cancel_button = new beestat.component.button() + const cancel_button = new beestat.component.tile() .set_background_color('#fff') .set_text_color(beestat.style.color.gray.base) .set_text_hover_color(beestat.style.color.red.base) @@ -59,7 +59,7 @@ beestat.component.modal.delete_floor_plan.prototype.get_buttons_ = function() { self.dispose(); }); - const delete_button = new beestat.component.button() + const delete_button = new beestat.component.tile() .set_background_color(beestat.style.color.red.base) .set_background_hover_color(beestat.style.color.red.light) .set_text_color('#fff') diff --git a/js/component/modal/download_data.js b/js/component/modal/download_data.js index 5c01c50..ecfccf2 100644 --- a/js/component/modal/download_data.js +++ b/js/component/modal/download_data.js @@ -121,19 +121,19 @@ beestat.component.modal.download_data.prototype.decorate_presets_ = function(par 'label': 'Today', 'range_begin': now.clone(), 'range_end': now.clone(), - 'button': new beestat.component.button() + 'button': new beestat.component.tile() }, { 'label': 'Yesterday', 'range_begin': now.clone().subtract(1, 'day'), 'range_end': now.clone().subtract(1, 'day'), - 'button': new beestat.component.button() + 'button': new beestat.component.tile() }, { 'label': 'This Week', 'range_begin': now.clone().startOf('week'), 'range_end': now.clone(), - 'button': new beestat.component.button() + 'button': new beestat.component.tile() }, { 'label': 'Last Week', @@ -143,13 +143,13 @@ beestat.component.modal.download_data.prototype.decorate_presets_ = function(par 'range_end': now.clone() .subtract(1, 'week') .endOf('week'), - 'button': new beestat.component.button() + 'button': new beestat.component.tile() }, { 'label': 'This Month', 'range_begin': now.clone().startOf('month'), 'range_end': now.clone(), - 'button': new beestat.component.button() + 'button': new beestat.component.tile() }, { 'label': 'Last Month', @@ -159,17 +159,17 @@ beestat.component.modal.download_data.prototype.decorate_presets_ = function(par 'range_end': now.clone() .subtract(1, 'month') .endOf('month'), - 'button': new beestat.component.button() + 'button': new beestat.component.tile() }, { 'label': 'All Time', 'range_begin': moment.max(moment(thermostat.data_begin), now.clone().subtract(1, 'year')), 'range_end': now.clone(), - 'button': new beestat.component.button() + 'button': new beestat.component.tile() } ]; - var button_group = new beestat.component.button_group(); + var button_group = new beestat.component.tile_group(); presets.forEach(function(preset) { preset.button .set_background_color(beestat.style.color.bluegray.base) @@ -242,7 +242,7 @@ beestat.component.modal.download_data.prototype.get_title_ = function() { beestat.component.modal.download_data.prototype.get_buttons_ = function() { var self = this; - var cancel = new beestat.component.button() + var cancel = new beestat.component.tile() .set_background_color('#fff') .set_text_color(beestat.style.color.gray.base) .set_text_hover_color(beestat.style.color.red.base) @@ -251,7 +251,7 @@ beestat.component.modal.download_data.prototype.get_buttons_ = function() { self.dispose(); }); - var save = new beestat.component.button() + var save = new beestat.component.tile() .set_background_color(beestat.style.color.green.base) .set_background_hover_color(beestat.style.color.green.light) .set_text_color('#fff') diff --git a/js/component/modal/enjoy_beestat.js b/js/component/modal/enjoy_beestat.js index e7c87c4..4925a65 100644 --- a/js/component/modal/enjoy_beestat.js +++ b/js/component/modal/enjoy_beestat.js @@ -55,7 +55,7 @@ beestat.component.modal.enjoy_beestat.prototype.hide_patreon_card_for_ = functio beestat.component.modal.enjoy_beestat.prototype.get_buttons_ = function() { var self = this; - var hide = new beestat.component.button() + var hide = new beestat.component.tile() .set_background_color('#fff') .set_text_color(beestat.style.color.gray.base) .set_text_hover_color(beestat.style.color.bluegray.base) @@ -66,7 +66,7 @@ beestat.component.modal.enjoy_beestat.prototype.get_buttons_ = function() { }); if (beestat.user.patreon_is_connected() === false) { - var link = new beestat.component.button() + var link = new beestat.component.tile() .set_text('Link Patreon') .set_background_color(beestat.style.color.green.base) .set_background_hover_color(beestat.style.color.green.light) @@ -83,7 +83,7 @@ beestat.component.modal.enjoy_beestat.prototype.get_buttons_ = function() { ]; } - var ok = new beestat.component.button() + var ok = new beestat.component.tile() .set_background_color(beestat.style.color.green.base) .set_background_hover_color(beestat.style.color.green.light) .set_text_color('#fff') diff --git a/js/component/modal/newsletter.js b/js/component/modal/newsletter.js index 7bad0f7..10c8fb0 100644 --- a/js/component/modal/newsletter.js +++ b/js/component/modal/newsletter.js @@ -61,7 +61,7 @@ beestat.component.modal.newsletter.prototype.get_buttons_ = function() { let buttons = []; if (this.subscribed_ === true) { - const ok = new beestat.component.button() + const ok = new beestat.component.tile() .set_background_color(beestat.style.color.green.base) .set_background_hover_color(beestat.style.color.green.light) .set_text_color('#fff') @@ -71,7 +71,7 @@ beestat.component.modal.newsletter.prototype.get_buttons_ = function() { }); buttons.push(ok); } else { - const no_thanks = new beestat.component.button() + const no_thanks = new beestat.component.tile() .set_background_color('#fff') .set_text_color(beestat.style.color.gray.base) .set_text_hover_color(beestat.style.color.red.base) @@ -81,7 +81,7 @@ beestat.component.modal.newsletter.prototype.get_buttons_ = function() { }); buttons.push(no_thanks); - const subscribe = new beestat.component.button() + const subscribe = new beestat.component.tile() .set_background_color(beestat.style.color.green.base) .set_background_hover_color(beestat.style.color.green.light) .set_text_color('#fff') diff --git a/js/component/modal/patreon_status.js b/js/component/modal/patreon_status.js index c76022c..f23028b 100644 --- a/js/component/modal/patreon_status.js +++ b/js/component/modal/patreon_status.js @@ -199,7 +199,7 @@ beestat.component.modal.patreon_status.prototype.get_title_ = function() { */ beestat.component.modal.patreon_status.prototype.get_buttons_ = function() { if (beestat.user.patreon_is_connected() === true) { - var refresh = new beestat.component.button() + var refresh = new beestat.component.tile() .set_text('Refresh Status') .set_icon('refresh') .set_background_color(beestat.style.color.green.base) diff --git a/js/component/modal/runtime_sensor_detail_custom.js b/js/component/modal/runtime_sensor_detail_custom.js index 757e4b0..ca3da0d 100644 --- a/js/component/modal/runtime_sensor_detail_custom.js +++ b/js/component/modal/runtime_sensor_detail_custom.js @@ -43,9 +43,9 @@ beestat.component.modal.runtime_sensor_detail_custom.prototype.decorate_contents beestat.component.modal.runtime_sensor_detail_custom.prototype.decorate_range_type_ = function(parent) { var self = this; - var button_group = new beestat.component.button_group(); + var button_group = new beestat.component.tile_group(); - button_group.add_button(new beestat.component.button() + button_group.add_button(new beestat.component.tile() .set_background_hover_color(beestat.style.color.lightblue.base) .set_text_color('#fff') .set_background_color( @@ -59,7 +59,7 @@ beestat.component.modal.runtime_sensor_detail_custom.prototype.decorate_range_ty self.rerender(); })); - button_group.add_button(new beestat.component.button() + button_group.add_button(new beestat.component.tile() .set_background_hover_color(beestat.style.color.lightblue.base) .set_text_color('#fff') .set_background_color( @@ -294,7 +294,7 @@ beestat.component.modal.runtime_sensor_detail_custom.prototype.get_title_ = func beestat.component.modal.runtime_sensor_detail_custom.prototype.get_buttons_ = function() { var self = this; - var cancel = new beestat.component.button() + var cancel = new beestat.component.tile() .set_background_color('#fff') .set_text_color(beestat.style.color.gray.base) .set_text_hover_color(beestat.style.color.red.base) @@ -310,12 +310,12 @@ beestat.component.modal.runtime_sensor_detail_custom.prototype.get_buttons_ = fu this.state_.error.invalid_range_end === true || this.state_.error.out_of_sync_range === true ) { - save = new beestat.component.button() + save = new beestat.component.tile() .set_background_color(beestat.style.color.gray.base) .set_text_color('#fff') .set_text('Save'); } else { - save = new beestat.component.button() + save = new beestat.component.tile() .set_background_color(beestat.style.color.green.base) .set_background_hover_color(beestat.style.color.green.light) .set_text_color('#fff') diff --git a/js/component/modal/runtime_thermostat_detail_custom.js b/js/component/modal/runtime_thermostat_detail_custom.js index 8f45457..b59f09b 100644 --- a/js/component/modal/runtime_thermostat_detail_custom.js +++ b/js/component/modal/runtime_thermostat_detail_custom.js @@ -43,9 +43,9 @@ beestat.component.modal.runtime_thermostat_detail_custom.prototype.decorate_cont beestat.component.modal.runtime_thermostat_detail_custom.prototype.decorate_range_type_ = function(parent) { var self = this; - var button_group = new beestat.component.button_group(); + var button_group = new beestat.component.tile_group(); - button_group.add_button(new beestat.component.button() + button_group.add_button(new beestat.component.tile() .set_background_hover_color(beestat.style.color.lightblue.base) .set_text_color('#fff') .set_background_color( @@ -59,7 +59,7 @@ beestat.component.modal.runtime_thermostat_detail_custom.prototype.decorate_rang self.rerender(); })); - button_group.add_button(new beestat.component.button() + button_group.add_button(new beestat.component.tile() .set_background_hover_color(beestat.style.color.lightblue.base) .set_text_color('#fff') .set_background_color( @@ -294,7 +294,7 @@ beestat.component.modal.runtime_thermostat_detail_custom.prototype.get_title_ = beestat.component.modal.runtime_thermostat_detail_custom.prototype.get_buttons_ = function() { var self = this; - var cancel = new beestat.component.button() + var cancel = new beestat.component.tile() .set_background_color('#fff') .set_text_color(beestat.style.color.gray.base) .set_text_hover_color(beestat.style.color.red.base) @@ -310,12 +310,12 @@ beestat.component.modal.runtime_thermostat_detail_custom.prototype.get_buttons_ this.state_.error.invalid_range_end === true || this.state_.error.out_of_sync_range === true ) { - save = new beestat.component.button() + save = new beestat.component.tile() .set_background_color(beestat.style.color.gray.base) .set_text_color('#fff') .set_text('Save'); } else { - save = new beestat.component.button() + save = new beestat.component.tile() .set_background_color(beestat.style.color.green.base) .set_background_hover_color(beestat.style.color.green.light) .set_text_color('#fff') diff --git a/js/component/modal/runtime_thermostat_summary_custom.js b/js/component/modal/runtime_thermostat_summary_custom.js index 28cbd29..af1d367 100644 --- a/js/component/modal/runtime_thermostat_summary_custom.js +++ b/js/component/modal/runtime_thermostat_summary_custom.js @@ -49,7 +49,7 @@ beestat.component.modal.runtime_thermostat_summary_custom.prototype.decorate_con for (let key in options) { let current_type = beestat.setting(key); - let button_group = new beestat.component.button_group(); + let button_group = new beestat.component.tile_group(); options[key].forEach(function(value) { let text = value.replace('runtime_thermostat_summary_', '') .charAt(0) @@ -62,7 +62,7 @@ beestat.component.modal.runtime_thermostat_summary_custom.prototype.decorate_con ) ? 's' : '' ); - let button = new beestat.component.button() + let button = new beestat.component.tile() .set_background_hover_color(beestat.style.color.lightblue.base) .set_text_color('#fff') .set_text(text) @@ -148,7 +148,7 @@ beestat.component.modal.runtime_thermostat_summary_custom.prototype.get_title_ = beestat.component.modal.runtime_thermostat_summary_custom.prototype.get_buttons_ = function() { var self = this; - var cancel = new beestat.component.button() + var cancel = new beestat.component.tile() .set_background_color('#fff') .set_text_color(beestat.style.color.gray.base) .set_text_hover_color(beestat.style.color.red.base) @@ -157,7 +157,7 @@ beestat.component.modal.runtime_thermostat_summary_custom.prototype.get_buttons_ self.dispose(); }); - var save = new beestat.component.button() + var save = new beestat.component.tile() .set_background_color(beestat.style.color.green.base) .set_background_hover_color(beestat.style.color.green.light) .set_text_color('#fff') diff --git a/js/component/button_group.js b/js/component/tile_group.js similarity index 71% rename from js/component/button_group.js rename to js/component/tile_group.js index 4b0105f..5a8e951 100644 --- a/js/component/button_group.js +++ b/js/component/tile_group.js @@ -1,65 +1,65 @@ -/** - * A button-shaped component with text, an icon, and a background color. - */ -beestat.component.button_group = function() { - this.buttons_ = []; - beestat.component.apply(this, arguments); -}; -beestat.extend(beestat.component.button_group, beestat.component); - -/** - * Decorate - * - * @param {rocket.Elements} parent - */ -beestat.component.button_group.prototype.decorate_ = function(parent) { - var self = this; - - // Only exists so that there can be spacing between wrapped elements. - var outer_container = $.createElement('div') - .style({ - 'margin-top': (beestat.style.size.gutter / -2) - }); - parent.appendChild(outer_container); - - this.buttons_.forEach(function(button, i) { - var container = $.createElement('div').style({ - 'display': 'inline-block', - 'margin-right': (i < self.buttons_.length) ? (beestat.style.size.gutter / 2) : 0, - 'margin-top': (beestat.style.size.gutter / 2) - }); - button.render(container); - outer_container.appendChild(container); - }); -}; - -/** - * Add a button to this group. - * - * @param {beestat.component.button} button The button to add. - */ -beestat.component.button_group.prototype.add_button = function(button) { - this.buttons_.push(button); - if (this.rendered_ === true) { - this.rerender(); - } -}; - -/** - * Get all of the buttons in this button group. - * - * @return {[beestat.component.button]} The buttons in this group. - */ -beestat.component.button_group.prototype.get_buttons = function() { - return this.buttons_; -}; - -/** - * Remove this component from the page. Disposes the buttons first. - */ -beestat.component.button_group.prototype.dispose = function() { - this.buttons_.forEach(function(button) { - button.dispose(); - }); - beestat.component.prototype.dispose.apply(this, arguments); -}; +/** + * A group of tiles. + */ +beestat.component.tile_group = function() { + this.buttons_ = []; + beestat.component.apply(this, arguments); +}; +beestat.extend(beestat.component.tile_group, beestat.component); + +/** + * Decorate + * + * @param {rocket.Elements} parent + */ +beestat.component.tile_group.prototype.decorate_ = function(parent) { + var self = this; + + // Only exists so that there can be spacing between wrapped elements. + var outer_container = $.createElement('div') + .style({ + 'margin-top': (beestat.style.size.gutter / -2) + }); + parent.appendChild(outer_container); + + this.buttons_.forEach(function(button, i) { + var container = $.createElement('div').style({ + 'display': 'inline-block', + 'margin-right': (i < self.buttons_.length) ? (beestat.style.size.gutter / 2) : 0, + 'margin-top': (beestat.style.size.gutter / 2) + }); + button.render(container); + outer_container.appendChild(container); + }); +}; + +/** + * Add a button to this group. + * + * @param {beestat.component.button} button The button to add. + */ +beestat.component.tile_group.prototype.add_button = function(button) { + this.buttons_.push(button); + if (this.rendered_ === true) { + this.rerender(); + } +}; + +/** + * Get all of the buttons in this button group. + * + * @return {[beestat.component.button]} The buttons in this group. + */ +beestat.component.tile_group.prototype.get_buttons = function() { + return this.buttons_; +}; + +/** + * Remove this component from the page. Disposes the buttons first. + */ +beestat.component.tile_group.prototype.dispose = function() { + this.buttons_.forEach(function(button) { + button.dispose(); + }); + beestat.component.prototype.dispose.apply(this, arguments); +}; diff --git a/js/js.php b/js/js.php index 2ae255c..c2b13e9 100755 --- a/js/js.php +++ b/js/js.php @@ -42,6 +42,7 @@ if($setting->get('environment') === 'dev' || $setting->get('environment') === 'd echo '' . PHP_EOL; echo '' . PHP_EOL; echo '' . PHP_EOL; + echo '' . PHP_EOL; // Layer echo '' . PHP_EOL; @@ -122,8 +123,10 @@ if($setting->get('environment') === 'dev' || $setting->get('environment') === 'd echo '' . PHP_EOL; echo '' . PHP_EOL; echo '' . PHP_EOL; - echo '' . PHP_EOL; - echo '' . PHP_EOL; + echo '' . PHP_EOL; + echo '' . PHP_EOL; + echo '' . PHP_EOL; + echo '' . PHP_EOL; echo '' . PHP_EOL; echo '' . PHP_EOL; echo '' . PHP_EOL;