Description
Walker.js is an open-source event tracker. Easy, standardized & flexible. With walker.js you can capture user events in the browser and send them to any destination - just by setting HTML attributes.
Become independent from locked-in analytics systems and set up reliable tracking the moment you design your front-end.
Request Feature ยท Report Bug ยท Say hello
walker.js alternatives and similar libraries
Based on the "Editors" category.
Alternatively, view walker.js alternatives based on common mentions on social networks and blogs.
-
quill
Quill is a modern WYSIWYG editor built for compatibility and extensibility. -
slate
A completely customizable framework for building rich text editors. (Currently in beta.) -
Quasar Framework
Quasar Framework - Build high-performance VueJS user interfaces in record time -
TOAST UI Editor
๐๐ Markdown WYSIWYG Editor. GFM Standard + Chart & UML Extensible. -
medium-editor
Medium.com WYSIWYG editor clone. Uses contenteditable API to implement a rich text solution. -
TinyMCE
The world's #1 JavaScript library for rich text editing. Available for React, Vue and Angular -
jsoneditor
A web-based tool to view, edit, format, and validate JSON -
CKEditor 5
Powerful rich text editor framework with a modular architecture, modern integrations, and features like collaborative editing. -
SimpleMDE
A simple, beautiful, and embeddable JavaScript Markdown editor. Delightful editing for beginners and experts alike. Features built-in autosaving and spell checking. -
bootstrap-wysiwyg
Tiny bootstrap-compatible WYSIWYG rich text editor. -
wysihtml5
Open source rich text editor based on HTML5 and the progressive-enhancement approach. Uses a sophisticated security concept and aims to generate fully valid HTML5 markup by preventing unmaintainable tag soups and inline styles. -
Froala Editor
The next generation Javascript WYSIWYG HTML Editor. -
Trumbowyg
A lightweight and amazing WYSIWYG JavaScript editor under 10kB -
EpicEditor
EpicEditor is an embeddable JavaScript Markdown editor with split fullscreen editing, live previewing, automatic draft saving, offline support, and more. For developers, it offers a robust API, can be easily themed, and allows you to swap out the bundled Markdown parser with anything you throw at it. -
ContentTools
A JS library for building WYSIWYG editors for HTML content. -
jquery-notebook
A modern, simple and elegant WYSIWYG rich text editor. -
Mobiledoc Kit
A toolkit for building WYSIWYG editors with Mobiledoc -
ckeditor-releases
Official distribution releases of CKEditor 4. -
Materio Free Vuetify VueJS Admin Template
Production Ready, Carefully Crafted, Extensive Vuetifty Free Admin Template ๐คฉ -
Bangle.dev
Collection of higher level rich text editing tools. It powers the local only note taking app https://bangle.io -
Everright-formEditor
A visual low code form editor based on vue, The PC depends on element-plus while the mobile depends on vant. It provides an easy way to create custom forms. The project is extensible, easy to use and configure, and provides many commonly used form components and functions -
Zepcode
โ๏ธ Zeplin extension that generates Swift snippets from colors, fonts, and layers -
#<Sawyer::Resource:0x00007fbac98da410>
Basic operations on iterables -
React Chat UI
Build your own chat UI with React components in a few minutes. Chat UI Kit from minchat.io is an open source UI toolkit for developing web chat applications. -
react-component-widget
Component for resizing and repositioning charts, parsing transferred data when working with Recharts library.
AWS Cloud-aware infrastructure-from-code toolbox [NEW]
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of walker.js or a related project?
README
walker.js
Walker.js is an open-source event tracker. Easy, standardized & flexible. With walker.js you can capture user events in the browser and send them to any destination - just by setting HTML attributes. Become independent from locked-in analytics systems and set up reliable tracking the moment you design your front-end.
Request Feature ยท Report Bug ยท Say hello
๐ค Usage
You can implement all sorts of front-end user events easily with walker.js. From product and UX events like "newsletter signup", or filter usage, etc. to e-commerce actions like product add to carts or order complete events.
Just set a few HTML attributes
<!-- Generic usage -->
<div
data-elb="ENTITY"
data-elb-ENTITY="KEY:VALUE"
data-elbaction="TRIGGER:ACTION"
/>
<!-- Example usage -->
<div
data-elb="newsletter"
data-elb-newsletter="list:analytics_hacks;position:overlay"
data-elbaction="click:signup"
/>
The result is for example something like this:
dataLayer.push({
event: 'newsletter signup', // combination of entity and action
data: {
// arbitrary set properties with the data-elb-newsletter attribute
list: 'analytics_hacks',
position: 'overlay',
},
globals: {
// all set properties with the data-elbglobals attribute
// Not shown in example usage snippet (data-elbglobals="language:en;test:darkmode")
language: 'en',
test: 'darkmode',
},
user: {
// stored user ids (manually added once)
id: 'userid',
device: 'cookieid',
},
nested: [], // all nested entities within the newsletter
id: '1647968113641-01b5e2-5', // timestamp, group & count of the event
trigger: 'click', // name of the trigger that fired
entity: 'newsletter', // entity name
action: 'signup', // entity action
timestamp: 1647968113641, // time when the event fired
timing: 13.37, // how long it took from the page load to trigger the event
group: '01b5e2', // random group id for all events on a page
count: 2, // incremental counter of the events on a page
version: {
// Helpful when working with raw data
walker: 1.4, // used walker.js version
config: 42, // a custom configuration version number
},
walker: true, // flag to filter events
});
You are completely free to define naming conventions. All you need to get started are the entity, action & trigger attributes. Learn more about the elbwalker event model and background in our blog.
- You define the entity scope by setting the
data-elb
attribute with the name of an entity to an element, e.g.data-elb="newsletter"
. - An action can be added by setting the
data-elbaction
attribute on the same level or all child elements in combination with a matching trigger, e.g.data-elbaction="click:signup"
to fire a newsletter signup event when a user clicks on the tagged element. - (Optional) To define the entities' properties, set the composited attribute
data-elb-ENTITY
with the name and value, e.g.data-elb-newsletter="list:analytics_hacks;position:overlay"
.
<body data-elbglobals="language:en;test:darkmode">
<div data-elb="newsletter" data-elb-newsletter="position:overlay">
<h1 data-elb-newsletter="list:analytics_hacks">
Awesome Analytics Hacks Newsletter
</h1>
<button data-elbaction="click:signup">Signup</button>
</div>
</body>
data-elb
, data-elbaction
and data-elbglobals
are reserved attributes whereas data-elb-
attributes may be arbitrary combinations based on the related entity name.
Actions and properties can be set anywhere inside an elb
attribute.
See more ๐งโ๐ [tagging examples](./examples) and learn how to tag your website.
๐ Getting Started
Add the walker.js to your website and start tagging. Optionally you can specify destinations.
Installation
Either use the walker.js via npm as a project dependency
npm i @elbwalker/walker.js --save
Or as a script
<script
class="elbwalker"
src="https://cdn.jsdelivr.net/npm/@elbwalker/[email protected]/dist/walker.js"
></script>
๐ฌ Triggers
By using the walker.js you don't have to deal with event listener or mutation observer initialization anymore. The walker comes with a bunch of integrated triggers that will fire your event at the right moment.
<!-- The trigger will fire the "app login" event -->
<b data-elb="app" data-elbaction="TRIGGER:login">...</b>
Trigger Definition load after loading a page when DOM is ready click when the element or a child is clicked visible after the element has been in viewport for at least 50% for one second submit on a valid form submission custom calling elbLayer.push()
For further inspiration, please refer to the industry examples in our docs.
๐ฏ Destinations
By default all events get pushed into the dataLayer
, but you can customize the destinations. Walker.js comes with optional build-in destinations.
Example of adding a GA4 destination:
import GA4 from './destinations/google-ga4'; // Load the destination
GA4.config.measurementId = 'G-XXXXXXX'; // Set all required properties
elbwalker.push('walker destination', GA4); // Add the destination
A destination has a config
object and an optional init
as well as the push
function.
As soon as an event triggers the destinations init function gets called once so that all events will get sent to the additional destination now.
See more examples, learn how to customize, or write your own in the [destinations deep dive](./src/destinations/).
๐ Contributing
Any contributions you make are greatly appreciated.
If you have a suggestion that would make walker.js better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Start developing
We highly recommend to follow the test driven development approach. Write your tests by specifying the expected input and output.
- Install NPM packages
sh npm install
- Start developing
sh npm run dev
- Start developing
sh npm run build
- Be happy
๐ฉโโ๏ธ License
Distributed under the MIT License. See LICENSE for more information.
Contact
Send us an email if you have any questions or feedback at [email protected]
Want to send the data directly to your Google BigQuery instance? Check out our hosted version at https://elbwalker.com/
(back to top)
*Note that all licence references and agreements mentioned in the walker.js README section above
are relevant to that project's source code only.