Adds a new script extension that allows tracking interactions with specific HTML elements on a website. For example - to track link clicks on one specific `<a>` element, you can tag it like this:
```html
<a href=... class="plausible-event-name=<your_event_name>">
```
And you can also tag the link with custom property names and values:
```html
<a href=... class="plausible-event-name=<your_event_name> plausible-event-<your_custom_prop>=<your_value>">
```
Tagging a link as above will send a custom event with the given name and props, if a `click` or `auxclick` browser event happens, and targets the link element.
The tracking behavior is somewhat different based on the HTML element type:
- `<a>`
- triggers on `click` and `auxclick` events
- intercepts navigation based on the same rules as `outbound-links` and `file-downloads`
- `<form>`
- triggers on `submit` event
- always intercepts navigation (calls `form.submit()` after preventing default and sending the Plausible event)
- other (`<img>`, `<button>`, `<span>`, `<div>`, `<h2>`, etc ...)
- triggers on `click` and `auxclick` events
- does not prevent default to intercept possible navigation. Simply calls Plausible with the event name and props read from the element class list.
* remove tracker files from git index
* generate tracker files on npm test
* generate tracker files for elixir tests/dev/CI
* update tracker/package-lock.json
* exclude npm run deploy from mix test + some docs
* moved custom event code to the bottom + fix indentation
* add handlebars helper fn + extract getLinkEl fn
* extract isOutboundLink function
* extract shouldFollowLink function
* remove middle and click variables
* use only one click handler for outbounds and downloads
* extract sendLinkClickEvent function
* add error handling when script compilation fails
* use callback instead of fixed timeout
* do not prevent default if externally prevented + test
* add more tests
* generate tracker files in priv/tracker/js
* update changelog
* requested changes after review
* regenerate tracker files
* use return instead of else if
* move middleMouseButton outside the function
* Add basic test harness for browserstack/playwright
* Refactor the tests
* added the first test for outbound links
* tests for outbound-links and file-downloads
* added more browser versions to test on
* Lint tracker test files
* Update harness.js with BrowserStack example
* Fix Playwright request mocks
* Add test harness to CI
* Remove Safari on Windows from browsers list
Co-authored-by: Robert <robertjoonas16@gmail.com>
Co-authored-by: Vinicius Brasil <vini@hey.com>
* Add option to specify a URL in the manual extension
* Fix error when option parameter isn't provided
The uglify-js dependency had to be updated to support the optional chaining operator
* Remove the possibility to pass a function for the custom URL
This added weight unnecessarily, as the users can simply call the function themselves before triggering the event.
* Change optional chaining to ternary for improved browser support
* Revert package-lock.json to version 3.9.4 of uglify-js
It was previously updated to support optional chaining; reverting it as a reminder that this is the current browser support level that is accepted by Plausible.
IPv6 literals in url hostnames follow RFC 2732 so are enclosed in
brackets.
Browsers normalise so matching zeros is not required.
Allow `::` unspecified address as well as `::1` loopback address.
Non-capturing groups not required when using `/.../.test()` method.
* Adds data-exclude support and plausible_ignore support
* Splits exclusion into separate script option
* localStorage parsing upgrades
* Additional script type additions
I'm unsure about the formatting decision in tracker.ex - lmk.
* Adds new compiled files
This will certainly have conflicts with my other PRs related to the tracking scripts right now, I'll make one extra PR after both are done to ensure they're consolidated into the compiled scripts.
* Moves localStorage blocker out of special script
* Changelog
* Second thoughts on localStorage exclusion
* Updates `*` to not match `/` or whitespace
* Fix formatting
* Removes zero-length asterisks
* Adds support for double glob, zero-length replacements
* Update to reduce size+allow localStorage exclude
Co-authored-by: Uku Taht <Uku.taht@gmail.com>
* Collect browser and OS version
* Display browser version
* Show operating system versions
* Device categorization
* Treat headless chrome like a bot
* Ignore events from automated browsers
* Only take major and minor of the version
* Add tests
* Add CHANGELOG entry
* Add changelog entry for bots
* Store empty value as browser when unknown
* Ability to add event metadata
* Close Dropdown on outside click
* Show (none) value in metadata breakdown
* Allow filtering for metadata key/val pairs
* Use correct clickhouse_ecto
* Better naming for meta filter
* Add tests
* Add changelog entry
* Remove change made for testing