{"version":3,"sources":["ContactlessSignature.js","ContactlessSignature.ts","EnrollApp2Fa.js","EnrollApp2Fa.ts","Index.js","Index.ts"],"names":["appn","views","appRedirect","captureImageForForm","clearButton","changeColorButton","undoButton","savePNGButton","canvas","signaturePad","InitArgs","constructor","verifyHeader","couldNotCaptureImageMessage","isRequiredFormatMessage","imageCaptureTitle","root","_initArgs","init","args","wrapper","document","getElementsByClassName","querySelector","boxWidth","$","width","canvasWidth","window","SignaturePad","backgroundColor","prop","addClass","addEventListener","removeAttr","removeClass","event","clear","data","toData","pop","fromData","r","Math","round","random","g","b","color","penColor","isEmpty","alert","replace","dataURL","toDataURL","download","off","on","formId","val","providerId","signatureId","capturedUrl","formdata","FormData","append","dataURLToBlob","ajax","headers","url","type","processData","contentType","fail","JSON","stringify","always","methodResultAsString","methodResult","parse","Success","location","href","Message","resizeCanvas","ratio","max","devicePixelRatio","offsetWidth","height","offsetHeight","context","getContext","scale","filename","navigator","userAgent","indexOf","open","blob","URL","createObjectURL","a","createElement","body","appendChild","click","revokeObjectURL","parts","split","raw","atob","rawLength","length","uInt8Array","Uint8Array","i","charCodeAt","Blob","enrollApp2Fa","initTwoFactorAuth","e","preventDefault","verifyString","each","index","numberElement","clearVerifyInputs","submit","currentVal","trim","id","endsWith","slice","firstSixChars","substring","bits","focus","select","next","which","toLowerCase","appLinkStart","appLink","substr","attr"],"mappings":"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","file":"content/platform/public-appredirect.min.js","sourcesContent":["\"use strict\";\nvar appn;\n(function (appn) {\n var views;\n (function (views) {\n var appRedirect;\n (function (appRedirect) {\n var captureImageForForm;\n (function (captureImageForForm) {\n let clearButton;\n let changeColorButton;\n let undoButton;\n let savePNGButton;\n let canvas;\n let signaturePad;\n class InitArgs {\n constructor() {\n this.verifyHeader = '';\n this.couldNotCaptureImageMessage = '';\n this.isRequiredFormatMessage = '';\n this.imageCaptureTitle = '';\n this.root = '';\n }\n }\n let _initArgs;\n function init(args) {\n _initArgs = args;\n const wrapper = document.getElementsByClassName('card')[0];\n if (!wrapper)\n return;\n clearButton = wrapper.querySelector('[data-action=clear]');\n changeColorButton = wrapper.querySelector('[data-action=change-color]');\n undoButton = wrapper.querySelector('[data-action=undo]');\n savePNGButton = wrapper.querySelector('[data-action=save-png]');\n canvas = wrapper.querySelector('canvas');\n const boxWidth = $('.card.card-planejane').width();\n let canvasWidth = 500;\n if (boxWidth < 500)\n canvasWidth = boxWidth - 30;\n canvas.width = canvasWidth;\n signaturePad = new window.SignaturePad(canvas, {\n backgroundColor: 'rgb(255, 255, 255)'\n });\n $('.btn-save').prop('disabled', 'disabled').addClass('disabled');\n canvas.addEventListener('touchend', function () {\n $('.btn-save').removeAttr('disabled').removeClass('disabled');\n }, false);\n canvas.addEventListener('click', function () {\n $('.btn-save').removeAttr('disabled').removeClass('disabled');\n }, false);\n if (clearButton)\n clearButton.addEventListener('click', function (event) {\n signaturePad.clear();\n $('.btn-save').prop('disabled', 'disabled').addClass('disabled');\n });\n if (undoButton)\n undoButton.addEventListener('click', function (event) {\n const data = signaturePad.toData();\n if (data) {\n data.pop();\n signaturePad.fromData(data);\n }\n });\n if (changeColorButton)\n changeColorButton.addEventListener('click', function (event) {\n const r = Math.round(Math.random() * 255);\n const g = Math.round(Math.random() * 255);\n const b = Math.round(Math.random() * 255);\n const color = 'rgb(' + r + ',' + g + ',' + b + ')';\n signaturePad.penColor = color;\n });\n if (savePNGButton)\n savePNGButton.addEventListener('click', function (event) {\n if (signaturePad.isEmpty())\n alert(_initArgs.isRequiredFormatMessage.replace('{0}', _initArgs.imageCaptureTitle));\n else {\n const dataURL = signaturePad.toDataURL();\n download(dataURL, 'signature.png');\n }\n });\n $('.btn-save').off().on('click', function () {\n if (signaturePad.isEmpty())\n alert(_initArgs.isRequiredFormatMessage.replace('{0}', _initArgs.imageCaptureTitle));\n else {\n const dataURL = signaturePad.toDataURL();\n const formId = $('#FormId').val();\n const providerId = $('#ProviderId').val();\n const signatureId = $('#SignatureId').val();\n const capturedUrl = _initArgs.root + 'AppRedirect/ContactlessSignatureCaptured?formId=' + formId + '&providerId=' + providerId + '&signatureId=' + signatureId;\n const formdata = new FormData();\n formdata.append('signatureImage', dataURLToBlob(dataURL));\n formdata.append('formId', formId);\n formdata.append('providerId', providerId);\n formdata.append('signatureId', signatureId);\n $.ajax({\n headers: _initArgs.verifyHeader,\n url: _initArgs.root + 'AppRedirect/AjaxContactlessSignatureCapture',\n type: 'POST',\n data: formdata,\n processData: false,\n contentType: false\n }).fail(function (data) {\n alert(`${_initArgs.couldNotCaptureImageMessage}: ${(data ? JSON.stringify(data) : '')}`);\n }).always(function (methodResultAsString) {\n if (!methodResultAsString) {\n alert(`${_initArgs.couldNotCaptureImageMessage}: ${(methodResultAsString ? JSON.stringify(methodResultAsString) : '')}`);\n return;\n }\n const methodResult = JSON.parse(methodResultAsString);\n if (methodResult.Success) {\n window.location.href = capturedUrl;\n return;\n }\n alert(methodResult.Message);\n });\n }\n });\n }\n captureImageForForm.init = init;\n function resizeCanvas() {\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n canvas.width = canvas.offsetWidth * ratio;\n canvas.height = canvas.offsetHeight * ratio;\n const context = canvas.getContext('2d');\n context.scale(ratio, ratio);\n signaturePad.clear();\n }\n function download(dataURL, filename) {\n if (navigator.userAgent.indexOf('Safari') > -1 && navigator.userAgent.indexOf('Chrome') === -1)\n window.open(dataURL);\n else {\n const blob = dataURLToBlob(dataURL);\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n window.URL.revokeObjectURL(url);\n }\n }\n function dataURLToBlob(dataURL) {\n const parts = dataURL.split(';base64,');\n const contentType = parts[0].split(':')[1];\n const raw = window.atob(parts[1]);\n const rawLength = raw.length;\n const uInt8Array = new Uint8Array(rawLength);\n for (let i = 0; i < rawLength; ++i)\n uInt8Array[i] = raw.charCodeAt(i);\n return new Blob([uInt8Array], { type: contentType });\n }\n })(captureImageForForm = appRedirect.captureImageForForm || (appRedirect.captureImageForForm = {}));\n })(appRedirect = views.appRedirect || (views.appRedirect = {}));\n })(views = appn.views || (appn.views = {}));\n})(appn || (appn = {}));\n","namespace appn.views.appRedirect.captureImageForForm {\n\n let clearButton: Element;\n let changeColorButton: Element;\n let undoButton: Element;\n let savePNGButton: Element;\n let canvas: HTMLCanvasElement;\n let signaturePad: any;\n\n class InitArgs {\n verifyHeader: string = '';\n\n couldNotCaptureImageMessage: string = '';\n\n isRequiredFormatMessage: string = '';\n\n imageCaptureTitle: string = '';\n\n root: string = '';\n }\n\n let _initArgs: InitArgs;\n\n export function init(args: InitArgs): void {\n _initArgs = args;\n const wrapper = document.getElementsByClassName('card')[0];\n if (!wrapper)\n return;\n\n clearButton = wrapper.querySelector('[data-action=clear]') as Element;\n changeColorButton = wrapper.querySelector('[data-action=change-color]') as Element;\n undoButton = wrapper.querySelector('[data-action=undo]') as Element;\n savePNGButton = wrapper.querySelector('[data-action=save-png]') as Element;\n canvas = wrapper.querySelector('canvas') as HTMLCanvasElement;\n\n // Calc canvas width\n const boxWidth = $('.card.card-planejane').width() as number;\n let canvasWidth = 500; // max width\n if (boxWidth < 500)\n canvasWidth = boxWidth - 30;\n canvas.width = canvasWidth;\n\n signaturePad = new (window as any).SignaturePad(canvas, {\n // It's Necessary to use an opaque color when saving image as JPEG;\n // this option can be omitted if only saving as PNG or SVG\n backgroundColor: 'rgb(255, 255, 255)'\n });\n\n $('.btn-save').prop('disabled', 'disabled').addClass('disabled');\n canvas.addEventListener('touchend', function() {\n $('.btn-save').removeAttr('disabled').removeClass('disabled');\n }, false);\n\n canvas.addEventListener('click', function() {\n $('.btn-save').removeAttr('disabled').removeClass('disabled');\n }, false);\n\n // On mobile devices it might make more sense to listen to orientation change,\n // rather than window resize events.\n // window.onresize = resizeCanvas;\n // resizeCanvas();\n\n if (clearButton)\n clearButton.addEventListener('click', function(event) {\n signaturePad.clear();\n $('.btn-save').prop('disabled', 'disabled').addClass('disabled');\n });\n\n if (undoButton)\n undoButton.addEventListener('click', function(event) {\n const data = signaturePad.toData();\n\n if (data) {\n data.pop(); // remove the last dot or line\n signaturePad.fromData(data);\n }\n });\n\n if (changeColorButton)\n changeColorButton.addEventListener('click', function(event) {\n const r = Math.round(Math.random() * 255);\n const g = Math.round(Math.random() * 255);\n const b = Math.round(Math.random() * 255);\n const color = 'rgb(' + r + ',' + g + ',' + b + ')';\n\n signaturePad.penColor = color;\n });\n\n if (savePNGButton)\n savePNGButton.addEventListener('click', function(event) {\n if (signaturePad.isEmpty())\n alert(_initArgs.isRequiredFormatMessage.replace('{0}', _initArgs.imageCaptureTitle));\n else {\n const dataURL = signaturePad.toDataURL();\n download(dataURL, 'signature.png');\n }\n });\n \n $('.btn-save').off().on('click', function() {\n if (signaturePad.isEmpty())\n alert(_initArgs.isRequiredFormatMessage.replace('{0}', _initArgs.imageCaptureTitle));\n else {\n const dataURL = signaturePad.toDataURL();\n const formId = $('#FormId').val() as string;\n const providerId = $('#ProviderId').val() as string;\n const signatureId = $('#SignatureId').val() as string;\n const capturedUrl = _initArgs.root + 'AppRedirect/ContactlessSignatureCaptured?formId=' + formId + '&providerId=' + providerId + '&signatureId=' + signatureId;\n\n const formdata = new FormData();\n formdata.append('signatureImage', dataURLToBlob(dataURL));\n formdata.append('formId', formId);\n formdata.append('providerId', providerId);\n formdata.append('signatureId', signatureId);\n\n $.ajax({\n headers: _initArgs.verifyHeader as any,\n url: _initArgs.root + 'AppRedirect/AjaxContactlessSignatureCapture',\n type: 'POST',\n data: formdata,\n processData: false,\n contentType: false\n }).fail(function(data) {\n alert(`${_initArgs.couldNotCaptureImageMessage}: ${(data ? JSON.stringify(data) : '')}`);\n }).always(function(methodResultAsString) {\n\n if (!methodResultAsString) {\n alert(`${_initArgs.couldNotCaptureImageMessage}: ${(methodResultAsString ? JSON.stringify(methodResultAsString) : '')}`);\n return;\n }\n\n const methodResult = JSON.parse(methodResultAsString);\n if (methodResult.Success) {\n window.location.href = capturedUrl;\n return;\n }\n\n alert(methodResult.Message);\n });\n }\n });\n }\n\n // Adjust canvas coordinate space taking into account pixel ratio,\n // to make it look crisp on mobile devices.\n // This also causes canvas to be cleared.\n function resizeCanvas() {\n // When zoomed out to less than 100%, for some very strange reason,\n // some browsers report devicePixelRatio as less than 1\n // and only part of the canvas is cleared then.\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n\n // This part causes the canvas to be cleared\n canvas.width = canvas.offsetWidth * ratio;\n canvas.height = canvas.offsetHeight * ratio;\n\n const context = canvas.getContext('2d') as CanvasRenderingContext2D;\n context.scale(ratio, ratio);\n\n // This library does not listen for canvas changes, so after the canvas is automatically\n // cleared by the browser, SignaturePad#isEmpty might still return false, even though the\n // canvas looks empty, because the internal data of this library wasn't cleared. To make sure\n // that the state of this library is consistent with visual state of the canvas, you\n // have to clear it manually.\n signaturePad.clear();\n }\n\n function download(dataURL: string, filename: string) {\n if (navigator.userAgent.indexOf('Safari') > -1 && navigator.userAgent.indexOf('Chrome') === -1)\n window.open(dataURL);\n else {\n const blob = dataURLToBlob(dataURL);\n const url = window.URL.createObjectURL(blob);\n\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n\n document.body.appendChild(a);\n a.click();\n\n window.URL.revokeObjectURL(url);\n }\n }\n\n // One could simply use Canvas#toBlob method instead, but it's just to show\n // that it can be done using result of SignaturePad#toDataURL.\n function dataURLToBlob(dataURL: string) {\n // Code taken from https://github.com/ebidel/filer.js\n const parts = dataURL.split(';base64,');\n const contentType = parts[0].split(':')[1];\n const raw = window.atob(parts[1]);\n const rawLength = raw.length;\n const uInt8Array = new Uint8Array(rawLength);\n\n for (let i = 0; i < rawLength; ++i)\n uInt8Array[i] = raw.charCodeAt(i);\n\n return new Blob([uInt8Array], { type: contentType });\n }\n}\n","\"use strict\";\nvar appn;\n(function (appn) {\n var views;\n (function (views) {\n var appRedirect;\n (function (appRedirect) {\n var enrollApp2Fa;\n (function (enrollApp2Fa) {\n function init() {\n initTwoFactorAuth();\n }\n enrollApp2Fa.init = init;\n function initTwoFactorAuth() {\n $('.btn-signin-twoFactorAuth').click(function (e) {\n e.preventDefault();\n let verifyString = '';\n $('.two-factor-auth-verify-code-input').each(function (index, numberElement) {\n verifyString += $(this).val();\n });\n if (verifyString.length !== 6) {\n clearVerifyInputs();\n return;\n }\n $('#TwoFactorAuthVerifyCode').val(verifyString);\n $('#appnForm').submit();\n });\n $('.two-factor-auth-verify-code-input').off().on('input', function () {\n const currentVal = $(this).val().trim();\n const id = $(this).prop('id');\n if (!currentVal)\n return;\n if (currentVal.length > 1) {\n if (id.endsWith('t6')) {\n $(this).val(currentVal.slice(0, -1));\n return;\n }\n const firstSixChars = currentVal.substring(0, 6);\n const bits = firstSixChars.split('');\n $('#twoFactorAuthVerifyCodeInput2').val(bits[1]);\n $('#twoFactorAuthVerifyCodeInput3').val(bits[2]);\n $('#twoFactorAuthVerifyCodeInput4').val(bits[3]);\n $('#twoFactorAuthVerifyCodeInput5').val(bits[4]);\n $('#twoFactorAuthVerifyCodeInput6').val(bits[5]);\n $('#twoFactorAuthVerifyCodeInput1').val(bits[0]).focus().select();\n return;\n }\n if (currentVal.length === 1) {\n if (!id.endsWith('t6'))\n $(this).next().val('').focus();\n return;\n }\n $(this).val(currentVal.slice(0, -1));\n });\n $('.btn-twoFactorAuthClearVerify').off().on('click', function (e) {\n e.preventDefault();\n clearVerifyInputs();\n });\n $(document).on('keypress', function (e) {\n if (e.which !== 13)\n return;\n $('.btn-signin-twoFactorAuth').click();\n });\n }\n function clearVerifyInputs() {\n $('.two-factor-auth-verify-code-input').val('');\n $('#twoFactorAuthVerifyCodeInput1').focus();\n }\n })(enrollApp2Fa = appRedirect.enrollApp2Fa || (appRedirect.enrollApp2Fa = {}));\n })(appRedirect = views.appRedirect || (views.appRedirect = {}));\n })(views = appn.views || (appn.views = {}));\n})(appn || (appn = {}));\n","namespace appn.views.appRedirect.enrollApp2Fa {\n\n export function init(): void {\n initTwoFactorAuth();\n }\n\n function initTwoFactorAuth() {\n\n $('.btn-signin-twoFactorAuth').click(function(e) {\n e.preventDefault();\n\n // Extract all the values into one verify string\n let verifyString = '';\n $('.two-factor-auth-verify-code-input').each(function(index, numberElement) {\n verifyString += $(this).val() as string;\n });\n\n if (verifyString.length !== 6) {\n // Somehow we got here and there are not 6 chars, there must be six\n clearVerifyInputs();\n return;\n }\n\n // Set the verify val and submit\n $('#TwoFactorAuthVerifyCode').val(verifyString);\n $('#appnForm').submit();\n });\n\n $('.two-factor-auth-verify-code-input').off().on('input', function() {\n const currentVal = ($(this).val() as string).trim();\n const id = $(this).prop('id') as string;\n\n if (!currentVal)\n return;\n\n if (currentVal.length > 1) {\n if ((id as any).endsWith('t6')) {\n $(this).val(currentVal.slice(0, -1));\n return;\n }\n\n // If a 6 length char is pasted into any of the inputs then auto paste them into each\n const firstSixChars = currentVal.substring(0, 6);\n const bits = firstSixChars.split('');\n $('#twoFactorAuthVerifyCodeInput2').val(bits[1]);\n $('#twoFactorAuthVerifyCodeInput3').val(bits[2]);\n $('#twoFactorAuthVerifyCodeInput4').val(bits[3]);\n $('#twoFactorAuthVerifyCodeInput5').val(bits[4]);\n $('#twoFactorAuthVerifyCodeInput6').val(bits[5]);\n $('#twoFactorAuthVerifyCodeInput1').val(bits[0]).focus().select();\n return;\n }\n\n if (currentVal.length === 1) {\n if (!(id as any).endsWith('t6'))\n $(this).next().val('').focus(); // Focus on the next input auto\n\n return;\n }\n\n $(this).val(currentVal.slice(0, -1));\n });\n\n $('.btn-twoFactorAuthClearVerify').off().on('click', function(e: Event) {\n e.preventDefault();\n clearVerifyInputs();\n });\n\n // Submit form on Enter key pressed\n $(document).on('keypress', function(e) {\n if (e.which !== 13)\n return;\n\n $('.btn-signin-twoFactorAuth').click();\n });\n }\n\n function clearVerifyInputs() {\n $('.two-factor-auth-verify-code-input').val('');\n $('#twoFactorAuthVerifyCodeInput1').focus();\n }\n}\n","\"use strict\";\nvar appn;\n(function (appn) {\n var views;\n (function (views) {\n var appRedirect;\n (function (appRedirect) {\n var index;\n (function (index) {\n function init() {\n const url = window.location.href;\n if (url.indexOf('oidc') === -1)\n url.toLowerCase();\n const appLinkStart = url.indexOf('link=') + 5;\n let appLink = url.substr(appLinkStart).replace('%26', '&');\n if (appLink.indexOf('?') === -1 && appLink.indexOf('&') > -1)\n appLink = appLink.replace('&', '?');\n $('#btnLaunchLink').attr('href', appLink);\n }\n index.init = init;\n })(index = appRedirect.index || (appRedirect.index = {}));\n })(appRedirect = views.appRedirect || (views.appRedirect = {}));\n })(views = appn.views || (appn.views = {}));\n})(appn || (appn = {}));\n","namespace appn.views.appRedirect.index {\n\n export function init(): void {\n // Create the app link. Has to be done in JavaScript as web standards require & characters to be\n // encoded as %26 to reach the controller. This is not user-friendly.\n const url = window.location.href;\n if (url.indexOf('oidc') === -1)\n url.toLowerCase();\n\n const appLinkStart = url.indexOf('link=') + 5;\n let appLink = url.substr(appLinkStart).replace('%26', '&'); // Cater for users encoding & with %26\n if (appLink.indexOf('?') === -1 && appLink.indexOf('&') > -1)\n appLink = appLink.replace('&', '?'); // replace first instance of & with ? to ensure query string part of url is not malformed\n\n $('#btnLaunchLink').attr('href', appLink);\n }\n}\n"]}