npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

simpledomtracking

v0.2.0

Published

> tracking via DOM made simple (hopefully? 👀)

Downloads

15

Readme

GitHub package.json version npm bundle size npms score

simpledomtracking

tracking via DOM made simple (hopefully? 👀)

quick examples

first generate a tracker:

const simpleTracker = trackingFactory(
  {
    keyInCode: 'keyInDOM',
    otherKeyInCode: 'otherKeyInDOM',
  },
  keys => keys.keyInCode
)

then use it, examples of how to add tracking to your DOM:

// JSX
const Component = () => (
  <div
    id="wow"
    class="noway"
    {...simpleTracker.create(keys => ({
      [keys.keyForTracking]: 'you clicked wow!!',
    }))}
  />
)
// vanilla js (with custom setAttributes or simpledomtracking/setAttributes to "attach all attributes in one call")
const wow = document.querySelector('#wow')
setAttributes(
  wow,
  simpleTracker.create(keys => ({
    [keys.keyForTracking]: 'you clicked wow!!',
  }))
)

finally start tracking!:

// yourTracking might be google analytics f.e. (const yourTracking = data => window.dataLayer.push(data))
document.addEventListener('click', ({ target }) => {
  if (simpleTracker.isTracking(target)) yourTracking(simpleTracker.getTrackingData(target))
})

just looking for some more code? check out...


so, what does this tracking do?

  1. it takes key-value entries bundled in an object from you
    • keys = tracking keys, those will be used later on when sending the data to any server
    • values = tracking keys which appear on the DOM-Element
  2. it gives you some functions based on your previously defined tracking-configuration of 1.
  3. you push those tracking keys on elements (which allows you to add dynamic keys etc)
  4. the user clicks and you pull the data from the DOM-Elements into your request, done

The main purpose of this library is to add a quick and easy possiblity to spread tracking thru a whole project and leave you the possiblities of how to deal with the data itself (you can have tracking which relies on the DOM-keys, but also you might have your own tracking which relies on the keys inside the code ¯\_(ツ)_/¯).

more documentation (linked from the /docs directory)

functionality

other

ups and downs

this thing can be very useful if you're controlling the delegation well (in theory and practically), it's even pretty useful in projects with element-binded event handling (since tracking is much different compared to normal user interactivity it's also nice to keep it out of the casual logic imho), but as everything also this has its negative points: it can become pretty complex with all the bubbling and other existing listeners etc, therefore it's always a good idea to read around a bit, besides the MDN-articles there's are plenty of blogs about this topic like this one from jasonformat for example, and also check if your project is qualified for delegating (many preventDefaults might kill this approach f.e.)

hacky hacks

  • it is possible to quickly reduce logic at spots by using the CSS-line pointer-events: none on specific children (not recommending, just mentioning! as alternative: use Element.closest(..))