{"version":3,"sources":["Dialogs.js","ExternalPages.js","Messages.js","SnapOnline.js","TabLayout.js"],"names":["snapOnline","$","applyAutofocusToDynamicDialogContent","autofocusTarget","find","first","focus","data","select","updateDynamicDialogLayout","dialog","scroller","length","css","window","innerHeight","setDynamicDialogContentAndOpen","content","open","closeDynamicDialogWindow","windowObject","close","applyAutofocusToDynamicLogInDialogContent","Dialogs","changeDynamicDialogWindowTitle","title","setOptions","onDynamicDialogContentRefreshed","addWaitSpinnerToDialog","dialogWindow","getWaitSpinnerImage","openQwizardWindow","contentUrl","closeActionUrl","modal","draggable","width","height","onQwizardWindowClosed","kendo","ui","progress","element","refresh","center","get","closeSharedDialogWindow","createDynamicDialogWindow","id","kendoWindow","iframe","scrollable","resizable","pinned","actions","position","top","left","innerWidth","activate","deactivate","destroy","createDynamicLogInDialogWindow","onDynamicLogInDialogContentRefreshed","closeDynamicLogInDialogWindow","updateDynamicLogInDialogLayout","changeDynamicDialogLogInWindowTitle","immediatelyDestroyDynamicDialogWindow","closeCustomDialog","dialogSelector","remove","messageDialog","text","messageAndButton","append","html","click","confirmDialog","question","Promise","resolve","reject","message","buttons","waitDialog","waitImgUrl","getSolBaseUrl","kendoDialog","closable","createDownloadDialog","url","createInlineAnalysisDialog","onrefresh","createResponseDownloadDialog","exportFormatid","val","parseInt","batchSelect","userFilterBox","encodeURIComponent","replace","ResponsesPage","getExportOptionFlags","onDownloadReady","cookieName","waitForCookie","then","document","cookie","noop","launchImportDialog","showErrorMessage","iconAndMessage","showDialogSpinner","addClass","removeClass","SnapOnline","jQuery","ExternalPages","onLoginFormSubmitted","form","validate","valid","prop","hide","hideElementUnlessCapsLockOn","event","elementId","getModifierState","getElementById","style","display","Recaptcha","responseid","getResourceActionUrl","params","response","__RequestVerificationToken","getRequestVerificationToken","post","done","captchaResponse","parseJSON","Response","success","show","error","toggleDeviceName","checked","saveCookieStatus","toggle","localStorage","setItem","Login","location","LDAP","Messages","HandleMessage","origin","console","action","SurveyEditing","changeMode","messageback","SaveInlineEdit","handleInlineEditMessage","navigateTo","Seeding","seeding","HomePage","templateId","createSurveyFromTemplate","AnalysisTab","analysisManager","manager","startAnalysis","contextVals","Analysis","ContextValues","context","name","format","surveyid","linkName","formatId","replaceAll","spinner","waitText","MessageParent","parent","postMessage","MessageQwizardUi","actionName","targetWindow","contentWindow","addEventListener","kendoEncode","value","kendoGridFilterQuery","gridName","filterState","grid","dataSourceState","dataSource","transport","parameterMap","filter","sort","group","attr","charAt","substring","getCurrentResourceId","getControllerUrl","controllerName","join","getActionUrl","resourceId","param","replaceElementWithAjaxGet","onSuccess","fail","jqXhr","textStatus","errorThrown","getEnabledDisabledImage","enabledTitle","disabledTitle","getYesNoDontKnowImage","getEnabledImageIfTrue","getWarningImageIfTrue","warningTitle","size","filename","isInIframe","self","e","showDropDown","target","srcElement","closest","stopPropagation","one","flashSelection","jquerySelection","fadeIn","fadeOut","onAccordionItemClicked","sender","siblings","onAccordionPanelClicked","menuItems","next","datePicker","kendoDatePicker","getCookie","cookies","split","n","item","trim","indexOf","timeout","remainingAttempts","downloadInterval","setInterval","clearInterval","setIframeHeightToFitContents","frame","minimumHeight","Math","max","body","scrollHeight","showSpinner","ShowBuildTab","hideBuildTab","HideBuildTab","forceRefresh","href","checkForInvalidCharacters","invalidCharDetected","initializeClipboard","button","clipboard","ClipboardJS","on","clearSelection","label","delay","this","trigger","after","toggleMFASettings","toggleClass","initMFASettings","launchMFAConfigureDialog","paddingLeft","closeMFADialog","uiQwizardResize","interviewFrame","offset","initUiQwizardResize","initUiQwizardToken","sToken","getElementsByName","tokenVal","contents","FrameToken","hiddenInput","createElement","type","appendChild","initUIQwizardFrame","onPageLoad","updateHelpUrl","deleteTrustedDevice","ID","deviceName","splitUrl","reverse","getJSON","state","helpElement","setAttribute","navigateAwayFromEditorHandler","TabLayout","setActivePanelId","panelId","panelLink","refreshSurveyTitleAndStatus","setNavigateAwayFromEditorHandler","remoteHandler","preventDefault"],"mappings":"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","file":"utils.min.js","sourcesContent":["'use strict';\r\n\r\n(function (snapOnline, $) {\r\n // Called when then Dynamic Dialog Window loads new content or finishes the 'open' animation;\r\n // we use it to ensure any autofocus element receives focus.\r\n function applyAutofocusToDynamicDialogContent() {\r\n var autofocusTarget = $('#dynamicDialogWindow').find('input[autofocus]').first();\r\n if (autofocusTarget) {\r\n autofocusTarget.focus();\r\n if (autofocusTarget.data('auto-select-text')) {\r\n autofocusTarget.select();\r\n }\r\n }\r\n }\r\n\r\n // Updates the layout of the Dynamic Dialog window to ensure that the outer padding (provided by\r\n // Kendo) is removed if the content is placed within our own padded container.\r\n function updateDynamicDialogLayout() {\r\n var dialog = $('#dynamicDialogWindow');\r\n var scroller = dialog.find('.modal-dialog-content-scroller');\r\n var content = dialog.find('.modal-dialog-content');\r\n if (content.length) {\r\n dialog.css('padding', '0');\r\n }\r\n if (scroller.length) {\r\n scroller.css('max-height', window.innerHeight - 270);\r\n }\r\n }\r\n\r\n // Sets the content of the Dynamic Dialog Window, updates its layout, then opens the window.\r\n function setDynamicDialogContentAndOpen(dialog, content) {\r\n dialog.content(content);\r\n updateDynamicDialogLayout();\r\n dialog.open();\r\n }\r\n\r\n // Closes and destroys the Kendo Window created by createDynamicDialogWindow().\r\n function closeDynamicDialogWindow() {\r\n var windowObject = $('#dynamicDialogWindow').data('kendoWindow');\r\n if (windowObject) {\r\n windowObject.close();\r\n }\r\n }\r\n\r\n // Ensure required nested namespaces are declared.\r\n snapOnline.Dialogs = snapOnline.Dialogs || {};\r\n\r\n // ----- Public interface from here -----\r\n\r\n snapOnline.Dialogs.changeDynamicDialogWindowTitle = function (title) {\r\n var windowObject = $('#dynamicDialogWindow').data('kendoWindow');\r\n if (windowObject) {\r\n windowObject.setOptions({\r\n title: title\r\n });\r\n }\r\n\r\n return;\r\n };\r\n\r\n // Ensures the Dynamic Dialog Window fits within the screen nicely, and that the first input is focused.\r\n snapOnline.Dialogs.onDynamicDialogContentRefreshed = function () {\r\n updateDynamicDialogLayout();\r\n applyAutofocusToDynamicDialogContent();\r\n };\r\n\r\n // Fills the specified dialog with a 'wait spinner'.\r\n // The 'dialogWindow' parameter should be a Kendo window.\r\n snapOnline.Dialogs.addWaitSpinnerToDialog = function (dialogWindow) {\r\n dialogWindow.content('
' + snapOnline.getWaitSpinnerImage() + '
');\r\n };\r\n\r\n // Opens the Qwizard Window, loading content from the specified URL.\r\n snapOnline.Dialogs.openQwizardWindow = function (title, contentUrl, closeActionUrl) {\r\n var windowObject = $('#qwizardWindow').data('kendoWindow');\r\n windowObject.setOptions({\r\n title: title,\r\n modal: true,\r\n draggable: false,\r\n width: '85%',\r\n height: '85%',\r\n close: function () { snapOnline.Dialogs.onQwizardWindowClosed(closeActionUrl); }\r\n });\r\n windowObject.content('');\r\n kendo.ui.progress(windowObject.element, true);\r\n windowObject.refresh(contentUrl);\r\n windowObject.center();\r\n windowObject.open();\r\n };\r\n\r\n snapOnline.Dialogs.onQwizardWindowClosed = function (closeActionUrl) {\r\n $.get(closeActionUrl);\r\n };\r\n\r\n\r\n // Closes the common Kendo Dialog Window that is created and used from the server-rendered pages.\r\n snapOnline.Dialogs.closeSharedDialogWindow = function () {\r\n var windowObject = $('#dialogWindow').data('kendoWindow');\r\n if (windowObject) {\r\n windowObject.close();\r\n }\r\n };\r\n\r\n // Creates a Kendo Window that is horizontally-centered, placed near the top of the screen, and that resizes vertically to neatly fit its contents.\r\n snapOnline.Dialogs.createDynamicDialogWindow = function (width, title) {\r\n var dialogWindow = $('#dynamicDialogWindow').data('kendoWindow');\r\n if (!dialogWindow) {\r\n $('
', { id: 'dynamicDialogWindow' }).kendoWindow({});\r\n dialogWindow = $('#dynamicDialogWindow').data('kendoWindow');\r\n }\r\n\r\n dialogWindow.setOptions({\r\n modal: true,\r\n iframe: false,\r\n draggable: false,\r\n scrollable: true,\r\n resizable: false,\r\n pinned: false,\r\n actions: ['Close'],\r\n title: title,\r\n width: width,\r\n height: null,\r\n position: {\r\n top: 100,\r\n left: (window.innerWidth - width) / 2\r\n },\r\n refresh: snapOnline.Dialogs.onDynamicDialogContentRefreshed,\r\n activate: applyAutofocusToDynamicDialogContent,\r\n deactivate: function () {\r\n $('#dynamicDialogWindow').data('kendoWindow').destroy();\r\n }\r\n });\r\n\r\n snapOnline.Dialogs.addWaitSpinnerToDialog(dialogWindow);\r\n return dialogWindow;\r\n };\r\n\r\n //Login window functions\r\n snapOnline.Dialogs.createDynamicLogInDialogWindow = function (width, title) {\r\n var dialogWindow = $('#dynamicLogInDialogWindow').data('kendoWindow');\r\n if (!dialogWindow) {\r\n $('
', { id: 'dynamicLogInDialogWindow' }).kendoWindow({});\r\n dialogWindow = $('#dynamicLogInDialogWindow').data('kendoWindow');\r\n }\r\n\r\n dialogWindow.setOptions({\r\n modal: true,\r\n iframe: false,\r\n draggable: false,\r\n scrollable: true,\r\n resizable: false,\r\n pinned: false,\r\n actions: [],\r\n title: title,\r\n width: width,\r\n height: null,\r\n position: {\r\n top: 100,\r\n left: (window.innerWidth - width) / 2\r\n },\r\n refresh: snapOnline.Dialogs.onDynamicLogInDialogContentRefreshed,\r\n activate: applyAutofocusToDynamicLogInDialogContent,\r\n deactivate: function () {\r\n //$('#dynamicLogInDialogWindow').data('kendoWindow').destroy();\r\n //Leave it there for the next time. It will disappear but it won't be destroyed.\r\n }\r\n });\r\n\r\n snapOnline.Dialogs.addWaitSpinnerToDialog(dialogWindow);\r\n return dialogWindow;\r\n };\r\n\r\n snapOnline.Dialogs.closeDynamicLogInDialogWindow = function () {\r\n var windowObject = $('#dynamicLogInDialogWindow').data('kendoWindow');\r\n if (windowObject) {\r\n windowObject.close();\r\n }\r\n };\r\n\r\n snapOnline.Dialogs.onDynamicLogInDialogContentRefreshed = function () {\r\n updateDynamicLogInDialogLayout();\r\n applyAutofocusToDynamicLogInDialogContent();\r\n };\r\n\r\n function updateDynamicLogInDialogLayout() {\r\n var dialog = $('#dynamicLogInDialogWindow');\r\n var scroller = dialog.find('.modal-dialog-content-scroller');\r\n var content = dialog.find('.modal-dialog-content');\r\n if (content.length) {\r\n dialog.css('padding', '0');\r\n }\r\n if (scroller.length) {\r\n scroller.css('max-height', window.innerHeight - 270);\r\n }\r\n }\r\n\r\n function applyAutofocusToDynamicLogInDialogContent() {\r\n var autofocusTarget = $('#dynamicLogInDialogWindow').find('input[autofocus]').first();\r\n if (autofocusTarget) {\r\n autofocusTarget.focus();\r\n if (autofocusTarget.data('auto-select-text')) {\r\n autofocusTarget.select();\r\n }\r\n }\r\n }\r\n\r\n snapOnline.Dialogs.changeDynamicDialogLogInWindowTitle = function (title) {\r\n var windowObject = $('#dynamicLogInDialogWindow').data('kendoWindow');\r\n if (windowObject) {\r\n windowObject.setOptions({\r\n title: title\r\n });\r\n }\r\n\r\n return;\r\n };\r\n //END Login window functions\r\n\r\n // Closes and destroys the Kendo Window created by createDynamicDialogWindow().\r\n snapOnline.Dialogs.closeDynamicDialogWindow = closeDynamicDialogWindow;\r\n\r\n // Immediately closes the Dynamic Dialog Window, if it exists (without a closing animation).\r\n snapOnline.Dialogs.immediatelyDestroyDynamicDialogWindow = function () {\r\n var dialogWindow = $('#dynamicDialogWindow').data('kendoWindow');\r\n if (dialogWindow) {\r\n dialogWindow.destroy();\r\n }\r\n };\r\n\r\n // Closes and destroys a custom client-side dialog created by one of the functions below.\r\n snapOnline.Dialogs.closeCustomDialog = function (dialogSelector) {\r\n dialogSelector.data('kendoDialog').close().destroy();\r\n dialogSelector.remove();\r\n };\r\n\r\n // Shows an informational message.\r\n snapOnline.Dialogs.messageDialog = function (text, title) {\r\n var messageAndButton = $('
')\r\n .append($('
').append($('
').html(text)))\r\n .append($('
').append($('
')\r\n .append($('').click(closeDynamicDialogWindow).append('OK')))\r\n );\r\n\r\n var dialog = snapOnline.Dialogs.createDynamicDialogWindow(350, title || 'Message');\r\n setDynamicDialogContentAndOpen(dialog, messageAndButton);\r\n };\r\n\r\n // Shows a confirmation dialog, with OK and Cancel buttons.\r\n // Returns a Promise that resolves if the user clicks OK, otherwise rejects.\r\n snapOnline.Dialogs.confirmDialog = function (question, title) {\r\n return new Promise(function (resolve, reject) {\r\n var message = $('
').append($('
').append($('
').html(question)));\r\n var buttons = $('
');\r\n buttons.append($('
').append($('').click(function () {\r\n closeDynamicDialogWindow();\r\n reject();\r\n }).append('Cancel')));\r\n buttons.append($('
').append($('').click(function () {\r\n closeDynamicDialogWindow();\r\n resolve(true);\r\n }).append('OK')));\r\n\r\n var dialogWindow = snapOnline.Dialogs.createDynamicDialogWindow(400, title);\r\n dialogWindow.setOptions({\r\n actions: []\r\n });\r\n setDynamicDialogContentAndOpen(dialogWindow, $('
').append([message, buttons]));\r\n });\r\n };\r\n\r\n // Creates a new client-side Wait Dialog, and returns its selector.\r\n snapOnline.Dialogs.waitDialog = function (text, title) {\r\n var waitImgUrl = snapOnline.getSolBaseUrl() + '/Content/Images/smallspinner.gif';\r\n var dialogSelector = $('
');\r\n dialogSelector.kendoDialog({\r\n closable: false,\r\n modal: true,\r\n width: 400,\r\n title: title || 'Please wait',\r\n content: '

' + text + '

',\r\n actions: []\r\n });\r\n dialogSelector.data('kendoDialog').open();\r\n return dialogSelector;\r\n };\r\n\r\n // Launches a dialog that will indicate a data export is in-progress, prior to download.\r\n // The data might be response data, a Snap Database Link output, or Participants export.\r\n snapOnline.Dialogs.createDownloadDialog = function (url) {\r\n var windowObject = snapOnline.Dialogs.createDynamicDialogWindow(500, 'Preparing download...');\r\n windowObject.refresh(url);\r\n windowObject.open();\r\n };\r\n\r\n snapOnline.Dialogs.createInlineAnalysisDialog = function (url, onrefresh) {\r\n var windowObject = snapOnline.Dialogs.createDynamicDialogWindow(500, 'Run Report');\r\n windowObject.setOptions({\r\n height: 250,\r\n refresh: onrefresh\r\n });\r\n windowObject.refresh(url);\r\n windowObject.open();\r\n };\r\n\r\n //Specific to downloading responses as the format is obtained from a hiddn field that is held in the selctedFormatId dom element\r\n snapOnline.Dialogs.createResponseDownloadDialog = function (url) {\r\n var exportFormatid = $('input[id=selectedFormatId]').val();\r\n url = url + '&formatId=' + parseInt(exportFormatid);\r\n\r\n var batchSelect = $('select[id=batchOptions]');\r\n if (batchSelect.length) {\r\n url = url + '&batchStart=' + parseInt(batchSelect.val());\r\n }\r\n else {\r\n url = url + '&batchStart=0';\r\n }\r\n\r\n var userFilterBox = $('input[id=userFilter]');\r\n if (userFilterBox.length) {\r\n var encodedValue = encodeURIComponent(userFilterBox.val()).replace('+', '%20');\r\n url = url + '&userFilter=' + encodedValue;\r\n }\r\n else {\r\n url = url + '&userFilter=';\r\n }\r\n\r\n var snapExportOptionFlag = 0;\r\n snapExportOptionFlag = snapOnline.ResponsesPage.getExportOptionFlags();\r\n url = url + '&exportOptions=' + snapExportOptionFlag;\r\n\r\n snapOnline.Dialogs.createDownloadDialog(url);\r\n };\r\n\r\n // Called from ExportDownload.cshtml; it initiates the download, then watches for a cookie (set by the arrival of the download),\r\n // and closes the pop-up dialog when this cookie is found.\r\n snapOnline.Dialogs.onDownloadReady = function (cookieName) {\r\n $('#dynamicDialogWindow').data('kendoWindow').setOptions({ title: 'Download ready' });\r\n snapOnline.waitForCookie(cookieName).then(function () {\r\n snapOnline.Dialogs.closeDynamicDialogWindow();\r\n document.cookie = cookieName + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;'; // Remove the cookie.\r\n }, snapOnline.noop);\r\n $('#auto-download-link')[0].click();\r\n };\r\n\r\n // Launch dialog to upload a file for an import Database Link.\r\n snapOnline.Dialogs.launchImportDialog = function (title, url) {\r\n var windowObject = snapOnline.Dialogs.createDynamicDialogWindow(500, title);\r\n windowObject.refresh(url);\r\n windowObject.open();\r\n };\r\n\r\n\r\n // Shows an error message, either in the existing dynamic dialog window, or in a new dialog.\r\n snapOnline.Dialogs.showErrorMessage = function (message) {\r\n var dialogSelector = $('#dynamicDialogWindow');\r\n var iconAndMessage = '
 ' + message + '
';\r\n if (dialogSelector.length) {\r\n dialogSelector.data('kendoWindow').content(iconAndMessage);\r\n updateDynamicDialogLayout();\r\n } else {\r\n var dialog = snapOnline.Dialogs.createDynamicDialogWindow(400, 'Error');\r\n setDynamicDialogContentAndOpen(dialog, iconAndMessage);\r\n }\r\n };\r\n\r\n // Called when a button is clicked in a suitable dialog.\r\n // Hide buttons and show wait-spinner.\r\n snapOnline.Dialogs.showDialogSpinner = function () {\r\n $('#snapDialogButtons').addClass('hide');\r\n $('#snapDialogSpinner').removeClass('hide');\r\n };\r\n\r\n}(window.SnapOnline = window.SnapOnline || {}, jQuery));\r\n","'use strict';\r\n\r\n// Functions for external pages (those accessible without logging in).\r\n(function (snapOnline, $) {\r\n // Ensure required nested namespaces are declared.\r\n snapOnline.ExternalPages = snapOnline.ExternalPages || {};\r\n\r\n // Enhances the login page by disabling duplicate submissions once the \"Log in\" button has been clicked.\r\n snapOnline.ExternalPages.onLoginFormSubmitted = function () {\r\n var form = $('#loginForm');\r\n form.validate();\r\n if (form.valid()) {\r\n form.find(':input').prop('readonly', true);\r\n form.find(':button').prop('disabled', true).addClass('loading');\r\n $('#loginFailedMessage').hide();\r\n }\r\n };\r\n // Toggles the \"display\" CSS property of the specified element, depending upon the keyboard's Caps Lock state.\r\n snapOnline.ExternalPages.hideElementUnlessCapsLockOn = function (event, elementId) {\r\n if ((typeof event.getModifierState) !== 'undefined') {\r\n if (event.getModifierState('CapsLock')) {\r\n document.getElementById(elementId).style.display = 'initial';\r\n } else {\r\n document.getElementById(elementId).style.display = 'none';\r\n }\r\n }\r\n };\r\n\r\n snapOnline.ExternalPages.Recaptcha = function (responseid) {\r\n var url = snapOnline.getResourceActionUrl('Account', 'VerifyCaptcha');\r\n var params = {\r\n response: responseid,\r\n __RequestVerificationToken: snapOnline.getRequestVerificationToken()\r\n };\r\n jQuery.post(url, params)\r\n .done(function (response) {\r\n var captchaResponse = jQuery.parseJSON(response.Response);\r\n if (captchaResponse.success) {\r\n $('#hfCaptcha').val(captchaResponse.success);\r\n $('#rfvCaptcha').hide();\r\n } else {\r\n $('#hfCaptcha').val('');\r\n $('#rfvCaptcha').show();\r\n var error = captchaResponse['error-codes'][0];\r\n $('#rfvCaptcha').html('RECaptcha error. ' + error);\r\n }\r\n });\r\n };\r\n\r\n snapOnline.ExternalPages.toggleDeviceName = function () {\r\n var rememberCheckBox = $('#RememberBrowser');\r\n if (rememberCheckBox[0].checked) {\r\n $('#deviceDiv').removeClass('hidden');\r\n } else {\r\n $('#deviceDiv').addClass('hidden');\r\n } \r\n };\r\n\r\n snapOnline.ExternalPages.saveCookieStatus = function () {\r\n $('#cookieBanner').toggle();\r\n localStorage.setItem('HideCookieBanner', 'true');\r\n };\r\n\r\n snapOnline.ExternalPages.Login = function () {\r\n var url = snapOnline.getResourceActionUrl('Account', 'Login');\r\n window.location = url;\r\n return false;\r\n };\r\n\r\n snapOnline.ExternalPages.LDAP = function () {\r\n var url = snapOnline.getResourceActionUrl('Account', 'LDAP');\r\n window.location = url;\r\n return false;\r\n };\r\n\r\n}(window.SnapOnline = window.SnapOnline || {}, jQuery));\r\n","'use strict';\r\n\r\n(function (snapOnline, $) {;\r\n // Ensure required nested namespaces are declared.\r\n snapOnline.Messages = snapOnline.Messages || {};\r\n\r\n function navigateTo(url) {\r\n window.location.replace(url);\r\n }\r\n function handleInlineEditMessage(message){\r\n switch (message.data.action) {\r\n case 'editfields': {\r\n SnapOnline.SurveyEditing.changeMode(true, message.data.messageback);\r\n }\r\n break;\r\n case 'previewfields': {\r\n SnapOnline.SurveyEditing.changeMode(false, message.data.messageback);\r\n }\r\n break;\r\n case 'savefields': {\r\n SnapOnline.SurveyEditing.SaveInlineEdit();\r\n } \r\n break;\r\n case 'cancelfields': {\r\n SnapOnline.SurveyEditing.changeMode(false, message.data.messageback);//oddly this works better?\r\n //SnapOnline.SurveyEditing.CancelInlineEdit(false);\r\n }\r\n break;\r\n default:\r\n console.error(\"unknown inline message action: \" + message.data.action);\r\n }\r\n };\r\n\r\n // ----- Public interface from here -----\r\n snapOnline.Messages.HandleMessage = function (message) {\r\n if (message.origin != window.origin) {\r\n console.error(\"cross origin message from\" + message.origin);\r\n } else if (!message.data.action){\r\n console.error(\"no message action from\" + message.origin);\r\n } else {\r\n switch (message.data.action) {\r\n case 'editfields': \r\n case 'previewfields':\r\n case 'savefields':\r\n case 'cancelfields': {\r\n if (SnapOnline.SurveyEditing) {\r\n handleInlineEditMessage(message);\r\n } else {\r\n console.error(\"Editing module not available\");\r\n }\r\n }\r\n break;\r\n case 'navigate': {\r\n if (!message.data.url) {\r\n console.error(\"Navigate message has no url\");\r\n } else {\r\n navigateTo(message.data.url);\r\n }\r\n }\r\n break;\r\n case 'rebuild': { //coming from child iframe, this one\r\n if (!snapOnline.Dialogs) {\r\n console.error(\"dialogs module not loaded\");\r\n } else {\r\n var Seeding = null;\r\n if (message.data.seeding) {\r\n Seeding = message.data.seeding;\r\n }\r\n snapOnline.Dialogs.immediatelyDestroyDynamicDialogWindow();\r\n //null surveyID is fetched from meta sol-resource-id\r\n snapOnline.Dialogs.openQwizardWindow('Rebuild...', snapOnline.getResourceActionUrl('SurveyEditing', 'QwizardFromUi', null, { seeding: Seeding}));\r\n }\r\n }\r\n break;\r\n case 'createnew': {\r\n if (!snapOnline.HomePage) {\r\n console.error(\"home page module not loaded\");\r\n } else if (!message.data.templateId) {\r\n console.error(\"Create message has no template id\");\r\n } else {\r\n var Seeding = null;\r\n if (message.data.seeding) {\r\n Seeding = message.data.seeding;\r\n }\r\n SnapOnline.HomePage.createSurveyFromTemplate(message.data.templateId, null, Seeding);\r\n }\r\n }\r\n break;\r\n case 'runreport': {\r\n if (!SnapOnline.AnalysisTab.analysisManager) {\r\n console.error(\"analysis module not loaded\");\r\n } else {\r\n SnapOnline.Dialogs.immediatelyDestroyDynamicDialogWindow();\r\n var url = SnapOnline.getResourceActionUrl('QwizardUI', 'InlineAnalysis');\r\n var manager = SnapOnline.AnalysisTab.analysisManager;\r\n if (typeof manager.startAnalysis != \"function\") {\r\n console.error(\"startAnalysis is missing\");\r\n }\r\n var contextVals = new snapOnline.Analysis.ContextValues(message.data.context);\r\n var onrefresh = function () { manager.startAnalysis(\"Report\", message.data.name, false, true, contextVals); };\r\n SnapOnline.Dialogs.createInlineAnalysisDialog(url, onrefresh);\r\n }\r\n }\r\n break;\r\n case 'exportdata': {\r\n if (!SnapOnline.Dialogs) {\r\n console.error(\"dialog module not loaded\");\r\n } else {\r\n var format = 0;\r\n if (message.data.format === 'xlsx')\r\n format = 1;\r\n var url = SnapOnline.getResourceActionUrl('Response', 'InitiateDbLinkExport', message.data.surveyid, { linkName: message.data.name, formatId: format});\r\n SnapOnline.Dialogs.createDownloadDialog(url);\r\n }\r\n }\r\n break;\r\n case 'importdata':\r\n case 'replacedata': {\r\n if (!SnapOnline.Dialogs) {\r\n console.error(\"dialog module not loaded\");\r\n } else if (!SnapOnline.ResponsesPage) {\r\n console.error(\"responses module not loaded\");\r\n } else {\r\n var replaceAll = (message.data.action === 'replacedata');\r\n var url = SnapOnline.getResourceActionUrl('Response', 'Import', message.data.surveyid, { linkName: message.data.name, replaceAll: replaceAll});\r\n SnapOnline.Dialogs.launchImportDialog('Upload data file', url);\r\n }\r\n }\r\n break;\r\n case 'createspinner': {\r\n if (!snapOnline.Dialogs) {\r\n console.error(\"dialogs module not loaded\");\r\n } else {\r\n if (snapOnline.Messages.spinner) {\r\n snapOnline.Dialogs.closeCustomDialog(snapOnline.Messages.spinner);\r\n }\r\n snapOnline.Messages.spinner = snapOnline.Dialogs.waitDialog(message.data.waitText);\r\n }\r\n }\r\n break;\r\n case 'removespinner': {\r\n if (!snapOnline.Dialogs) {\r\n console.error(\"dialogs module not loaded\");\r\n } else {\r\n if (snapOnline.Messages.spinner) {\r\n snapOnline.Dialogs.closeCustomDialog(snapOnline.Messages.spinner);\r\n }\r\n snapOnline.Messages.spinner = null;\r\n }\r\n }\r\n break;\r\n default:\r\n console.error(\"unknown message action: \" + message.data.action);\r\n }\r\n }\r\n };\r\n\r\n snapOnline.Messages.MessageParent = function (message) {\r\n window.parent.postMessage(message, window.origin);\r\n };\r\n\r\n snapOnline.Messages.MessageQwizardUi = function (actionName) {\r\n var targetWindow = document.getElementById('UiFrame');\r\n if (!targetWindow) {\r\n console.error(\"cannot find target UiFrame\");\r\n } else {\r\n var message = {};\r\n message.action = actionName;\r\n targetWindow.contentWindow.postMessage(message, window.origin);\r\n }\r\n };\r\n\r\n window.addEventListener('message', snapOnline.Messages.HandleMessage);\r\n\r\n}(window.SnapOnline = window.SnapOnline || {}, jQuery));","'use strict';\r\n\r\n// This file must be included in an environment that also includes the ClipboardJS library.\r\n/* global ClipboardJS */\r\n\r\n(function (snapOnline, $) {\r\n // ----- Public interface from here -----\r\n\r\n // An empty function (that can be used with Promises, for example).\r\n snapOnline.noop = function () {\r\n };\r\n\r\n // Encodes a string to make it safe for use in a Kendo ClientTemplate.\r\n snapOnline.kendoEncode = function (value) {\r\n return value.replace(\"'\", ''');\r\n };\r\n\r\n // Get the filters from a Kendo grid. Its a [DataSourceRequest] in theory\r\n snapOnline.kendoGridFilterQuery = function (gridName) {\r\n var filterState = '';\r\n var grid = $('#' + gridName);\r\n if (grid !== null) {\r\n grid = grid.data('kendoGrid');\r\n }\r\n if (grid !== null) { \r\n var dataSourceState = grid.dataSource.transport.parameterMap({ filter: grid.dataSource.filter(), sort: grid.dataSource.sort() });\r\n filterState = '&filter=' + dataSourceState.filter\r\n + '&group=' + dataSourceState.group\r\n + '&sort=' + dataSourceState.sort;\r\n }\r\n return filterState;\r\n };\r\n\r\n\r\n // Gets the Snap Online base URL, from a meta tag. The URL\r\n // will *not* include a trailing slash.\r\n snapOnline.getSolBaseUrl = function () {\r\n var url = $('meta[name=\"sol-base\"]').attr('value');\r\n if (url.charAt(url.length - 1) === '/') {\r\n url = url.substring(0, url.length - 1);\r\n }\r\n return url;\r\n };\r\n\r\n // Gets a string containing the GUID of the current Resource.\r\n snapOnline.getCurrentResourceId = function () {\r\n return $('meta[name=\"sol-resource-id\"]').attr('value');\r\n };\r\n\r\n // Obtain the anti-forgery token embedded in the current page.\r\n snapOnline.getRequestVerificationToken = function () {\r\n return $('input[name=\"__RequestVerificationToken\"]').val();\r\n };\r\n\r\n // Returns a string containing the URL path of the specified ASP.NET MVC Controller.\r\n snapOnline.getControllerUrl = function (controllerName) {\r\n return [snapOnline.getSolBaseUrl(), controllerName].join('/');\r\n };\r\n\r\n // Returns a string containing the URL path to the specified ASP.NET MVC Action.\r\n snapOnline.getActionUrl = function (controllerName, actionName) {\r\n return [snapOnline.getSolBaseUrl(), controllerName, actionName].join('/');\r\n };\r\n\r\n // Returns a string containing the URL path to the specified ASP.NET MVC Action,\r\n // for the current (default) or specified resource, with optional query-string parameters.\r\n snapOnline.getResourceActionUrl = function (controllerName, actionName, resourceId, params) {\r\n var url = [\r\n snapOnline.getActionUrl(controllerName, actionName),\r\n resourceId || snapOnline.getCurrentResourceId()\r\n ].join('/');\r\n return params ? [url, $.param(params)].join('?') : url;\r\n };\r\n\r\n // An alternative for Ajax.ActionLink() that can be called from code, linked to buttons etc.\r\n snapOnline.replaceElementWithAjaxGet = function (elementId, url, onSuccess) {\r\n return new Promise(function (resolve, reject) {\r\n jQuery.get(url)\r\n .done(function (response) {\r\n $('#' + elementId).html(response);\r\n resolve(response);\r\n if (typeof onSuccess === 'function') {\r\n onSuccess();\r\n }\r\n })\r\n .fail(function (jqXhr, textStatus, errorThrown) {\r\n reject(jqXhr, textStatus, errorThrown);\r\n });\r\n });\r\n };\r\n\r\n // Returns HTML for an image tag that shows an icon indicating an enabled or disabled state.\r\n // The enabled and disabled titles can optionally be provided.\r\n snapOnline.getEnabledDisabledImage = function (value, enabledTitle, disabledTitle) {\r\n enabledTitle = (typeof enabledTitle === 'undefined') ? 'Enabled' : enabledTitle;\r\n disabledTitle = (typeof disabledTitle === 'undefined') ? 'Disabled' : disabledTitle;\r\n if (value) {\r\n return '';\r\n } else {\r\n return '';\r\n }\r\n };\r\n\r\n // Returns HTML for an image tag that shows an icon indicating a yes, no, don't know state.\r\n snapOnline.getYesNoDontKnowImage = function (value) {\r\n if (value === 0) {\r\n return '';\r\n } else if (value === 1) {\r\n return '';\r\n } else {\r\n return '';\r\n }\r\n };\r\n\r\n // Returns HTML for an image tag that shows an 'positive' icon if value=true, or nothing otherwise.\r\n snapOnline.getEnabledImageIfTrue = function (value, enabledTitle) {\r\n return value ? snapOnline.getEnabledDisabledImage(true, enabledTitle) : '';\r\n };\r\n\r\n // Returns HTML for an image tag that shows an 'warning' icon if value=true, or nothing otherwise.\r\n snapOnline.getWarningImageIfTrue = function (value, warningTitle) {\r\n warningTitle = (typeof warningTitle === 'undefined') ? 'Warning' : warningTitle;\r\n return value ? '' : '';\r\n };\r\n\r\n // Returns HTML for an image tag that shows a \"please wait\" spinner.\r\n snapOnline.getWaitSpinnerImage = function (size) {\r\n var filename = (size === 'small') ? 'smallspinner.gif' : 'spinner.gif';\r\n return '\"\"/';\r\n };\r\n\r\n // Returns a Boolean indicating if the current script is hosted inside an IFrame.\r\n snapOnline.isInIframe = function () {\r\n try {\r\n return window.self !== window.top;\r\n } catch (e) {\r\n return true;\r\n }\r\n };\r\n\r\n // Handles the click in a clickable drop-down button / menu.\r\n snapOnline.showDropDown = function (e) {\r\n var target = $(e.srcElement).closest('.clickable-dropdown').find('.dropdown-content').first();\r\n if ((target.length > 0) && (target.css('display') === 'none')) {\r\n e.stopPropagation();\r\n target.css('display', 'inline-block');\r\n $(document).one('click', function () { target.css('display', 'none'); });\r\n }\r\n };\r\n\r\n // 'Flashes' the elements in the specified jQuery selection, to draw attention to them.\r\n snapOnline.flashSelection = function (jquerySelection) {\r\n jquerySelection.fadeIn(100).fadeOut(100).fadeIn(100).fadeOut(100).fadeIn(100);\r\n };\r\n\r\n // Called when a user clicks on a menu-item within an accordion panel. It updates the DOM to highlight the \"current page\".\r\n snapOnline.onAccordionItemClicked = function (sender) {\r\n if (sender) {\r\n var element = $(sender);\r\n element.siblings().removeClass('active');\r\n element.addClass('active');\r\n }\r\n };\r\n\r\n // Handles the click on an Accordion header, where the accordion is essentially a \"section-based menu\".\r\n // Replaces the MainPanel with the specified URL, and highlights the first item in the section.\r\n snapOnline.onAccordionPanelClicked = function (sender, url) {\r\n if (url) {\r\n snapOnline.replaceElementWithAjaxGet('MainPanel', url);\r\n }\r\n if (sender) {\r\n var menuItems = $(sender).next().find('ul.sublist li');\r\n menuItems.removeClass('active');\r\n menuItems.first().addClass('active');\r\n }\r\n };\r\n\r\n snapOnline.datePicker = function (element) {\r\n var format = $('meta[name=\"sol-date-format\"]').attr('value');\r\n\r\n element.kendoDatePicker({\r\n format: format // set custom defined format\r\n });\r\n };\r\n\r\n // Returns the value of the specified cookie, or NULL if no such cookie is found.\r\n snapOnline.getCookie = function (cookieName) {\r\n cookieName += '=';\r\n var cookies = document.cookie.split(';');\r\n for (var n = 0; n < cookies.length; n++) {\r\n var item = cookies[n].trim();\r\n if (item.indexOf(cookieName) === 0) {\r\n return item.substring(cookieName.length, item.length);\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n // Returns a promise that resolves when a cookie with the specified name exists, or rejects if a timeout is reached first.\r\n snapOnline.waitForCookie = function (cookieName, timeout) {\r\n var remainingAttempts = timeout || 30;\r\n return new Promise(function (resolve, reject) {\r\n var downloadInterval = setInterval(function () {\r\n if (snapOnline.getCookie(cookieName)) {\r\n clearInterval(downloadInterval);\r\n resolve();\r\n }\r\n if (remainingAttempts-- <= 0) {\r\n clearInterval(downloadInterval);\r\n reject();\r\n }\r\n }, 1000);\r\n });\r\n };\r\n\r\n // Set an IFrame's height to fit its contents.\r\n snapOnline.setIframeHeightToFitContents = function (frame, minimumHeight) {\r\n frame.style.height = 0;\r\n // Note: the \"24\" on the line below is an unfortunate but apparently-necessary \"magic number\", without\r\n // which the IFrame seems to end up slightly too small.\r\n frame.style.height = (Math.max(minimumHeight || 0, frame.contentWindow.document.body.scrollHeight) + 24) + 'px';\r\n };\r\n\r\n snapOnline.showSpinner = function () {\r\n $('#waitSpinner').show();\r\n };\r\n\r\n snapOnline.ShowBuildTab = function (id) {\r\n var prompt = 'Are you sure you want to allow access to the build tab?';\r\n snapOnline.Dialogs.confirmDialog(prompt, 'Access build tab?').then(function () {\r\n var url = snapOnline.getResourceActionUrl('UAResource', 'ToggleBuildTab', id);\r\n jQuery.post(url, { __RequestVerificationToken: snapOnline.getRequestVerificationToken(), hideBuildTab: false });\r\n }, snapOnline.noop);\r\n };\r\n\r\n snapOnline.HideBuildTab = function (id) {\r\n var prompt = 'Are you sure you want to hide access to the build tab?';\r\n snapOnline.Dialogs.confirmDialog(prompt, 'Hide build tab?').then(function () {\r\n var url = snapOnline.getResourceActionUrl('UAResource', 'ToggleBuildTab', id);\r\n jQuery.post(url, { __RequestVerificationToken: snapOnline.getRequestVerificationToken(), hideBuildTab: true });\r\n }, snapOnline.noop);\r\n };\r\n\r\n snapOnline.forceRefresh = function () {\r\n window.location = window.location.href;\r\n };\r\n\r\n snapOnline.checkForInvalidCharacters = function () {\r\n var invalidCharDetected = jQuery('#UserName').val().indexOf('<', 0) > 0 || jQuery('#UserName').val().indexOf('>', 0) > 0;\r\n if (invalidCharDetected) {\r\n var prompt = 'User name not permitted to have < or >';\r\n snapOnline.Dialogs.messageDialog(prompt, 'Invalid characters');\r\n }\r\n return !invalidCharDetected;\r\n };\r\n\r\n snapOnline.initializeClipboard = function (button) {\r\n var clipboard = new ClipboardJS(button, {\r\n text: function () {\r\n return $(button).attr('data-copyable-text');\r\n }\r\n });\r\n\r\n clipboard.on('success', function (e) {\r\n e.clearSelection();\r\n var label = jQuery('').addClass('copyableTextCopied margin-left-1em').text('Copied').delay(800).fadeOut(500, function () {\r\n $(this).remove();\r\n });\r\n $(e.trigger).closest('.sol-input-addon-container').first().after(label);\r\n });\r\n\r\n return clipboard;\r\n };\r\n\r\n snapOnline.toggleMFASettings = function () {\r\n $('#mfaOptions').toggleClass('hidden');\r\n };\r\n\r\n snapOnline.initMFASettings = function () {\r\n var enableMFA = $('#enableMFA');\r\n if (enableMFA[0].checked) {\r\n $('#mfaOptions').removeClass('hidden');\r\n } else {\r\n $('#mfaOptions').addClass('hidden');\r\n }\r\n };\r\n\r\n snapOnline.launchMFAConfigureDialog = function () {\r\n $('#configureEmail').css({ top: '50px', height: '0px', width: '400px', paddingLeft: '10px' });\r\n $('#configureApp').css({ top: '50px', height: '0px', width: '400px' });\r\n var windowObject = snapOnline.Dialogs.createDynamicDialogWindow(600, 'Configure MFA');\r\n windowObject.refresh(snapOnline.getResourceActionUrl('Account', 'ConfigureMFA'));\r\n windowObject.open();\r\n };\r\n\r\n snapOnline.closeMFADialog = function (message) {\r\n snapOnline.replaceElementWithAjaxGet('MainPanel', snapOnline.getResourceActionUrl('Account', 'Security'));\r\n if ((message === '') || (message === null)) {\r\n snapOnline.Dialogs.closeDynamicDialogWindow();\r\n } else {\r\n snapOnline.Dialogs.messageDialog(message, 'Configure MFA');\r\n }\r\n };\r\n\r\n snapOnline.uiQwizardResize = function () {\r\n var interviewFrame = $(\"#UiFrame\");\r\n interviewFrame.css('width', '100%');\r\n var height = $(window).height();\r\n interviewFrame.css('height', height - interviewFrame.offset().top - 6);\r\n };\r\n\r\n snapOnline.initUiQwizardResize = function () {\r\n window.addEventListener(\"resize\", snapOnline.uiQwizardResize)\r\n snapOnline.uiQwizardResize();\r\n };\r\n\r\n snapOnline.initUiQwizardToken = function () {\r\n //Found I had to grab the request verification token that the mvc helper inserted\r\n //and create a hidden field in code and append it to the form so that when navigating\r\n //through the wizard the Next method on the qwizard controller can be reached.\r\n var sToken = document.getElementsByName(\"__RequestVerificationToken\")[0];\r\n var tokenVal = \"\"; \r\n if (sToken) {\r\n tokenVal = sToken.value;\r\n }\r\n var interviewFrame = $(\"#UiFrame\").contents();\r\n var FrameToken = interviewFrame.find('#SnapForm input[name = __RequestVerificationToken]');\r\n if (FrameToken.length) {\r\n FrameToken[0].value = tokenVal;\r\n }\r\n else {\r\n var hiddenInput = document.createElement('input');\r\n hiddenInput.type = 'hidden';\r\n hiddenInput.name = '__RequestVerificationToken';\r\n hiddenInput.value = tokenVal;\r\n var form = interviewFrame.find('#SnapForm');\r\n form[0].appendChild(hiddenInput);\r\n }\r\n\r\n };\r\n snapOnline.initUIQwizardFrame = function () {\r\n if (typeof onPageLoad === \"function\") {\r\n onPageLoad();\r\n }\r\n snapOnline.initUiQwizardToken();\r\n snapOnline.initUiQwizardResize();\r\n snapOnline.updateHelpUrl();\r\n };\r\n\r\n snapOnline.deleteTrustedDevice = function (ID, deviceName) {\r\n snapOnline.Dialogs.confirmDialog('Are you sure you want to delete \"' + deviceName + '\"?', 'Delete trusted device').then(function () {\r\n var url = snapOnline.getResourceActionUrl('Account', 'DeleteTrustedDevice', ID);\r\n jQuery.post(url, { __RequestVerificationToken: snapOnline.getRequestVerificationToken() })\r\n .done(function (response) {\r\n $('#MainPanel').html(response);\r\n });\r\n }, snapOnline.noop);\r\n };\r\n\r\n snapOnline.updateHelpUrl = function () {\r\n var currentUrl = window.location.href;\r\n var splitUrl = currentUrl.split('/').reverse();\r\n var url = snapOnline.getResourceActionUrl('Survey', 'HelpUrl', splitUrl[0]);\r\n jQuery.getJSON(url, function (data, state) {\r\n if (typeof (data) === 'string' && data !== \"\") {\r\n var helpElement = $('#HelpUrl')[0];\r\n if (typeof (helpElement) !== 'undefined') {\r\n helpElement.setAttribute('href', data);\r\n }\r\n }\r\n });\r\n };\r\n\r\n}(window.SnapOnline = window.SnapOnline || {}, jQuery));\r\n","'use strict';\r\n\r\nvar navigateAwayFromEditorHandler = null;\r\n\r\n(function (snapOnline, $) {\r\n // Ensure required nested namespaces are declared.\r\n snapOnline.TabLayout = snapOnline.TabLayout || {};\r\n\r\n // ----- Public interface from here -----\r\n\r\n // Adds the 'active' CSS class to the element with the specified ID, and removes\r\n // it from all siblings. Used to highlight an item in the accordion.\r\n snapOnline.TabLayout.setActivePanelId = function (panelId) {\r\n var panelLink = $('#' + panelId);\r\n if (panelLink.length) {\r\n panelLink.siblings().removeClass('active');\r\n panelLink.addClass('active');\r\n }\r\n };\r\n\r\n // Refresh the \"legend\" - this is the Survey name and status (such as \"My Survey - Started, 3 respondents\")\r\n // that appears above the four main tabs of the application.\r\n snapOnline.TabLayout.refreshSurveyTitleAndStatus = function () {\r\n snapOnline.replaceElementWithAjaxGet('legend', snapOnline.getResourceActionUrl('Resource', 'Legend'));\r\n };\r\n\r\n // Registers a function, provided by the JS Survey Editor, which is called when the user\r\n // clicks on any link in the SOL \"header\" area (which would have the effect of leaving\r\n // the editor). This allows the editor to display a friendly \"are you sure?\" message.\r\n snapOnline.TabLayout.setNavigateAwayFromEditorHandler = function (remoteHandler) {\r\n if (remoteHandler) {\r\n if (navigateAwayFromEditorHandler === null) {\r\n var handler = function (e) {\r\n e.preventDefault();\r\n navigateAwayFromEditorHandler($(e.target).closest('a').attr('href'));\r\n return false;\r\n };\r\n $('a[data-editor-intercepts-click]').click(handler);\r\n }\r\n navigateAwayFromEditorHandler = remoteHandler;\r\n }\r\n };\r\n}(window.SnapOnline = window.SnapOnline || {}, jQuery));\r\n"]}