UNPKG

ember-metrics

Version:

Send data to multiple analytics integrations without re-implementing new API

57 lines (46 loc) 1.44 kB
import { assert } from '@ember/debug'; import removeFromDOM from '../-private/utils/remove-from-dom'; import BaseAdapter from './base'; export default class Piwik extends BaseAdapter { toStringExtension() { return 'Piwik'; } install() { const { piwikUrl, siteId } = this.config; assert( `[ember-metrics] You must pass a \`piwikUrl\` and a \`siteId\` to the ${this.toString()} adapter`, piwikUrl && siteId ); this._injectScript(piwikUrl, siteId); } // prettier-ignore _injectScript(piwikUrl, siteId) { window._paq = window._paq || []; (function() { window._paq.push(['setTrackerUrl', `${piwikUrl}/piwik.php`]); window._paq.push(['setSiteId', siteId]); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.async=true; g.defer=true; g.src=`${piwikUrl}/piwik.js`; s.parentNode.insertBefore(g,s); })(); } identify(options = {}) { window._paq.push(['setUserId', options.userId]); } trackEvent(options = {}) { window._paq.push([ 'trackEvent', options.category, options.action, options.name, options.value, ]); } trackPage(options = {}) { window._paq.push(['setCustomUrl', options.page]); window._paq.push(['trackPageView', options.title]); } uninstall() { removeFromDOM('script[src*="piwik"]'); delete window._paq; } }