UNPKG

@financial-times/o-ads

Version:

This package contains the core functionality used by the FT in providing ads across all of its sites. This includes ft.com, howtospendit.com, ftadviser.com and other specialist titles.

148 lines (115 loc) 3.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _config = _interopRequireDefault(require("./config.js")); var _index = _interopRequireDefault(require("./utils/index.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var parameters = {}; function Targeting() {} //eslint-disable-line no-empty-function Targeting.prototype.get = function () { var methods = { socialReferrer: this.getSocialReferrer, timestamp: this.timestamp, responsive: this.responsive }; _index.default.extend(parameters, this.socialFlow(), this.getVersion()); for (var item in methods) { /* istanbul ignore else */ if (methods.hasOwnProperty(item)) { _index.default.extend(parameters, methods[item]()); } } return parameters; }; Targeting.prototype.add = function (obj) { /* istanbul ignore else */ if (_index.default.isPlainObject(obj)) { _index.default.extend(parameters, obj); } }; Targeting.prototype.remove = function (key) { /* istanbul ignore else */ if (parameters[key]) { delete parameters[key]; } }; Targeting.prototype.clear = function () { parameters = {}; }; Targeting.prototype.getVersion = function () { if ((0, _config.default)('passOAdsVersion')) { return { OADS_VERSION: _index.default.getVersion() }; } }; /** * If there is a query parameter called socialflow=xxx, we need to add it * as a tag */ Targeting.prototype.socialFlow = function () { var sf = _index.default.getQueryParamByName('socialflow'); if (sf) { return { socialflow: sf }; } }; Targeting.prototype.getSocialReferrer = function () { var codedValue; var referrer = _index.default.getReferrer(); // TODO: add on.ft.com var lookup = { 't.co': 'twi', 'facebook.com': 'fac', 'linkedin.com': 'lin', 'drudgereport.com': 'dru', 'dianomi.com': 'dia', google: 'goo' }; Object.keys(lookup).forEach(url => { var refererRegex = new RegExp("^http(|s)://(www.)*(".concat(url, ")")); /* istanbul ignore else */ if (refererRegex.test(referrer)) { codedValue = lookup[url]; } }); return codedValue && { socref: codedValue } || {}; }; Targeting.prototype.searchTerm = function () { var qs = _index.default.hash(_index.default.getQueryString(), /&|;/, '='); var keywords = qs.q || qs.s || qs.query || qs.queryText || qs.searchField || undefined; /* istanbul ignore else */ if (keywords && keywords !== '') { keywords = unescape(keywords).toLowerCase().replace(/[';^+]/g, ' ').replace(/\s+/g, ' ').trim(); } return { kw: keywords }; }; Targeting.prototype.timestamp = function () { return { ts: _index.default.getTimestamp() }; }; Targeting.prototype.responsive = function () { return (0, _config.default)('responsive') ? { res: _index.default.responsive.getCurrent() } : {}; }; Targeting.prototype.debug = function () { var log = _index.default.log; var parameters = this.get(); /* istanbul ignore else */ if (Object.keys(parameters).length !== 0) { log.start('Targeting'); log.attributeTable(this.get()); log.end(); } }; var _default = new Targeting(); exports.default = _default; module.exports = exports.default;