mirror of
https://github.com/plausible/analytics.git
synced 2024-12-25 02:24:55 +03:00
c81cb16933
* Allow running browserless.io locally * Compile tailwind classes based on extra/ too * Add browserless runtime configuration * Ignore verification events on ingestion * Improve extracting HTML text in tests * Update dependencies - Floki will be used on production to parse site contents - Req will be used to handle redundant stuff like retrying etc. * Add shuttle SVG to generic components Later on we'll use it to indicate verification errors * Connect live socket & allow skipping awaiting the first pageview * Connect live socket in general settings * Implement verification checks & diagnostics * Stub remote services with Req for testing * Change snippet screen copy * Update tracker script, so that: 1. headless browsers aren't ignored if `window.__plausible` is defined 2. callback optionally supplies the event response HTTP status This will be later used to check whether the server acknowledged the verification event. * Implement LiveView verification UI * Embed the verification UIs into settings and onboarding * Implement browserless puppeteer verification script It: - tries to visit the site - defines window.__plausible, so the tracker doesn't ignore test events - sends a verification event and instruments the callback - awaits the callback to fire and returns the result * Improve diagnostics for CSP Only report CSP error if the snippet is already found * Put verification behind a feature flag/env setting * Contact Us hint only for Enterprise Edition * For headless code, use JS context instead of EEx interpolation * Update diagnostics test with WordPress scenarios * Shorten exception/throw interception * Rename test * Tidy up * Bust URL always on headless check * Update moduledoc * Detect official Plausible WordPress Plugin and act accordingly on diagnostics interoperation * Stop using 'rating' in favour of 'interpretation' * Only report CSP error if no proxy is likely * Update CHANGELOG * Allow event-* attributes on snippet elements * Improve naive GTM detection, not to confuse it with GA4 * Update lib/plausible/verification.ex Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com> * Update test/plausible/site/verification/checks_test.exs Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com> * s/perform_wrapped/perform_safe * Update lib/plausible/verification/checks/installation.ex Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com> * Remove garbage --------- Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>
67 lines
1.3 KiB
Elixir
67 lines
1.3 KiB
Elixir
defmodule Plausible.Test.Support.HTML do
|
|
Code.ensure_compiled!(Floki)
|
|
|
|
@moduledoc """
|
|
Floki wrappers to help make assertions about HTML/DOM structures
|
|
"""
|
|
|
|
def element_exists?(html, selector) do
|
|
html
|
|
|> find(selector)
|
|
|> Enum.empty?()
|
|
|> Kernel.not()
|
|
end
|
|
|
|
def find(html, value) do
|
|
html
|
|
|> Floki.parse_document!()
|
|
|> Floki.find(value)
|
|
end
|
|
|
|
def submit_button(html, form) do
|
|
find(html, "#{form} button[type=\"submit\"]")
|
|
end
|
|
|
|
def form_exists?(html, action_path) do
|
|
element_exists?(html, "form[action=\"" <> action_path <> "\"]")
|
|
end
|
|
|
|
def text_of_element(html, element) do
|
|
html
|
|
|> find(element)
|
|
|> Floki.text()
|
|
|> String.trim()
|
|
|> String.replace(~r/\s+/, " ")
|
|
end
|
|
|
|
def text(element) do
|
|
element
|
|
|> Floki.text()
|
|
|> String.trim()
|
|
|> String.replace(~r/\s+/, " ")
|
|
end
|
|
|
|
def class_of_element(html, element) do
|
|
html
|
|
|> find(element)
|
|
|> text_of_attr("class")
|
|
end
|
|
|
|
def text_of_attr(html, element, attr) do
|
|
html
|
|
|> find(element)
|
|
|> text_of_attr(attr)
|
|
end
|
|
|
|
def text_of_attr(element, attr) do
|
|
element
|
|
|> Floki.attribute(attr)
|
|
|> Floki.text()
|
|
|> String.trim()
|
|
end
|
|
|
|
def name_of(element) do
|
|
List.first(Floki.attribute(element, "name"))
|
|
end
|
|
end
|