{"version":3,"sources":["webpack:///./pages/sessions/new/username_validator.js","webpack:////build/source/ee/app/assets/javascripts/pages/sessions/index.js","webpack:///./tabs/constants.js","webpack:///./tabs/index.js","webpack:///./lib/utils/forms.js","webpack:///./validators/input_validator.js","webpack:///./validators/length_validator.js","webpack:///./sessions/new/constants.js","webpack:///./sessions/new/components/email_form.vue","webpack:///./sessions/new/components/email_form.vue?cd90","webpack:///sessions/new/components/email_form.vue","webpack:///./sessions/new/components/email_form.vue?f961","webpack:///./sessions/new/components/update_email.vue?bdc1","webpack:///sessions/new/components/update_email.vue","webpack:///./sessions/new/components/update_email.vue?da8f","webpack:///./sessions/new/components/update_email.vue","webpack:///sessions/new/components/email_verification.vue","webpack:///./sessions/new/components/email_verification.vue?dda8","webpack:///./sessions/new/components/email_verification.vue?3e9f","webpack:///./sessions/new/components/email_verification.vue","webpack:///./pages/sessions/new/index.js","webpack:///./pages/sessions/new/preserve_url_fragment.js","webpack:///./sessions/new/index.js","webpack:///./vue_shared/components/dismissible_alert.vue?5086","webpack:///vue_shared/components/dismissible_alert.vue","webpack:///./vue_shared/components/dismissible_alert.vue?9f2a","webpack:///./vue_shared/components/dismissible_alert.vue","webpack:///./vue_alerts.js","webpack:///./pages/shared/form_error_tracker.js","webpack:///./emoji/no_emoji_validator.js","webpack:///./pages/sessions/new/signin_tabs_memoizer.js"],"names":["rootUrl","gon","relative_url_root","UsernameValidator","InputValidator","constructor","opts","_this","super","this","container","validateLengthElements","document","querySelectorAll","debounceValidateInput","_debounce","inputDomElement","validateUsernameInput","forEach","element","addEventListener","eventHandler","bind","event","target","resetInputState","username","value","length","checkValidity","setMessageVisibility","fetchUsernameAvailability","then","usernameTaken","setInputState","action","FormErrorTracker","label","Tracking","undefined","catch","createAlert","message","__","axios","get","data","exists","messageSelector","isVisible","parentElement","querySelector","classList","toggle","success","remove","ACTIVE_TAB_CLASSES","Object","freeze","TAB_SHOWN_EVENT","HISTORY_TYPE_HASH","ALLOWED_HISTORY_TYPES","GlTabsBehavior","el","history","Error","destroyFns","tabList","tabs","getTabs","activeTab","includes","setAccessibilityAttrs","bindEvents","loadInitialTab","setAttribute","tab","hasAttribute","_uniqueId","contains","removeAttribute","closest","tabPanel","getPanelForTab","id","add","NO_SCROLL_TO_HASH_CLASS","_this2","bindEvent","preventDefault","activateTab","code","activatePreviousTab","activateNextTab","args","push","removeEventListener","CSS","escape","window","location","hash","currentTabIndex","indexOf","previousTab","focus","nextTab","Array","from","ariaControls","getAttribute","tabToActivate","historyReplaceState","dispatchTabShown","activeTabPanel","CustomEvent","bubbles","detail","dispatchEvent","destroy","serializeForm","form","fdata","FormData","entries","reduce","acc","name","assign","serializeFormEntries","keys","map","key","val","getAll","filter","n","safeTrim","trim","isEmptyValue","hasMinimumLength","minLength","isIntegerGreaterThan","greaterThan","Number","isInteger","isParseableAsInteger","parseInt","SERVICE_DESK_SETTING_EMAIL_REGEXP","isServiceDeskSettingEmail","test","USER_EMAIL_REGEXP","isUserEmail","serializeFormObject","fromEntries","parseRailsFormFields","mountEl","TypeError","accumulator","input","fieldName","dataset","jsName","fieldNameCamelCase","convertToCamelCase","placeholder","type","checked","maxLength","pattern","attributes","inputErrorMessage","errorMessage","invalidInput","setValidationStateAndMessage","setValidationMessage","isInvalidInput","setCustomValidity","innerHTML","resetValidationMessage","validationMessage","title","LengthValidator","minLengthMessage","maxLengthMessage","allowEmpty","str","isAboveMaxLength","isValueNotAllowedOrNotEmpty","isBelowMinLength","SUPPORT_URL","PROMO_URL","I18N_EXPLANATION","s__","I18N_INPUT_LABEL","I18N_EMAIL_EMPTY_CODE","I18N_EMAIL_INVALID_CODE","I18N_SUBMIT_BUTTON","I18N_RESEND_LINK","I18N_EMAIL_RESEND_SUCCESS","I18N_GENERIC_ERROR","I18N_EMAIL","I18N_UPDATE_EMAIL","I18N_UPDATE_EMAIL_GUIDANCE","I18N_SEND_TO_SECONDARY_EMAIL_BUTTON_TEXT","I18N_HELP_TEXT","I18N_SEND_TO_SECONDARY_EMAIL_GUIDE","I18N_CANCEL","I18N_EMAIL_INVALID","I18N_UPDATE_EMAIL_SUCCESS","VERIFICATION_CODE_REGEX","components","GlForm","GlFormGroup","GlFormInput","GlButton","props","error","String","required","default","formInfo","submitText","email","submitted","computed","inputValidation","state","invalidFeedback","watch","methods","submit","$emit","i18n","cancel","_vm","_c","_self","on","$event","apply","arguments","attrs","$options","model","callback","$$v","expression","_v","staticClass","_s","_e","EmailForm","inject","verifyError","updateEmail","patch","updateEmailPath","user","handleResponse","handleError","response","status","handleSuccess","variant","VARIANT_SUCCESS","captureError","guidance","GlSprintf","GlLink","UpdateEmail","mixins","glFeatureFlagsMixin","obfuscatedEmail","verifyPath","resendPath","isOfferEmailReset","Boolean","verificationCode","activeForm","verify","post","verification_token","handleVerificationResponse","visitUrl","redirect_path","resend","handleResendResponse","finally","resetForm","sendToSecondaryEmail","verifyToken","$refs","$el","forms","verifyTokenForm","$nextTick","explanation","inputLabel","submitButton","resendLink","helpText","sendToSecondaryEmailButtonText","sendToSecondaryEmailGuide","supportUrl","updateEmailForm","sendToSecondaryEmailForm","scopedSlots","_u","fn","proxy","ref","content","SigninTabsMemoizer","NoEmojiValidator","fragment","normalFragment","replace","actionWithFragment","setUrlFragment","appendUrlFragment","oauthForm","newHref","mergeUrlParams","redirect_fragment","appendRedirectQuery","oauthForms","checkbox","currentTarget","href","remember_me","removeParams","toggleRememberMeQuery","initVueAlerts","initLanguageSwitcher","offerEmailReset","Vue","provide","render","createElement","EmailVerification","parseBoolean","mountEmailVerificationApplication","renderGFM","getElementById","GlAlert","directives","SafeHtml","html","isDismissed","dismiss","_g","_b","$attrs","$listeners","rawName","getCookieExpirationPeriod","expirationPeriod","alertExpirationPeriod","isNaN","mountVueAlert","dismissible","dismissCookieName","dismissCookieExpire","DismissibleAlert","alertDismissed","setCookie","expires","elements","trackErrorOnEmptyField","trackErrorOnChange","DEFAULT_DEBOUNCE_AND_THROTTLE_MS","uncheckedRadio","isRadio","some","convertToSnakeCase","trackActionForErrors","forAttribute","noEmojiEmelents","nextSibling","validatePattern","emojiRegex","RegExp","currentTabKey","tabSelector","isLocalStorageAvailable","AccessorUtilities","canUseLocalStorage","saveData","bootstrap","tabNav","e","nodeName","anchorName","showTab","readData","click","firstTab","localStorage","setItem","getItem"],"mappings":"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","file":"pages.sessions.new.a565840c.chunk.js","sourcesContent":["import { debounce } from 'lodash';\n\nimport { createAlert } from '~/alert';\nimport axios from '~/lib/utils/axios_utils';\nimport { __ } from '~/locale';\nimport InputValidator from '~/validators/input_validator';\nimport Tracking from '~/tracking';\nimport FormErrorTracker from '~/pages/shared/form_error_tracker';\n\nconst debounceTimeoutDuration = 1000;\nconst rootUrl = gon.relative_url_root;\nconst invalidInputClass = 'gl-field-error-outline';\nconst successInputClass = 'gl-field-success-outline';\nconst successMessageSelector = '.validation-success';\nconst pendingMessageSelector = '.validation-pending';\nconst unavailableMessageSelector = '.validation-error';\n\nexport default class UsernameValidator extends InputValidator {\n constructor(opts = {}) {\n super();\n\n const container = opts.container || '';\n const validateLengthElements = document.querySelectorAll(`${container} .js-validate-username`);\n\n this.debounceValidateInput = debounce((inputDomElement) => {\n UsernameValidator.validateUsernameInput(inputDomElement);\n }, debounceTimeoutDuration);\n\n validateLengthElements.forEach((element) =>\n element.addEventListener('input', this.eventHandler.bind(this)),\n );\n }\n\n eventHandler(event) {\n const inputDomElement = event.target;\n\n UsernameValidator.resetInputState(inputDomElement);\n this.debounceValidateInput(inputDomElement);\n }\n\n static validateUsernameInput(inputDomElement) {\n const username = inputDomElement.value;\n\n if (username.length > 1 && inputDomElement.checkValidity()) {\n UsernameValidator.setMessageVisibility(inputDomElement, pendingMessageSelector);\n UsernameValidator.fetchUsernameAvailability(username)\n .then((usernameTaken) => {\n UsernameValidator.setInputState(inputDomElement, !usernameTaken);\n UsernameValidator.setMessageVisibility(inputDomElement, pendingMessageSelector, false);\n UsernameValidator.setMessageVisibility(\n inputDomElement,\n usernameTaken ? unavailableMessageSelector : successMessageSelector,\n );\n\n if (usernameTaken) {\n const action = FormErrorTracker.action(inputDomElement);\n const label = FormErrorTracker.label(inputDomElement, 'is_taken');\n\n Tracking.event(undefined, action, { label });\n }\n })\n .catch(() =>\n createAlert({\n message: __('An error occurred while validating username'),\n }),\n );\n }\n }\n\n static fetchUsernameAvailability(username) {\n return axios.get(`${rootUrl}/users/${username}/exists`).then(({ data }) => data.exists);\n }\n\n static setMessageVisibility(inputDomElement, messageSelector, isVisible = true) {\n const messageElement = inputDomElement.parentElement.querySelector(messageSelector);\n messageElement.classList.toggle('hide', !isVisible);\n }\n\n static setInputState(inputDomElement, success = true) {\n inputDomElement.classList.toggle(successInputClass, success);\n inputDomElement.classList.toggle(invalidInputClass, !success);\n }\n\n static resetInputState(inputDomElement) {\n UsernameValidator.setMessageVisibility(inputDomElement, successMessageSelector, false);\n UsernameValidator.setMessageVisibility(inputDomElement, unavailableMessageSelector, false);\n\n if (inputDomElement.checkValidity()) {\n inputDomElement.classList.remove(successInputClass, invalidInputClass);\n }\n }\n}\n","import '~/pages/sessions/index';\n","export const ACTIVE_TAB_CLASSES = Object.freeze(['active', 'gl-tab-nav-item-active']);\n\nexport const ACTIVE_PANEL_CLASS = 'active';\n\nexport const KEY_CODE_LEFT = 'ArrowLeft';\nexport const KEY_CODE_UP = 'ArrowUp';\nexport const KEY_CODE_RIGHT = 'ArrowRight';\nexport const KEY_CODE_DOWN = 'ArrowDown';\n\nexport const ATTR_ARIA_CONTROLS = 'aria-controls';\nexport const ATTR_ARIA_LABELLEDBY = 'aria-labelledby';\nexport const ATTR_ARIA_SELECTED = 'aria-selected';\nexport const ATTR_ROLE = 'role';\nexport const ATTR_TABINDEX = 'tabindex';\n\nexport const TAB_SHOWN_EVENT = 'gl-tab-shown';\n\nexport const HISTORY_TYPE_HASH = 'hash';\nexport const ALLOWED_HISTORY_TYPES = [HISTORY_TYPE_HASH];\n","import { uniqueId } from 'lodash';\nimport { historyReplaceState, NO_SCROLL_TO_HASH_CLASS } from '~/lib/utils/common_utils';\nimport {\n ACTIVE_TAB_CLASSES,\n ATTR_ROLE,\n ATTR_ARIA_CONTROLS,\n ATTR_TABINDEX,\n ATTR_ARIA_SELECTED,\n ATTR_ARIA_LABELLEDBY,\n ACTIVE_PANEL_CLASS,\n KEY_CODE_LEFT,\n KEY_CODE_UP,\n KEY_CODE_RIGHT,\n KEY_CODE_DOWN,\n TAB_SHOWN_EVENT,\n HISTORY_TYPE_HASH,\n ALLOWED_HISTORY_TYPES,\n} from './constants';\n\nexport { TAB_SHOWN_EVENT, HISTORY_TYPE_HASH };\n\n/**\n * The `GlTabsBehavior` class adds interactivity to tabs created by the `gl_tabs_nav` and\n * `gl_tab_link_to` Rails helpers.\n *\n * Example using `href` references:\n *\n * ```haml\n * = gl_tabs_nav({ class: 'js-my-tabs' }) do\n * = gl_tab_link_to '#foo', item_active: true do\n * = _('Foo')\n * = gl_tab_link_to '#bar' do\n * = _('Bar')\n *\n * .tab-content\n * .tab-pane.active#foo\n * .tab-pane#bar\n * ```\n *\n * ```javascript\n * import { GlTabsBehavior } from '~/tabs';\n *\n * const glTabs = new GlTabsBehavior(document.querySelector('.js-my-tabs'));\n * ```\n *\n * Example using `aria-controls` references:\n *\n * ```haml\n * = gl_tabs_nav({ class: 'js-my-tabs' }) do\n * = gl_tab_link_to '#', item_active: true, 'aria-controls': 'foo' do\n * = _('Foo')\n * = gl_tab_link_to '#', 'aria-controls': 'bar' do\n * = _('Bar')\n *\n * .tab-content\n * .tab-pane.active#foo\n * .tab-pane#bar\n * ```\n *\n * ```javascript\n * import { GlTabsBehavior } from '~/tabs';\n *\n * const glTabs = new GlTabsBehavior(document.querySelector('.js-my-tabs'));\n * ```\n *\n * `GlTabsBehavior` can be used to replace Bootstrap tab implementations that cannot\n * easily be rewritten in Vue.\n *\n * NOTE: Do *not* use `GlTabsBehavior` with markup generated by other means, as it may not\n * work correctly.\n *\n * Tab panels must exist somewhere in the page for the tabs to control. Tab panels\n * must:\n * - be immediate children of a `.tab-content` element\n * - have the `tab-pane` class\n * - if the panel is active, have the `active` class\n * - have a unique `id` attribute\n *\n * In order to associate tabs with panels, the tabs must reference their panel's\n * `id` by having one of the following attributes:\n * - `href`, e.g., `href=\"#the-panel-id\"` (note the leading `#` in the value)\n * - `aria-controls`, e.g., `aria-controls=\"the-panel-id\"` (no leading `#`)\n *\n * Exactly one tab/panel must be active in the original markup.\n *\n * Call the `destroy` method on an instance to remove event listeners that were\n * added during construction. Other DOM mutations (like ARIA attributes) are\n * _not_ reverted.\n */\nexport class GlTabsBehavior {\n /**\n * Create a GlTabsBehavior instance.\n *\n * @param {HTMLElement} el - The element created by the Rails `gl_tabs_nav` helper.\n * @param {Object} [options]\n * @param {'hash' | null} [options.history=null] - Sets the type of routing GlTabs will use when navigating between tabs.\n * 'hash': Updates the URL hash with the current tab ID.\n * null: No routing mechanism will be used.\n */\n constructor(el, { history = null } = {}) {\n if (!el) {\n throw new Error('Cannot instantiate GlTabsBehavior without an element');\n }\n\n this.destroyFns = [];\n this.tabList = el;\n this.tabs = this.getTabs();\n this.activeTab = null;\n\n this.history = ALLOWED_HISTORY_TYPES.includes(history) ? history : null;\n\n this.setAccessibilityAttrs();\n this.bindEvents();\n if (this.history === HISTORY_TYPE_HASH) this.loadInitialTab();\n }\n\n setAccessibilityAttrs() {\n this.tabList.setAttribute(ATTR_ROLE, 'tablist');\n this.tabs.forEach((tab) => {\n if (!tab.hasAttribute('id')) {\n tab.setAttribute('id', uniqueId('gl_tab_nav__tab_'));\n }\n\n if (!this.activeTab && tab.classList.contains(ACTIVE_TAB_CLASSES[0])) {\n this.activeTab = tab;\n tab.setAttribute(ATTR_ARIA_SELECTED, 'true');\n tab.removeAttribute(ATTR_TABINDEX);\n } else {\n tab.setAttribute(ATTR_ARIA_SELECTED, 'false');\n tab.setAttribute(ATTR_TABINDEX, '-1');\n }\n\n tab.setAttribute(ATTR_ROLE, 'tab');\n tab.closest('.nav-item').setAttribute(ATTR_ROLE, 'presentation');\n\n const tabPanel = this.getPanelForTab(tab);\n if (!tab.hasAttribute(ATTR_ARIA_CONTROLS)) {\n tab.setAttribute(ATTR_ARIA_CONTROLS, tabPanel.id);\n }\n\n tabPanel.classList.add(NO_SCROLL_TO_HASH_CLASS);\n tabPanel.setAttribute(ATTR_ROLE, 'tabpanel');\n tabPanel.setAttribute(ATTR_ARIA_LABELLEDBY, tab.id);\n });\n }\n\n bindEvents() {\n this.tabs.forEach((tab) => {\n this.bindEvent(tab, 'click', (event) => {\n event.preventDefault();\n\n if (tab !== this.activeTab) {\n this.activateTab(tab);\n }\n });\n\n this.bindEvent(tab, 'keydown', (event) => {\n const { code } = event;\n if (code === KEY_CODE_UP || code === KEY_CODE_LEFT) {\n event.preventDefault();\n this.activatePreviousTab();\n } else if (code === KEY_CODE_DOWN || code === KEY_CODE_RIGHT) {\n event.preventDefault();\n this.activateNextTab();\n }\n });\n });\n }\n\n bindEvent(el, ...args) {\n el.addEventListener(...args);\n\n this.destroyFns.push(() => {\n el.removeEventListener(...args);\n });\n }\n\n loadInitialTab() {\n const tab = this.tabList.querySelector(`a[href=\"${CSS.escape(window.location.hash)}\"]`);\n this.activateTab(tab || this.activeTab);\n }\n\n activatePreviousTab() {\n const currentTabIndex = this.tabs.indexOf(this.activeTab);\n\n if (currentTabIndex <= 0) return;\n\n const previousTab = this.tabs[currentTabIndex - 1];\n this.activateTab(previousTab);\n previousTab.focus();\n }\n\n activateNextTab() {\n const currentTabIndex = this.tabs.indexOf(this.activeTab);\n\n if (currentTabIndex >= this.tabs.length - 1) return;\n\n const nextTab = this.tabs[currentTabIndex + 1];\n this.activateTab(nextTab);\n nextTab.focus();\n }\n\n getTabs() {\n return Array.from(this.tabList.querySelectorAll('.gl-tab-nav-item'));\n }\n\n // eslint-disable-next-line class-methods-use-this\n getPanelForTab(tab) {\n const ariaControls = tab.getAttribute(ATTR_ARIA_CONTROLS);\n\n if (ariaControls) {\n return document.querySelector(`#${ariaControls}`);\n }\n\n return document.querySelector(tab.getAttribute('href'));\n }\n\n activateTab(tabToActivate) {\n // Deactivate active tab first\n this.activeTab.setAttribute(ATTR_ARIA_SELECTED, 'false');\n this.activeTab.setAttribute(ATTR_TABINDEX, '-1');\n this.activeTab.classList.remove(...ACTIVE_TAB_CLASSES);\n\n const activePanel = this.getPanelForTab(this.activeTab);\n activePanel.classList.remove(ACTIVE_PANEL_CLASS);\n\n // Now activate the given tab/panel\n tabToActivate.setAttribute(ATTR_ARIA_SELECTED, 'true');\n tabToActivate.removeAttribute(ATTR_TABINDEX);\n tabToActivate.classList.add(...ACTIVE_TAB_CLASSES);\n\n const tabPanel = this.getPanelForTab(tabToActivate);\n tabPanel.classList.add(ACTIVE_PANEL_CLASS);\n\n if (this.history === HISTORY_TYPE_HASH) historyReplaceState(tabToActivate.getAttribute('href'));\n this.activeTab = tabToActivate;\n\n this.dispatchTabShown(tabToActivate, tabPanel);\n }\n\n // eslint-disable-next-line class-methods-use-this\n dispatchTabShown(tab, activeTabPanel) {\n const event = new CustomEvent(TAB_SHOWN_EVENT, {\n bubbles: true,\n detail: {\n activeTabPanel,\n },\n });\n\n tab.dispatchEvent(event);\n }\n\n destroy() {\n this.destroyFns.forEach((destroy) => destroy());\n }\n}\n","import { convertToCamelCase } from '~/lib/utils/text_utility';\n\nexport const serializeFormEntries = (entries) =>\n entries.reduce((acc, { name, value }) => Object.assign(acc, { [name]: value }), {});\n\nexport const serializeForm = (form) => {\n const fdata = new FormData(form);\n const entries = Array.from(fdata.keys()).map((key) => {\n let val = fdata.getAll(key);\n // Microsoft Edge has a bug in FormData.getAll() that returns an undefined\n // value for each form element that does not match the given key:\n // https://github.com/jimmywarting/FormData/issues/80\n val = val.filter((n) => n);\n return { name: key, value: val.length === 1 ? val[0] : val };\n });\n\n return serializeFormEntries(entries);\n};\n\n/**\n * Like trim but without the error for non-string values.\n *\n * @param {String, Number, Array} - value\n * @returns {String, Number, Array} - the trimmed string or the value if it isn't a string\n */\nexport const safeTrim = (value) => (typeof value === 'string' ? value.trim() : value);\n\n/**\n * Check if the value provided is empty or not\n *\n * It is being used to check if a form input\n * value has been set or not.\n *\n * @param {String, Number, Array} - Any form value\n * @returns {Boolean} - returns false if a value is set\n *\n * @example\n * returns true for '', ' ', [], null, undefined\n */\nexport const isEmptyValue = (value) => value == null || safeTrim(value).length === 0;\n\n/**\n * Check if the value has a minimum string length\n *\n * @param {String, Number, Array} - Any form value\n * @param {Number} - minLength\n * @returns {Boolean}\n */\nexport const hasMinimumLength = (value, minLength) =>\n !isEmptyValue(value) && value.length >= minLength;\n\n/**\n * Checks if the given value can be parsed as an integer as it is (without cutting off decimals etc.)\n *\n * @param {String, Number, Array} - Any form value\n * @returns {Boolean}\n */\nexport const isParseableAsInteger = (value) =>\n !isEmptyValue(value) && Number.isInteger(Number(safeTrim(value)));\n\n/**\n * Checks if the parsed integer value from the given input is greater than a certain number\n *\n * @param {String, Number, Array} - Any form value\n * @param {Number} - greaterThan\n * @returns {Boolean}\n */\nexport const isIntegerGreaterThan = (value, greaterThan) =>\n isParseableAsInteger(value) && parseInt(value, 10) > greaterThan;\n\n/**\n * Regexp that matches service desk setting email structure.\n * Taken from app/models/service_desk_setting.rb custom_email\n */\nconst SERVICE_DESK_SETTING_EMAIL_REGEXP = /^[\\w\\-._]+@[\\w\\-.]+\\.[a-zA-Z]{2,}$/;\n\n/**\n * Checks if the input is a valid service desk setting email address\n *\n * @param {String} - value\n * @returns {Boolean}\n */\nexport const isServiceDeskSettingEmail = (value) => SERVICE_DESK_SETTING_EMAIL_REGEXP.test(value);\n\n/**\n * Regexp that matches user email structure.\n * Taken from DeviseEmailValidator\n */\nconst USER_EMAIL_REGEXP = /^[^@\\s]+@[^@\\s]+$/;\n\n/**\n * Checks if the input is a valid user email address\n *\n * @param {String} - value\n * @returns {Boolean}\n */\nexport const isUserEmail = (value) => USER_EMAIL_REGEXP.test(value);\n\n/**\n * A form object serializer\n *\n * @param {Object} - Form Object\n * @returns {Object} - Serialized Form Object\n *\n * @example\n * Input\n * {\"project\": {\"value\": \"hello\", \"state\": false}, \"username\": {\"value\": \"john\"}}\n *\n * Returns\n * {\"project\": \"hello\", \"username\": \"john\"}\n */\nexport const serializeFormObject = (form) =>\n Object.fromEntries(\n Object.entries(form).reduce((acc, [name, { value }]) => {\n if (!isEmptyValue(value)) {\n acc.push([name, value]);\n }\n return acc;\n }, []),\n );\n\n/**\n * Parse inputs of HTML forms generated by Rails.\n *\n * This can be helpful when mounting Vue components within Rails forms.\n *\n * If called with an HTML element like:\n *\n * ```html\n * \n * \n * \n * \n * ```\n *\n * It will return an object like:\n *\n * ```javascript\n * {\n * contactInfoEmail: {\n * name: 'user[contact_info][email]',\n * id: 'user_contact_info_email',\n * value: 'foo@bar.com',\n * placeholder: 'Email',\n * },\n * contactInfoPhone: {\n * name: 'user[contact_info][phone]',\n * id: 'user_contact_info_phone',\n * value: '(123) 456-7890',\n * placeholder: 'Phone',\n * },\n * interests: [\n * {\n * name: 'user[interests][]',\n * id: 'user_interests_vue',\n * value: 'Vue',\n * checked: true,\n * },\n * {\n * name: 'user[interests][]',\n * id: 'user_interests_graphql',\n * value: 'GraphQL',\n * checked: false,\n * },\n * ],\n * }\n * ```\n *\n * @param {HTMLInputElement} mountEl\n * @returns {Object} object with form fields data.\n */\nexport const parseRailsFormFields = (mountEl) => {\n if (!mountEl) {\n throw new TypeError('`mountEl` argument is required');\n }\n\n const inputs = mountEl.querySelectorAll('[name]');\n\n return [...inputs].reduce((accumulator, input) => {\n const fieldName = input.dataset.jsName;\n\n if (!fieldName) {\n return accumulator;\n }\n\n const fieldNameCamelCase = convertToCamelCase(fieldName);\n const { id, placeholder, name, value, type, checked, maxLength, pattern } = input;\n const attributes = {\n name,\n id,\n value,\n ...(placeholder && { placeholder }),\n ...(input.hasAttribute('maxlength') && { maxLength }),\n ...(pattern && { pattern }),\n };\n\n // Store radio buttons and checkboxes as an array so they can be\n // looped through and rendered in Vue\n if (['radio', 'checkbox'].includes(type)) {\n return {\n ...accumulator,\n [fieldNameCamelCase]: [\n ...(accumulator[fieldNameCamelCase] || []),\n { ...attributes, checked },\n ],\n };\n }\n\n return {\n ...accumulator,\n [fieldNameCamelCase]: attributes,\n };\n }, {});\n};\n","const invalidInputClass = 'gl-field-error-outline';\n\nexport default class InputValidator {\n constructor() {\n this.inputDomElement = {};\n this.inputErrorMessage = {};\n this.errorMessage = null;\n this.invalidInput = null;\n }\n\n setValidationStateAndMessage() {\n this.setValidationMessage();\n\n const isInvalidInput = !this.inputDomElement.checkValidity();\n this.inputDomElement.classList.toggle(invalidInputClass, isInvalidInput);\n this.inputErrorMessage.classList.toggle('hide', !isInvalidInput);\n }\n\n setValidationMessage() {\n if (this.invalidInput) {\n this.inputDomElement.setCustomValidity(this.errorMessage);\n // eslint-disable-next-line no-unsanitized/property\n this.inputErrorMessage.innerHTML = this.errorMessage;\n } else {\n this.resetValidationMessage();\n }\n }\n\n resetValidationMessage() {\n if (this.inputDomElement.validationMessage === this.errorMessage) {\n this.inputDomElement.setCustomValidity('');\n // eslint-disable-next-line no-unsanitized/property\n this.inputErrorMessage.innerHTML = this.inputDomElement.title;\n }\n }\n}\n","import InputValidator from '~/validators/input_validator';\n\nconst errorMessageClass = 'gl-field-error';\n\nexport const isAboveMaxLength = (str, maxLength) => {\n return str.length > parseInt(maxLength, 10);\n};\n\nexport const isBelowMinLength = (value, minLength, allowEmpty) => {\n const isValueNotAllowedOrNotEmpty = allowEmpty !== 'true' || value.length !== 0;\n const isValueBelowMinLength = value.length < parseInt(minLength, 10);\n return isValueBelowMinLength && isValueNotAllowedOrNotEmpty;\n};\n\nexport default class LengthValidator extends InputValidator {\n constructor(opts = {}) {\n super();\n\n const container = opts.container || '';\n const validateLengthElements = document.querySelectorAll(`${container} .js-validate-length`);\n\n validateLengthElements.forEach((element) =>\n element.addEventListener('input', this.eventHandler.bind(this)),\n );\n }\n\n eventHandler(event) {\n this.inputDomElement = event.target;\n this.inputErrorMessage = this.inputDomElement.parentElement.querySelector(\n `.${errorMessageClass}`,\n );\n\n const { value } = this.inputDomElement;\n const { minLength, minLengthMessage, maxLengthMessage, maxLength, allowEmpty } =\n this.inputDomElement.dataset;\n\n this.invalidInput = false;\n\n if (isAboveMaxLength(value, maxLength)) {\n this.invalidInput = true;\n this.errorMessage = maxLengthMessage;\n }\n\n if (isBelowMinLength(value, minLength, allowEmpty)) {\n this.invalidInput = true;\n this.errorMessage = minLengthMessage;\n }\n\n this.setValidationStateAndMessage();\n }\n}\n","import { PROMO_URL } from '~/constants';\nimport { s__, __ } from '~/locale';\n\nexport const SUPPORT_URL = `${PROMO_URL}/support/`;\nexport const I18N_EXPLANATION = s__(\n \"IdentityVerification|You are signed in as %{username}. For added security, you'll need to verify your identity. We've sent a verification code to %{email}\",\n);\nexport const I18N_INPUT_LABEL = s__('IdentityVerification|Verification code');\nexport const I18N_EMAIL_EMPTY_CODE = s__('IdentityVerification|Enter a code.');\nexport const I18N_EMAIL_INVALID_CODE = s__('IdentityVerification|Please enter a valid code');\nexport const I18N_SUBMIT_BUTTON = s__('IdentityVerification|Verify code');\nexport const I18N_RESEND_LINK = s__('IdentityVerification|Resend code');\nexport const I18N_EMAIL_RESEND_SUCCESS = s__('IdentityVerification|A new code has been sent.');\nexport const I18N_GENERIC_ERROR = s__(\n 'IdentityVerification|Something went wrong. Please try again.',\n);\n\nexport const I18N_EMAIL = __('Email');\nexport const I18N_UPDATE_EMAIL = s__('IdentityVerification|Update email');\nexport const I18N_UPDATE_EMAIL_GUIDANCE = s__(\n \"EmailVerification|Update your email to a valid permanent address. If you use a temporary email, you won't be able to sign in later.\",\n);\nexport const I18N_SEND_TO_SECONDARY_EMAIL_BUTTON_TEXT = s__(\n 'IdentityVerification|send a code to another address associated with this account',\n);\nexport const I18N_HELP_TEXT = s__(\n \"IdentityVerification|If you don't have access to the primary email address, you can %{sendToSecondaryEmailButtonStart}%{sendToSecondaryEmailButtonEnd}, or you can %{supportLinkStart}try to verify another way.%{supportLinkEnd}\",\n);\nexport const I18N_SEND_TO_SECONDARY_EMAIL_GUIDE = s__(\n 'IdentityVerification|Enter a verified email address associated with this account. A new code will be sent to this address.',\n);\nexport const I18N_CANCEL = __('Cancel');\nexport const I18N_EMAIL_INVALID = s__('IdentityVerification|Please enter a valid email address.');\nexport const I18N_UPDATE_EMAIL_SUCCESS = s__(\n 'IdentityVerification|A new code has been sent to your updated email address.',\n);\n\nexport const VERIFICATION_CODE_REGEX = /^\\d{6}$/;\nexport const SUCCESS_RESPONSE = 'success';\nexport const FAILURE_RESPONSE = 'failure';\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('gl-form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('gl-form-group',{attrs:{\"label\":_vm.$options.i18n.email,\"label-for\":\"email-input\",\"state\":_vm.inputValidation.state,\"invalid-feedback\":_vm.inputValidation.message}},[_c('gl-form-input',{attrs:{\"id\":\"email-input\",\"type\":\"email\",\"autofocus\":\"\",\"state\":_vm.inputValidation.state},model:{value:(_vm.email),callback:function ($$v) {_vm.email=$$v},expression:\"email\"}}),_vm._v(\" \"),(_vm.formInfo)?_c('p',{staticClass:\"gl-mt-3 gl-text-subtle\"},[_vm._v(_vm._s(_vm.formInfo))]):_vm._e()],1),_vm._v(\" \"),_c('section',{staticClass:\"gl-mt-5\"},[_c('gl-button',{attrs:{\"block\":\"\",\"variant\":\"confirm\",\"type\":\"submit\",\"disabled\":!_vm.inputValidation.state}},[_vm._v(_vm._s(_vm.submitText))]),_vm._v(\" \"),_c('gl-button',{staticClass:\"gl-mt-3 gl-h-7\",attrs:{\"block\":\"\",\"variant\":\"link\"},on:{\"click\":function($event){return _vm.$emit('cancel')}}},[_vm._v(_vm._s(_vm.$options.i18n.cancel))])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./email_form.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./email_form.vue?vue&type=script&lang=js\"","\n\n\n","import { render, staticRenderFns } from \"./email_form.vue?vue&type=template&id=59e8649e\"\nimport script from \"./email_form.vue?vue&type=script&lang=js\"\nexport * from \"./email_form.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./update_email.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./update_email.vue?vue&type=script&lang=js\"","\n\n\n","import { render, staticRenderFns } from \"./update_email.vue?vue&type=template&id=265a02d4\"\nimport script from \"./update_email.vue?vue&type=script&lang=js\"\nexport * from \"./update_email.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('email-form',{attrs:{\"error\":_vm.verifyError,\"form-info\":_vm.$options.i18n.guidance,\"submit-text\":_vm.$options.i18n.updateEmail},on:{\"submit-email\":_vm.updateEmail,\"cancel\":() => _vm.$emit('verifyToken')}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./email_verification.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./email_verification.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./email_verification.vue?vue&type=template&id=4c5ab530\"\nimport script from \"./email_verification.vue?vue&type=script&lang=js\"\nexport * from \"./email_verification.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(_vm.activeForm === _vm.$options.forms.updateEmailForm)?_c('update-email',{on:{\"verifyToken\":_vm.verifyToken}}):(_vm.activeForm === _vm.$options.forms.sendToSecondaryEmailForm)?_c('email-form',{attrs:{\"form-info\":_vm.$options.i18n.sendToSecondaryEmailGuide,\"submit-text\":_vm.$options.i18n.resendLink},on:{\"submit-email\":_vm.sendToSecondaryEmail,\"cancel\":_vm.verifyToken}}):(_vm.activeForm === _vm.$options.forms.verifyTokenForm)?_c('gl-form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.verify.apply(null, arguments)}}},[_c('section',{staticClass:\"gl-mb-5\"},[_c('gl-sprintf',{attrs:{\"message\":_vm.$options.i18n.explanation},scopedSlots:_vm._u([{key:\"username\",fn:function(){return [_vm._v(_vm._s(_vm.username))]},proxy:true},{key:\"email\",fn:function(){return [_c('strong',[_vm._v(_vm._s(_vm.email))])]},proxy:true}])})],1),_vm._v(\" \"),_c('gl-form-group',{attrs:{\"label\":_vm.$options.i18n.inputLabel,\"label-for\":\"verification-code\",\"state\":_vm.inputValidation.state,\"invalid-feedback\":_vm.inputValidation.message}},[_c('gl-form-input',{ref:\"input\",attrs:{\"id\":\"verification-code\",\"autofocus\":\"\",\"autocomplete\":\"one-time-code\",\"inputmode\":\"numeric\",\"maxlength\":\"6\",\"state\":_vm.inputValidation.state},model:{value:(_vm.verificationCode),callback:function ($$v) {_vm.verificationCode=$$v},expression:\"verificationCode\"}})],1),_vm._v(\" \"),_c('section',{staticClass:\"gl-mt-5\"},[_c('gl-button',{attrs:{\"block\":\"\",\"variant\":\"confirm\",\"type\":\"submit\",\"disabled\":!_vm.inputValidation.state}},[_vm._v(_vm._s(_vm.$options.i18n.submitButton))]),_vm._v(\" \"),_c('gl-button',{staticClass:\"gl-mt-3 gl-h-7\",attrs:{\"block\":\"\",\"variant\":\"link\"},on:{\"click\":() => _vm.resend()}},[_vm._v(_vm._s(_vm.$options.i18n.resendLink))]),_vm._v(\" \"),(_vm.isOfferEmailReset)?_c('gl-button',{staticClass:\"gl-mt-3 gl-h-7\",attrs:{\"block\":\"\",\"variant\":\"link\"},on:{\"click\":() => (_vm.activeForm = _vm.$options.forms.updateEmailForm)}},[_vm._v(_vm._s(_vm.$options.i18n.updateEmail))]):_vm._e()],1),_vm._v(\" \"),_c('p',{staticClass:\"gl-mt-3 gl-text-subtle\"},[_c('gl-sprintf',{attrs:{\"message\":_vm.$options.i18n.helpText},scopedSlots:_vm._u([{key:\"sendToSecondaryEmailButton\",fn:function(){return [_c('gl-button',{staticClass:\"gl-align-baseline\",attrs:{\"variant\":\"link\"},on:{\"click\":() => (_vm.activeForm = _vm.$options.forms.sendToSecondaryEmailForm)}},[_vm._v(_vm._s(_vm.$options.i18n.sendToSecondaryEmailButtonText))])]},proxy:true},{key:\"supportLink\",fn:function({ content }){return [_c('gl-link',{attrs:{\"href\":_vm.$options.i18n.supportUrl,\"target\":\"_blank\"}},[_vm._v(_vm._s(content))])]}}])})],1)],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import initVueAlerts from '~/vue_alerts';\nimport NoEmojiValidator from '~/emoji/no_emoji_validator';\nimport { initLanguageSwitcher } from '~/language_switcher';\nimport LengthValidator from '~/validators/length_validator';\nimport mountEmailVerificationApplication from '~/sessions/new';\nimport { renderGFM } from '~/behaviors/markdown/render_gfm';\nimport {\n appendUrlFragment,\n appendRedirectQuery,\n toggleRememberMeQuery,\n} from './preserve_url_fragment';\nimport SigninTabsMemoizer from './signin_tabs_memoizer';\nimport UsernameValidator from './username_validator';\n\nnew UsernameValidator(); // eslint-disable-line no-new\nnew LengthValidator(); // eslint-disable-line no-new\nnew SigninTabsMemoizer(); // eslint-disable-line no-new\nnew NoEmojiValidator(); // eslint-disable-line no-new\n\nappendUrlFragment();\nappendRedirectQuery();\ntoggleRememberMeQuery();\ninitVueAlerts();\ninitLanguageSwitcher();\nmountEmailVerificationApplication();\nrenderGFM(document.getElementById('js-custom-sign-in-description'));\n","import { mergeUrlParams, removeParams, setUrlFragment } from '~/lib/utils/url_utility';\n\n/**\n * Append the fragment to all non-OAuth login form actions so it is preserved\n * when the user is eventually redirected back to the originally requested URL.\n *\n * @param fragment {string} - url fragment to be preserved\n */\nexport function appendUrlFragment(fragment = document.location.hash) {\n if (!fragment) {\n return;\n }\n\n const normalFragment = fragment.replace(/^#/, '');\n const forms = document.querySelectorAll('.js-non-oauth-login form');\n forms.forEach((form) => {\n const actionWithFragment = setUrlFragment(form.getAttribute('action'), `#${normalFragment}`);\n form.setAttribute('action', actionWithFragment);\n });\n}\n\n/**\n * Append a redirect_fragment query param to all OAuth login form actions. The\n * redirect_fragment query param will be available in the omniauth callback upon\n * successful authentication.\n *\n * @param {string} fragment - url fragment to be preserved\n */\nexport function appendRedirectQuery(fragment = document.location.hash) {\n if (!fragment) {\n return;\n }\n\n const normalFragment = fragment.replace(/^#/, '');\n const oauthForms = document.querySelectorAll('.js-oauth-login form');\n oauthForms.forEach((oauthForm) => {\n const newHref = mergeUrlParams(\n { redirect_fragment: normalFragment },\n oauthForm.getAttribute('action'),\n );\n oauthForm.setAttribute('action', newHref);\n });\n}\n\n/**\n * OAuth login buttons have a separate \"remember me\" checkbox.\n *\n * Toggling this checkbox adds/removes a `remember_me` parameter to the\n * login form actions, which is passed on to the omniauth callback.\n */\nexport function toggleRememberMeQuery() {\n const oauthForms = document.querySelectorAll('.js-oauth-login form');\n const checkbox = document.querySelector('#js-remember-me-omniauth');\n\n if (oauthForms.length === 0 || !checkbox) {\n return;\n }\n\n checkbox.addEventListener('change', ({ currentTarget }) => {\n oauthForms.forEach((oauthForm) => {\n const href = oauthForm.getAttribute('action');\n let newHref;\n if (currentTarget.checked) {\n newHref = mergeUrlParams({ remember_me: '1' }, href);\n } else {\n newHref = removeParams(['remember_me'], href);\n }\n\n oauthForm.setAttribute('action', newHref);\n });\n });\n}\n","import Vue from 'vue';\nimport { parseBoolean } from '~/lib/utils/common_utils';\nimport EmailVerification from './components/email_verification.vue';\n\nexport default () => {\n const el = document.querySelector('.js-email-verification');\n\n if (!el) {\n return null;\n }\n\n const { username, obfuscatedEmail, verifyPath, resendPath, offerEmailReset, updateEmailPath } =\n el.dataset;\n\n return new Vue({\n el,\n name: 'EmailVerificationRoot',\n provide: { updateEmailPath },\n render(createElement) {\n return createElement(EmailVerification, {\n props: {\n username,\n obfuscatedEmail,\n verifyPath,\n resendPath,\n isOfferEmailReset: parseBoolean(offerEmailReset),\n },\n });\n },\n });\n};\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./dismissible_alert.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./dismissible_alert.vue?vue&type=script&lang=js\"","\n\n\n","import { render, staticRenderFns } from \"./dismissible_alert.vue?vue&type=template&id=5ace45cc\"\nimport script from \"./dismissible_alert.vue?vue&type=script&lang=js\"\nexport * from \"./dismissible_alert.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (!_vm.isDismissed)?_c('gl-alert',_vm._g(_vm._b({on:{\"dismiss\":_vm.dismiss}},'gl-alert',_vm.$attrs,false),_vm.$listeners),[_c('div',{directives:[{name:\"safe-html\",rawName:\"v-safe-html\",value:(_vm.html),expression:\"html\"}]})]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from 'vue';\nimport { setCookie, parseBoolean } from '~/lib/utils/common_utils';\n\nimport DismissibleAlert from '~/vue_shared/components/dismissible_alert.vue';\n\nconst getCookieExpirationPeriod = (expirationPeriod) => {\n const defaultExpirationPeriod = 30;\n const alertExpirationPeriod = Number(expirationPeriod);\n\n return !expirationPeriod || Number.isNaN(alertExpirationPeriod)\n ? defaultExpirationPeriod\n : alertExpirationPeriod;\n};\n\nconst mountVueAlert = (el) => {\n const props = {\n html: el.innerHTML,\n };\n const attrs = {\n ...el.dataset,\n dismissible: parseBoolean(el.dataset.dismissible),\n };\n const { dismissCookieName, dismissCookieExpire } = el.dataset;\n\n return new Vue({\n el,\n render(createElement) {\n return createElement(DismissibleAlert, {\n props,\n attrs,\n on: {\n alertDismissed() {\n if (!dismissCookieName) {\n return;\n }\n setCookie(dismissCookieName, true, {\n expires: getCookieExpirationPeriod(dismissCookieExpire),\n });\n },\n },\n });\n },\n });\n};\n\nexport default () => [...document.querySelectorAll('.js-vue-alert')].map(mountVueAlert);\n","import { debounce } from 'lodash';\nimport Tracking from '~/tracking';\nimport { DEFAULT_DEBOUNCE_AND_THROTTLE_MS } from '~/lib/utils/constants';\nimport { convertToSnakeCase } from '~/lib/utils/text_utility';\n\nexport default class FormErrorTracker {\n constructor() {\n this.elements = document.querySelectorAll('.js-track-error');\n this.trackErrorOnEmptyField = FormErrorTracker.trackErrorOnEmptyField.bind(this);\n\n this.trackErrorOnChange = debounce(\n FormErrorTracker.trackErrorOnChange.bind(this),\n DEFAULT_DEBOUNCE_AND_THROTTLE_MS,\n );\n\n this.elements.forEach((element) => {\n // on item change\n element.addEventListener('input', this.trackErrorOnChange);\n\n // on invalid item - adding separately to track submit click without\n // changing any field\n element.addEventListener('invalid', this.trackErrorOnEmptyField);\n });\n }\n\n destroy() {\n this.elements.forEach((element) => {\n element.removeEventListener('input', this.trackErrorOnChange);\n element.removeEventListener('invalid', this.trackErrorOnEmptyField);\n });\n }\n\n static trackErrorOnChange(event) {\n const inputDomElement = event.target;\n\n if (inputDomElement.value && !inputDomElement.checkValidity()) {\n const message = FormErrorTracker.errorMessage(inputDomElement);\n\n Tracking.event(undefined, FormErrorTracker.action(inputDomElement), {\n label: FormErrorTracker.label(inputDomElement, message),\n });\n }\n }\n\n static trackErrorOnEmptyField(event) {\n const inputDomElement = event.target;\n\n const uncheckedRadio =\n !inputDomElement.checked && FormErrorTracker.isRadio(inputDomElement.type);\n\n if (inputDomElement.value === '' || uncheckedRadio) {\n Tracking.event(undefined, FormErrorTracker.action(inputDomElement), {\n label: FormErrorTracker.label(inputDomElement, 'is_required'),\n });\n }\n }\n\n static errorMessage(element) {\n const inputsWithTranslation = [\n 'first_name',\n 'last_name',\n 'username',\n 'email',\n 'password',\n 'company_name',\n ];\n\n if (inputsWithTranslation.some((input) => element.id.includes(input))) {\n return 'is_invalid';\n }\n\n return FormErrorTracker.inputErrorMessage(element);\n }\n\n static inputErrorMessage(element) {\n return convertToSnakeCase(element.validationMessage);\n }\n\n static action(element) {\n return `track_${element.dataset.trackActionForErrors}_error`;\n }\n\n static label(element, message) {\n if (FormErrorTracker.isRadio(element.type)) {\n const forAttribute = element\n .closest('.form-group')\n .querySelector('label')\n .getAttribute('for');\n\n return `missing_${convertToSnakeCase(forAttribute)}`;\n }\n\n return `${element.id}_${message}`;\n }\n\n static isRadio(type) {\n return type === 'radio';\n }\n}\n","import emojiRegex from 'emoji-regex';\nimport { __ } from '~/locale';\nimport InputValidator from '../validators/input_validator';\n\nexport default class NoEmojiValidator extends InputValidator {\n constructor(opts = {}) {\n super();\n\n const container = opts.container || '';\n this.noEmojiEmelents = document.querySelectorAll(`${container} .js-block-emoji`);\n\n this.noEmojiEmelents.forEach((element) =>\n element.addEventListener('input', this.eventHandler.bind(this)),\n );\n }\n\n eventHandler(event) {\n this.inputDomElement = event.target;\n this.inputErrorMessage = this.inputDomElement.nextSibling;\n\n const { value } = this.inputDomElement;\n\n this.errorMessage = __('Invalid input, please avoid emoji');\n\n this.validatePattern(value);\n this.setValidationStateAndMessage();\n }\n\n validatePattern(value) {\n const pattern = emojiRegex();\n this.invalidInput = new RegExp(pattern).test(value);\n }\n}\n","import AccessorUtilities from '~/lib/utils/accessor';\nimport { GlTabsBehavior } from '~/tabs';\n\n/**\n * Memorize the last selected tab after reloading a page.\n * Does that setting the current selected tab in the localStorage\n */\nexport default class SigninTabsMemoizer {\n constructor({ currentTabKey = 'current_signin_tab', tabSelector = '#js-signin-tabs' } = {}) {\n this.currentTabKey = currentTabKey;\n this.tabSelector = tabSelector;\n this.isLocalStorageAvailable = AccessorUtilities.canUseLocalStorage();\n // sets selected tab if given as hash tag\n if (window.location.hash) {\n this.saveData(window.location.hash);\n }\n\n this.bootstrap();\n }\n\n bootstrap() {\n const tabNav = document.querySelector(this.tabSelector);\n if (tabNav) {\n // eslint-disable-next-line no-new\n new GlTabsBehavior(tabNav);\n tabNav.addEventListener('click', (e) => {\n if (e.target && e.target.nodeName === 'A') {\n const anchorName = e.target.getAttribute('href');\n this.saveData(anchorName);\n }\n });\n }\n\n this.showTab();\n }\n\n showTab() {\n const anchorName = this.readData();\n if (anchorName) {\n const tab = document.querySelector(`${this.tabSelector} a[href=\"${anchorName}\"]`);\n if (tab) {\n tab.click();\n } else {\n const firstTab = document.querySelector(`${this.tabSelector} a`);\n if (firstTab) {\n firstTab.click();\n }\n }\n }\n }\n\n saveData(val) {\n if (!this.isLocalStorageAvailable) return undefined;\n\n return window.localStorage.setItem(this.currentTabKey, val);\n }\n\n readData() {\n if (!this.isLocalStorageAvailable) return null;\n\n return window.localStorage.getItem(this.currentTabKey);\n }\n}\n"],"sourceRoot":""}