{"version":3,"sources":["login/src/login.js"],"names":["$","LoginForm","Garnish","Base","extend","$form","$loginNameInput","$passwordFields","$passwordField","$passwordInput","$forgotPasswordLink","$rememberMeCheckbox","$sslIcon","$submitBtn","$spinner","$error","forgotPassword","loading","PasswordInput","onToggleInput","$newPasswordInput","addListener","this","removeListener","hasClass","addClass","removeClass","$doc","passwordInputInterval","setInterval","proxy","trigger","validate","val","length","event","enable","disable","onSubmit","remove","submitLogin","textStatus","response","success","showError","submitForgotPassword","data","loginName","postActionRequest","MessageSentModal","error","onSubmitResponse","password","rememberMe","prop","window","location","href","returnUrl","shake","attr","Craft","t","insertAfter","velocity","$container","isMobileBrowser","Modal","init","appendTo","$bod","base","hide","jQuery"],"mappings":"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","file":"login.min.js","sourcesContent":["(function($) {\n /** global: Craft */\n /** global: Garnish */\n var LoginForm = Garnish.Base.extend(\n {\n $form: null,\n $loginNameInput: null,\n $passwordFields: null,\n $passwordField: null,\n $passwordInput: null,\n $forgotPasswordLink: null,\n $rememberMeCheckbox: null,\n $sslIcon: null,\n $submitBtn: null,\n $spinner: null,\n $error: null,\n\n passwordInputInterval: null,\n forgotPassword: false,\n loading: false,\n\n init: function() {\n this.$form = $('#login-form');\n this.$loginNameInput = $('#loginName');\n this.$passwordFields = $('#password-fields');\n this.$passwordField = $('#password-field');\n this.$passwordInput = $('#password');\n this.$forgotPasswordLink = $('#forgot-password');\n this.$sslIcon = $('#ssl-icon');\n this.$submitBtn = $('#submit');\n this.$spinner = $('#spinner');\n this.$rememberMeCheckbox = $('#rememberMe');\n\n new Craft.PasswordInput(this.$passwordInput, {\n onToggleInput: $.proxy(function($newPasswordInput) {\n this.removeListener(this.$passwordInput, 'input');\n this.$passwordInput = $newPasswordInput;\n this.addListener(this.$passwordInput, 'input', 'validate');\n }, this)\n });\n\n this.addListener(this.$loginNameInput, 'input', 'validate');\n this.addListener(this.$passwordInput, 'input', 'validate');\n this.addListener(this.$forgotPasswordLink, 'click', 'onForgetPassword');\n this.addListener(this.$form, 'submit', 'onSubmit');\n\n // Super hacky!\n this.addListener(this.$sslIcon, 'mouseover', function() {\n if (this.$sslIcon.hasClass('disabled')) {\n return;\n }\n\n this.$submitBtn.addClass('hover');\n });\n this.addListener(this.$sslIcon, 'mouseout', function() {\n if (this.$sslIcon.hasClass('disabled')) {\n return;\n }\n\n this.$submitBtn.removeClass('hover');\n });\n this.addListener(this.$sslIcon, 'mousedown', function() {\n if (this.$sslIcon.hasClass('disabled')) {\n return;\n }\n\n this.$submitBtn.addClass('active');\n\n this.addListener(Garnish.$doc, 'mouseup', function() {\n this.$submitBtn.removeClass('active');\n this.removeListener(Garnish.$doc, 'mouseup');\n });\n });\n\n // Manually validate the inputs every 250ms since some browsers don't fire events when autofill is used\n // http://stackoverflow.com/questions/11708092/detecting-browser-autofill\n this.passwordInputInterval = setInterval($.proxy(this, 'validate'), 250);\n\n this.addListener(this.$sslIcon, 'click', function() {\n this.$submitBtn.trigger('click');\n });\n },\n\n validate: function() {\n if (this.$loginNameInput.val() && (this.forgotPassword || this.$passwordInput.val().length >= 6)) {\n this.$sslIcon.enable();\n this.$submitBtn.enable();\n return true;\n }\n else {\n this.$sslIcon.disable();\n this.$submitBtn.disable();\n return false;\n }\n },\n\n onSubmit: function(event) {\n // Prevent full HTTP submits\n event.preventDefault();\n\n if (!this.validate()) {\n return;\n }\n\n this.$submitBtn.addClass('active');\n this.$spinner.removeClass('hidden');\n this.loading = true;\n\n if (this.$error) {\n this.$error.remove();\n }\n\n if (this.forgotPassword) {\n this.submitForgotPassword();\n }\n else {\n this.submitLogin();\n }\n },\n\n submitForgotPassword: function() {\n var data = {\n loginName: this.$loginNameInput.val()\n };\n\n Craft.postActionRequest('users/send-password-reset-email', data, $.proxy(function(response, textStatus) {\n if (textStatus === 'success') {\n if (response.success) {\n new MessageSentModal();\n }\n else {\n this.showError(response.error);\n }\n }\n\n this.onSubmitResponse();\n }, this));\n },\n\n submitLogin: function() {\n var data = {\n loginName: this.$loginNameInput.val(),\n password: this.$passwordInput.val(),\n rememberMe: (this.$rememberMeCheckbox.prop('checked') ? 'y' : '')\n };\n\n Craft.postActionRequest('users/login', data, $.proxy(function(response, textStatus) {\n if (textStatus === 'success') {\n if (response.success) {\n window.location.href = response.returnUrl;\n }\n else {\n Garnish.shake(this.$form);\n this.onSubmitResponse();\n\n // Add the error message\n this.showError(response.error);\n }\n }\n else {\n this.onSubmitResponse();\n }\n }, this));\n\n return false;\n },\n\n onSubmitResponse: function() {\n this.$submitBtn.removeClass('active');\n this.$spinner.addClass('hidden');\n this.loading = false;\n },\n\n showError: function(error) {\n if (!error) {\n error = Craft.t('app', 'A server error occurred.');\n }\n\n this.$error = $('
').insertAfter($('.buttons', this.$form));\n this.$error.velocity('fadeIn');\n },\n\n onForgetPassword: function(event) {\n event.preventDefault();\n\n if (!Garnish.isMobileBrowser()) {\n this.$loginNameInput.trigger('focus');\n }\n\n if (this.$error) {\n this.$error.remove();\n }\n\n this.$form.addClass('reset-password');\n this.$passwordField.remove();\n this.$passwordFields.remove();\n this.$submitBtn.addClass('reset-password');\n this.$submitBtn.attr('value', Craft.t('app', 'Reset Password'));\n this.$submitBtn.enable();\n this.$sslIcon.remove();\n\n this.forgotPassword = true;\n this.validate();\n }\n });\n\n\n var MessageSentModal = Garnish.Modal.extend(\n {\n init: function() {\n var $container = $('