mirror of
https://github.com/teslamate-org/teslamate.git
synced 2026-01-24 21:06:08 +08:00
mix format
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</figure>
|
||||
|
||||
<input
|
||||
id={"position_#{@car.id}"}
|
||||
type="text"
|
||||
@@ -23,10 +24,12 @@
|
||||
disabled
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="card-content">
|
||||
<div class="media is-flex mb-5">
|
||||
<div class="media-content">
|
||||
<p class="title is-5"><%= @summary.display_name %></p>
|
||||
|
||||
<%= unless is_nil(@car.model) do %>
|
||||
<p class="subtitle is-6 has-text-weight-light">
|
||||
Model <%= @car.model %>
|
||||
@@ -44,6 +47,7 @@
|
||||
</p>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="icons ml-5">
|
||||
<span
|
||||
class={"#{if @fetch_status, do: "", else: "is-hidden "}spinner has-tooltip-top has-tooltip-left-mobile"}
|
||||
@@ -51,6 +55,7 @@
|
||||
>
|
||||
<span class="is-loading"></span>
|
||||
</span>
|
||||
|
||||
<%= if @summary.is_preconditioning do %>
|
||||
<span
|
||||
class="icon has-text-grey-dark has-tooltip-top has-tooltip-left-mobile"
|
||||
@@ -59,6 +64,7 @@
|
||||
<span class="mdi mdi-air-conditioner"></span>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<%= if @summary.climate_keeper_mode == "dog" do %>
|
||||
<span
|
||||
class="icon has-text-grey-dark has-tooltip-top has-tooltip-left-mobile"
|
||||
@@ -67,6 +73,7 @@
|
||||
<span class="mdi mdi-dog-side"></span>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<%= if not is_nil(@summary.battery_level) and not is_nil(@summary.usable_battery_level) and @summary.battery_level - @summary.usable_battery_level > 2 do %>
|
||||
<span
|
||||
class="icon has-text-link has-tooltip-top has-tooltip-left-mobile"
|
||||
@@ -75,6 +82,7 @@
|
||||
<span class="mdi mdi-snowflake"></span>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<%= if @summary.state != :driving and @summary.is_user_present do %>
|
||||
<span
|
||||
class="icon has-text-grey-dark has-tooltip-top has-tooltip-left-mobile"
|
||||
@@ -83,6 +91,7 @@
|
||||
<span class="mdi mdi-account"></span>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<%= if @summary.plugged_in == true do %>
|
||||
<span
|
||||
class="icon has-text-grey-dark has-tooltip-top has-tooltip-left-mobile"
|
||||
@@ -91,6 +100,7 @@
|
||||
<span class="mdi mdi-power-plug"></span>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<%= if @summary.windows_open do %>
|
||||
<span
|
||||
class="icon has-text-grey-dark has-tooltip-top has-tooltip-left-mobile"
|
||||
@@ -99,6 +109,7 @@
|
||||
<span class="mdi mdi-window-open"></span>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<%= if @summary.doors_open do %>
|
||||
<span
|
||||
class="icon has-text-grey-dark has-tooltip-top has-tooltip-left-mobile"
|
||||
@@ -107,6 +118,7 @@
|
||||
<span class="mdi mdi-car-door"></span>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<%= if @summary.sentry_mode do %>
|
||||
<span
|
||||
class="icon has-text-grey-dark has-tooltip-top has-tooltip-left-mobile"
|
||||
@@ -115,6 +127,7 @@
|
||||
<span class="mdi mdi-shield-check"></span>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<%= if @summary.center_display_state == 7 do %>
|
||||
<span
|
||||
class="icon has-text-grey-dark has-tooltip-top has-tooltip-left-mobile"
|
||||
@@ -123,6 +136,7 @@
|
||||
<span class="mdi mdi-cctv"></span>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<%= unless is_nil(@summary.locked) do %>
|
||||
<span
|
||||
class="icon has-text-grey-dark has-tooltip-top has-tooltip-left-mobile"
|
||||
@@ -135,6 +149,7 @@
|
||||
</span>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<%= if @summary.update_available do %>
|
||||
<span
|
||||
class="icon has-text-grey-dark has-tooltip-top has-tooltip-left-mobile"
|
||||
@@ -145,6 +160,7 @@
|
||||
<span class="mdi mdi-gift-outline"></span>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<%= unless is_nil(@summary.tpms_soft_warning_fl) or is_nil(@summary.tpms_soft_warning_fr) or is_nil(@summary.tpms_soft_warning_rl) or is_nil(@summary.tpms_soft_warning_rr) do %>
|
||||
<%= if @summary.tpms_soft_warning_fl or @summary.tpms_soft_warning_fr or @summary.tpms_soft_warning_rl or @summary.tpms_soft_warning_rr do %>
|
||||
<% tires = [
|
||||
@@ -152,20 +168,25 @@
|
||||
{:fr, {@summary.tpms_soft_warning_fr, @summary.tpms_pressure_fr}},
|
||||
{:rl, {@summary.tpms_soft_warning_rl, @summary.tpms_pressure_rl}},
|
||||
{:rr, {@summary.tpms_soft_warning_rr, @summary.tpms_pressure_rr}}
|
||||
] %>
|
||||
|
||||
<% tire_warnings =
|
||||
] %> <% tire_warnings =
|
||||
Enum.filter(tires, fn {_tire, {warn, _}} -> warn end)
|
||||
|> Enum.map(fn
|
||||
{:fl, {true, val}} -> "Front left (#{format_tpms(val, @settings.unit_of_pressure)})"
|
||||
{:fr, {true, val}} -> "Front right (#{format_tpms(val, @settings.unit_of_pressure)})"
|
||||
{:rl, {true, val}} -> "Rear left (#{format_tpms(val, @settings.unit_of_pressure)})"
|
||||
{:rr, {true, val}} -> "Rear right (#{format_tpms(val, @settings.unit_of_pressure)})"
|
||||
_ -> nil
|
||||
end)
|
||||
|> Enum.filter(& &1)
|
||||
%>
|
||||
{:fl, {true, val}} ->
|
||||
"Front left (#{format_tpms(val, @settings.unit_of_pressure)})"
|
||||
|
||||
{:fr, {true, val}} ->
|
||||
"Front right (#{format_tpms(val, @settings.unit_of_pressure)})"
|
||||
|
||||
{:rl, {true, val}} ->
|
||||
"Rear left (#{format_tpms(val, @settings.unit_of_pressure)})"
|
||||
|
||||
{:rr, {true, val}} ->
|
||||
"Rear right (#{format_tpms(val, @settings.unit_of_pressure)})"
|
||||
|
||||
_ ->
|
||||
nil
|
||||
end)
|
||||
|> Enum.filter(& &1) %>
|
||||
<span
|
||||
class="icon has-text-grey-dark has-tooltip-top has-tooltip-left-mobile"
|
||||
data-tooltip={
|
||||
@@ -180,6 +201,7 @@
|
||||
</span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<%= if @summary.healthy == false do %>
|
||||
<span
|
||||
class="icon has-text-danger has-tooltip-top has-tooltip-left-mobile"
|
||||
@@ -190,17 +212,21 @@
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<table class="table is-narrow is-fullwidth">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody style="font-variant-numeric: tabular-nums;">
|
||||
<tr>
|
||||
<td class="has-text-weight-medium"><%= gettext("Status") %></td>
|
||||
|
||||
<td>
|
||||
<%= raw(
|
||||
@translate_state.(@summary.state) <>
|
||||
@@ -216,6 +242,7 @@
|
||||
) %>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<%= if @summary.state == :charging and not is_nil(@summary.time_to_full_charge) do %>
|
||||
<% current_time = Timex.now()
|
||||
|
||||
@@ -228,6 +255,7 @@
|
||||
Timex.format!(local_finish_time, "%Y-%m-%d %H:%M:%S", :strftime) %>
|
||||
<tr>
|
||||
<td class="has-text-weight-medium"><%= gettext("Remaining Time") %></td>
|
||||
|
||||
<td>
|
||||
<%= round(@summary.time_to_full_charge * 60 * 60)
|
||||
|> Convert.sec_to_str()
|
||||
@@ -235,11 +263,14 @@
|
||||
|> Enum.join(", ") %>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="has-text-weight-medium"><%= gettext("Expected Finish Time") %></td>
|
||||
|
||||
<td><%= formatted_finish_time %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
<%= unless is_nil(@summary.ideal_battery_range_km) do %>
|
||||
<tr>
|
||||
<td class="has-text-weight-medium">
|
||||
@@ -248,6 +279,7 @@
|
||||
:rated -> gettext("Range (rated)")
|
||||
end %>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<%= range =
|
||||
case @settings.preferred_range do
|
||||
@@ -263,9 +295,11 @@
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
<%= unless is_nil(@summary.est_battery_range_km) do %>
|
||||
<tr>
|
||||
<td class="has-text-weight-medium"><%= gettext("Range (est.)") %></td>
|
||||
|
||||
<td>
|
||||
<%= if @settings.unit_of_length == :mi do
|
||||
"#{Convert.km_to_miles(@summary.est_battery_range_km, 1)} mi"
|
||||
@@ -275,25 +309,30 @@
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
<%= if @summary.state == :charging do %>
|
||||
<%= unless is_nil(@summary.charge_energy_added) do %>
|
||||
<tr>
|
||||
<td class="has-text-weight-medium"><%= gettext("Charged") %></td>
|
||||
|
||||
<td><%= @summary.charge_energy_added %> kWh</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
<%= unless is_nil(@summary.charger_power) do %>
|
||||
<tr>
|
||||
<td class="has-text-weight-medium"><%= gettext("Charger Power") %></td>
|
||||
|
||||
<td><%= @summary.charger_power %> kW</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
|
||||
<%= if @summary.plugged_in do %>
|
||||
<%= unless @summary.scheduled_charging_start_time in [nil, :unknown] do %>
|
||||
<tr>
|
||||
<td class="has-text-weight-medium"><%= gettext("Scheduled Charging") %></td>
|
||||
|
||||
<td>
|
||||
<%= tag(:span,
|
||||
data: [date: @summary.scheduled_charging_start_time |> DateTime.to_iso8601()],
|
||||
@@ -303,13 +342,16 @@
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
<%= if not is_nil(@summary.charge_limit_soc) do %>
|
||||
<tr>
|
||||
<td class="has-text-weight-medium"><%= gettext("Charge Limit") %></td>
|
||||
|
||||
<td><%= @summary.charge_limit_soc %>%</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<%= unless is_nil(@summary.battery_level) do %>
|
||||
<% {soc_text, tooltip} =
|
||||
(fn ->
|
||||
@@ -345,6 +387,7 @@
|
||||
end).() %>
|
||||
<tr>
|
||||
<td class="has-text-weight-medium"><%= gettext("State of Charge") %></td>
|
||||
|
||||
<td>
|
||||
<span class="has-tooltip-top has-tooltip-right-desktop" data-tooltip={tooltip}>
|
||||
<%= soc_text %>
|
||||
@@ -352,9 +395,11 @@
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
<%= if @summary.state == :driving and not is_nil(@summary.speed) do %>
|
||||
<tr>
|
||||
<td class="has-text-weight-medium"><%= gettext("Speed") %></td>
|
||||
|
||||
<td>
|
||||
<%= if @settings.unit_of_length == :mi do
|
||||
"#{Convert.km_to_miles(@summary.speed, 0)} mph"
|
||||
@@ -364,10 +409,12 @@
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
<%= if @summary.state not in [:asleep, :offline, :suspended] or DateTime.diff(DateTime.utc_now(), @summary.since) < 30*60 do %>
|
||||
<%= unless is_nil(@summary.outside_temp) do %>
|
||||
<tr>
|
||||
<td class="has-text-weight-medium"><%= gettext("Outside Temperature") %></td>
|
||||
|
||||
<td>
|
||||
<%= if @settings.unit_of_temperature == :F do
|
||||
"#{Convert.celsius_to_fahrenheit(@summary.outside_temp, 1)} °F"
|
||||
@@ -377,9 +424,11 @@
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
<%= unless is_nil(@summary.inside_temp) do %>
|
||||
<tr>
|
||||
<td class="has-text-weight-medium"><%= gettext("Inside Temperature") %></td>
|
||||
|
||||
<td>
|
||||
<%= if @settings.unit_of_temperature == :F do
|
||||
"#{Convert.celsius_to_fahrenheit(@summary.inside_temp, 1)} °F"
|
||||
@@ -390,9 +439,11 @@
|
||||
</tr>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<%= unless is_nil(@summary.odometer) do %>
|
||||
<tr>
|
||||
<td class="has-text-weight-medium"><%= gettext("Mileage") %></td>
|
||||
|
||||
<td>
|
||||
<%= if @settings.unit_of_length == :mi do
|
||||
"#{Convert.km_to_miles(@summary.odometer, 0)} mi"
|
||||
@@ -402,9 +453,11 @@
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
<%= unless is_nil(@summary.version) do %>
|
||||
<tr>
|
||||
<td class="has-text-weight-medium"><%= gettext("Version") %></td>
|
||||
|
||||
<td>
|
||||
<%= link(@summary.version,
|
||||
to:
|
||||
@@ -417,7 +470,7 @@
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
<%= cond do
|
||||
<%= cond do
|
||||
not is_nil(@error) ->
|
||||
link(@error,
|
||||
to: "#",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<nav class="breadcrumb" aria-label="breadcrumbs">
|
||||
<ul>
|
||||
<li><.link navigate={~p"/"}><%= gettext("Home") %></.link></li>
|
||||
|
||||
<li class="is-active"><.link navigate=""><%= gettext("Charge Cost") %></.link></li>
|
||||
</ul>
|
||||
</nav>
|
||||
@@ -8,6 +9,7 @@
|
||||
<.form :let={f} for={@changeset} phx-submit="save" class="charging_process">
|
||||
<div class="field is-horizontal">
|
||||
<div class="field-label"></div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="card-image">
|
||||
@@ -24,7 +26,7 @@
|
||||
style="height: 250px; position: relative;"
|
||||
/>
|
||||
</figure>
|
||||
<%= text_input(:position, "#{@charging_process.id}",
|
||||
<%= text_input(:position, "#{@charging_process.id}",
|
||||
value:
|
||||
"#{@charging_process.position.latitude},#{@charging_process.position.longitude}",
|
||||
phx_hook: "TriggerChange",
|
||||
@@ -36,9 +38,10 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="field is-horizontal" style="margin-top: -6px;">
|
||||
<div class="field-label is-normal"></div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field is-grouped is-grouped-multiline">
|
||||
<%= unless is_nil(@charging_process.end_date) do %>
|
||||
@@ -47,7 +50,7 @@
|
||||
<span class="tag is-primary is-light">
|
||||
<span class="icon"><span class="mdi mdi-calendar-range"></span></span>
|
||||
</span>
|
||||
<%= content_tag(:span, "–",
|
||||
<%= content_tag(:span, "–",
|
||||
data: [
|
||||
start_date: DateTime.to_iso8601(@charging_process.start_date),
|
||||
end_date: DateTime.to_iso8601(@charging_process.end_date)
|
||||
@@ -59,22 +62,23 @@
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
|
||||
<div class="control">
|
||||
<div id="car-tag" class="tags has-addons">
|
||||
<span class="tag is-info is-light">
|
||||
<span class="icon"><span class="mdi mdi-car"></span></span>
|
||||
</span>
|
||||
<span class="tag"><%= @charging_process.car.name %></span>
|
||||
<span class="tag"><%= @charging_process.car.name %></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<%= unless is_nil(@charging_process.charge_energy_added) do %>
|
||||
<div class="control">
|
||||
<div id="energy-tag" class="tags has-addons">
|
||||
<span class="tag is-warning is-light">
|
||||
<span class="icon"><span class="mdi mdi-flash"></span></span>
|
||||
</span>
|
||||
|
||||
<span class="tag">
|
||||
<%= Decimal.round(
|
||||
Decimal.max(
|
||||
@@ -87,23 +91,24 @@
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
|
||||
<%= unless is_nil(@charging_process.duration_min) do %>
|
||||
<div class="control">
|
||||
<div id="duration-tag" class="tags has-addons">
|
||||
<span class="tag is-light">
|
||||
<span class="icon"><span class="mdi mdi-clock"></span></span>
|
||||
</span>
|
||||
<span class="tag"><%= @charging_process.duration_min %> min</span>
|
||||
<span class="tag"><%= @charging_process.duration_min %> min</span>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
|
||||
<div class="control">
|
||||
<div id="location-tag" class="tags has-addons">
|
||||
<span class="tag is-danger is-light">
|
||||
<span class="icon"><span class="mdi mdi-map-marker"></span></span>
|
||||
</span>
|
||||
|
||||
<span class="tag">
|
||||
<%= case @charging_process do
|
||||
%ChargingProcess{geofence: %GeoFence{name: name}} ->
|
||||
@@ -126,11 +131,12 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="field is-horizontal">
|
||||
<div class="field-label is-normal">
|
||||
<%= label(f, :cost, gettext("Cost"), class: "label") %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field has-addons">
|
||||
<p class="control">
|
||||
@@ -142,6 +148,7 @@
|
||||
]) %>
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p class="control is-expanded">
|
||||
<%= text_input(f, :cost,
|
||||
class: "input",
|
||||
@@ -152,18 +159,21 @@
|
||||
autofocus: true
|
||||
) %>
|
||||
</p>
|
||||
|
||||
<p class="help is-danger"><%= error_tag(f, :cost) %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="field is-horizontal mt-5">
|
||||
<div class="field-label"></div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field is-grouped">
|
||||
<div class="control">
|
||||
<%= link(gettext("Back"), to: @redirect_to, class: "button") %>
|
||||
</div>
|
||||
|
||||
<div class="control" style="min-width: 300px;">
|
||||
<%= submit(if(is_nil(@notification), do: gettext("Save"), else: @notification.message),
|
||||
phx_disable_with: gettext("Saving..."),
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
<nav class="breadcrumb" aria-label="breadcrumbs">
|
||||
<ul>
|
||||
<li><.link navigate={~p"/"}><%= gettext("Home") %></.link></li>
|
||||
|
||||
<li><.link navigate={~p"/geo-fences"}><%= gettext("Geo-Fences") %></.link></li>
|
||||
|
||||
<li class="is-active">
|
||||
<a href="#">
|
||||
<%= case @action do
|
||||
@@ -18,52 +20,58 @@
|
||||
<div class="field-label is-normal">
|
||||
<%= label(f, :position, gettext("Position"), class: "label") %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<div id="map_container" phx-update="ignore">
|
||||
<figure id="map" style="height: 400px; position: relative;" phx-hook="Map"></figure>
|
||||
</div>
|
||||
<%= hidden_input(f, :latitude) %>
|
||||
<%= hidden_input(f, :longitude) %>
|
||||
<%= hidden_input(f, :radius) %>
|
||||
<%= hidden_input(f, :latitude) %> <%= hidden_input(f, :longitude) %> <%= hidden_input(
|
||||
f,
|
||||
:radius
|
||||
) %>
|
||||
</div>
|
||||
|
||||
<%= if @show_errors do %>
|
||||
<p class="help is-danger">
|
||||
<%= error_tag(f, :address_id) %>
|
||||
<%= error_tag(f, :latitude) %>
|
||||
<%= error_tag(f, :longitude) %>
|
||||
<%= error_tag(f, :radius) %>
|
||||
<%= error_tag(f, :address_id) %> <%= error_tag(f, :latitude) %> <%= error_tag(
|
||||
f,
|
||||
:longitude
|
||||
) %> <%= error_tag(f, :radius) %>
|
||||
</p>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="field is-horizontal">
|
||||
<div class="field-label is-normal">
|
||||
<%= label class: "label" do
|
||||
gettext("Name")
|
||||
end %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field is-expanded">
|
||||
<div class="control">
|
||||
<%= text_input(f, :name, class: "input", placeholder: gettext("Name")) %>
|
||||
</div>
|
||||
|
||||
<%= if @show_errors do %>
|
||||
<p class="help is-danger"><%= error_tag(f, :name) %></p>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="field is-horizontal mt-4">
|
||||
<div class="field-label is-normal">
|
||||
<%= label class: "label" do
|
||||
gettext("Cost")
|
||||
end %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field has-addons">
|
||||
<p class="control">
|
||||
@@ -74,6 +82,7 @@
|
||||
]) %>
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p class="control is-expanded">
|
||||
<%= text_input(f, :cost_per_unit,
|
||||
class: "input",
|
||||
@@ -83,19 +92,21 @@
|
||||
placeholder: "0.00"
|
||||
) %>
|
||||
</p>
|
||||
|
||||
<%= if @show_errors do %>
|
||||
<p class="help is-danger"><%= error_tag(f, :cost_per_unit) %></p>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="field is-horizontal">
|
||||
<div class="field-label is-normal">
|
||||
<%= label class: "label" do
|
||||
gettext("Session fee")
|
||||
end %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
@@ -108,15 +119,17 @@
|
||||
placeholder: "0.00"
|
||||
) %>
|
||||
</div>
|
||||
|
||||
<%= if @show_errors do %>
|
||||
<p class="help is-danger"><%= error_tag(f, :session_fee) %></p>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="field is-horizontal mt-5">
|
||||
<div class="field-label"></div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field is-grouped">
|
||||
<div class="control">
|
||||
@@ -124,6 +137,7 @@
|
||||
<%= gettext("Back") %>
|
||||
</.link>
|
||||
</div>
|
||||
|
||||
<div class="control">
|
||||
<%= submit(gettext("Save"),
|
||||
phx_disable_with: gettext("Saving..."),
|
||||
@@ -150,13 +164,16 @@
|
||||
{if @show_modal, do: [phx_window_keyup: "keyup"], else: []}
|
||||
>
|
||||
</div>
|
||||
|
||||
<div class="modal-card modal-content">
|
||||
<header class="modal-card-head">
|
||||
<p class="modal-card-title"><%= gettext("Charging Costs") %></p>
|
||||
|
||||
<button class="button is-text is-rounded" aria-label="close" phx-click="close-modal">
|
||||
<span class="icon is-small"><i class="mdi mdi-close"></i></span>
|
||||
</button>
|
||||
</header>
|
||||
|
||||
<section class="modal-card-body">
|
||||
<p>
|
||||
<%= raw(
|
||||
@@ -169,10 +186,12 @@
|
||||
) %>
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<footer class="modal-card-foot">
|
||||
<button class="button" phx-click="calc-costs" phx-value-result="no">
|
||||
<%= gettext("Continue") %>
|
||||
</button>
|
||||
|
||||
<button class="button is-info" phx-click="calc-costs" phx-value-result="yes">
|
||||
<%= gettext("Add costs retroactively") %>
|
||||
</button>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<nav class="breadcrumb" aria-label="breadcrumbs">
|
||||
<ul>
|
||||
<li><.link navigate={~p"/"}><%= gettext("Home") %></.link></li>
|
||||
|
||||
<li class="is-active">
|
||||
<.link navigate={~p"/geo-fences"}><%= gettext("Geo-Fences") %></.link>
|
||||
</li>
|
||||
@@ -21,26 +22,33 @@
|
||||
<thead class="is-hidden-mobile">
|
||||
<tr>
|
||||
<th><%= gettext("Name") %></th>
|
||||
|
||||
<th><%= gettext("Position") %></th>
|
||||
|
||||
<th><%= gettext("Radius") %></th>
|
||||
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody style="font-variant-numeric: tabular-nums;">
|
||||
<%= for geofence <- @geofences do %>
|
||||
<tr>
|
||||
<td class="has-text-weight-medium is-truncated" style="min-width: 0; max-width: 180px">
|
||||
<%= geofence.name %>
|
||||
</td>
|
||||
|
||||
<td class="is-hidden-mobile has-text-weight-light" style="width: 30%">
|
||||
<%= geofence.latitude %>, <%= geofence.longitude %>
|
||||
</td>
|
||||
|
||||
<td class="is-hidden-mobile has-text-weight-light" style="width: 10%">
|
||||
<%= case @unit_of_length do
|
||||
:ft -> geofence.radius |> Convert.m_to_ft() |> round()
|
||||
:m -> geofence.radius |> round()
|
||||
end %> <%= @unit_of_length %>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<div class="field is-grouped is-pulled-right">
|
||||
<p class="control">
|
||||
@@ -51,6 +59,7 @@
|
||||
<span class="icon"><span class="mdi mdi-square-edit-outline"></span></span>
|
||||
</.link>
|
||||
</p>
|
||||
|
||||
<p class="control">
|
||||
<%= link(raw("<span class='icon'><span class='mdi mdi-trash-can'></span></span>"),
|
||||
to: "#",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<nav class="breadcrumb" aria-label="breadcrumbs">
|
||||
<ul>
|
||||
<li><.link navigate={~p"/"}><%= gettext("Home") %></.link></li>
|
||||
|
||||
<li class="is-active"><.link navigate=""><%= gettext("TeslaFi Import") %></.link></li>
|
||||
</ul>
|
||||
</nav>
|
||||
@@ -14,7 +15,7 @@
|
||||
count: length(@status.files)
|
||||
) %>
|
||||
</h2>
|
||||
<%= link(raw("<span class='icon'><span class='mdi mdi-reload'></span></span>"),
|
||||
<%= link(raw("<span class='icon'><span class='mdi mdi-reload'></span></span>"),
|
||||
to: "#",
|
||||
type: "button",
|
||||
class: "button is-text is-inverted",
|
||||
@@ -26,6 +27,7 @@
|
||||
<div class="table-container">
|
||||
<table class="table is-narrow is-hoverable is-fullwidth">
|
||||
<thead></thead>
|
||||
|
||||
<tbody>
|
||||
<%= for %{path: path, date: date, complete: complete} <- @status.files do %>
|
||||
<% {year, month} =
|
||||
@@ -37,7 +39,9 @@
|
||||
end %>
|
||||
<tr>
|
||||
<td style="font-variant-numeric: tabular-nums;"><%= "#{month}/#{year}" %></td>
|
||||
|
||||
<td><%= Path.absname(path) %></td>
|
||||
|
||||
<td class="has-text-centered" style="min-width: 30px;">
|
||||
<span class="spinner">
|
||||
<%= case {@status.state, complete} do %>
|
||||
@@ -83,7 +87,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<%= submit(gettext("Import"),
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<nav class="breadcrumb" aria-label="breadcrumbs">
|
||||
<ul>
|
||||
<li><.link navigate={~p"/"}><%= gettext("Home") %></.link></li>
|
||||
|
||||
<li class="is-active"><.link navigate={~p"/settings"}><%= gettext("Settings") %></.link></li>
|
||||
</ul>
|
||||
</nav>
|
||||
@@ -17,7 +18,7 @@
|
||||
</ul>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
|
||||
<.form
|
||||
:let={f}
|
||||
for={get_in(@car_settings, [@car, :changeset])}
|
||||
@@ -27,31 +28,37 @@
|
||||
<div class="columns is-mobile is-centered">
|
||||
<div class="column">
|
||||
<h2 class="title is-4"><%= gettext("Data Collection") %></h2>
|
||||
|
||||
<div class="field is-horizontal center-vertically">
|
||||
<div class="field-label is-normal is-paddingless">
|
||||
<%= label(f, :enabled, gettext("Enabled"), class: "label") %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<%= checkbox(f, :enabled, class: "switch is-rounded is-success") %>
|
||||
<%= label(f, :enabled, nil) %>
|
||||
<%= checkbox(f, :enabled, class: "switch is-rounded is-success") %> <%= label(
|
||||
f,
|
||||
:enabled,
|
||||
nil
|
||||
) %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="columns is-mobile is-centered">
|
||||
<div class="column">
|
||||
<h2 class="title is-4"><%= gettext("Sleep Mode") %></h2>
|
||||
|
||||
|
||||
<%= unless Ecto.Changeset.get_field(f.source, :use_streaming_api) do %>
|
||||
<div class="field is-horizontal center-vertically">
|
||||
<div class="field-label is-normal">
|
||||
<%= label(f, :suspend_min, gettext("Time to Try Sleeping"), class: "label") %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
@@ -65,16 +72,19 @@
|
||||
) %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="help is-danger"><%= error_tag(f, :suspend_min) %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field is-horizontal center-vertically">
|
||||
<div class="field-label is-normal">
|
||||
<%= label(f, :suspend_after_idle_min, gettext("Idle Time Before Trying to Sleep"),
|
||||
class: "label"
|
||||
) %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
@@ -88,16 +98,18 @@
|
||||
) %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="help is-danger"><%= error_tag(f, :suspend_after_idle_min) %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
|
||||
<div class="field is-horizontal mb-0">
|
||||
<div class="field-label is-normal is-paddingless">
|
||||
<label class="label"><%= gettext("Requirements") %></label>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field" style="min-width: 280px;">
|
||||
<div class="control">
|
||||
@@ -116,57 +128,72 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="columns is-mobile is-centered">
|
||||
<div class="column">
|
||||
<h2 class="title is-4"><%= gettext("Charge cost") %></h2>
|
||||
|
||||
<div class="field is-horizontal center-vertically">
|
||||
<div class="field-label is-normal is-paddingless">
|
||||
<%= label(f, :free_supercharging, gettext("Free Supercharging"), class: "label") %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<%= checkbox(f, :free_supercharging, class: "switch is-rounded is-success") %>
|
||||
<%= label(f, :free_supercharging, nil) %>
|
||||
<%= checkbox(f, :free_supercharging, class: "switch is-rounded is-success") %> <%= label(
|
||||
f,
|
||||
:free_supercharging,
|
||||
nil
|
||||
) %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="columns is-mobile is-centered">
|
||||
<div class="column">
|
||||
<h2 class="title is-4"><%= gettext("Streaming API") %></h2>
|
||||
|
||||
<div class="field is-horizontal center-vertically">
|
||||
<div class="field-label is-normal is-paddingless">
|
||||
<%= label(f, :use_streaming_api, gettext("Enabled"), class: "label") %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<%= checkbox(f, :use_streaming_api, class: "switch is-rounded is-success") %>
|
||||
<%= label(f, :use_streaming_api, nil) %>
|
||||
<%= checkbox(f, :use_streaming_api, class: "switch is-rounded is-success") %> <%= label(
|
||||
f,
|
||||
:use_streaming_api,
|
||||
nil
|
||||
) %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="columns is-mobile is-centered">
|
||||
<div class="column">
|
||||
<h2 class="title is-4"><%= gettext("Battery") %></h2>
|
||||
|
||||
<div class="field is-horizontal center-vertically">
|
||||
<div class="field-label is-normal is-paddingless">
|
||||
<%= label(f, :lfp_battery, gettext("LFP Battery"), class: "label") %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<%= checkbox(f, :lfp_battery, class: "switch is-rounded is-success") %>
|
||||
<%= label(f, :lfp_battery, nil) %>
|
||||
<%= checkbox(f, :lfp_battery, class: "switch is-rounded is-success") %> <%= label(
|
||||
f,
|
||||
:lfp_battery,
|
||||
nil
|
||||
) %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -184,12 +211,14 @@
|
||||
<div class="columns is-mobile is-centered">
|
||||
<div class="column">
|
||||
<h2 class="title is-4"><%= gettext("Range") %></h2>
|
||||
|
||||
<div class="field is-horizontal center-vertically">
|
||||
<div class="field-label is-normal">
|
||||
<%= label f, :preferred_range, class: "label has-tooltip-multiline", data_tooltip: gettext("The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.") do %>
|
||||
<%= gettext("Preferred Range") %><span class="icon is-small"> <span class="mdi mdi-information"></span></span>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
@@ -200,21 +229,23 @@
|
||||
]) %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="help is-danger"><%= error_tag(f, :preferred_range) %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="columns is-mobile is-centered">
|
||||
<div class="column">
|
||||
<h2 class="title is-4"><%= gettext("Language") %></h2>
|
||||
|
||||
|
||||
<div class="field is-horizontal">
|
||||
<div class="field-label is-normal">
|
||||
<%= label(f, :ui, gettext("Web App"), class: "label") %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
@@ -225,11 +256,12 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="field is-horizontal">
|
||||
<div class="field-label is-normal">
|
||||
<%= label(f, :language, gettext("Addresses"), class: "label") %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
@@ -239,20 +271,23 @@
|
||||
) %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="help is-danger"><%= @refresh_error || error_tag(f, :language) %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="columns is-mobile is-centered">
|
||||
<div class="column">
|
||||
<h2 class="title is-4"><%= gettext("Units") %></h2>
|
||||
|
||||
<div class="field is-horizontal">
|
||||
<div class="field-label is-normal">
|
||||
<%= label(f, :unit_of_length, gettext("Length"), class: "label") %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
@@ -260,14 +295,17 @@
|
||||
<%= select(f, :unit_of_length, [:km, :mi]) %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="help is-danger"><%= error_tag(f, :unit_of_length) %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field is-horizontal">
|
||||
<div class="field-label is-normal">
|
||||
<%= label(f, :unit_of_temperature, gettext("Temperature"), class: "label") %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
@@ -275,14 +313,17 @@
|
||||
<%= select(f, :unit_of_temperature, "°C": :C, "°F": :F) %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="help is-danger"><%= error_tag(f, :unit_of_temperature) %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field is-horizontal">
|
||||
<div class="field-label is-normal">
|
||||
<%= label(f, :unit_of_pressure, gettext("Tire Pressure"), class: "label") %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
@@ -290,20 +331,23 @@
|
||||
<%= select(f, :unit_of_pressure, [:bar, :psi]) %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="help is-danger"><%= error_tag(f, :unit_of_pressure) %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="columns is-mobile is-centered">
|
||||
<div class="column">
|
||||
<h2 class="title is-4"><%= gettext("URLs") %></h2>
|
||||
|
||||
<div class="field is-horizontal center-vertically">
|
||||
<div class="field-label is-normal">
|
||||
<%= label(f, :base_url, gettext("Web App"), class: "label") %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
@@ -314,15 +358,17 @@
|
||||
placeholder: "teslamate.example.com"
|
||||
) %>
|
||||
</div>
|
||||
|
||||
<p class="help is-danger"><%= error_tag(f, :base_url) %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="field is-horizontal center-vertically">
|
||||
<div class="field-label is-normal">
|
||||
<%= label(f, :grafana_url, gettext("Dashboards"), class: "label") %>
|
||||
</div>
|
||||
|
||||
<div class="field-body">
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
@@ -333,6 +379,7 @@
|
||||
placeholder: "grafana.example.com"
|
||||
) %>
|
||||
</div>
|
||||
|
||||
<p class="help is-danger"><%= error_tag(f, :grafana_url) %></p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -347,6 +394,7 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<th align="right"><%= gettext("Version") %></th>
|
||||
|
||||
<td>
|
||||
<%= Application.spec(:teslamate, :vsn) %><strong><%= if @update do
|
||||
vsn = link @update, to: "https://github.com/teslamate-org/teslamate/releases",
|
||||
@@ -356,8 +404,10 @@
|
||||
end %></strong>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th align="right"><%= gettext("GitHub") %></th>
|
||||
|
||||
<td>
|
||||
<%= link("teslamate-org/teslamate",
|
||||
to: "https://github.com/teslamate-org/teslamate",
|
||||
@@ -366,8 +416,10 @@
|
||||
) %>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th align="right"><%= gettext("Documentation") %></th>
|
||||
|
||||
<td>
|
||||
<%= link("docs.teslamate.org",
|
||||
to: "https://docs.teslamate.org",
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
Error: <%= @error %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
|
||||
<%= if @token == "" do %>
|
||||
<div class="field">
|
||||
<%= label(f, :access, gettext("Access Token"), class: "label") %>
|
||||
@@ -30,7 +30,7 @@
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="field">
|
||||
<%= label(f, :refresh, gettext("Refresh Token"), class: "label") %>
|
||||
<div class="control has-icons-left">
|
||||
@@ -53,9 +53,7 @@
|
||||
to: @provider,
|
||||
target: "_blank",
|
||||
rel: "noopener noreferrer"
|
||||
) %>
|
||||
|
||||
<%= raw(
|
||||
) %> <%= raw(
|
||||
gettext(
|
||||
"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.",
|
||||
token: @token,
|
||||
@@ -64,7 +62,7 @@
|
||||
) %>
|
||||
</p>
|
||||
<% end %>
|
||||
|
||||
|
||||
<div class="field mt-5">
|
||||
<div class="control">
|
||||
<%= submit(gettext("Sign in"),
|
||||
@@ -85,7 +83,7 @@
|
||||
) %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<%= if @token == "" do %>
|
||||
<p class="is-size-7 has-text-centered is-italic has-text-weight-light">
|
||||
<% here_link =
|
||||
@@ -93,9 +91,7 @@
|
||||
to: "https://docs.teslamate.org/docs/faq#how-to-generate-your-own-tokens",
|
||||
target: "_blank",
|
||||
rel: "noopener noreferrer"
|
||||
) %>
|
||||
|
||||
<%= raw(
|
||||
) %> <%= raw(
|
||||
gettext(
|
||||
"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.",
|
||||
here: safe_to_string(here_link)
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang={Plug.Conn.get_session(@conn, :locale)}>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
|
||||
<.live_title suffix=" · TeslaMate">
|
||||
<%= assigns[:page_title] || "Home" %>
|
||||
</.live_title>
|
||||
|
||||
<link phx-track-static rel="stylesheet" href={Routes.static_path(@conn, "/assets/app.css")} />
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
@@ -34,15 +34,14 @@
|
||||
rel="mask-icon"
|
||||
href={Routes.static_path(@conn, "/safari-pinned-tab.svg?v=5AB53N3ALo")}
|
||||
color="#363636"
|
||||
/>
|
||||
<link rel="shortcut icon" href={Routes.static_path(@conn, "/favicon.ico?v=5AB53N3ALo")} />
|
||||
/> <link rel="shortcut icon" href={Routes.static_path(@conn, "/favicon.ico?v=5AB53N3ALo")} />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="msapplication-TileColor" content="#ffffff" />
|
||||
<meta name="theme-color" content="#363636" />
|
||||
<%= csrf_meta_tag() %>
|
||||
<meta name="theme-color" content="#363636" /> <%= csrf_meta_tag() %>
|
||||
<script>
|
||||
window.LIVE_PATH = "<%= Routes.static_path(@conn, "/live") %>";
|
||||
</script>
|
||||
|
||||
<script
|
||||
defer
|
||||
phx-track-static
|
||||
@@ -51,6 +50,7 @@
|
||||
>
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body tabIndex="0">
|
||||
<nav class="navbar is-dark" role="navigation" aria-label="main navigation">
|
||||
<div class="container">
|
||||
@@ -61,7 +61,7 @@
|
||||
width: "90px"
|
||||
) %>
|
||||
</a>
|
||||
|
||||
|
||||
<a
|
||||
role="button"
|
||||
class="navbar-burger burger"
|
||||
@@ -69,12 +69,11 @@
|
||||
aria-expanded="false"
|
||||
data-target="navbar"
|
||||
>
|
||||
<span aria-hidden="true"></span>
|
||||
<span aria-hidden="true"></span>
|
||||
<span aria-hidden="true"></span> <span aria-hidden="true"></span>
|
||||
<span aria-hidden="true"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="navbar" class="navbar-menu">
|
||||
<div class="navbar-end">
|
||||
<%= if grafana_url = @conn.assigns.settings.grafana_url do %>
|
||||
@@ -82,6 +81,7 @@
|
||||
<a class="navbar-link is-arrowless">
|
||||
<span class="icon"><i class="mdi mdi-view-dashboard"></i></span> <span><%= gettext "Dashboards" %></span>
|
||||
</a>
|
||||
|
||||
<div class="navbar-dropdown">
|
||||
<%= for %{"title" => title, "uid" => uid} <- list_dashboards() do %>
|
||||
<%= link(title,
|
||||
@@ -94,12 +94,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<.link
|
||||
navigate={Routes.live_path(@conn, TeslaMateWeb.GeoFenceLive.Index)}
|
||||
class="navbar-item mr-5"
|
||||
>
|
||||
<span class="icon"><i class="mdi mdi-map-marker-radius"></i></span> <span><%= gettext("Geo-Fences") %></span>
|
||||
</.link>
|
||||
|
||||
<.link
|
||||
navigate={Routes.live_path(@conn, TeslaMateWeb.SettingsLive.Index)}
|
||||
class="navbar-item mr-5"
|
||||
@@ -110,9 +112,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<% update = TeslaMate.Updater.get_update() %>
|
||||
|
||||
<% update = TeslaMate.Updater.get_update() %>
|
||||
<main
|
||||
role="main"
|
||||
style="overflow: hidden;"
|
||||
@@ -127,13 +127,13 @@
|
||||
target: "_blank",
|
||||
rel: "noopener noreferrer"
|
||||
) %>
|
||||
|
||||
<div class="notification is-warning">
|
||||
<p class="title is-5 is-spaced">
|
||||
<span class="icon"><i class="mdi mdi-shield-alert"></i></span> <%= gettext(
|
||||
"No encryption key provided"
|
||||
) %>
|
||||
</p>
|
||||
|
||||
<p class="subtitle is-6">
|
||||
<%= raw(
|
||||
gettext(
|
||||
@@ -141,6 +141,7 @@
|
||||
)
|
||||
) %>
|
||||
</p>
|
||||
|
||||
<p class="subtitle is-6">
|
||||
<%= raw(
|
||||
gettext(
|
||||
@@ -148,6 +149,7 @@
|
||||
)
|
||||
) %>
|
||||
</p>
|
||||
|
||||
<p class="subtitle is-6">
|
||||
<%= raw(
|
||||
gettext("For more information, see the updated installation guides on %{link}",
|
||||
@@ -157,15 +159,14 @@
|
||||
</p>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
|
||||
<%= Enum.map(@flash, fn {flash_key, flash_message} -> %>
|
||||
<p class={"notification is-#{flash_key}"}><%= flash_message %></p>
|
||||
<% end) %>
|
||||
|
||||
<%= @inner_content %>
|
||||
<%= @inner_content %>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
|
||||
<footer class="footer">
|
||||
<div class="content has-text-centered">
|
||||
<%= if update do %>
|
||||
|
||||
Reference in New Issue
Block a user