Repository URL to install this package:
|
Version:
1.2.1-rc.0 ▾
|
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
var constants = require('../constants.js');
var _DEFAULT_SERVICES;
/**
* @constant DEFAULT_SERVICES
* @private
*/
var DEFAULT_SERVICES = (_DEFAULT_SERVICES = {}, _rollupPluginBabelHelpers.defineProperty(_DEFAULT_SERVICES, constants.SERVICES.AMPLITUDE, true), _rollupPluginBabelHelpers.defineProperty(_DEFAULT_SERVICES, constants.SERVICES.DOODLE_DATA_LAYER, false), _rollupPluginBabelHelpers.defineProperty(_DEFAULT_SERVICES, constants.SERVICES.GA, true), _DEFAULT_SERVICES);
/**
* Helper function to parse data tracking attributes into a trackingIntent
*
* @param {HTMLElement} el - An HTML element to inspect
* @return {Object}
*/
var getTrackingIntentFromDOM = function getTrackingIntentFromDOM(el) {
var _el$dataset = el.dataset,
trackingOptions = _el$dataset.trackingOptions,
track = _el$dataset.track,
identify = _el$dataset.identify,
page = _el$dataset.page;
var trackingIntent = _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, trackingOptions && {
options: JSON.parse(trackingOptions)
}), track && {
track: JSON.parse(track)
}), page && {
page: JSON.parse(page)
}), identify && {
identify: JSON.parse(identify)
});
return trackingIntent;
};
/**
* Helper function that returns an object that knows about the link behavior
* and return them mapped to a trackingElBehavior object
*
* @param {HTMLElement} el - An HTML element to inspect
* @return {{href: string, isSameTabLink: boolean}} - A representation of the element's click behavior
*/
var getTrackingElBehavior = function getTrackingElBehavior(el) {
var href = el.getAttribute('href');
var target = el.getAttribute('target');
var trackingElBehavior = {
href: href,
isSameTabLink: Boolean(href ? target !== '_blank' : true)
};
return trackingElBehavior;
};
/**
* Function to enhance a trackingIntent with defaults (e.g. destination services) and link behavior information
*
* It may be called either with a trackingIntent or with a trackingEl which carries tracking data attributes
* In case both are passed trackingIntent is preferred
*
* Returns an empty object for absent input otherwise a trackingDefinition
*
* @param {Object} payload - A storage from where to extract the tracking definition
* @param {TrackingIntent} [payload.trackingIntent] - The tracking intent passed to the API client
* @param {HTMLElement} [payload.trackingEl] - An HTML element with tracking data attributes
* @param {TrackingApiOptions} [options] - The API client's options
* @return {?TrackingDefinition} - The tracking definition needed by handlers to dispatch calls
*/
var getTrackingDefinition = function getTrackingDefinition() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$trackingIntent = _ref.trackingIntent,
trackingIntent = _ref$trackingIntent === void 0 ? {} : _ref$trackingIntent,
_ref$trackingEl = _ref.trackingEl,
trackingEl = _ref$trackingEl === void 0 ? null : _ref$trackingEl;
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var hasTrackingData = Object.keys(trackingIntent).length > 0;
var _options$services = options.services,
defaultServices = _options$services === void 0 ? DEFAULT_SERVICES : _options$services,
_options$env = options.env;
_options$env = _options$env === void 0 ? {} : _options$env;
var doodleEnv = _options$env.doodleEnv,
nodeEnv = _options$env.nodeEnv,
svcDataLayerApi = _options$env.svcDataLayerApi;
if (hasTrackingData) {
var _trackingIntent$optio = trackingIntent.options,
intentTrackingOptions = _trackingIntent$optio === void 0 ? {} : _trackingIntent$optio,
intentTrackingData = _rollupPluginBabelHelpers.objectWithoutProperties(trackingIntent, ["options"]);
var services = _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, defaultServices), intentTrackingOptions.services);
var trackingDefinition = {
trackingData: intentTrackingData,
trackingOptions: _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({
services: services,
env: _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, doodleEnv && {
doodleEnv: doodleEnv
}), nodeEnv && {
nodeEnv: nodeEnv
}), svcDataLayerApi && {
svcDataLayerApi: svcDataLayerApi
})
}, intentTrackingOptions), trackingEl && getTrackingElBehavior(trackingEl))
};
return trackingDefinition;
}
if (trackingEl) {
var trackingIntentFromDataset = getTrackingIntentFromDOM(trackingEl);
var _trackingIntentFromDa = trackingIntentFromDataset.options,
_intentTrackingOptions = _trackingIntentFromDa === void 0 ? {} : _trackingIntentFromDa,
_intentTrackingData = _rollupPluginBabelHelpers.objectWithoutProperties(trackingIntentFromDataset, ["options"]);
var _services = _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, defaultServices), _intentTrackingOptions.services); // eslint-disable-next-line no-unused-vars
var _ = _intentTrackingOptions.services,
intentOptionsWithoutServices = _rollupPluginBabelHelpers.objectWithoutProperties(_intentTrackingOptions, ["services"]);
var _trackingDefinition = {
trackingData: _intentTrackingData,
trackingOptions: _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({
services: _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, _intentTrackingOptions.services), _services)
}, intentOptionsWithoutServices), getTrackingElBehavior(trackingEl))
};
return _trackingDefinition;
}
return null;
};
exports.getTrackingDefinition = getTrackingDefinition;
exports.getTrackingElBehavior = getTrackingElBehavior;
exports.getTrackingIntentFromDOM = getTrackingIntentFromDOM;
//# sourceMappingURL=getTrackingDefinition.js.map