{"version":3,"file":"settings.mjs","sources":["../../../../src/digitalmarketplace/scripts/cookies/settings.ts"],"sourcesContent":["import { DigitalMarketplaceFrontendComponent } from '../../digitalmarketplace-frontend-component'\nimport { getCookiePreferences, setCookiePreferences } from './manage'\n\nclass CookieSettings implements DigitalMarketplaceFrontendComponent {\n  static moduleName = 'dm-cookie-settings'\n  $moudle: JQuery<HTMLElement>\n  $radioButtonAnalyticsYes: JQuery<HTMLInputElement>\n  $radioButtonAnalyticsNo: JQuery<HTMLInputElement>\n  $confirmationMessage: JQuery<HTMLElement>\n  $previousPageLink: JQuery<HTMLElement>\n  $errorSummary: JQuery<HTMLElement>\n  $formGroup: JQuery<HTMLElement>\n  $warningMessage: JQuery<HTMLElement>\n  $cookieBanner: JQuery<HTMLElement>\n\n  constructor ($module: JQuery<HTMLElement>) {\n    this.$moudle = $module\n    this.$radioButtonAnalyticsYes = this.$moudle.find<HTMLInputElement>('input[name=cookies-analytics][value=On]')\n    this.$radioButtonAnalyticsNo = this.$moudle.find<HTMLInputElement>('input[name=cookies-analytics][value=Off]')\n    this.$confirmationMessage = $('#dm-cookie-settings-confirmation')\n    this.$previousPageLink = $('.dm-cookie-settings__prev-page')\n    this.$errorSummary = $('#dm-cookie-settings-error')\n    this.$formGroup = this.$moudle.find('.govuk-form-group')\n    this.$warningMessage = $('#dm-cookie-settings-warning')\n    this.$cookieBanner = $('.dm-cookie-banner')\n  }\n\n  init () {\n    this.$moudle.on('submit', (event) => {\n      this.submitSettingsForm(event)\n    })\n\n    // Ensure there aren't two forms for setting cookie preferences on the same page\n    this.hideCookieBanner()\n\n    this.setInitialFormValues()\n  }\n\n  setInitialFormValues () {\n    const currentCookiePreferences = getCookiePreferences()\n\n    if (!currentCookiePreferences.settings_viewed) return\n\n    this.hideWarningMessage()\n\n    // Populate the form with the existing choice\n    let $radioButton: JQuery<HTMLInputElement>\n\n    if (currentCookiePreferences.usage) {\n      $radioButton = this.$radioButtonAnalyticsYes\n    } else {\n      $radioButton = this.$radioButtonAnalyticsNo\n    }\n\n    $radioButton.prop('checked', true)\n  }\n\n  submitSettingsForm (event: JQuery.SubmitEvent) {\n    event.preventDefault()\n\n    let usage\n\n    for (const formDataItem of this.$moudle.serializeArray()) {\n      if (formDataItem.name === 'cookies-analytics') {\n        usage = formDataItem.value === 'On'\n\n        break\n      }\n    }\n\n    // the cookie choice must be set when form is submitted\n    if (usage === undefined) {\n      this.showError()\n      return\n    }\n\n    // Set the analytics cookie preferences\n    // If 'Off' option not checked, this function will also delete any existing Google Analytics cookies\n    setCookiePreferences(usage)\n\n    this.hideWarningMessage()\n    this.hideError()\n    this.showConfirmationMessage()\n  }\n\n  showConfirmationMessage () {\n    const referrer = CookieSettings.getReferrerLink()\n\n    document.body.scrollTop = document.documentElement.scrollTop = 0\n\n    if (referrer && referrer !== document.location.pathname) {\n      this.$previousPageLink.attr('href', referrer)\n      this.$previousPageLink.css('display', 'block')\n    } else {\n      this.$previousPageLink.css('display', 'none')\n    }\n\n    this.$confirmationMessage.css('display', 'block')\n  }\n\n  showError () {\n    if (this.$errorSummary.length) {\n      this.$errorSummary.css('display', 'block')\n      document.body.scrollTop = document.documentElement.scrollTop = 0\n    }\n    this.showErrorMessage()\n  }\n\n  showErrorMessage () {\n    this.$formGroup.addClass('govuk-form-group--error')\n\n    const $errorMessageSpan = $(document.createElement('p'))\n    $errorMessageSpan.attr('id', 'dm-cookie-settings-error-message')\n    $errorMessageSpan.addClass('govuk-error-message')\n    $errorMessageSpan.html('<span class=\"govuk-visually-hidden\">Error:</span> Select yes to accept analytics cookies')\n\n    $errorMessageSpan.insertBefore('#cookie-settings-1, .govuk-radios--inline')\n  }\n\n  hideError () {\n    this.$errorSummary.css('display', 'none')\n    this.hideErrorMessage()\n  }\n\n  hideErrorMessage () {\n    const $errorMessage = this.$moudle.find('#dm-cookie-settings-error-message')\n    \n    $errorMessage.css('display', 'none')\n    this.$formGroup.removeClass('govuk-form-group--error')\n  }\n\n  hideWarningMessage () {\n    this.$warningMessage.css('display', 'none')\n  }\n\n  hideCookieBanner () {\n    this.$cookieBanner.css('display', 'none')\n  }\n\n  static getReferrerLink () {\n    return document.referrer ? new URL(document.referrer).pathname : false\n  }\n}\n\nexport { CookieSettings }\n"],"names":[],"mappings":"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"}