<.sidebar_content
id="sidebar-content"
lv_process={@lv_process}
@@ -157,8 +157,7 @@ defmodule LiveDebugger.LiveViews.SidebarLive do
def handle_event("select_node", params, socket) do
%{"node_id" => node_id, "search-attribute" => attr, "search-value" => val} = params
- if Application.get_env(:live_debugger, :browser_features?) &&
- LiveDebugger.Feature.enabled?(:highlighting) do
+ if LiveDebugger.Feature.enabled?(:highlighting) do
if !socket.assigns.hidden? && socket.assigns.highlight? do
send_event(socket.assigns.lv_process.pid, "highlight", %{attr: attr, val: val})
end
diff --git a/lib/mix/tasks/live_debugger.install.ex b/lib/mix/tasks/live_debugger.install.ex
index 618cb8513..1863c729e 100644
--- a/lib/mix/tasks/live_debugger.install.ex
+++ b/lib/mix/tasks/live_debugger.install.ex
@@ -35,10 +35,7 @@ if Code.ensure_loaded?(Igniter) do
Include live_debugger in the `` of your root layout.
- <%= if Application.get_env(:live_debugger, :browser_features?) do %>
-
- <% end %>
+ <%= Application.get_env(:live_debugger, :live_debugger_tags) %>
"""
@@ -55,10 +52,7 @@ if Code.ensure_loaded?(Igniter) do
"""
@script_tag """
- <%= if Application.get_env(:live_debugger, :browser_features?) do %>
-
- <% end %>
+ <%= Application.get_env(:live_debugger, :live_debugger_tags) %>
"""
use Igniter.Mix.Task
@@ -75,12 +69,6 @@ if Code.ensure_loaded?(Igniter) do
@impl Igniter.Mix.Task
def igniter(igniter) do
igniter
- |> Igniter.Project.Config.configure_new(
- "dev.exs",
- :live_debugger,
- [:browser_features?],
- true
- )
|> setup_root_layout()
|> notify_csp()
end
diff --git a/priv/static/client.js b/priv/static/client.js
index d8bbcbd0a..8e5f77d8e 100644
--- a/priv/static/client.js
+++ b/priv/static/client.js
@@ -1,4 +1,4 @@
-(()=>{function g(t){let e=`
+(()=>{function h(t){let e=`
{i.button!==0||i.ctrlKey||(i.preventDefault(),posXStart=i.clientX,posYStart=i.clientY,document.addEventListener("mousemove",o),document.addEventListener("mouseup",s),e.style.cursor="grabbing",n=!1)},o=i=>{!i.clientX||!i.clientY||(n=!0,posX=posXStart-i.clientX,posY=posYStart-i.clientY,posXStart=i.clientX,posYStart=i.clientY,e.style.top=`${e.offsetTop-posY}px`,e.style.left=`${e.offsetLeft-posX}px`)},s=()=>{document.removeEventListener("mousemove",o),document.removeEventListener("mouseup",s),e.style.cursor="grab",e.offsetTop<0&&(e.style.top=e.style.bottom),e.offsetTop+e.clientHeight>window.innerHeight&&(e.style.top=""),e.offsetLeft<0&&(e.style.left=e.style.right),e.offsetLeft+e.clientWidth>window.innerWidth&&(e.style.left="")},h=i=>{n&&(i.preventDefault(),n=!1)};window.addEventListener("resize",()=>{e.offsetLeft+e.clientWidth+Number.parseInt(e.style.right)>window.innerWidth&&(e.style.left=""),e.offsetTop+e.clientHeight+Number.parseInt(e.style.bottom)>window.innerHeight&&(e.style.top="")}),e.addEventListener("mousedown",l),e.addEventListener("click",h)}var r="live-debugger-highlight-element",C="live-debugger-highlight-pulse-element",u=t=>{if(!t)return!1;let e=window.getComputedStyle(t);return e.display!=="none"&&e.visibility!=="hidden"&&e.opacity!=="0"};function c(t,e,n){let l=t.getBoundingClientRect(),o=document.createElement("div");return o.id=n,o.dataset.attr=e.attr,o.dataset.val=e.val,o.style.position="absolute",o.style.top=`${l.top+window.scrollY}px`,o.style.left=`${l.left+window.scrollX}px`,o.style.width=`${t.offsetWidth}px`,o.style.height=`${t.offsetHeight}px`,o.style.backgroundColor="#87CCE880",o.style.zIndex="10000",o.style.pointerEvents="none",o}function m({detail:t}){let e=document.getElementById(r);if(e){e.remove();let l=t.attr===void 0||t.val===void 0,o=e.dataset.val===t.val;if(l||o)return}let n=document.querySelector(`[${t.attr}="${t.val}"]`);u(n)&&(e=c(n,t,r),document.body.appendChild(e))}function L(){let t=document.getElementById(r);if(t){let e=document.querySelector(`[${t.dataset.attr}="${t.dataset.val}"]`),n=e.getBoundingClientRect();t.style.top=`${n.top+window.scrollY}px`,t.style.left=`${n.left+window.scrollX}px`,t.style.width=`${e.offsetWidth}px`,t.style.height=`${e.offsetHeight}px`}}function v({detail:t}){let e=document.querySelector(`[${t.attr}="${t.val}"]`);if(u(e)){let n=c(e,t,C);document.body.appendChild(n);let l=n.offsetWidth,o=n.offsetHeight;n.animate([{width:`${l}px`,height:`${o}px`,transform:"translate(0, 0)",backgroundColor:"#87CCE860"},{width:`${l+20}px`,height:`${o+20}px`,transform:"translate(-10px, -10px)",backgroundColor:"#87CCE830"},{width:`${l+40}px`,height:`${o+40}px`,transform:"translate(-20px, -20px)",backgroundColor:"#87CCE800"}],{duration:500,iterations:1,delay:200}).onfinish=()=>{n.remove()}}}function a(){window.addEventListener("phx:highlight",m),window.addEventListener("resize",L),window.addEventListener("phx:pulse",v)}function y(){let t;if((t=document.querySelector("[data-phx-main]"))||(t=document.querySelector('[id^="phx-"]')))return t.id;if(t=document.querySelector("[data-phx-root-id]"))return t.getAttribute("data-phx-root-id")}function f(){return document.getElementById("live-debugger-scripts").src.replace("/assets/live_debugger/client.js","")}function p(t){let e=y(),n=e?`transport_pid/${e}`:"";return`${t}/${n}`}window.getLiveDebuggerURL=function(){let t=f();return p(t)};window.document.addEventListener("DOMContentLoaded",function(){let t=f(),e=p(t);d(e),a(),console.info(`LiveDebugger available at: ${t}`)});})();
+ `,n=document.createElement("div");return n.innerHTML=e,n.firstElementChild}function d(t){let e=h(t);document.body.appendChild(e);let n=!1,l=i=>{i.button!==0||i.ctrlKey||(i.preventDefault(),posXStart=i.clientX,posYStart=i.clientY,document.addEventListener("mousemove",o),document.addEventListener("mouseup",s),e.style.cursor="grabbing",n=!1)},o=i=>{!i.clientX||!i.clientY||(n=!0,posX=posXStart-i.clientX,posY=posYStart-i.clientY,posXStart=i.clientX,posYStart=i.clientY,e.style.top=`${e.offsetTop-posY}px`,e.style.left=`${e.offsetLeft-posX}px`)},s=()=>{document.removeEventListener("mousemove",o),document.removeEventListener("mouseup",s),e.style.cursor="grab",e.offsetTop<0&&(e.style.top=e.style.bottom),e.offsetTop+e.clientHeight>window.innerHeight&&(e.style.top=""),e.offsetLeft<0&&(e.style.left=e.style.right),e.offsetLeft+e.clientWidth>window.innerWidth&&(e.style.left="")},g=i=>{n&&(i.preventDefault(),n=!1)};window.addEventListener("resize",()=>{e.offsetLeft+e.clientWidth+Number.parseInt(e.style.right)>window.innerWidth&&(e.style.left=""),e.offsetTop+e.clientHeight+Number.parseInt(e.style.bottom)>window.innerHeight&&(e.style.top="")}),e.addEventListener("mousedown",l),e.addEventListener("click",g)}var r="live-debugger-highlight-element",p="live-debugger-highlight-pulse-element",u=t=>{if(!t)return!1;let e=window.getComputedStyle(t);return e.display!=="none"&&e.visibility!=="hidden"&&e.opacity!=="0"};function a(t,e,n){let l=t.getBoundingClientRect(),o=document.createElement("div");return o.id=n,o.dataset.attr=e.attr,o.dataset.val=e.val,o.style.position="absolute",o.style.top=`${l.top+window.scrollY}px`,o.style.left=`${l.left+window.scrollX}px`,o.style.width=`${t.offsetWidth}px`,o.style.height=`${t.offsetHeight}px`,o.style.backgroundColor="#87CCE880",o.style.zIndex="10000",o.style.pointerEvents="none",o}function m({detail:t}){let e=document.getElementById(r);if(e){e.remove();let l=t.attr===void 0||t.val===void 0,o=e.dataset.val===t.val;if(l||o)return}let n=document.querySelector(`[${t.attr}="${t.val}"]`);u(n)&&(e=a(n,t,r),document.body.appendChild(e))}function C(){let t=document.getElementById(r);if(t){let e=document.querySelector(`[${t.dataset.attr}="${t.dataset.val}"]`),n=e.getBoundingClientRect();t.style.top=`${n.top+window.scrollY}px`,t.style.left=`${n.left+window.scrollX}px`,t.style.width=`${e.offsetWidth}px`,t.style.height=`${e.offsetHeight}px`}}function v({detail:t}){let e=document.querySelector(`[${t.attr}="${t.val}"]`);if(u(e)){let n=a(e,t,p);document.body.appendChild(n);let l=n.offsetWidth,o=n.offsetHeight;n.animate([{width:`${l}px`,height:`${o}px`,transform:"translate(0, 0)",backgroundColor:"#87CCE860"},{width:`${l+20}px`,height:`${o+20}px`,transform:"translate(-10px, -10px)",backgroundColor:"#87CCE830"},{width:`${l+40}px`,height:`${o+40}px`,transform:"translate(-20px, -20px)",backgroundColor:"#87CCE800"}],{duration:500,iterations:1,delay:200}).onfinish=()=>{n.remove()}}}function c(){window.addEventListener("phx:highlight",m),window.addEventListener("resize",C),window.addEventListener("phx:pulse",v)}function b(){let t;if((t=document.querySelector("[data-phx-main]"))||(t=document.querySelector('[id^="phx-"]')))return t.id;if(t=document.querySelector("[data-phx-root-id]"))return t.getAttribute("data-phx-root-id")}function f(){let t=`
+ LiveDebugger meta tag not found!
+ If you have recently bumped LiveDebugger version, please update your layout according to the instructions in the GitHub README.
+ You can find it here: https://github.com/software-mansion/live-debugger#installation
+ `;throw new Error(t)}function y(){let t=document.querySelector('meta[name="live-debugger-config"]');if(t)return t.hasAttribute("debug-button");f()}function L(){let t=document.querySelector('meta[name="live-debugger-config"]');if(t)return t.hasAttribute("highlighting")}function w(){let t=document.querySelector('meta[name="live-debugger-config"]');if(t)return t.getAttribute("url");f()}function x(t){let e=b(),n=e?`transport_pid/${e}`:"";return`${t}/${n}`}window.document.addEventListener("DOMContentLoaded",function(){let t=w(),e=x(t);y()&&d(e),L()&&c(),console.info(`LiveDebugger available at: ${t}`)});})();
diff --git a/priv/static/client.js.map b/priv/static/client.js.map
index 66c85d098..96599e1b2 100644
--- a/priv/static/client.js.map
+++ b/priv/static/client.js.map
@@ -1,7 +1,7 @@
{
"version": 3,
"sources": ["../../assets/js/client/debug_button.js", "../../assets/js/client/highlight.js", "../../assets/js/client.js"],
- "sourcesContent": ["function createDebugButton(liveDebuggerURL) {\n const debugButtonHtml = /*html*/ `\n
\n `;\n\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = debugButtonHtml;\n\n return tempDiv.firstElementChild;\n}\n\nfunction initDebugButton(liveDebuggerURL) {\n const debugButton = createDebugButton(liveDebuggerURL);\n document.body.appendChild(debugButton);\n\n let dragging = false;\n\n const onMouseDown = (event) => {\n if (event.button !== 0 || event.ctrlKey) return;\n event.preventDefault();\n posXStart = event.clientX;\n posYStart = event.clientY;\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n debugButton.style.cursor = 'grabbing';\n dragging = false;\n };\n\n const onMouseMove = (event) => {\n if (!event.clientX || !event.clientY) return;\n dragging = true;\n posX = posXStart - event.clientX;\n posY = posYStart - event.clientY;\n posXStart = event.clientX;\n posYStart = event.clientY;\n debugButton.style.top = `${debugButton.offsetTop - posY}px`;\n debugButton.style.left = `${debugButton.offsetLeft - posX}px`;\n };\n\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n debugButton.style.cursor = 'grab';\n\n if (debugButton.offsetTop < 0) {\n debugButton.style.top = debugButton.style.bottom;\n }\n if (debugButton.offsetTop + debugButton.clientHeight > window.innerHeight) {\n debugButton.style.top = '';\n }\n if (debugButton.offsetLeft < 0) {\n debugButton.style.left = debugButton.style.right;\n }\n if (debugButton.offsetLeft + debugButton.clientWidth > window.innerWidth) {\n debugButton.style.left = '';\n }\n };\n\n const onClick = (event) => {\n if (dragging) {\n event.preventDefault();\n dragging = false;\n }\n };\n\n window.addEventListener('resize', () => {\n if (\n debugButton.offsetLeft +\n debugButton.clientWidth +\n Number.parseInt(debugButton.style.right) >\n window.innerWidth\n ) {\n debugButton.style.left = '';\n }\n if (\n debugButton.offsetTop +\n debugButton.clientHeight +\n Number.parseInt(debugButton.style.bottom) >\n window.innerHeight\n ) {\n debugButton.style.top = '';\n }\n });\n\n debugButton.addEventListener('mousedown', onMouseDown);\n debugButton.addEventListener('click', onClick);\n}\n\nexport { initDebugButton };\n", "const highlightElementID = 'live-debugger-highlight-element';\nconst highlightPulseElementID = 'live-debugger-highlight-pulse-element';\n\nconst isElementVisible = (element) => {\n if (!element) return false;\n\n const style = window.getComputedStyle(element);\n return (\n style.display !== 'none' &&\n style.visibility !== 'hidden' &&\n style.opacity !== '0'\n );\n};\n\nfunction createHighlightElement(activeElement, detail, id) {\n const rect = activeElement.getBoundingClientRect();\n const highlight = document.createElement('div');\n\n highlight.id = id;\n highlight.dataset.attr = detail.attr;\n highlight.dataset.val = detail.val;\n\n highlight.style.position = 'absolute';\n highlight.style.top = `${rect.top + window.scrollY}px`;\n highlight.style.left = `${rect.left + window.scrollX}px`;\n highlight.style.width = `${activeElement.offsetWidth}px`;\n highlight.style.height = `${activeElement.offsetHeight}px`;\n highlight.style.backgroundColor = '#87CCE880';\n highlight.style.zIndex = '10000';\n highlight.style.pointerEvents = 'none';\n\n return highlight;\n}\n\nfunction handleHighlight({ detail }) {\n let highlightElement = document.getElementById(highlightElementID);\n\n if (highlightElement) {\n highlightElement.remove();\n\n const toClear = detail.attr === undefined || detail.val === undefined;\n const sameElement = highlightElement.dataset.val === detail.val;\n\n if (toClear || sameElement) {\n return;\n }\n }\n\n const activeElement = document.querySelector(\n `[${detail.attr}=\"${detail.val}\"]`\n );\n\n if (isElementVisible(activeElement)) {\n highlightElement = createHighlightElement(\n activeElement,\n detail,\n highlightElementID\n );\n document.body.appendChild(highlightElement);\n }\n}\n\nfunction handleHighlightResize() {\n const highlight = document.getElementById(highlightElementID);\n if (highlight) {\n const activeElement = document.querySelector(\n `[${highlight.dataset.attr}=\"${highlight.dataset.val}\"]`\n );\n const rect = activeElement.getBoundingClientRect();\n\n highlight.style.top = `${rect.top + window.scrollY}px`;\n highlight.style.left = `${rect.left + window.scrollX}px`;\n highlight.style.width = `${activeElement.offsetWidth}px`;\n highlight.style.height = `${activeElement.offsetHeight}px`;\n }\n}\n\nfunction handlePulse({ detail }) {\n const activeElement = document.querySelector(\n `[${detail.attr}=\"${detail.val}\"]`\n );\n\n if (isElementVisible(activeElement)) {\n const highlightPulse = createHighlightElement(\n activeElement,\n detail,\n highlightPulseElementID\n );\n\n document.body.appendChild(highlightPulse);\n\n const w = highlightPulse.offsetWidth;\n const h = highlightPulse.offsetHeight;\n\n highlightPulse.animate(\n [\n {\n width: `${w}px`,\n height: `${h}px`,\n transform: 'translate(0, 0)',\n backgroundColor: '#87CCE860',\n },\n {\n width: `${w + 20}px`,\n height: `${h + 20}px`,\n transform: 'translate(-10px, -10px)',\n backgroundColor: '#87CCE830',\n },\n {\n width: `${w + 40}px`,\n height: `${h + 40}px`,\n transform: 'translate(-20px, -20px)',\n backgroundColor: '#87CCE800',\n },\n ],\n {\n duration: 500,\n iterations: 1,\n delay: 200,\n }\n ).onfinish = () => {\n highlightPulse.remove();\n };\n }\n}\n\nfunction initHighlight() {\n window.addEventListener('phx:highlight', handleHighlight);\n window.addEventListener('resize', handleHighlightResize);\n window.addEventListener('phx:pulse', handlePulse);\n}\n\nexport { initHighlight };\n", "// This file is being run in the client's debugged application\n// It introduces browser features that are not mandatory for LiveDebugger to run\n\nimport { initDebugButton } from './client/debug_button';\nimport { initHighlight } from './client/highlight';\n\n// Fetch LiveDebugger URL\nfunction getSessionId() {\n let el;\n if ((el = document.querySelector('[data-phx-main]'))) {\n return el.id;\n }\n if ((el = document.querySelector('[id^=\"phx-\"]'))) {\n return el.id;\n }\n if ((el = document.querySelector('[data-phx-root-id]'))) {\n return el.getAttribute('data-phx-root-id');\n }\n}\n\nfunction getLiveDebuggerBaseURL() {\n return document\n .getElementById('live-debugger-scripts')\n .src.replace('/assets/live_debugger/client.js', '');\n}\n\nfunction getSessionURL(baseURL) {\n const session_id = getSessionId();\n const session_path = session_id ? `transport_pid/${session_id}` : '';\n\n return `${baseURL}/${session_path}`;\n}\n\nwindow.getLiveDebuggerURL = function () {\n const baseURL = getLiveDebuggerBaseURL();\n const sessionURL = getSessionURL(baseURL);\n\n return sessionURL;\n};\n\nwindow.document.addEventListener('DOMContentLoaded', function () {\n const baseURL = getLiveDebuggerBaseURL();\n const sessionURL = getSessionURL(baseURL);\n\n initDebugButton(sessionURL);\n\n initHighlight();\n\n // Finalize\n console.info(`LiveDebugger available at: ${baseURL}`);\n});\n"],
- "mappings": "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",
- "names": ["createDebugButton", "liveDebuggerURL", "debugButtonHtml", "tempDiv", "initDebugButton", "debugButton", "dragging", "onMouseDown", "event", "onMouseMove", "onMouseUp", "onClick", "highlightElementID", "highlightPulseElementID", "isElementVisible", "element", "style", "createHighlightElement", "activeElement", "detail", "id", "rect", "highlight", "handleHighlight", "highlightElement", "toClear", "sameElement", "handleHighlightResize", "handlePulse", "highlightPulse", "w", "h", "initHighlight", "getSessionId", "el", "getLiveDebuggerBaseURL", "getSessionURL", "baseURL", "session_id", "session_path", "sessionURL", "initDebugButton", "initHighlight"]
+ "sourcesContent": ["function createDebugButton(liveDebuggerURL) {\n const debugButtonHtml = /*html*/ `\n
\n `;\n\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = debugButtonHtml;\n\n return tempDiv.firstElementChild;\n}\n\nfunction initDebugButton(liveDebuggerURL) {\n const debugButton = createDebugButton(liveDebuggerURL);\n document.body.appendChild(debugButton);\n\n let dragging = false;\n\n const onMouseDown = (event) => {\n if (event.button !== 0 || event.ctrlKey) return;\n event.preventDefault();\n posXStart = event.clientX;\n posYStart = event.clientY;\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n debugButton.style.cursor = 'grabbing';\n dragging = false;\n };\n\n const onMouseMove = (event) => {\n if (!event.clientX || !event.clientY) return;\n dragging = true;\n posX = posXStart - event.clientX;\n posY = posYStart - event.clientY;\n posXStart = event.clientX;\n posYStart = event.clientY;\n debugButton.style.top = `${debugButton.offsetTop - posY}px`;\n debugButton.style.left = `${debugButton.offsetLeft - posX}px`;\n };\n\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n debugButton.style.cursor = 'grab';\n\n if (debugButton.offsetTop < 0) {\n debugButton.style.top = debugButton.style.bottom;\n }\n if (debugButton.offsetTop + debugButton.clientHeight > window.innerHeight) {\n debugButton.style.top = '';\n }\n if (debugButton.offsetLeft < 0) {\n debugButton.style.left = debugButton.style.right;\n }\n if (debugButton.offsetLeft + debugButton.clientWidth > window.innerWidth) {\n debugButton.style.left = '';\n }\n };\n\n const onClick = (event) => {\n if (dragging) {\n event.preventDefault();\n dragging = false;\n }\n };\n\n window.addEventListener('resize', () => {\n if (\n debugButton.offsetLeft +\n debugButton.clientWidth +\n Number.parseInt(debugButton.style.right) >\n window.innerWidth\n ) {\n debugButton.style.left = '';\n }\n if (\n debugButton.offsetTop +\n debugButton.clientHeight +\n Number.parseInt(debugButton.style.bottom) >\n window.innerHeight\n ) {\n debugButton.style.top = '';\n }\n });\n\n debugButton.addEventListener('mousedown', onMouseDown);\n debugButton.addEventListener('click', onClick);\n}\n\nexport { initDebugButton };\n", "const highlightElementID = 'live-debugger-highlight-element';\nconst highlightPulseElementID = 'live-debugger-highlight-pulse-element';\n\nconst isElementVisible = (element) => {\n if (!element) return false;\n\n const style = window.getComputedStyle(element);\n return (\n style.display !== 'none' &&\n style.visibility !== 'hidden' &&\n style.opacity !== '0'\n );\n};\n\nfunction createHighlightElement(activeElement, detail, id) {\n const rect = activeElement.getBoundingClientRect();\n const highlight = document.createElement('div');\n\n highlight.id = id;\n highlight.dataset.attr = detail.attr;\n highlight.dataset.val = detail.val;\n\n highlight.style.position = 'absolute';\n highlight.style.top = `${rect.top + window.scrollY}px`;\n highlight.style.left = `${rect.left + window.scrollX}px`;\n highlight.style.width = `${activeElement.offsetWidth}px`;\n highlight.style.height = `${activeElement.offsetHeight}px`;\n highlight.style.backgroundColor = '#87CCE880';\n highlight.style.zIndex = '10000';\n highlight.style.pointerEvents = 'none';\n\n return highlight;\n}\n\nfunction handleHighlight({ detail }) {\n let highlightElement = document.getElementById(highlightElementID);\n\n if (highlightElement) {\n highlightElement.remove();\n\n const toClear = detail.attr === undefined || detail.val === undefined;\n const sameElement = highlightElement.dataset.val === detail.val;\n\n if (toClear || sameElement) {\n return;\n }\n }\n\n const activeElement = document.querySelector(\n `[${detail.attr}=\"${detail.val}\"]`\n );\n\n if (isElementVisible(activeElement)) {\n highlightElement = createHighlightElement(\n activeElement,\n detail,\n highlightElementID\n );\n document.body.appendChild(highlightElement);\n }\n}\n\nfunction handleHighlightResize() {\n const highlight = document.getElementById(highlightElementID);\n if (highlight) {\n const activeElement = document.querySelector(\n `[${highlight.dataset.attr}=\"${highlight.dataset.val}\"]`\n );\n const rect = activeElement.getBoundingClientRect();\n\n highlight.style.top = `${rect.top + window.scrollY}px`;\n highlight.style.left = `${rect.left + window.scrollX}px`;\n highlight.style.width = `${activeElement.offsetWidth}px`;\n highlight.style.height = `${activeElement.offsetHeight}px`;\n }\n}\n\nfunction handlePulse({ detail }) {\n const activeElement = document.querySelector(\n `[${detail.attr}=\"${detail.val}\"]`\n );\n\n if (isElementVisible(activeElement)) {\n const highlightPulse = createHighlightElement(\n activeElement,\n detail,\n highlightPulseElementID\n );\n\n document.body.appendChild(highlightPulse);\n\n const w = highlightPulse.offsetWidth;\n const h = highlightPulse.offsetHeight;\n\n highlightPulse.animate(\n [\n {\n width: `${w}px`,\n height: `${h}px`,\n transform: 'translate(0, 0)',\n backgroundColor: '#87CCE860',\n },\n {\n width: `${w + 20}px`,\n height: `${h + 20}px`,\n transform: 'translate(-10px, -10px)',\n backgroundColor: '#87CCE830',\n },\n {\n width: `${w + 40}px`,\n height: `${h + 40}px`,\n transform: 'translate(-20px, -20px)',\n backgroundColor: '#87CCE800',\n },\n ],\n {\n duration: 500,\n iterations: 1,\n delay: 200,\n }\n ).onfinish = () => {\n highlightPulse.remove();\n };\n }\n}\n\nfunction initHighlight() {\n window.addEventListener('phx:highlight', handleHighlight);\n window.addEventListener('resize', handleHighlightResize);\n window.addEventListener('phx:pulse', handlePulse);\n}\n\nexport { initHighlight };\n", "// This file is being run in the client's debugged application\n// It introduces browser features that are not mandatory for LiveDebugger to run\n\nimport { initDebugButton } from './client/debug_button';\nimport { initHighlight } from './client/highlight';\n\n// Fetch LiveDebugger URL\nfunction getSessionId() {\n let el;\n if ((el = document.querySelector('[data-phx-main]'))) {\n return el.id;\n }\n if ((el = document.querySelector('[id^=\"phx-\"]'))) {\n return el.id;\n }\n if ((el = document.querySelector('[data-phx-root-id]'))) {\n return el.getAttribute('data-phx-root-id');\n }\n}\n\nfunction handleMetaTagError() {\n const message = `\n LiveDebugger meta tag not found!\n If you have recently bumped LiveDebugger version, please update your layout according to the instructions in the GitHub README.\n You can find it here: https://github.com/software-mansion/live-debugger#installation\n `;\n\n throw new Error(message);\n}\n\nfunction debugButtonEnabled() {\n const metaTag = document.querySelector('meta[name=\"live-debugger-config\"]');\n\n if (metaTag) {\n return metaTag.hasAttribute('debug-button');\n } else {\n handleMetaTagError();\n }\n}\n\nfunction highlightingEnabled() {\n const metaTag = document.querySelector('meta[name=\"live-debugger-config\"]');\n\n if (metaTag) {\n return metaTag.hasAttribute('highlighting');\n }\n}\n\nfunction getLiveDebuggerBaseURL() {\n const metaTag = document.querySelector('meta[name=\"live-debugger-config\"]');\n\n if (metaTag) {\n return metaTag.getAttribute('url');\n } else {\n handleMetaTagError();\n }\n}\n\nfunction getSessionURL(baseURL) {\n const session_id = getSessionId();\n const session_path = session_id ? `transport_pid/${session_id}` : '';\n\n return `${baseURL}/${session_path}`;\n}\n\nwindow.document.addEventListener('DOMContentLoaded', function () {\n const baseURL = getLiveDebuggerBaseURL();\n const sessionURL = getSessionURL(baseURL);\n\n if (debugButtonEnabled()) {\n initDebugButton(sessionURL);\n }\n\n if (highlightingEnabled()) {\n initHighlight();\n }\n\n // Finalize\n console.info(`LiveDebugger available at: ${baseURL}`);\n});\n"],
+ "mappings": "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",
+ "names": ["createDebugButton", "liveDebuggerURL", "debugButtonHtml", "tempDiv", "initDebugButton", "debugButton", "dragging", "onMouseDown", "event", "onMouseMove", "onMouseUp", "onClick", "highlightElementID", "highlightPulseElementID", "isElementVisible", "element", "style", "createHighlightElement", "activeElement", "detail", "id", "rect", "highlight", "handleHighlight", "highlightElement", "toClear", "sameElement", "handleHighlightResize", "handlePulse", "highlightPulse", "w", "h", "initHighlight", "getSessionId", "el", "handleMetaTagError", "message", "debugButtonEnabled", "metaTag", "highlightingEnabled", "getLiveDebuggerBaseURL", "getSessionURL", "baseURL", "session_id", "session_path", "sessionURL", "initDebugButton", "initHighlight"]
}
diff --git a/test/mix/tasks/live_debugger.install_test.exs b/test/mix/tasks/live_debugger.install_test.exs
index d40a86b11..627691a67 100644
--- a/test/mix/tasks/live_debugger.install_test.exs
+++ b/test/mix/tasks/live_debugger.install_test.exs
@@ -25,10 +25,7 @@ defmodule Mix.Tasks.LiveDebugger.InstallTest do
phx_test_project()
|> Igniter.compose_task("live_debugger.install")
|> assert_has_patch("lib/test_web/components/layouts/root.html.heex", """
- + | <%= if Application.get_env(:live_debugger, :browser_features?) do %>
- + |
- + | <% end %>
+ + | <%= Application.get_env(:live_debugger, :live_debugger_tags) %>
""")
end
@@ -47,10 +44,7 @@ defmodule Mix.Tasks.LiveDebugger.InstallTest do
Include live_debugger in the `` of your root layout.
- <%= if Application.get_env(:live_debugger, :browser_features?) do %>
-
- <% end %>
+ <%= Application.get_env(:live_debugger, :live_debugger_tags) %>
""")
end