{
  "version": 3,
  "sources": [ "tp.widget.bootstrap.js" ],
  "names": [ "r", "e", "n", "t", "o", "i", "f", "c", "require", "u", "a", "Error", "code", "p", "exports", "call", "length", "1", "module", "Object", "defineProperty", "value", "EMPTY_WIDGET_ID", "LAZY_LOADED_WIDGETS", "2", "hasCreatedJsonLd", "createJsonLdElement", "jsonLdData", "jsonElement", "document", "createElement", "setAttribute", "innerHTML", "JSON", "stringify", "head", "appendChild", "createComment", "ignoreIE8", "xhr", "dataset", "isPRCarousel", "templateId", "schemaType", "location", "_ref", "businessunitId", "locale", "url", "encodeURIComponent", "window", "href", "join", "xhrGet", "success", "data", "error", "console", "getLocalBusinessSnippet", "sku", "name", "_ref2", "reviewnumber", "price", "priceCurrency", "availability", "language", "split", "origin", "pathname", "offer", "@type", "offers", "review", "aggregateRating", "getProductSnippet", "./xhr.js", "3", "_createClass", "Constructor", "protoProps", "staticProps", "defineProperties", "prototype", "target", "props", "descriptor", "enumerable", "configurable", "writable", "key", "_snippets2", "_interopRequireDefault", "_widget2", "obj", "__esModule", "default", "WidgetManagement", "this", "readyState", "findAndApplyWidgets", "addEventListener", "bind", "element", "forceReload", "firstChild", "tagName", "createWidget", "_this", "stats", "findAndApplyCalls", "elements", "widgetElements", "forEach", "removeWidget", "widgetArgs", "container", "widget", "initialize", "applied", "applyFromDomCalls", "widgets", "push", "removeChild", "filter", "isLazyLoaded", "isSameNodeAs", "destroy", "closePopup", "get", "slice", "getElementsByClassName", "version", "instance", "TypeError", "_classCallCheck", "./snippets", "./widget", "4", "_extends", "assign", "arguments", "source", "hasOwnProperty", "widgetsThatCanAllowRobots", "getAttributeValue", "attribute", "toLowerCase", "test", "IFrame", "iframeData", "styles", "defaultIframeOptions", "position", "zindex", "margin", "top", "bottom", "left", "right", "height", "width", "display", "show", "src", "baseUrl", "queryString", "borderStyle", "overflow", "loading", "allow", "onLoad", "_iframe", "options", "iframe", "style", "zIndex", "backgroundColor", "allowTransparency", "title", "makeIframeElement", "getIframeOptionsFromData", "message", "contentWindow", "postMessage", "allowance", "rect", "getBoundingClientRect", "rectSize", "offsetWidth", "offsetHeight", "innerHeight", "documentElement", "clientHeight", "innerWidth", "clientWidth", "widgetId", "sendMessage", "command", "keys", "property", "isScrollBlocking", "defaultOverflowProperties", "OVERFLOW_PROPERTIES", "reduce", "dict", "body", "getPropertyValue", "_iteratorNormalCompletion", "_didIteratorError", "_iteratorError", "undefined", "_step", "_iterator", "Symbol", "iterator", "next", "done", "removeProperty", "setProperty", "err", "return", "isScrollBlockingPopup", "isVisible", "disablePageScroll", "restorePageScroll", "focus", "allowRobots", "indexOf", "styleHeight", "styleWidth", "mkPair", "_this2", "mkPairs", "map", "searchKeys", "searchPairs", "k", "hashPairs", "widgetBaseUrl", "_shouldAllowRobots", "dimensions", "5", "_tracking2", "_iframe2", "_constants", "Widget", "usedIds", "currId", "Math", "random", "offset", "isContainerInViewport", "_widgetIFrameOrigin", "createIFrame", "attachMessageListener", "lazyLoadTimeout", "setTimeout", "parsedData", "parse", "id", "widgetIframeMessageHandler", "ex", "handleCommand", "fallback", "events", "targets", "attachToBody", "targetIFrame", "iframes", "action", "setStyle", "hide", "loaded", "main", "ping", "pongSent", "resize-height", "getIframeOrMain", "resizeHeight", "impression", "tracking", "scrollTo", "scrollToTrustBox", "_this3", "createIFrameCalls", "setWidgetId", "iframeLoadEvents", "iframeName", "isInViewport", "isSameNode", "clearTimeout", "visible", "popup", "templateIds", "elem", "querySelector", "scrollIntoView", "behavior", "_id", "constructor", "generateId", "session", "anonymousId", "testId", "sessionExpiry", "requiredArgs", "businessUnitId", "arg", "payload", "group", "./../constants", "./iframe", "./tracking", "6", "Tracking", "sendImpressionData", "attachListener", "shouldDetachListener", "commandName", "URL", "referrer", "userAgent", "navigator", "userLanguage", "platform", "hasSentImpression", "getTrackingData", "hasSentViewTracking", "func", "wait", "timeout", "_arguments", "checkViewPortVisibility", "removeEventListener", "scrollEventListener", "eventOptions", "resizeEventListener", "args", "passive", "capture", "hasBeenVisible", "sendVisibilityData", "isTrustBoxVisible", "../constants", "7", "req", "responseText", "params", "request", "XMLHttpRequest", "open", "setRequestHeader", "onreadystatechange", "status", "send", "8", "_typeof", "currentVersion", "Trustpilot", "loadFromElement", "Modules", "applyWidgetFromDomElement", "log", "initializeOnPageLoad", "elementArray", "trustbox", "closePopups", "postError", "./lib/widget-management.js" ],
  "mappings": "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",
  "file": "tp.widget.bootstrap.min.js",
  "sourcesContent": [ "(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar EMPTY_WIDGET_ID = '000000000000000000000000';\nvar LAZY_LOADED_WIDGETS = ['54d39695764ea907c0f34825', '577258fb31f02306e4e3aaf9'];\n\nexports.EMPTY_WIDGET_ID = EMPTY_WIDGET_ID;\nexports.LAZY_LOADED_WIDGETS = LAZY_LOADED_WIDGETS;\n\n},{}],2:[function(require,module,exports){\n'use strict';\n\nvar hasCreatedJsonLd = false;\nfunction createJsonLdElement(jsonLdData) {\n  /* eslint-disable no-empty */\n  try {\n    if (hasCreatedJsonLd) {\n      return;\n    }\n\n    var jsonElement = document.createElement('script');\n    jsonElement.setAttribute('type', 'application/ld+json');\n    jsonElement.innerHTML = JSON.stringify(jsonLdData);\n    document.head.appendChild(document.createComment('Added by Trustpilot'));\n    document.head.appendChild(jsonElement);\n    document.head.appendChild(document.createComment('/Added by Trustpilot'));\n    hasCreatedJsonLd = true;\n  } catch (ignoreIE8) {}\n  /* eslint-enable no-empty */\n}\n\nvar xhr = require('./xhr.js');\n\nfunction getLocalBusinessSnippet(_ref) {\n  var businessunitId = _ref.businessunitId,\n      location = _ref.location,\n      locale = _ref.locale,\n      templateId = _ref.templateId;\n\n  var params = ['url=' + encodeURIComponent(window.location.href), 'templateId=' + templateId, 'locale=' + locale].join('&');\n  var locationPath = '/data/jsonld/business-unit/' + businessunitId + '/location/' + location;\n  var url = '#{WidgetRoot}' + locationPath + '?' + params;\n\n  xhr.xhrGet({\n    url: url,\n    success: function success(data) {\n      data.url = document.location.href;\n      data['@id'] = document.location.href;\n      createJsonLdElement(data, null);\n    },\n    error: function error(data) {\n      // eslint-disable-next-line\n      console.error(data);\n    }\n  });\n}\n\nfunction getProductSnippet(_ref2) {\n  var businessunitId = _ref2.businessunitId,\n      locale = _ref2.locale,\n      templateId = _ref2.templateId,\n      name = _ref2.name,\n      sku = _ref2.sku,\n      reviewnumber = _ref2.reviewnumber,\n      price = _ref2.price,\n      priceCurrency = _ref2.priceCurrency,\n      availability = _ref2.availability;\n\n  var language = locale && locale.split('-')[0];\n\n  var includeImported = templateId === '5763bccae0a06d08e809ecbb'; // multisource seo\n  var regularPath = '/data/jsonld/business-unit/' + businessunitId + '/product';\n  var importedPath = '/data/jsonld/business-unit/' + businessunitId + '/product-imported';\n  var path = includeImported ? importedPath : regularPath;\n\n  var url = '#{WidgetRoot}' + path + '?sku=' + encodeURIComponent(sku) + '&numberOfReviews=' + (reviewnumber || 10) + (name ? '&productName=' + encodeURIComponent(name) : '') + '&language=' + language + '&templateId=' + templateId + '&url=' + encodeURIComponent(window.location.origin + window.location.pathname);\n\n  var offer = price && priceCurrency && availability ? {\n    '@type': 'Offer',\n    priceCurrency: priceCurrency,\n    price: price,\n    availability: availability\n  } : null;\n\n  xhr.xhrGet({\n    url: url,\n    success: function success(data) {\n      if (offer) {\n        data.offers = offer;\n      }\n      // Structured Data rules: Either ‘offers’, ‘review’ or ‘aggregateRating’ should be specified\n      if (data.offers || data.review || data.aggregateRating) {\n        createJsonLdElement(data, offer);\n      }\n    },\n    error: function error(data) {\n      // eslint-disable-next-line\n      console.error(data);\n    }\n  });\n}\n\nvar snippet = function snippet(dataset) {\n  if (hasCreatedJsonLd) {\n    // in case there's a second widget with snippet markup\n    return false;\n  }\n\n  var isPRCarousel = dataset.templateId === '60f537b5b0f1639de1fe048c'; // PR Carousel\n\n  if (dataset.schemaType && dataset.location) {\n    // LocalBusiness JSON-LD\n    getLocalBusinessSnippet(dataset);\n    return true;\n  } else if (dataset.sku) {\n    if (dataset.name || isPRCarousel && dataset.schemaType === 'Product') {\n      // product JSON-LD\n      getProductSnippet(dataset);\n      return true;\n    }\n  }\n  return false;\n};\n\nmodule.exports = snippet;\n\n},{\"./xhr.js\":7}],3:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _snippets = require('./snippets');\n\nvar _snippets2 = _interopRequireDefault(_snippets);\n\nvar _widget = require('./widget');\n\nvar _widget2 = _interopRequireDefault(_widget);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar WidgetManagement = function () {\n  function WidgetManagement(window, document, version) {\n    _classCallCheck(this, WidgetManagement);\n\n    this.window = window;\n    this.document = document;\n    this.widgets = [];\n    this.stats = {\n      applied: 0,\n      findAndApplyCalls: 0,\n      applyFromDomCalls: 0,\n      elements: 0\n    };\n    this.version = version;\n  }\n\n  /**\n   * Check the state of loading, and then initialize the widgets on the page.\n   */\n\n\n  _createClass(WidgetManagement, [{\n    key: 'initializeOnPageLoad',\n    value: function initializeOnPageLoad() {\n      if (this.document.readyState !== 'loading') {\n        this.findAndApplyWidgets();\n      } else {\n        this.document.addEventListener('DOMContentLoaded', this.findAndApplyWidgets.bind(this));\n      }\n    }\n\n    /**\n     * Create a widget at a given DOM element.\n     *\n     * This method will construct a widget on a DOM element. If it has already\n     * been loaded, it will only be created if the forceReload flag is true.\n     *\n     * @param {HTMLElement} element - The DOM element on which to create a widget\n     * @param {Boolean} forceReload - Flag whether to force a reload of an\n     * already existing widget\n     */\n\n  }, {\n    key: 'applyWidgetFromDomElement',\n    value: function applyWidgetFromDomElement(element, forceReload) {\n      var alreadyLoaded = element.firstChild && element.firstChild.tagName === 'IFRAME';\n\n      if (alreadyLoaded && !forceReload) {\n        return;\n      }\n\n      this.createWidget(element);\n    }\n\n    /**\n     * Find all widget container elements and initalize widgets in each.\n     *\n     * This method is called by some of our clients when using SPAs. We should\n     * treat this as a documented public method and ensure it works consistently\n     * and properly.\n     */\n\n  }, {\n    key: 'findAndApplyWidgets',\n    value: function findAndApplyWidgets() {\n      var _this = this;\n\n      this.stats.findAndApplyCalls += 1;\n      var elements = this.widgetElements;\n\n      if (!elements || elements.length === 0) {\n        return;\n      }\n      this.stats.elements = elements.length;\n      elements.forEach(function (element) {\n        return _this.createWidget(element);\n      });\n    }\n\n    /**\n     * Create a widget at the given element.\n     *\n     * Takes a DOM element and constructs a widget at that element.\n     */\n\n  }, {\n    key: 'createWidget',\n    value: function createWidget(element) {\n      this.removeWidget(element);\n\n      var dataset = element.dataset;\n      (0, _snippets2.default)(dataset);\n\n      var widgetArgs = { container: element, dataset: dataset };\n      var widget = new _widget2.default(widgetArgs);\n      widget.initialize();\n\n      this.stats.applied += 1;\n      this.stats.applyFromDomCalls += 1;\n      this.widgets.push(widget);\n\n      return widget;\n    }\n\n    /**\n     * Remove a widget element from the DOM.\n     */\n\n  }, {\n    key: 'removeWidget',\n    value: function removeWidget(element) {\n      while (element.firstChild) {\n        element.removeChild(element.firstChild);\n      }\n\n      // Clean up lazy loaded widgets\n      this.widgets.filter(function (widget) {\n        return widget.isLazyLoaded && widget.isSameNodeAs(element);\n      }).forEach(function (widget) {\n        widget.destroy();\n      });\n    }\n\n    /**\n     * Close all open popups.\n     */\n\n  }, {\n    key: 'closePopups',\n    value: function closePopups() {\n      this.widgets.forEach(function (widget) {\n        return widget.closePopup();\n      });\n    }\n  }, {\n    key: 'businessUnitId',\n    get: function get() {\n      return this.widgetElements[0].dataset.businessunitId;\n    }\n  }, {\n    key: 'widgetElements',\n    get: function get() {\n      return [].slice.call(this.document.getElementsByClassName('trustpilot-widget'));\n    }\n  }]);\n\n  return WidgetManagement;\n}();\n\nexports.default = WidgetManagement;\n\n},{\"./snippets\":2,\"./widget\":5}],4:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar widgetHtmlFile = 'index.html';\nvar widgetHtmlAllowRobotsFile = 'index_allow_robots.html';\nvar widgetIFrameOrigin = '#{WidgetRoot}';\nvar widgetBaseUrl = '#{WidgetRoot}/trustboxes';\nvar widgetsThatCanAllowRobots = '#{WidgetsThatCanAllowRobots}'.split(',');\n\nfunction makeIframeElement(options) {\n  var iframe = document.createElement('iframe');\n  iframe.style.position = options.position;\n  iframe.style.zIndex = options.zindex;\n  iframe.style.margin = options.margin;\n  iframe.style.top = options.top;\n  iframe.style.bottom = options.bottom;\n  iframe.style.left = options.left;\n  iframe.style.right = options.right;\n  iframe.style.height = options.height;\n  iframe.style.width = options.width;\n  iframe.style.borderStyle = options.borderStyle;\n  iframe.style.backgroundColor = options.backgroundColor;\n  iframe.style.display = options.display;\n  iframe.style.overflow = options.overflow;\n  iframe.allowTransparency = options.allowTransparency;\n  iframe.title = 'Customer reviews powered by Trustpilot';\n  iframe.loading = options.loading || 'auto';\n  iframe.src = options.src;\n\n  if (options.allow) {\n    iframe.allow = options.allow;\n  }\n\n  return iframe;\n}\n\nfunction getAttributeValue(attribute) {\n  var suffixRegEx = /(px|\\%)/i;\n  var value = '';\n\n  if (attribute && attribute.length > 0) {\n    attribute = attribute.toLowerCase();\n    if (suffixRegEx.test(attribute)) {\n      value = attribute;\n    } else {\n      value = attribute + 'px';\n    }\n  }\n  return value;\n}\n\nvar IFrame = function () {\n  function IFrame(name, dataset, iframeData) {\n    var isScrollBlocking = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n    _classCallCheck(this, IFrame);\n\n    this.OVERFLOW_PROPERTIES = ['overflow', 'overflow-x', 'overflow-y'];\n\n    this.name = name;\n    this.dataset = dataset;\n    this.iframeData = iframeData || this.defaultIframeOptions;\n    this.defaultOverflowProperties = {};\n    this.isVisible = false;\n    this.isScrollBlocking = isScrollBlocking;\n  }\n\n  _createClass(IFrame, [{\n    key: 'getIframeOptionsFromData',\n    value: function getIframeOptionsFromData() {\n      var iframeData = this.iframeData || { styles: {} };\n      return _extends({}, this.defaultIframeOptions, {\n        position: iframeData.styles.position || '',\n        zindex: iframeData.styles.zindex || '',\n        margin: iframeData.styles.margin || '',\n        top: iframeData.styles.top || '',\n        bottom: iframeData.styles.bottom || '',\n        left: iframeData.styles.left || '',\n        right: iframeData.styles.right || '',\n        height: iframeData.styles.height || '',\n        width: iframeData.styles.width || this.defaultIframeOptions.styles.width || '',\n        display: iframeData.show ? 'block' : 'none',\n        src: this.baseUrl + iframeData.source + this.queryString,\n        borderStyle: this.defaultIframeOptions.styles.borderStyle,\n        overflow: this.defaultIframeOptions.styles.overflow,\n        loading: this.dataset.loading,\n        allow: iframeData.allow\n      });\n    }\n  }, {\n    key: 'initialize',\n    value: function initialize(container, onLoad) {\n      this._iframe = makeIframeElement(this.getIframeOptionsFromData());\n\n      container.appendChild(this._iframe);\n      this._iframe.addEventListener('load', onLoad);\n    }\n  }, {\n    key: 'sendMessage',\n    value: function sendMessage(message) {\n      if (this._iframe.contentWindow) {\n        message = JSON.stringify(message); // This is to make it IE8 compatible\n        this._iframe.contentWindow.postMessage(message, widgetIFrameOrigin);\n      }\n    }\n  }, {\n    key: 'isInViewport',\n    value: function isInViewport(allowance) {\n      var rect = this._iframe.getBoundingClientRect();\n\n      var rectSize = {\n        width: rect.width || this._iframe.offsetWidth,\n        height: rect.height || this._iframe.offsetHeight\n      };\n\n      return rect.top >= 0 && rect.left >= 0 && rect.bottom - rectSize.height * allowance <= (window.innerHeight || document.documentElement.clientHeight) && rect.right - rectSize.width * allowance <= (window.innerWidth || document.documentElement.clientWidth);\n    }\n  }, {\n    key: 'setWidgetId',\n    value: function setWidgetId(widgetId) {\n      this.sendMessage({ command: 'setId', widgetId: widgetId });\n    }\n  }, {\n    key: 'setStyle',\n    value: function setStyle(styles) {\n      var _this = this;\n\n      Object.keys(styles).forEach(function (property) {\n        var style = styles[property];\n        _this._iframe.style[property] = style;\n      });\n    }\n  }, {\n    key: 'isScrollBlockingPopup',\n    value: function isScrollBlockingPopup() {\n      return this.name === 'popup' && this.isScrollBlocking;\n    }\n  }, {\n    key: 'disablePageScroll',\n    value: function disablePageScroll() {\n      this.defaultOverflowProperties = this.OVERFLOW_PROPERTIES.reduce(function (dict, property) {\n        dict[property] = document.body.style.getPropertyValue(property);\n        return dict;\n      }, {});\n      document.body.style.overflow = 'hidden';\n    }\n  }, {\n    key: 'restorePageScroll',\n    value: function restorePageScroll() {\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = this.OVERFLOW_PROPERTIES[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var property = _step.value;\n\n          document.body.style.removeProperty(property);\n          if (this.defaultOverflowProperties[property]) {\n            document.body.style.setProperty(property, this.defaultOverflowProperties[property]);\n          }\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    }\n  }, {\n    key: 'show',\n    value: function show() {\n      if (this.isScrollBlockingPopup() && !this.isVisible) {\n        this.disablePageScroll();\n      }\n      this._iframe.style.display = 'block';\n      this.isVisible = true;\n    }\n  }, {\n    key: 'hide',\n    value: function hide() {\n      if (this.isScrollBlockingPopup() && this.isVisible) {\n        this.restorePageScroll();\n      }\n      this._iframe.style.display = 'none';\n      this.isVisible = false;\n    }\n  }, {\n    key: 'focus',\n    value: function focus() {\n      this._iframe.contentWindow.focus();\n    }\n  }, {\n    key: 'resizeHeight',\n    value: function resizeHeight(height) {\n      if (typeof height !== 'number' || height === 0) {\n        return;\n      }\n      this._iframe.style.height = height + 'px';\n    }\n  }, {\n    key: '_shouldAllowRobots',\n    value: function _shouldAllowRobots() {\n      return this.dataset.allowRobots === 'true' && this.dataset.location && widgetsThatCanAllowRobots.indexOf(this.templateId) > -1;\n    }\n  }, {\n    key: 'dimensions',\n    get: function get() {\n      return {\n        height: getAttributeValue(this.dataset.styleHeight),\n        width: getAttributeValue(this.dataset.styleWidth)\n      };\n    }\n\n    /**\n     * Get the query string for populating this iframe's URL.\n     *\n     * The query string also includes hash parameters. These are used to ensure\n     * that the URL does not contain unneeded query params for fetching the\n     * Trustbox HTML itself as we include a number of parameters only needed for\n     * making the TrustBox data call.\n     */\n\n  }, {\n    key: 'queryString',\n    get: function get() {\n      var _this2 = this;\n\n      var mkPair = function mkPair(attribute) {\n        return attribute + '=' + encodeURIComponent(_this2.dataset[attribute]);\n      };\n      var mkPairs = function mkPairs(p) {\n        return Object.keys(_this2.dataset).filter(p).map(mkPair);\n      };\n\n      var searchKeys = ['businessunitId', 'templateId'];\n      var searchPairs = mkPairs(function (k) {\n        return searchKeys.indexOf(k) !== -1;\n      });\n      var hashPairs = mkPairs(function (k) {\n        return searchKeys.indexOf(k) === -1 && k !== 'allowRobots';\n      });\n      return '?' + searchPairs.join('&') + '#' + hashPairs.join('&');\n    }\n  }, {\n    key: 'templateId',\n    get: function get() {\n      return this.dataset.templateId;\n    }\n  }, {\n    key: 'baseUrl',\n    get: function get() {\n      return widgetBaseUrl + '/' + this.templateId + '/';\n    }\n  }, {\n    key: 'defaultIframeOptions',\n    get: function get() {\n      return {\n        source: this._shouldAllowRobots() ? widgetHtmlAllowRobotsFile : widgetHtmlFile,\n        allowTransparency: 'true',\n        styles: {\n          borderStyle: 'none',\n          backgroundColor: 'transparent',\n          display: 'block',\n          overflow: 'hidden',\n          height: this.dimensions.height,\n          width: this.dimensions.width,\n          position: 'relative'\n        },\n        show: true\n      };\n    }\n  }]);\n\n  return IFrame;\n}();\n\nexports.default = IFrame;\n\n},{}],5:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _tracking = require('./tracking');\n\nvar _tracking2 = _interopRequireDefault(_tracking);\n\nvar _iframe = require('./iframe');\n\nvar _iframe2 = _interopRequireDefault(_iframe);\n\nvar _constants = require('./../constants');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Widget = function () {\n  _createClass(Widget, null, [{\n    key: 'generateId',\n    value: function generateId() {\n      var usedIds = this.usedIds;\n      var currId = void 0;\n      do {\n        currId = Math.random();\n      } while (usedIds.indexOf(currId) !== -1);\n      return this.usedIds.push(currId);\n    }\n  }]);\n\n  function Widget(_ref) {\n    var _this = this;\n\n    var container = _ref.container,\n        dataset = _ref.dataset,\n        session = _ref.session,\n        anonymousId = _ref.anonymousId,\n        testId = _ref.testId,\n        sessionExpiry = _ref.sessionExpiry;\n\n    _classCallCheck(this, Widget);\n\n    // Check for required args\n    var requiredArgs = {\n      container: container,\n      dataset: dataset,\n      templateId: dataset.templateId,\n      businessUnitId: dataset.businessunitId,\n      locale: dataset.locale\n    };\n    Object.keys(requiredArgs).forEach(function (arg) {\n      if (!requiredArgs[arg]) {\n        throw 'No ' + arg + ' supplied for TrustBox';\n      }\n    });\n\n    this.container = container;\n    this.container.style.position = 'relative';\n\n    this.dataset = dataset;\n    this.iframes = {};\n    this.tracking = new _tracking2.default(function (payload) {\n      return _this.iframes.main.sendMessage(payload);\n    }, function () {\n      return _this.isInViewport(0.5);\n    }, {\n      session: session,\n      group: dataset.group,\n      sessionExpiry: sessionExpiry,\n      anonymousId: anonymousId,\n      testId: testId,\n      templateId: dataset.templateId\n    });\n    this.isLazyLoaded = _constants.LAZY_LOADED_WIDGETS.indexOf(dataset.templateId) > -1;\n    this.lazyLoadTimeout = null;\n    this.isSameNodeAs = this.isSameNodeAs.bind(this);\n    this.destroy = this.destroy.bind(this);\n\n    this.stats = { createIFrameCalls: 0, iframeLoadEvents: 0, events: {}, pongSent: false };\n    // Doing this only once before putting in the event loop\n    this.initialize = this.initialize.bind(this);\n  }\n\n  _createClass(Widget, [{\n    key: 'isContainerInViewport',\n    value: function isContainerInViewport() {\n      var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 200;\n\n      var rect = this.container.getBoundingClientRect();\n\n      var rectSize = {\n        width: rect.width || this.container.offsetWidth,\n        height: rect.height || this.container.offsetHeight\n      };\n\n      return rect.top >= 0 && rect.left >= 0 && rect.bottom - rectSize.height - offset <= (window.innerHeight || document.documentElement.clientHeight) && rect.right - rectSize.width - offset <= (window.innerWidth || document.documentElement.clientWidth);\n    }\n  }, {\n    key: 'initialize',\n    value: function initialize() {\n      if (!this.isLazyLoaded || this.isContainerInViewport()) {\n        this._widgetIFrameOrigin = '#{WidgetRoot}';\n        this.createIFrame('main');\n        this.attachMessageListener();\n      } else {\n        this.lazyLoadTimeout = setTimeout(this.initialize, 500);\n      }\n    }\n  }, {\n    key: 'handleCommand',\n    value: function handleCommand(_ref2) {\n      var data = _ref2.data,\n          origin = _ref2.origin;\n\n      try {\n        var parsedData = typeof data === 'string' ? JSON.parse(data) : data;\n        // Check if event is valid, i.e. it has a correct origin and widgetId.\n        var isValidEvent = origin === this._widgetIFrameOrigin && parsedData.widgetId === this.id;\n        if (!isValidEvent) {\n          return false;\n        }\n        return this.widgetIframeMessageHandler(parsedData);\n      } catch (ex) {\n        // eslint-disable-next-line\n        return false;\n      }\n    }\n  }, {\n    key: 'attachMessageListener',\n    value: function attachMessageListener() {\n      window.addEventListener('message', this.handleCommand.bind(this), false);\n    }\n\n    /**\n     * Handle messages intended for widgets/iframes.\n     *\n     * @param {Object} data - The message received.\n     * @param {Function} fallback - An optional function called where no matching\n     * action is found for the message received.\n     */\n\n  }, {\n    key: 'widgetIframeMessageHandler',\n    value: function widgetIframeMessageHandler(data) {\n      var _this2 = this;\n\n      var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n\n      this.stats.events[data.command] = (this.stats.events[data.command] || 0) + 1;\n      var name = data.name,\n          style = data.style,\n          height = data.height,\n          targets = data.targets,\n          attachToBody = data.attachToBody;\n\n      var targetIFrame = this.iframes[name];\n\n      var actions = {\n        createIFrame: function createIFrame() {\n          return _this2.createIFrame(name, data, attachToBody);\n        },\n        setStyle: function setStyle() {\n          return targetIFrame.setStyle(style);\n        },\n        show: function show() {\n          return targetIFrame.show();\n        },\n        hide: function hide() {\n          return targetIFrame.hide();\n        },\n        focus: function focus() {\n          return targetIFrame.focus();\n        },\n        loaded: function loaded() {\n          return _this2.iframes.main.sendMessage('loaded');\n        },\n        message: function message() {\n          return targetIFrame.sendMessage(data);\n        },\n        ping: function ping() {\n          _this2.iframes.main.sendMessage({ command: 'pong' });\n          _this2.stats.pongSent = true;\n        },\n        'resize-height': function resizeHeight() {\n          return _this2.getIframeOrMain(name).resizeHeight(height);\n        },\n        impression: function impression() {\n          return _this2.tracking.initialize();\n        },\n        scrollTo: function scrollTo() {\n          return _this2.scrollToTrustBox(targets);\n        }\n      };\n\n      var action = actions[data.command];\n      if (action) {\n        action();\n        return true;\n      }\n\n      fallback();\n      return false;\n    }\n  }, {\n    key: 'createIFrame',\n    value: function createIFrame(name, iframeData) {\n      var _this3 = this;\n\n      var attachToBody = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      var iframe = new _iframe2.default(name, this.dataset, iframeData, attachToBody);\n      this.iframes[name] = iframe;\n\n      this.stats.createIFrameCalls += 1;\n      iframe.initialize(attachToBody ? document.body : this.container, function () {\n        iframe.setWidgetId(_this3.id);\n        _this3.stats.iframeLoadEvents += 1;\n      });\n    }\n  }, {\n    key: 'getIframeOrMain',\n    value: function getIframeOrMain(iframeName) {\n      return this.iframes[iframeName] || this.iframes.main;\n    }\n  }, {\n    key: 'isInViewport',\n    value: function isInViewport(allowance) {\n      return this.iframes.main.isInViewport(allowance);\n    }\n  }, {\n    key: 'isSameNodeAs',\n    value: function isSameNodeAs(element) {\n      try {\n        return this.container.isSameNode(element);\n      } catch (e) {\n        return false;\n      }\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      if (this.lazyLoadTimeout) {\n        clearTimeout(this.lazyLoadTimeout);\n      }\n    }\n  }, {\n    key: 'closePopup',\n    value: function closePopup() {\n      // Only execute if we have a popup iframe\n      if ('popup' in this.iframes) {\n        // Message payload used to signal to the main iframe that a popup\n        // has been closed. This mirrors the message defined in the vanilla\n        // framework at\n        // https://github.com/trustpilot/node-trustbox-framework-vanilla/blob/09d18b9d3a8032bca52c87a9ad0364e464db2c3d/modules/communication.js#L85function.\n        var mainPayload = {\n          name: 'main',\n          command: 'message',\n          message: 'popup toggled',\n          visible: false\n        };\n        this.iframes.main.sendMessage(mainPayload);\n        this.iframes.popup.hide();\n      }\n    }\n  }, {\n    key: 'scrollToTrustBox',\n    value: function scrollToTrustBox() {\n      var templateIds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n      var elem = document.querySelector(templateIds.map(function (t) {\n        return '[data-template-id=\\'' + t + '\\']';\n      }).join(','));\n      if (elem) {\n        var iframe = elem.querySelector('iframe');\n        if (iframe) {\n          elem.scrollIntoView({ behavior: 'smooth' });\n          iframe.contentWindow.focus();\n        }\n      }\n    }\n  }, {\n    key: 'id',\n    get: function get() {\n      if (!this._id) {\n        this._id = this.constructor.generateId();\n      }\n      return this._id;\n    }\n  }]);\n\n  return Widget;\n}();\n\nWidget.usedIds = [];\nexports.default = Widget;\n\n},{\"./../constants\":1,\"./iframe\":4,\"./tracking\":6}],6:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _constants = require('../constants');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Tracking = function () {\n  function Tracking(sendMessage, isTrustBoxVisible, _ref) {\n    var session = _ref.session,\n        sessionExpiry = _ref.sessionExpiry,\n        group = _ref.group,\n        anonymousId = _ref.anonymousId,\n        testId = _ref.testId,\n        templateId = _ref.templateId;\n\n    _classCallCheck(this, Tracking);\n\n    this.hasSentImpression = false;\n    this.hasSentViewTracking = false;\n    this.sendMessage = sendMessage;\n    this.isTrustBoxVisible = isTrustBoxVisible;\n\n    this.session = session;\n    this.group = group;\n    this.sessionExpiry = sessionExpiry;\n    this.anonymousId = anonymousId;\n    this.testId = testId;\n    this.templateId = templateId;\n  }\n\n  /**\n   * Initialize a Tracking instance.\n   *\n   * This should only be called once the TrustBox has indicated it is ready to\n   * handle tracking events.\n   */\n\n\n  _createClass(Tracking, [{\n    key: 'initialize',\n    value: function initialize() {\n      this.sendImpressionData();\n      this.attachListener();\n      this.shouldDetachListener();\n    }\n  }, {\n    key: 'getTrackingData',\n    value: function getTrackingData(commandName) {\n      var data = {\n        command: commandName,\n        url: window.document.URL,\n        referrer: window.document.referrer,\n        userAgent: window.navigator.userAgent,\n        language: window.navigator.userLanguage || window.navigator.language,\n        platform: window.navigator.platform\n      };\n\n      if (this.session && this.group) {\n        data.session = this.session;\n        data.sessionExpiry = this.sessionExpiry;\n      }\n\n      if (this.anonymousId) {\n        data.anonymousId = this.anonymousId;\n      }\n\n      if (this.testId) {\n        data.testId = this.testId;\n      }\n\n      return data;\n    }\n  }, {\n    key: 'sendImpressionData',\n    value: function sendImpressionData() {\n      if (this.hasSentImpression) {\n        return;\n      }\n      this.hasSentImpression = true;\n\n      var data = this.getTrackingData('impression-received');\n      this.sendMessage(data);\n    }\n  }, {\n    key: 'sendVisibilityData',\n    value: function sendVisibilityData() {\n      if (this.hasSentViewTracking) {\n        return;\n      }\n      this.hasSentViewTracking = true;\n\n      var data = this.getTrackingData('trustbox-in-viewport');\n      this.sendMessage(data);\n    }\n  }, {\n    key: 'attachListener',\n    value: function attachListener() {\n      var _arguments = arguments,\n          _this = this;\n\n      var debounce = function debounce(func, wait) {\n        var timeout = void 0;\n        return function () {\n          var args = _arguments;\n          var later = function later() {\n            timeout = null;\n            func(args);\n          };\n          clearTimeout(timeout);\n          timeout = setTimeout(later, wait);\n        };\n      };\n\n      var checkViewPortVisibility = debounce(function () {\n        var isEmptyWidget = _this.templateId === _constants.EMPTY_WIDGET_ID; // Filter out empty iframe widgets from the view tracking\n        var removeListener = isEmptyWidget || _this.shouldDetachListener();\n        if (removeListener) {\n          /* eslint-disable */\n          window.removeEventListener('scroll', scrollEventListener, eventOptions);\n          window.removeEventListener('resize', resizeEventListener, eventOptions);\n          /* eslint-enable */\n        }\n      }, 100);\n\n      var eventOptions = { passive: true, capture: false };\n      var scrollEventListener = window.addEventListener('scroll', checkViewPortVisibility, eventOptions);\n      var resizeEventListener = window.addEventListener('resize', checkViewPortVisibility, eventOptions);\n      checkViewPortVisibility();\n    }\n\n    /**\n     * Track the visibility of the TrustBox.\n     *\n     * What this method actually does is set the current 'seen' state of the\n     * TrustBox, and returns a boolean flag which can be used to determine\n     * whether or not to continue listening for visibility events and calling\n     * this method.\n     */\n\n  }, {\n    key: 'shouldDetachListener',\n    value: function shouldDetachListener() {\n      // we can't send the view data until the iframe is ready to receive it.\n      // We're using `hasSentImpression` to know it's loaded and rely on the\n      // `impression` message handler to call us when that changes.\n      if (this.hasSentViewTracking) {\n        return true;\n      }\n\n      // already detected it, weren't ready to send earlier though\n      if (this.hasBeenVisible) {\n        if (this.hasSentImpression) {\n          this.sendVisibilityData();\n        }\n        return true;\n      }\n\n      if (!this.isTrustBoxVisible()) {\n        return false;\n      }\n\n      if (!this.hasSentImpression) {\n        this.hasBeenVisible = true;\n        return true;\n      }\n\n      this.sendVisibilityData();\n      return true;\n    }\n  }]);\n\n  return Tracking;\n}();\n\nexports.default = Tracking;\n\n},{\"../constants\":1}],7:[function(require,module,exports){\n'use strict';\n\nfunction parse(req) {\n  try {\n    return JSON.parse(req.responseText);\n  } catch (e) {\n    return req.responseText;\n  }\n}\n\nfunction xhrGet(params) {\n  var request = new window.XMLHttpRequest();\n  request.open('GET', params.url, true);\n  request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n  request.onreadystatechange = function () {\n    if (request.readyState === 4) {\n      if (request.status >= 200 && request.status < 300) {\n        params.success(parse(request));\n      } else if (params.error) {\n        params.error(parse(request));\n      }\n    }\n  };\n  request.send();\n}\n\nmodule.exports = { xhrGet: xhrGet };\n\n},{}],8:[function(require,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/* eslint global-require: 0 */\n(function (currentVersion) {\n  try {\n    (function () {\n      var WidgetManagement = require('./lib/widget-management.js').default;\n\n      window.Trustpilot = window.Trustpilot || {\n        loadFromElement: function loadFromElement(element, forceReload) {\n          if (!element) {\n            // eslint-disable-next-line\n            console.error('No element supplied to \"Trustpilot.loadFromElement\"');\n            return;\n          }\n          return this.Modules.WidgetManagement && this.Modules.WidgetManagement.applyWidgetFromDomElement(element, forceReload);\n        }\n      };\n      window.Trustpilot.Modules = window.Trustpilot.Modules || {};\n\n      if (!window.Trustpilot.Modules.WidgetManagement) {\n        window.Trustpilot.Modules.WidgetManagement = new WidgetManagement(window, document, currentVersion);\n        window.Trustpilot.Modules.WidgetManagement.initializeOnPageLoad();\n\n        // Use as a fallback. Try to load trustbox no matter what\n        window.addEventListener('load', function () {\n          try {\n            var elementArray = document.getElementsByClassName('trustpilot-widget');\n            for (var i = 0; i < elementArray.length; ++i) {\n              var trustbox = elementArray[i];\n              var tagName = trustbox.firstChild && trustbox.firstChild.tagName;\n              if (tagName && tagName !== 'IFRAME') {\n                window.Trustpilot.loadFromElement(trustbox);\n              }\n            }\n          } catch (e) {\n            // eslint-disable-next-line\n            console.error('Error loading trustboxes ' + e);\n          }\n        });\n      } else if (window.Trustpilot.Modules.WidgetManagement.version !== currentVersion) {\n        // eslint-disable-next-line\n        console.log('Detected legacy TrustBox bootstrap with version:', window.Trustpilot.Modules.WidgetManagement.version, ', current:', currentVersion);\n      }\n      window.addEventListener('click', function () {\n        window.Trustpilot.Modules.WidgetManagement.closePopups();\n      });\n    })();\n  } catch (e) {\n    (function () {\n      function postError(message) {\n        // eslint-disable-next-line\n        console.error('Error on bootstrap:' + message);\n\n        var url = '#{WidgetRoot}/feedback/report-error';\n        var params = ['error=' + encodeURIComponent(message), 'uri=' + encodeURIComponent(document.URL), 'bootstrapVersion=' + currentVersion].join('&');\n\n        var img = document.createElement('img');\n        img.src = url + '?' + params;\n      }\n\n      try {\n        if ((typeof e === 'undefined' ? 'undefined' : _typeof(e)) === 'object') {\n          postError(e.message);\n        } else {\n          postError(e);\n        }\n      } catch (e) {\n        // eslint-disable-next-line\n        console.error('Error on error reporting method:' + e);\n      }\n    })();\n  }\n})('#{Octopus.Release.Number}');\n\n},{\"./lib/widget-management.js\":3}]},{},[8]);\n" ]
}