diff --git a/CHANGELOG.md b/CHANGELOG.md index b4525a8..67b67dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # CHANGELOG (v0.1.X) +## 0.1.11 🚀 () + +### Backwards incompatible changes for 0.1.10 + * None + +### Bug fixes + * None + +### Enhancements + * [[`ISSUE-19`](https://github.com/thiagoesteves/observer_web/issues/19)] Adding copy to clipboard button to copy tracing text. + ## 0.1.10 🚀 (2025-05-26) ### Backwards incompatible changes for 0.1.9 diff --git a/assets/js/app.js b/assets/js/app.js index 077e62e..2e58927 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -137,6 +137,37 @@ topbar.config({ barColors: { 0: "#29d" }, shadowColor: "rgba(0, 0, 0, .3)" }) window.addEventListener("phx:page-loading-start", _info => topbar.show(300)) window.addEventListener("phx:page-loading-stop", _info => topbar.hide()) +window.addEventListener("phx:copy_to_clipboard", event => { + if ("clipboard" in navigator) { + const text = event.detail.text; + navigator.clipboard.writeText(text); + } else { + alert("Sorry, your browser does not support clipboard copy."); + } + + const defaultMessage = document.getElementById("default-message-" + event.detail.id); + if (defaultMessage) { + defaultMessage.setAttribute("hidden", ""); + } + + const successMessage = document.getElementById("success-message-" + event.detail.id); + if (successMessage) { + successMessage.removeAttribute("hidden"); + } + + setTimeout(() => { + const successMessage = document.getElementById("success-message-" + event.detail.id); + if (successMessage) { + successMessage.setAttribute("hidden", ""); + } + + const defaultMessage = document.getElementById("default-message-" + event.detail.id); + if (defaultMessage) { + defaultMessage.removeAttribute("hidden"); + } + }, 1000); +}); + // connect if there are any LiveViews on the page liveSocket.connect() diff --git a/lib/web/components/copy_to_clipboard.ex b/lib/web/components/copy_to_clipboard.ex new file mode 100644 index 0000000..49d96db --- /dev/null +++ b/lib/web/components/copy_to_clipboard.ex @@ -0,0 +1,55 @@ +defmodule Observer.Web.Components.CopyToClipboard do + @moduledoc false + use Observer.Web, :html + use Phoenix.Component + + attr :id, :string, required: true + attr :message, :string, required: true + + def content(assigns) do + ~H""" + + """ + end +end diff --git a/lib/web/pages/tracing/page.ex b/lib/web/pages/tracing/page.ex index 4cdb9c9..9790b61 100644 --- a/lib/web/pages/tracing/page.ex +++ b/lib/web/pages/tracing/page.ex @@ -8,6 +8,7 @@ defmodule Observer.Web.Tracing.Page do use Observer.Web, :live_component alias Observer.Web.Components.Attention + alias Observer.Web.Components.CopyToClipboard alias Observer.Web.Components.Core alias Observer.Web.Components.MultiSelectList alias Observer.Web.Page @@ -162,8 +163,15 @@ defmodule Observer.Web.Tracing.Page do <:col :let={{_id, tracing_message}} label="TYPE"> {tracing_message.type} - <:col :let={{_id, tracing_message}} label="CONTENT"> - {tracing_message.content} + <:col :let={{id, tracing_message}} label="CONTENT"> +
+ {tracing_message.content} + + +
diff --git a/mix.exs b/mix.exs index 3e26715..e10a900 100644 --- a/mix.exs +++ b/mix.exs @@ -2,7 +2,7 @@ defmodule ObserverWeb.MixProject do use Mix.Project @source_url "https://github.com/thiagoesteves/observer_web" - @version "0.1.10" + @version "0.1.11" def project do [