* move util function to util module
* move playwright config file to tracker dir root
* update Playwright + add gitignores
* Playwright: enable reuseExistingServer (non-CI env)
* store tracker src copies to avoid re-compilation in dev env
* test pageleave on simple navigation
* fix test util fn
* rename local_test npm script
* make test util able to expect multiple requests
* test pageleaves in SPAs
* test pageleave with manual URL
* test pageleave not sent in manual when pageview not triggered
* extend util fn to refute event requests
* test pageleaves not sent in excluded hash pages
* store hashes instead of file copies to detect /tracker/src changes
* drop async
* speed up test suite
* bugfix: make sure to send pageleave with current URL
* another bugfix: avoid triggering pageleaves in SPAs unless listeningPageLeave is true
* revert behavioural change in manual extension
* test manual script extension
* Add tagged events support for revenue goals
This commit adds two special classes for tracking revenue with tagged
events. The following example sends an event with revenue data when the
tracker script has revenue and tagged-events script extensions:
```html
<button class="plausible-event-revenue-amount=10.29 plausible-event-revenue-currency=EUR"></button>
```
* Rename special revenue tracking class name
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.
* 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>