CINXE.COM
EUSurvey - Survey
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xml:lang="EN" lang="EN"> <head> <title>EUSurvey - Survey</title> <meta property="og:title" content="Registration Form - Knowledge Building Activity - "Connected and Stressed: Addressing Teacher Well-Being in the Age of Digital Education" - Wednesday, December 11 2024 at 14:00 (CET)"></meta> <meta charset="utf-8"></meta> <meta http-equiv="X-UA-Compatible" content="IE=edge"></meta> <meta name="viewport" content="width=device-width, initial-scale=1"></meta> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta> <meta http-equiv="Pragma" content="no-cache, no-store"></meta> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"></meta> <meta http-equiv="Expires" content="-1"></meta> <meta name="_csrf" content="a0e4a366-b0c8-43e4-bf96-6bff6c1005b1"/> <meta name="_csrf_header" content="X-CSRF-TOKEN"/> <meta name="Description" content="EUSurvey is an online survey-management system built for the creation and publishing of globally accessible forms, such as user satisfaction surveys and public consultations." /> <meta name="robots" content="noindex"></meta> <link href="/eusurvey/resources/css/jquery-ui.css?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311" rel="stylesheet" type="text/css"></link> <link href="/eusurvey/resources/css/jquery-ui.structure.min.css?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311" rel="stylesheet" type="text/css"></link> <link href="/eusurvey/resources/css/jquery-ui.theme.min.css?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311" rel="stylesheet" type="text/css"></link> <link href="/eusurvey/resources/css/common.css?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311" rel="stylesheet" type="text/css"></link> <link href="/eusurvey/resources/css/bootstrap-slider.min.css?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311" rel="stylesheet" type="text/css"></link> <link href="/eusurvey/resources/css/Chart.min.css?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311" rel="stylesheet" type="text/css"></link> <link href="/eusurvey/resources/css/bootstrap.css?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311" rel="stylesheet" type="text/css"></link> <link href="/eusurvey/resources/css/common-extension.css?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311" rel="stylesheet" type="text/css"></link> <style type="text/css"> /* html { overflow: hidden; } */ #participantsstatic thead { background-color: #fff; } @font-face { font-family: 'steinerregular'; src: url('/eusurvey/resources/fonts/steinerlight-webfont.eot'); src: url('/eusurvey/resources/fonts/steinerlight-webfont.eot?#iefix') format('embedded-opentype'), url('/eusurvey/resources/fonts/steinerlight-webfont.woff') format('woff'), url('/eusurvey/resources/fonts/steinerlight-webfont.ttf') format('truetype'), url('/eusurvey/resources/fonts/steinerlight-webfont.svg#steinerregular') format('svg'); font-weight: normal; font-style: normal; } </style> <meta itemprop="image" content="/eusurvey/resources/images/favicon5.ico" /> <link rel="shortcut icon" href="/eusurvey/resources/images/favicon5.ico" type="image/x-icon"></link> <meta name="google-site-verification" content="VJsdHVpjHp_2oE-jFxDLuRw_S7I8_T_mWKhn8jRbv8I" /> <script type='text/javascript' src='/eusurvey/resources/js/knockout-3.5.1.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311'></script> <script type="text/javascript" src="/eusurvey/resources/js/jquery-1.12.3.min.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/jquery-ui.min.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/jquery.ui.touch-punch.min.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/spin.min.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/jquery.hotkeys.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/bootstrap.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/jquery.addplaceholder.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/jquery.validate.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/scroll-sneak.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/system.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script defer="defer" src="https://europa.eu/webtools/load.js" type="text/javascript"></script> <script type="application/json">{ "utility": "cck" }</script> <script type="text/javascript" src="/eusurvey/resources/js/bootstrap-slider.min.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/tinymce/jquery.tinymce.min.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/tinymce/tinymce.min.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/Chart.min.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/chartjs-plugin-colorschemes.min.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/math.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript"> //if (top != self) top.location=location; var contextpath = "/eusurvey"; var isresponsive = false; var isdelphi = false; var isevote = false; var delphiStartPageUrl = '/eusurvey/runner/REGISTRATION_FORM_11_DECEMBER?'; var maxEVoteCandidates = "20" var unsavedChangesText = "You have made changes on this page that you have not yet confirmed. If you navigate away from this page you will lose your unsaved changes"; var requiredText = "This field is required."; var requiredTextNewSurvey = "This field is required."; var requiredTextNewSurveyReverse = "This field is required."; var confirmationMarkupError = "The metadata or ID '{0}' is not valid. "; var nomatchText = "The two values do not match"; var shortnameText = "Alias must be composed of lowercase and uppercase letters (a-z and A-Z), numbers (0-9), hyphens and underscores only."; var shortnameText2 = "Please do not use more than one hyphen in a row"; var shortnameText3 = "Your survey alias may only contain alphanumeric characters (A-Z, a-z, 0-9), underscores and hyphens."; var textnotlongenoughText = "This text is not long enough"; var texttoolongText = "This text is too long"; var bracketCountNotMatching = "The number of '{' and '}' in your text is not equal"; var texttoolong5000Text = "This question type does not allow more than 5000 characters"; var invalidnumberText = "This value is not a valid number"; var invalidCharacter = "Invalid (non UTF-8) characters detected. Please check your input."; var valuetoosmall = "This value is too small"; var valuetoolarge = "This value is too large"; var timevaluetoosmall = "Entered time is smaller than the requested range."; var timevaluetoolarge = "Entered time is greater than the requested range."; var notenoughanswers = "Not enough selections"; var toomanyanswers = "Too many selections"; var noRegExmatchText = "The value does not match the defined pattern"; var invalidDate = "This value is not a valid date"; var invalidTime = "Invalid time format. Enter a time in the format 'HH:mm:ss'."; var invalidEmail = "This is not a valid e-mail address"; var invalidCaseId = "This is not a valid contribution id"; var invalidStartEnd = "The end date must be later than the start date"; var invalidStartEndTime = "The end time must be later than the start time"; var interdependentText = "You can select each value only once"; var invalidURL = "This is not a valid URL"; var invalidPrecisionText = "decimal precision limited to {0}"; var invalidXHTML = "Your input cannot be processed (XHMTL invalid)"; var serverPrefix='https://ec.europa.eu/eusurvey/';//+'runner/'; var selectFileForUploadRunner = "Select file to upload"; var selectFilesForUpload = "Select file(s) to upload"; var uploadASkin = "Upload a skin"; var globalLanguage = 'en'; var questionTextLabel = "Question Text"; var typeLabel = "Type"; var ignoreLabel = "Ignore"; var sectionTitleLabel = "Section Title"; var alternativeTextLabel = "Alternative Text"; var modifyElementLabel = "Modify element"; var deleteElementLabel = "delete element"; var cutElementLabel = "cut element"; var copyElementLabel = "copy element"; var weakPasswordText = "Please choose a password between 8 and 16 characters with at least one digit and one non-alphanumeric character (e.g. !?$%...)."; var shortnameAlreadyExists = "A survey with this alias already exists."; var endNotificationAutomatedPublishing = "Automatic Publishing must be activated to use the End Notification feature"; var allValues = "All Values"; var checkXHTMLValidityError = "It was not possible to access the server to validate the text."; var mandatoryLabel = "Mandatory"; var optionalLabel = "Optional"; var invalidFileError = "The file is not valid."; var IndentElementLabel = "Indent element"; var LabelExternalImage = "Warning: Using resources from another location represents a security and integrity risk for your survey."; var UnindentElementLabel = "Unindent element"; var notenoughrowsanswerederror = "You did not answer enough rows."; var toomanyrowsanswerederror = "You answered too many rows."; var honeypotError = "If you are human please remove the text from this text box"; var clearLabel = "Clear Value"; var cancelLabel = "Cancel"; var showLabel = "Show"; var atLeast3Characters = "Search strings have to be at least 3 characters"; var loginExistsError = "This login already exists. Please choose a unique login."; var message_Export1 = "Export started successfully. It can be accessed via the"; var label_ExportPage = "Export Page"; var message_PublicationExportSuccess = "You will receive a link to the file by mail as soon as it is available"; var message_PublicationExportSuccess2 = "You will receive the file by mail to {0} as soon as it is available"; var message_ExportFailed = "Export failed."; var message_PublicationExportFailed = "It was not possible to create the file. Please contact the helpdesk."; var message_SuccessMailLinkDraft = "E-mail sent successfully"; var message_FailedMailLinkDraft = "An error occurred when sending you an e-mail, please try later."; var atmost3Selections = "Please select at most 3 answers"; var varExceptionDuringSave = "There was an error during saving:"; var varwaitfordependencies = "Loading dependent questions..."; var varErrorCheckValidation = "Please check for validation errors"; var varErrorCheckValidation2 = "If this error message persists, please contact the support and send a screenshot of this page."; var labelEditYourContributionLater = 'Edit your contribution later'; var labelmore = "more..."; var labelless = "less"; var labelfrom = "From"; var labelto = "To"; var messageuploadnoconnection = "File-upload not possible. Please check your internet connection."; var messageuploadwrongextension = "{0} does not match the allowed file types."; var labelnewexplanation = "New explanation"; var labeloldexplanation = "Old explanation"; var timeLimitNotZero = "Time limit cannot be equal to zero."; var infolabeluploadbutton = "Select and upload files"; var infoNoData = "No data available yet"; var validationNotEnoughCandidates = "You must select at least one candidate."; var validationTooManyCandidates = "You have selected too many candidates"; var validationTooManyListVotes = "You have made too many list votes"; var likeOwnCommentOrExplanation = "It's not possible to like own comments or explanations."; var selectFileForUpload = "Select file to upload"; var versionfootersource = "v1.5.3.3 625447edf6ac2f69bd9ee79032f971bb3c1ea311 (20/11/2024 18:10)"; var version = versionfootersource.substring(versionfootersource.indexOf("(")+1); version = version.substring(0, version.indexOf(" ")); var explanationEditorConfig = { script_url: '/eusurvey/resources/js/tinymce/tinymce.min.js', theme: 'modern', entity_encoding: 'raw', menubar: false, toolbar: ['bold italic underline strikethrough | undo redo | bullist numlist | link code | fontsizeselect forecolor fontselect'], plugins: 'paste link image code textcolor', font_formats: 'Sans Serif=FreeSans, Arial, Helvetica, Tahoma, Verdana, sans-serif;' + 'Serif=FreeSerif,Times,serif;' + 'Mono=FreeMono,Courier, mono;', language : globalLanguage, image_advtab: true, entities: '', content_css: '/eusurvey/resources/css/tinymceyellowfocus.css', popup_css_add: '/eusurvey/resources/css/tinymcepopup.css', forced_root_block: false, browser_spellcheck: true, paste_postprocess: function(pl, o) { o.node.innerHTML = replaceBRs(strip_tags(o.node.innerHTML, '<p><br>')); }, setup: function(editor) { editor.on('init', function(event) { delphiPrefill($(event.target)); }); editor.on('Change', function (event) { try { // The editor element needs to be retrieved again. Otherwise, closest() will return no elements. enableDelphiSaveButtons($('#' + event.target.id).closest('.survey-element')); } catch (e) {} }); }, relative_urls: false, remove_script_host: false, document_base_url: serverPrefix, default_link_target: '_blank', anchor_top: false, anchor_bottom: false, branding: false, invalid_elements: 'html,head,body', object_resizing: false }; </script> <script type="text/javascript" src="/eusurvey/resources/js/utf8.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/includes.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript"> //<![CDATA[ function getWrongExtensionMessage(filename) { var s; s = '[fn] does not match the allowed file types.'; return s.replace("[fn]", filename); } function getExtensionsHelp(extensions) { var e = extensions.replace(new RegExp(';', 'g'), ','); var s; s = 'Only files of the type [ex] are allowed'; return s.replace("[ex]", e); } function countChar(input) { var cs = getCharacterCount(input); var attr = $(input).attr('class'); let el = $(input).closest(".survey-element, .innercell"); if (attr != null) { let min = 0; let max = 0; attr.split(/\s+/).forEach((cla)=>{ if (cla.startsWith("min")){ min = parseInt(cla.substring(3)); } else if (cla.startsWith("max")){ max = parseInt(cla.substring(3)); } }) el.find(".charactercounter").text(cs); if (max > 0 && max - cs < 5) { el.find(".glyphicon-alert").show(); } else { el.find(".glyphicon-alert").hide(); } if (max > 0 && max - cs < 0) { el.find(".charactercounterdiv").css("color", "#f00"); } else { el.find(".charactercounterdiv").css("color", "#666"); } if(max > 0 && max - cs <= 0) { el.find(".glyphicon-alert").hide(); el.find(".characterlimitreached").show(); el.find(".charactersused").hide(); } else { el.find(".characterlimitreached").hide(); el.find(".charactersused").show(); } } } //]]> var browser = ''; </script> <script defer="defer" src="//europa.eu/webtools/load.js" type="text/javascript"></script> <script type="application/json"> { "utility":"analytics", "siteID":"63", "sitePath":["ec.europa.eu/eusurvey"], "is404":false, "is403":false, "instance":"ec.europa.eu"} </script> <script type="text/javascript" src="/eusurvey/resources/js/jqueryui/i18n/datepicker-en.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript"> $(function() { $( ".datepicker" ).datepicker( "option", $.datepicker.regional[ 'en' ] ); $( ".datepicker" ).datepicker( "option", "dateFormat", "dd/mm/yy"); }); </script> <!--[if IE 7]> <link rel="stylesheet" href="/eusurvey/resources/css/bootstrap-ie7buttonfix.css"> <style type="text/css"> .add-on { height: 19px; margin-top: 1px; } </style> <![endif]--> <!--[if IE 8]> <link rel="stylesheet" href="/eusurvey/resources/css/bootstrap-ie8buttonfix.css"> <style> .check { margin-bottom: 3px !important; } </style> <![endif]--> <!--[if IE 9 ]> <script type="text/javascript"> browser = 'IE9'; </script> <![endif]--> <link id="runnerCss" href="/eusurvey/resources/css/runner.css?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311" rel="stylesheet" type="text/css"></link> <link href="/eusurvey/resources/css/yellowfocus.css?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311" rel="stylesheet" type="text/css"></link> <link href="/eusurvey/resources/css/fileuploader.css?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311" rel="stylesheet" type="text/css"></link> <script type="text/javascript" src="/eusurvey/resources/js/fileuploader.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/runner.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/runner2.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/graph_data_loader.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/runnerviewmodels.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type='text/javascript' src='/eusurvey/resources/js/knockout-3.5.1.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311'></script> <script type="text/javascript"> //<![CDATA[ $(function() { $(".headerlink, .header a").each(function(){ if (!$(this).hasClass("messageicon") && $(this).attr("id") != 'logoutBtnFromHeader' && !$(this).hasClass("skipScriptAnchor")) { if ($(this).attr("href") && $(this).attr("href").indexOf("?") == -1) { $(this).attr("target","_blank").attr("href", $(this).attr("href") + "/runner"); } } }); loadElements(); }); function loadElements() { var ids = ""; if ($(".emptyelement").length > 0) { var counter = 0; $(".emptyelement").each(function(){ ids += $(this).attr("data-id") + '-'; counter++; if (counter > 20) { return false; } }) var s = "ids=" + ids.substring(0, ids.length-1) + "&survey=818148&slang=EN&as="; $.ajax({ type:'GET', dataType: 'json', url: "/eusurvey/runner/elements/818148", data: s, cache: false, success: function( result ) { for (var i = 0; i < result.length; i++) { addElement(result[i], false, false); } applyStandardWidths(); setTimeout(loadElements, 500); selectPageAndScrollToQuestionIfSet(); } }); } else { checkPages(); $("#btnSubmit").removeClass("hidden"); $("#btnSaveDraft").removeClass("hidden"); $("#btnSaveDraftMobile").removeClass("hidden"); $('[data-toggle="tooltip"]').ApplyCustomTooltips(); // Do not show motivation-popup when loaded from draft/local safe and progress already over if(!$("#motivationPopup").data("type") && $("#motivationPopup").data("popup") && calculateProgressPercentage() > $("#motivationPopup").data("progress")){ $("#motivationPopup").removeClass('not-shown'); } updateProgress(); updateEVoteStatus(); updateAllFormulas(); updateAllExclusiveAnswers(); $(".targetdatasetselect").each(function() { checkTargetDataset(this); }) } } function updateFileList(element, responseJSON) { $(element).siblings(".uploaded-files").first().empty(); $(element).siblings(".validation-error").remove(); var surveyElement = $(element).closest(".survey-element"); enableDelphiSaveButtons(surveyElement); if (responseJSON.files.length == 0) { $(surveyElement).removeClass("answered"); updateProgress(); } for (var i = 0; i < responseJSON.files.length; i++) { var f = responseJSON.files[i]; var div = document.createElement("div"); var del = document.createElement("button"); $(del).attr("type", "button").addClass("unstyledbutton").attr("data-toggle","tooltip").attr("id", "uploadlink" + $(element).attr('data-id')).attr("title","Remove uploaded file").attr("aria-label",f).attr( "onclick", 'deleteFile("' + $(element).attr('data-id') + '","' + $("#uniqueCode").val() + '","' + f + '", this);return false;'); $(del).ApplyCustomTooltips(); var ic = document.createElement("span"); $(ic).addClass("glyphicon glyphicon-trash").css("margin-right", "10px"); $(del).append(ic); $(div).html(f); $(div).prepend(del); $(element).siblings(".uploaded-files").first().append(div); } } //]]> </script> </head> <body id="body" class="grey-background" style="text-align: center;"> <div class="page-wrap"> <div class="header"> <div class="header-content-full"> <div style="float: left; line-height: 20px;"> <a class="logolink" href="/eusurvey/home/welcome" style="float: left; padding-top:3px;"><img src="/eusurvey/resources/images/logo_Eusurvey-small-white.png" style="margin-top: -3px;" alt="EUSurvey"/></a>        </div> <div style="float: right; line-height: 22px;"> <span tabindex="0" id="messages-button" onclick="$('#messages-log-div').show()" onfocus="$('#loginBtnFromHeader').focus()"> <!-- ko if: messages().length > 0 || systemMessages.length > 0 --> <span class="glyphicon glyphicon-bell" style="font-size: 17px;"></span> <span class="badge" style="background-color: #e90000; margin-left: -10px; margin-top: -3px; z-index: 100;" data-bind="visible: totalMessages() > 0, text: totalMessages"></span> <!-- /ko --> </span> <a id="loginBtnFromHeader" href="/eusurvey/auth/login">Login</a> | <div id="dropDownHelp" class="dropdown" style="display: inline-block;"> <a href="javascript:;" class="dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Help <span class="caret"></span> </a> <ul id="dropDownHelpHeader" class="dropdown-menu" aria-labelledby="dropdownMenu1"> <li><a id="linkHelpAbout" href="/eusurvey/home/about">About</a></li> <li><a id="linkHelpSupport" href="/eusurvey/home/documentation">Support</a></li> <li><a id="linkHelpDownload" href="/eusurvey/home/download">Download</a></li> </ul> </div> | <div class="dropdown" > <a href="javascript:;" class="dropdown-toggle" id="dropdownLang" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" > Language <span class="caret"></span> </a> <ul class="dropdown-menu dropdown-menu-right" id="dropdownLangElements" aria-labelledby="dropdownLang"> <li> <button type="button" class="unstyledbuttonlanguage skipScriptAnchor" onclick="$('.dropdown.open .dropdown-toggle').dropdown('toggle')">English</button> </li> </ul> </div> <a class="messageicon" id="systemmessagebutton" style="display: none;" onclick="$('#system-message-box').show();"><img style="max-width:24px;" src="/eusurvey/resources/images/info24.png" alt="system message" /></a> <a class="messageicon" id="warningmessagebutton" style="display: none;" onclick="$('#generic-warning-box').show();"><img style="max-width:24px;" src="/eusurvey/resources/images/warning24.png" alt="system message" /></a> </div> <div style="clear: both"></div> </div> </div> <div class="modal" id="show-wait-image" data-backdrop="static"> <div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-body" style="text-align: center; padding-top:30px;"> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif" /> </div> </div> </div> </div> <div class="modal" id="show-wait-image-delete-survey" data-backdrop="static"> <div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-body" style="text-align: center; padding-top:30px;"> Your survey is being deleted, please wait<br /><br /> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif" /> </div> </div> </div> </div> <script type="text/javascript"> $(document).ready(function(){ $("a.logolink").css("font-family","Helvetica"); $("a.logolink").css("font-family","steinerregular"); }); </script> <div id="system-message-box" class="alert hideme"> <div style="float: right; margin-left: 10px;"><a onclick="hideSystemMessage()"><span class="glyphicon glyphicon-remove"></span></a></div> <div style="float: left; margin: 5px; margin-top: 5px; margin-right: 10px"><img src="" alt="system message icon" /></div> <div style="margin-left: 10px; padding-top: 3px; padding-bottom: 5px;" id="system-message-box-content"></div> <div style="text-align: right"> <button id="btnDeleteUserMessage" class="btn btn-default" onclick="deleteUserMessage()">Delete Message</button> </div> </div><div class="page" style="width: 1300px;"> <div id="runner-content" class="runner-content"> <form id="runnerForm" action="REGISTRATION_FORM_11_DECEMBER" method="POST" autocomplete="off"><input id="survey.id" name="survey.id" type="hidden" value="818148"/><input id="survey.uniqueId" name="survey.uniqueId" type="hidden" value="442c3038-aa13-4d95-b97e-cfe766c5048f"/><input id="language.code" name="language.code" type="hidden" value="EN"/><input type="hidden" name="uniqueCode" id="uniqueCode" value="ec8c6df4-a88b-450b-a325-03314d111f44" /> <input type="hidden" name="IdAnswerSet" id="IdAnswerSet" value="" /> <input type="hidden" name="invitation" id="invitation" value="" /> <input type="hidden" name="participationGroup" value="" /> <input type="hidden" id="hfsubmit" value="true" /> <input type="hidden" id="mode" name="mode" value="runner" /> <input type="hidden" id="draftid" name="draftid" value="" /> <script type="text/javascript" src="/eusurvey/resources/js/d3.v3.min.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/d3.layout.cloud.min.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <script type="text/javascript" src="/eusurvey/resources/js/wordcloud.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <input type="hidden" id="validatedPerPage" value="false" /> <input type="hidden" id="preventGoingBack" value="false" /> <input type="hidden" id="newlang" name="newlang" value="EN" /> <input type="hidden" id="newlangpost" name="newlangpost" value="false" /> <input type="hidden" id="newcss" name="newcss" value="" /> <input type="hidden" id="newviewpost" name="newviewpost" value="false" /> <input type="hidden" id="wcagMode" name="wcagMode" value="false" /> <input type="hidden" id="multipaging" value="false" /> <div class="left-area"> <div id="nolocalstorage" class="hideme" style="margin-bottom: 10px; text-align: right; margin-right: 10px;"> <span class="alert-danger" style="padding: 10px;">As local storage is disabled, automatic saving is not possible</span> </div> <div id="localstorageinfo" class="visible-lg" style="margin-bottom: 10px; text-align: right; margin-right: 10px;"> <span class="focusborder"> <input class="check" type="checkbox" checked="checked" id="saveLocalBackup" onchange="checkLocalBackup()" /> <label for="saveLocalBackup">Save a backup on your local computer (disable if you are using a public/shared computer)</label> </span> </div> <h1 class="surveytitle"><span style="font-size: 14pt;">Registration Form - Knowledge Building Activity - "Connected and Stressed: Addressing Teacher Well-Being in the Age of Digital Education" - Wednesday, December 11 2024 at 14:00 (CET)</span></h1><br /> <div class="info-box" style="width: 400px; max-width: 100%;"> <div style="float: right; margin-top: -5px; margin-right: -5px;"> <button type="button" class="unstyledbutton" onclick="$(this).closest('.info-box').hide();" aria-label="Close info message"><span class="glyphicon glyphicon-remove"></span></button> </div> Fields marked with * are mandatory.</div> <div id="ecDisclaimer" class="surveyrunnerinfo"> <div style="float: left; width: calc(100% - 18px)"> <b>Disclaimer</b> <p> The European Commission is not responsible for the content of questionnaires created using the EUSurvey service - it remains the sole responsibility of the form creator and manager. The use of EUSurvey service does not imply a recommendation or endorsement, by the European Commission, of the views expressed within them.</p> </div> <div style="float: right; margin-top: -15px; margin-right: -15px;"> <input type="hidden" id="disclaimerMinimized" name="disclaimerMinimized" value="" /> <button type="button" class="unstyledbutton" onclick="$('#disclaimerMinimized').val('true'); $('#ecDisclaimer').hide();" aria-label="Close disclaimer"><span class="glyphicon glyphicon-remove"></span></button> </div> <div style="clear: both"></div> </div> <span class="introduction"></span> <div id="page-tabs" class="panel panel-default" style="margin-top:20px;"> <div class="panel-body"> <div style="font-size: 20px;float:left; width:10%">Pages</div> <div style="float:left; width:90"> <ul class="nav nav-pills"> <li data-id="130228123" id="tab0" class="pagebutton active" data-toggle="" title=""> <a href="#page0" style="cursor:pointer;" onclick="return selectPage(0);"> Start</a> </li> </ul> </div> </div> </div> <div style="clear: left"></div> <div class="single-page" tabindex="-1" id="page0" onmouseleave="validateLastContainer()"> <fieldset> <legend>Text</legend> <div class="elementwrapper"> <div class="emptyelement survey-element 5" id="130228123" data-id="130228123" data-uid="25d5b509-e332-4a32-98a6-d787647f02cb"> <a class="survey-element-anchor" id="E130228123"></a> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif"/> </div> </div> </fieldset> <fieldset> <legend>Text</legend> <div class="elementwrapper"> <div class="emptyelement survey-element 5" id="130228124" data-id="130228124" data-uid="376518fa-7ee6-447c-ba3f-49f292fef3c5"> <a class="survey-element-anchor" id="E130228124"></a> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif"/> </div> </div> </fieldset> <fieldset> <legend>FreeTextQuestion</legend> <div class="elementwrapper"> <div class="emptyelement survey-element 5" id="130228125" data-id="130228125" data-uid="f4ada243-c3d9-48b2-a854-724bfb237ee4"> <a class="survey-element-anchor" id="E130228125"></a> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif"/> </div> </div> </fieldset> <fieldset> <legend>FreeTextQuestion</legend> <div class="elementwrapper"> <div class="emptyelement survey-element 5" id="130228126" data-id="130228126" data-uid="aa65dc2e-5adc-47e5-9b17-23e1e147a104"> <a class="survey-element-anchor" id="E130228126"></a> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif"/> </div> </div> </fieldset> <fieldset> <legend>FreeTextQuestion</legend> <div class="elementwrapper"> <div class="emptyelement survey-element 5" id="130228127" data-id="130228127" data-uid="557b5915-f6eb-4e46-aafd-be105d8f8fb3"> <a class="survey-element-anchor" id="E130228127"></a> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif"/> </div> </div> </fieldset> <fieldset> <legend>SingleChoiceQuestion</legend> <div class="elementwrapper"> <div class="emptyelement survey-element 5" id="130228129" data-id="130228129" data-uid="1e5b00e4-7da1-42cb-974f-eebb7ed4453c"> <a class="survey-element-anchor" id="E130228129"></a> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif"/> </div> </div> </fieldset> <fieldset> <legend>Text</legend> <div class="elementwrapper"> <div class="emptyelement survey-element 5" id="130228133" data-id="130228133" data-uid="9db06e0f-531d-41aa-b9b6-a045e7949942"> <a class="survey-element-anchor" id="E130228133"></a> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif"/> </div> </div> </fieldset> <fieldset> <legend>FreeTextQuestion</legend> <div class="elementwrapper"> <div class="emptyelement survey-element 5" id="130228135" data-id="130228135" data-uid="66f9af89-6f5d-4c67-927d-fb848b692c34"> <a class="survey-element-anchor" id="E130228135"></a> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif"/> </div> </div> </fieldset> <fieldset> <legend>Text</legend> <div class="elementwrapper"> <div class="emptyelement survey-element 5" id="130228136" data-id="130228136" data-uid="801f7d7a-2ab6-49e4-9a93-f12b1c0eccdc"> <a class="survey-element-anchor" id="E130228136"></a> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif"/> </div> </div> </fieldset> <fieldset> <legend>FreeTextQuestion</legend> <div class="elementwrapper"> <div class="emptyelement survey-element 5" id="130228137" data-id="130228137" data-uid="2be1c78f-f6e1-46d8-8307-6b58bbef6e2c"> <a class="survey-element-anchor" id="E130228137"></a> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif"/> </div> </div> </fieldset> <fieldset> <legend>Text</legend> <div class="elementwrapper"> <div class="emptyelement survey-element 5" id="130228138" data-id="130228138" data-uid="16a4e4cb-b18f-425a-9aea-8d1182e165f6"> <a class="survey-element-anchor" id="E130228138"></a> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif"/> </div> </div> </fieldset> <fieldset> <legend>Text</legend> <div class="elementwrapper"> <div class="emptyelement survey-element 5" id="130228139" data-id="130228139" data-uid="06cfec8a-1f43-47ef-b253-6d663be4ae83"> <a class="survey-element-anchor" id="E130228139"></a> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif"/> </div> </div> </fieldset> </div> <div class="hpdiv"> <label for="hp-7fk9s82jShfgak">If you're human, leave this field blank</label> <textarea tabindex="-1" id="hp-7fk9s82jShfgak" name="hp-7fk9s82jShfgak" class="hp" autocomplete="false"></textarea> </div> <div style="text-align: center; margin-top: 20px;"> <button type="button" id="btnPrevious" style="display: none;" role="button" aria-label="Go to previous page" data-toggle="" title="" onclick="previousPage();this.blur();" onfocusin="validateLastContainer()" class="btn btn-default">Previous</button> <button type="button" role="button" id="btnSubmit" onclick="validateInputAndSubmitRunner($('#runnerForm'));" onfocusin="validateLastContainer()" class="btn btn-primary hidden">Submit</button> <button type="button" id="btnNext" style="display: none;" role="button" aria-label="Go to next page" data-toggle="" title="" onclick="nextPage(); this.blur();" onfocusin="validateLastContainer()" class="btn btn-default btn-primary">Next</button> </div> </div> <div class="right-area" style="z-index: 1; position: relative"> <div class="linkstitle" style="margin-bottom: 5px;">Views</div> <div id="normalcss"> Standard  <button type="button" class="unstyledbutton link visiblelink css-switch disabled" id="css-switch-disabled" onclick="switchCss('runner','wcag');">Accessibility Mode</button> </div> <div id="enhancedcss" class="hideme"> <button type="button" class="unstyledbutton link css-switch normal" id="css-switch-normal" onclick="switchCss('runner','standard');">Standard</button>  Accessibility Mode</div> <hr style="margin-top: 15px;"/> <label for="langSelectorRunner"> <div class="linkstitle" style="margin-bottom: 5px;">Languages</div> </label> <select id="langSelectorRunner" name="langSelectorRunner" oninput="changeLanguageSelectOption('runner')"> <option value="EN" selected="selected">English</option> </select> <hr style="margin-top: 15px;" /> <div id="contact-and-pdf" style="word-wrap: break-word;"> <div class="linkstitle" style="margin-bottom: 5px;">Contact</div> <a target="_blank" aria-label="Contact Form - Opens in new window" class="link visibleLink" data-toggle="tooltip" title="Contact the survey owner here" href="/eusurvey/runner/contactform/REGISTRATION_FORM_11_DECEMBER">Contact Form</a> <hr style="margin-top: 15px;" /> <input type="button" id="btnSaveDraft" value="Save as Draft" onclick="saveDraft('runner');" class="btn btn-default hidden" style="margin-top: 10px" /> <br /><br /> <a data-toggle="tooltip" aria-label="Report abuse - Opens in new window" title="If a survey contains illegal content or violates the rights of others (including intellectual property rights, competition law and general law), please use the 'Report Abuse' link." target="_blank" href="/eusurvey/home/reportAbuse?survey=818148" class="link visiblelink">Report abuse</a> </div> </div> <div style="clear: both"></div> <div class="modal confirm-explanation-deletion-modal" role="dialog" data-backdrop="static"> <div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-body"> By removing an answer, the corresponding explanation text, possibly uploaded files and discussion will be deleted.</div> <div class="modal-footer"> <button type="button" class="btn btn-default" onclick="confirmExplanationDeletion()">Confirm</button> <button type="button" class="btn btn-primary" onclick="hideModalDialog('.confirm-explanation-deletion-modal')">Cancel</button> </div> </div> </div> </div> <div class="modal" id="quizTimeoutDialog" data-backdrop="static" role="dialog"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-body"> The time limit for this quiz has been exceeded. It is not possible to submit your answer anymore.</div> <div class="modal-footer"> <a tabindex="0" class="btn btn-default" data-dismiss="modal">Close</a> </div> </div> </div> </div> <script type="text/javascript" src="/eusurvey/resources/js/jquery.textarea-expander.js?version=625447edf6ac2f69bd9ee79032f971bb3c1ea311"></script> <div class="modal" id="contribution-link-dialog" data-backdrop="static" role="dialog" tabindex="-1"> <div class="modal-dialog non-resizable"> <div class="modal-content"> <div class="modal-body"> <p>In order to open your contribution again later, please use the following link:</p> <p id="contribution-link-dialog__link"></p> <p>You can reopen this dialog from the survey's sidebar.</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" onclick="openAskEmailToSendLinkDialog(this)"> Send by E-mail</button> <button type="button" class="btn btn-primary" onclick="hideModalDialog($('#contribution-link-dialog'))">Continue</button> </div> </div> </div> </div> <div class="modal" id="ask-email-dialog" data-backdrop="static" role="dialog"> <div class="modal-dialog non-resizable"> <div class="modal-content"> <div class="modal-body"> <p>Please enter your e-mail address to receive the link to your contribution.<br />Your e-mail address is only used once to send the e-mail and will not be saved afterwards.</p> <label for="delphiemail">E-mail</label> <input class="form-control" type="text" maxlength="255" name="delphiemail" id="delphiemail" /> <p id="ask-delphi-email-dialog-error" class="validation-error-keep hideme"> Please provide an e-mail address!</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" onclick="sendDelphiMailLink()">Send</button> <button type="button" class="btn btn-default" onclick="cancelDelphiMailLink()">Cancel</button> </div> </div> </div> </div> <script type="text/javascript"> var surveyUniqueId = "442c3038-aa13-4d95-b97e-cfe766c5048f"; var labelOf = " of "; function tabpress(event){ if (event.key === "Tab"){ if (event.shiftKey){ //If tabbing backwards and this is not the first radio button if (!event.target.matches(":first-of-type")){ //Focus the previous radio button event.target.previousElementSibling.previousElementSibling.focus() event.preventDefault() } } else { //If tabbing forwards and this is not the last radio button if (!event.target.matches(":last-of-type")){ //Focus the next radio button event.target.nextElementSibling.nextElementSibling.focus() event.preventDefault() } } } } function goToNextQuestion(link) { let next_question = $(link).closest("fieldset").next(); $('html, body').animate({ 'scrollTop' : next_question.position().top - 20 }); let focusable = [...next_question.get(0).querySelectorAll('button, [href], input, select, textarea, img, [tabindex]:not([tabindex="-1"])')]; focusable= focusable.filter( el => !el.hasAttribute('disabled') && !el.getAttribute('aria-hidden') && el.type != "hidden", ); focusable[0].focus(); } </script> <div style="display: none"> <div id="section-template"> <div role="heading" data-bind="html: title, attr: {'data-level': level, 'class':'sectiontitle section' + level()}"></div> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'section', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: order, attr: {'name': 'order' + id()}" /> <input type="hidden" data-bind="value: tabTitle, attr: {'name': 'tabtitle' + id()}" /> <input type="hidden" data-bind="value: level, attr: {'name': 'level' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <!-- /ko --> </div> <div id="text-template"> <div class="text" data-bind="html: title"></div> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'text', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: true, attr: {'name': 'optional' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <!-- /ko --> </div> <div id="formula-template"> <label for="defaultFormulaTemplateID" class='questiontitle' data-bind='attr: {for: "answer" + id(), id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </label> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <!-- ko if: min() != null && min() != 0 && max() != null && max() != 0 --> <div class='limits' data-bind="html: getMinMax(minString(), maxString()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: min() != 0 && min() != null && (max() == 0 || max() == null) --> <div class='limits' data-bind="html: getMin(minString()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: (min() == 0 || min() == null) && max() != null && max() != 0 --> <div class='limits' data-bind="html: getMax(maxString()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: (min() == 0 || min() == null) && (max() == 0 || max() == null) --> <div class='limits' data-bind="attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <input id="defaultFormulaTemplateID" data-bind="enable: !readonly(), value: result, attr: {'id': 'answer' + id(), 'data-id':id(), 'data-shortname': shortname(), 'name' : (readonly() ? '' : 'answer' + id()), 'class':css(), 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questioninfo' + id() + ' questionhelp' + id()}" oninput="propagateChange(this);" onblur="validateInput($(this).parent())" type="text" autocomplete="off" /> <!-- ko if: readonly() --> <input type="hidden" data-bind="value: result, attr: {'name': 'answer' + id()}" /> <!-- /ko --> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'formula', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <input type="hidden" data-bind="value: formula, attr: {'name': 'formula' + id()}" /> <input type="hidden" data-bind="value: min, attr: {'name': 'min' + id()}" /> <input type="hidden" data-bind="value: max, attr: {'name': 'max' + id()}" /> <input type="hidden" data-bind="value: decimalPlaces, attr: {'name': 'decimalplaces' + id()}" /> <input type="hidden" data-bind="value: true, attr: {'name': 'optional' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <!-- /ko --> </div> <div id="image-template"> <div class='alignment-div' data-bind="attr: {'style': 'width: 920px; max-width: 100%; text-align:' + align()}"> <img style="max-width: 100%" alt="Image Item" data-bind="attr: {'src': url, 'alt': originalTitle() + (longdesc != '' ? '; URL ' + longdesc() : ''), 'width': usedwidth() > 0 ? usedwidth() : ''}" /> </div> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'image', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: title, attr: {'name': 'name' + id()}" /> <input type="hidden" data-bind="value: scale, attr: {'name': 'scale' + id()}" /> <input type="hidden" data-bind="value: width, attr: {'name': 'width' + id()}" /> <input type="hidden" data-bind="value: align, attr: {'name': 'align' + id()}" /> <input type="hidden" data-bind="value: url, attr: {'name': 'url' + id()}" /> <input type="hidden" data-bind="value: filename, attr: {'name': 'filename' + id()}" /> <input type="hidden" data-bind="value: longdesc, attr: {'name': 'longdesc' + id()}" /> <input type="hidden" data-bind="value: true, attr: {'name': 'optional' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <!-- /ko --> </div> <div id="ruler-template"> <hr data-bind="attr: {'style': 'border-top: ' + height() + 'px ' + style() + ' ' + color() }" /> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'ruler', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: true, attr: {'name': 'optional' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <input type="hidden" data-bind="value: color, attr: {'name': 'color' + id()}" /> <input type="hidden" data-bind="value: height, attr: {'name': 'height' + id()}" /> <input type="hidden" data-bind="value: style, attr: {'name': 'style' + id()}" /> <!-- /ko --> </div> <div id="single-choice-template"> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <span class='questiontitle' data-bind="attr: {id: 'questiontitle' + id()}"> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </span> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <div class="answer-columns" style="position: relative; overflow-x:auto; padding-bottom: 8px; padding-top: 4px;"> <!-- ko if: likert() && !(ismobile || istablet) --> <div style="margin-top: 30px; display: inline-block; position: relative;" role="radiogroup" data-bind="attr: {'class' : maxDistance() > -1 ? 'likert-div median answers-table' : 'likert-div answers-table', 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':' questionhelp' + id()}, style: { width: possibleAnswers().length * 100 + 'px' }"> <div class="likert-bar" data-bind="attr: {'style' : 'width: ' + (possibleAnswers().length - 1) + '00px;'}"></div> <!-- ko foreach: possibleAnswers() --> <div class="likert-pa"> <input id="defaultSCLikertTemplateID" data-bind="enable: !$parents[0].readonly() && !$parents[0].foreditor, checked: getPAByQuestion2($parents[0].uniqueId(), uniqueId(), id()), attr: {'data-id': $parents[0].id() + '' + id(), 'data-shortname': shortname(), 'data-dependencies': dependentElementsString(), onkeyup: 'singleKeyUp(event, this, '+$parents[0].readonly()+')', onclick: $parents[0].readonly() ? 'return false;' : 'singleClick(this); checkDependenciesAsync(this);', class: $parents[0].css + ' trigger check', name: 'answer' + $parents[0].id(), id: 'answer' + id(), value: id(), 'aria-labelledby': 'answerlabel' + id()}" type="radio" /> <div><label for="defaultSCLikertTemplateID" class="answertext" style="margin-left: 0; padding-left: 10px; padding-right: 10px;" data-bind="attr: {'data-id' : id(), 'data-pa-uid' : uniqueId(), id: 'answerlabel' + id(), for: 'answer' + id()}"> <span class="screen-reader-only">Answer</span> <span data-bind="html: titleForDisplayMode($parents[0].displayMode())"></span> </label></div> </div> <!-- /ko --> <div style="clear: both"></div> </div> <!-- ko if: foreditor --> <!-- ko foreach: possibleAnswers() --> <div class="possibleanswerrow hidden"> <div class="answertext" data-bind="html: title, attr: {'id' : id(), 'data-id' : id()}"></div> </div> <!-- /ko --> <!-- /ko --> <!-- /ko --> <!-- ko if: ismobile || istablet || !likert() --> <!-- ko if: likert() || useRadioButtons() --> <!-- ko if: likert() --> <div class="likert-table-div"></div> <!-- /ko --> <table class="answers-table" role="radiogroup" data-bind="attr: {'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questionhelp' + id()}"> <tr class="hideme"> <th>radio button</th> <th>label</th> </tr> <!-- ko foreach: orderedPossibleAnswersByRows(false, false) --> <tr class="possibleanswerrow"> <!-- ko foreach: $data --> <td style="vertical-align: top"> <!-- ko ifnot: id() == 'dummy' --> <input id="defaultSCRadioTemplateID" style="position: relative" data-bind="enable: !$parents[1].readonly() && !$parents[1].foreditor, checked: getPAByQuestion2($parents[1].uniqueId(), uniqueId(), id()), attr: {'data-id': $parents[1].id() + '' + id(), 'id': id(), 'data-shortname': shortname(), 'data-dependencies': dependentElementsString(), onkeyup: 'singleKeyUp(event, this, '+$parents[1].readonly()+')', onclick: $parents[1].readonly() ? 'return false;' : 'singleClick(this); checkDependenciesAsync(this);', class: $parents[1].css + ' trigger check', name: 'answer' + $parents[1].id(), value: id(), 'aria-labelledby': 'answerlabel' + id(), 'previousvalue': getPAByQuestion2($parents[1].uniqueId(), uniqueId(), id()) != '' ? 'checked' : 'false'}", type="radio" /> <!-- /ko --> </td> <td style="vertical-align: top; padding-right: 15px;"> <!-- ko ifnot: id() == 'dummy' --> <label for="defaultSCRadioTemplateID" data-bind="attr: {'for': id, 'id': 'answerlabel' + id()}"> <span class="screen-reader-only">Answer</span> <div class="answertext" data-bind="html: titleForDisplayMode($parents[1].displayMode()), attr: {'data-id' : id()}"></div> </label> <!-- /ko --> </td> <!-- /ko --> </tr> <!-- /ko --> </table> <!-- /ko --> <!-- ko if: useSelectBox --> <div class="answer-column"> <!-- ko if: isTargetDatasetQuestion() --> <select id="defaultSCSelectTemplateID" data-bind="value: getTargetDatasetByQuestion(uniqueId()), attr: {'id': 'dataset' + id(), 'oninput': !foreditor ? 'checkTargetDataset(this);' : '', 'data-id':id(), 'data-shortname': shortname(), 'name' : 'answer' + id(), 'data-value': getTargetDatasetByQuestion(uniqueId()), 'class': css + ' single-choice targetdatasetselect', 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questionhelp' + id()}" > <option value=''></option> <!-- ko foreach: targetDatasets() --> <option data-bind="html: strip_tags(name), attr: {value: id}"></option> <!-- /ko --> </select> <!-- /ko --> <!-- ko if: !isTargetDatasetQuestion() --> <select id="defaultSCSelectTemplateID" data-bind="foreach: orderedPossibleAnswers(false), enable: !readonly(), valueAllowUnset: true, value: getPAByQuestion3(uniqueId()), attr: {'id': 'answer' + id(), 'oninput': !foreditor ? 'validateInput($(this).parent(),true); checkDependenciesAsync(this); propagateChange(this);' : '', 'data-id':id(), 'data-shortname': shortname(), 'name' : 'answer' + id(), 'class': css + ' single-choice', 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questionhelp' + id()}" > <option data-bind="html: strip_tags(titleForDisplayMode($parents[0].displayMode())), attr: {value: id(), 'data-dependencies': dependentElementsString(), 'id': 'trigger'+id()}" class="possible-answer trigger"></option> </select> <!-- /ko --> <label for="defaultSCSelectTemplateID" data-bind="attr: {'for': 'answer' + id()}" hidden> <span class="screen-reader-only">Select box</span> </label> <!-- ko if: foreditor --> <!-- ko foreach: possibleAnswers() --> <div class="possibleanswerrow hidden"> <div class="answertext" data-bind="html: title, attr: {'id' : id(), 'data-id' : id()}"></div> </div> <!-- /ko --> <!-- /ko --> </div> <!-- /ko --> <!-- /ko --> <!-- ko if: useButtons --> <table class="answers-table" role="radiogroup" data-bind="attr: {'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questionhelp' + id()}"> <tr class="possibleanswerrow"> <th style='padding: 2px; display: flex; align-items: center; flex-wrap: wrap'> <!-- ko foreach: orderedPossibleAnswers(false) --> <!-- ko ifnot: id() == 'dummy' --> <input id="defaultSCButtonTemplateID" tabindex="0" style="clip-path: circle(0); position: absolute;" type="radio" onkeydown="tabpress(event)" data-bind="enable: !$parent.readonly() && !$parent.foreditor, checked: getPAByQuestion2($parent.uniqueId(), uniqueId(), id()), attr: {'data-id': $parent.id() + '' + id(), 'id': id(), 'data-shortname': shortname(), 'data-dependencies': dependentElementsString(), onkeyup: 'singleKeyUp(event, this, '+$parent.readonly()+')', onclick: $parent.readonly() ? 'return false;' : 'singleClick(this); checkDependenciesAsync(this);', class: $parent.css + ' trigger check', name: 'answer' + $parent.id(), value: id(), 'aria-labelledby': 'answerlabel' + id(), 'previousvalue': getPAByQuestion2($parent.uniqueId(), uniqueId(), id()) != '' ? 'checked' : 'false'}" /> <label for="defaultSCButtonTemplateID" class="choice-button-label answertext" data-bind="attr: {'for': id, 'id': 'answerlabel' + id(), 'data-id' : id()}"> <span class="screen-reader-only">Answer</span> <span data-bind="html: titleForDisplayMode($parent.displayMode())"></span> </label> <!-- /ko --> <!-- /ko --> </th> </tr> </table> <!-- /ko --> <input type="hidden" data-bind="value: choiceType, attr: {'name': 'choicetype' + id()}" /> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'choice', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: 'true', attr: {'name': 'single' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: order, attr: {'name': 'order' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <input type="hidden" data-bind="value: isAttribute, attr: {'name': 'attribute' + id()}" /> <input type="hidden" data-bind="value: isDelphiQuestion, attr: {'name': 'delphiquestion' + id()}" /> <input type="hidden" data-bind="value: showExplanationBox, attr: {'name': 'explanationbox' + id()}" /> <input type="hidden" data-bind="value: delphiChartType, attr: {'name': 'delphicharttype' + id()}" /> <input type="hidden" data-bind="value: attributeName, attr: {'name': 'nameattribute' + id()}" /> <input type="hidden" data-bind="value: numColumns, attr: {'name': 'columns' + id()}" /> <input type="hidden" data-bind="value: 0, attr: {'name': 'choicemin' + id()}" /> <input type="hidden" data-bind="value: 0, attr: {'name': 'choicemax' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <input type="hidden" data-bind="value: scoring, attr: {'name': 'scoring' + id()}" /> <input type="hidden" data-bind="value: points, attr: {'name': 'points' + id()}" /> <input type="hidden" data-bind="value: subType, attr: {'name': 'subType' + id()}" /> <input type="hidden" data-bind="value: displayMode, attr: {'name': 'displayMode' + id()}" /> <input type="hidden" data-bind="value: maxDistance, attr: {'name': 'maxDistance' + id()}" /> <input type="hidden" data-bind="value: editorRowsLocked(), attr: {'name': 'editorRowsLocked' + id()}" /> <input type="hidden" data-bind="value: isTargetDatasetQuestion(), attr: {'name': 'isTargetDatasetQuestion' + id()}" /> <input type="hidden" data-bind="value: displayAllQuestions, attr: {'name': 'displayAllQuestions' + id()}" /> <input type="hidden" data-bind="value: isSAQuestion(), attr: {'name': 'isSAQuestion' + id()}" /> <input type="hidden" data-bind="value: evaluationCriterion(), attr: {'name': 'evaluationCriterion' + id()}" /> <tr class="hideme"> <td> <!-- ko foreach: possibleAnswers() --> <input type="hidden" data-bind="value: dependentElementsString(), attr: {'name': 'dependencies' + $parent.id(), 'data-id' : id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'pashortname' + $parent.id(), 'data-id' : id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'pauid' + $parent.id(), 'data-id' : id()}" /> <label hidden><textarea data-bind="text: title, attr: {'name': 'answer' + $parent.id(), 'data-id' : id()}" ></textarea>Title</label> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'originalAnswer' + $parent.id(), 'data-id' : id()}" ></textarea>Original title</label> <input type="hidden" data-bind="value: scoring.correct, attr: {'name': 'correct' + $parent.id(), 'data-id' : id()}" /> <input type="hidden" data-bind="value: scoring.points, attr: {'name': 'answerpoints' + $parent.id(), 'data-id' : id()}" /> <input type="hidden" data-bind="value: scoring.feedback, attr: {'name': 'feedback' + $parent.id(), 'data-id' : id()}" /> <!-- /ko --> </td> </tr> <!-- /ko --> </div> </div> <div id="multiple-choice-template"> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <span class='questiontitle' data-bind='attr: {id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </span> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <!-- ko if: minChoices() != 0 && maxChoices() != 0 --> <div class='limits' data-bind="html: getMinMaxChoice(minChoices(), maxChoices()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: minChoices() != 0 && maxChoices() == 0 --> <div class='limits' data-bind="html: getMinChoice(minChoices()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: minChoices() == 0 && maxChoices() != 0 --> <div class='limits' data-bind="html: getMaxChoice(maxChoices()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: minChoices() == 0 && maxChoices() == 0 --> <div class='limits' data-bind="attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <div class="answer-columns" style="overflow-x:auto;padding-top:4px;padding-bottom:8px;"> <!-- ko if: useCheckboxes --> <table class="answers-table" role="list" data-bind="attr: {'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questioninfo' + id() + ' questionhelp' + id()}"> <tr class="hideme"> <th>checkbox</th> <th>label</th> </tr> <!-- ko foreach: orderedPossibleAnswersByRows(false, false) --> <tr class="possibleanswerrow" role="listitem"> <!-- ko foreach: $data --> <td style="vertical-align: top"> <!-- ko ifnot: id() == 'dummy' --> <input id="defaultMCCheckBoxTemplateID" data-bind="enable: !$parents[1].readonly() && !$parents[1].foreditor, checked: !$parents[1].foreditor && getPAByQuestionCheckBox($parents[1].uniqueId(), uniqueId()).indexOf(uniqueId()) > -1, attr: {'data-id': $parents[1].id() + '' + id(), 'id': id(), 'data-shortname': shortname(), 'data-exclusive': exclusive(), 'data-dependencies': dependentElementsString(), onclick: $parents[1].readonly() ? 'return false;' : 'findSurveyElementAndResetValidationErrors(this); singleClick(this); checkDependenciesAsync(this);', class: $parents[1].css + ' trigger check' + (exclusive() ? ' exclusive' : ''), name: 'answer' + $parents[1].id(), value: id(), 'aria-labelledby': 'answerlabel' + id()}" type="checkbox" /> <!-- /ko --> </td> <td style="vertical-align: top; padding-right: 10px;"> <!-- ko ifnot: id() == 'dummy' --> <label for="defaultMCCheckBoxTemplateID" data-bind="attr: {'for': id, 'id': 'answerlabel' + id()}"> <span class="screen-reader-only">Answer</span> <!-- ko ifnot: id() == 'dummy' --> <div class="answertext" data-bind="html: title, attr: {'data-id' : id()}"></div> <!-- /ko --> </label> <!-- /ko --> </td> <!-- /ko --> </tr> <!-- /ko --> </table> <!-- /ko --> <!-- ko if: useListBox --> <div class="answer-column"> <ul role="listbox" data-bind="foreach: orderedPossibleAnswers(false), attr: {'class':css + ' multiple-choice', 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questioninfo' + id() + ' questionhelp' + id()}"> <li role="listitem" data-bind="attr: { 'data-id': id(), 'class': 'possible-answer trigger ' + (getPAByQuestion($parent.uniqueId()).indexOf(uniqueId()) > -1 ? 'selected-choice' : '') }"> <label for="defaultMCListBoxTemplateID" data-bind="attr: {for: id()}"> <button type="button" class="unstyledbutton" data-bind="attr: {'data-shortname': shortname(), 'onclick' : $parent.readonly() || $parent.foreditor ? 'return false;' : 'selectMultipleChoiceAnswer($(this)); propagateChange($(this)); event.stopImmediatePropagation();'}" > <span class="screen-reader-only">Answer</span> <span data-bind="html: strip_tags(title()), attr: {'data-id' : id(), 'id': 'answerlabel' + id()}" class="answertext"></span> </button> </label> <input id="defaultMCListBoxTemplateID" data-bind="value: id(), checked: getPAByQuestion2($parent.uniqueId(), uniqueId(), id), attr: {'name': 'answer' + $parent.id(), 'id':id(), 'data-id': $parent.id() + id(), 'data-dependencies': dependentElementsString, 'aria-labelledby': 'answerlabel' + id()}" style="display: none" type="checkbox" /> </li> </ul> <!-- ko if: foreditor --> <!-- ko foreach: possibleAnswers() --> <div class="possibleanswerrow hidden"> <div class="answertext" data-bind="html: title, attr: {'id' : id(), 'data-id' : id()}"></div> </div> <!-- /ko --> <!-- /ko --> </div> <div style="clear: both"></div> <!-- /ko --> <!-- ko if: isEVoteList --> <table role="list" collapsed data-bind="attr: {class:'answers-table evote-table ' + choiceTypeWithEVote(''), 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questioninfo' + id() + ' questionhelp' + id()}"> <tr> <th style="width: 20px"> <span class="sr-only">Checkbox</span> </th> <th style="display: flex; flex-flow: row nowrap; justify-content: space-between; height: inherit; min-width: 155px;"> <div style="padding-right: 24px; align-self: center"> </div> <div class="evote-collapse" tabindex="0" onclick="$(this).closest('.evote-table').attr('collapsed', (_, val) => val == null ? '' : null); event.stopImmediatePropagation(); event.preventDefault()" onkeypress="$(this).closest('.evote-table').attr('collapsed', (_, val) => val == null ? '' : null); event.stopImmediatePropagation(); event.preventDefault()"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="m24 30.75-12-12 2.15-2.15L24 26.5l9.85-9.85L36 18.8Z"></path></svg> </div> <span class="sr-only">label</span> </th> </tr> <!-- ko foreach: orderedPossibleAnswers(false) --> <tr class="possibleanswerrow" role="listitem"> <td> <!-- ko ifnot: id() == 'dummy' --> <input id="defaultMCEVoteElementsTemplateID" data-bind="enable: !$parent.readonly() && !$parent.foreditor, checked: !$parent.foreditor && getPAByQuestion($parent.uniqueId()).indexOf(uniqueId()) > -1, event: { evoteuncheck: ()=>{ element.checked } }, attr: {'data-id': $parent.id() + '' + id(), 'id': id(), 'data-shortname': shortname(), 'data-dependencies': dependentElementsString(), onclick: $parent.readonly() || $element.disabled ? 'return false;' : 'findSurveyElementAndResetValidationErrors(this); singleClick(this); checkDependenciesAsync(this); updateEVoteList(this);', class: $parent.css + ' trigger check evote-candidate', name: 'answer' + $parent.id(), value: id(), 'aria-labelledby': 'answerlabel' + id()}" type="checkbox" /> <!-- /ko --> </td> <td style="padding-right: 10px;"> <!-- ko ifnot: id() == 'dummy' --> <label for="defaultMCEVoteElementsTemplateID" data-bind="attr: {'for': id, 'id': 'answerlabel' + id()}"> <span class="screen-reader-only">Answer</span> <!-- ko ifnot: id() == 'dummy' --> <div class="answertext" data-bind="html: title, attr: {'data-id' : id()}"></div> <!-- /ko --> </label> <!-- /ko --> </td> </tr> <!-- /ko --> </table> <!-- /ko --> <input type="hidden" data-bind="value: choiceType, attr: {'name': 'choicetype' + id()}" /> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'choice', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: 'false', attr: {'name': 'single' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: order, attr: {'name': 'order' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <input type="hidden" data-bind="value: isAttribute, attr: {'name': 'attribute' + id()}" /> <input type="hidden" data-bind="value: isDelphiQuestion, attr: {'name': 'delphiquestion' + id()}" /> <input type="hidden" data-bind="value: showExplanationBox, attr: {'name': 'explanationbox' + id()}" /> <input type="hidden" data-bind="value: delphiChartType, attr: {'name': 'delphicharttype' + id()}" /> <input type="hidden" data-bind="value: attributeName, attr: {'name': 'nameattribute' + id()}" /> <input type="hidden" data-bind="value: numColumns, attr: {'name': 'columns' + id()}" /> <!--input type="hidden" data-bind="value: choiceType, attr: {'name': 'choicetype' + id()}" /--> <input type="hidden" data-bind="value: minChoices, attr: {'name': 'choicemin' + id()}" /> <input type="hidden" data-bind="value: maxChoices, attr: {'name': 'choicemax' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <input type="hidden" data-bind="value: scoring, attr: {'name': 'scoring' + id()}" /> <input type="hidden" data-bind="value: points, attr: {'name': 'points' + id()}" /> <input type="hidden" data-bind="value: noNegativeScore, attr: {'name': 'noNegativeScore' + id()}" /> <input type="hidden" data-bind="value: subType, attr: {'name': 'subType' + id()}" /> <input type="hidden" data-bind="value: displayMode, attr: {'name': 'displayMode' + id()}" /> <input type="hidden" data-bind="value: editorRowsLocked(), attr: {'name': 'editorRowsLocked' + id()}" /> <!-- ko foreach: possibleAnswers() --> <input type="hidden" data-bind="value: dependentElementsString(), attr: {'name': 'dependencies' + $parent.id(), 'data-id' : id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'pashortname' + $parent.id(), 'data-id' : id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'pauid' + $parent.id(), 'data-id' : id()}" /> <label hidden><textarea data-bind="text: title, attr: {'name': 'answer' + $parent.id(), 'data-id' : id()}" ></textarea>Title</label> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'originalAnswer' + $parent.id(), 'data-id' : id()}" ></textarea>Original title</label> <input type="hidden" data-bind="value: scoring.correct, attr: {'name': 'correct' + $parent.id(), 'data-id' : id()}" /> <input type="hidden" data-bind="value: scoring.points, attr: {'name': 'answerpoints' + $parent.id(), 'data-id' : id()}" /> <input type="hidden" data-bind="value: scoring.feedback, attr: {'name': 'feedback' + $parent.id(), 'data-id' : id()}" /> <input type="hidden" data-bind="value: exclusive, attr: {'name': 'exclusive' + $parent.id(), 'data-id' : id()}" /> <!-- /ko --> <!-- /ko --> </div> </div> <div id="ranking-question-template"> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <span class='questiontitle' data-bind='attr: {id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </span> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'rankingquestion', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: isDelphiQuestion, attr: {'name': 'delphiquestion' + id()}" /> <input type="hidden" data-bind="value: delphiChartType, attr: {'name': 'delphicharttype' + id()}" /> <input type="hidden" data-bind="value: showExplanationBox, attr: {'name': 'explanationbox' + id()}" /> <input type="hidden" data-bind="value: order, attr: {'name': 'order' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <div class="ranking-question-initial-answer-message" data-bind="hidden: isAnswered"> Use drag&drop or the up/down buttons to change the order or <button type="button" class="unstyledbutton ranking-question-initial-answer-clickable" data-bind="attr: {'aria-owns': 'ranking-item-list-container' + id()}">accept the initial order</button>.</div> <!-- /ko --> <div role="group" data-bind="attr: {id: 'answer' + id(), 'aria-labelledby': 'questiontitle' + id(), 'aria-describedby' : 'questionhelp' + id() + ' listorderinfo' + id()}"> <!-- ko ifnot: foreditor --> <div class="ranking-question-initial-answer-message" data-bind="if: !isAnswered()"> Use drag&drop or the up/down buttons to change the order or <button type="button" class="unstyledbutton ranking-question-initial-answer-clickable" data-bind="click: acceptInitialAnswer, attr: {'aria-owns': id(), id: 'acceptInitialRanking' + id(), 'aria-describedby' : 'listorderinfo' + id()}">accept the initial order</button>.</div> <div class="question-reset-answer-message" data-bind="if: isAnswered()"> <button type="button" class="unstyledbutton" data-bind="click: resetOrder">Reset to initial order</a> </div> <!-- /ko --> <div class="rankingitem-list-container" data-bind="attr: {id: 'ranking-item-list-container' + id()}"> <!-- ko ifnot: foreditor --> <span class="screen-reader-only" data-bind="attr: {id: 'listorderinfo' + id()}"> <span data-bind="html: getInitialOrderInfoText()"></span> <!-- ko foreach: orderedRankingItems() --> <span data-bind="html: title()"></span> <!-- /ko --> </span> <!-- /ko --> <div class="rankingitem-list" role="list"> <!-- ko foreach: orderedRankingItems() --> <div role="listitem" class="rankingitem-form-data focussable" data-bind="attr: {'aria-labelledby': id()}"> <div class="rankingitem-decoration">⠿</div> <button type="button" role="button" class="unstyledbutton rankingitem-button" data-toggle="tooltip" title="Move up" data-bind="click: onMoveUp, event: { keydown: onKeyDownMoveItemUp }, attr: {'aria-label' : title() + ' Move up'}"><span class="glyphicon glyphicon-arrow-up"></span></button> <button type="button" role="button" class="unstyledbutton rankingitem-button" data-toggle="tooltip" title="Move down" data-bind="click: onMoveDown, event: { keydown: onKeyDownMoveItemDown }, attr: {'aria-label' : title() + ' Move down'}"><span class="glyphicon glyphicon-arrow-down"></span></button> <div class="rankingitemtext" data-bind="html: title(), attr: {'id' : id(), 'data-id' : id()}"></div> </div> <!-- /ko --> </div> </div> <!-- ko if: foreditor --> <!-- ko foreach: rankingItems() --> <div class="possibleanswerrow hidden"> <input type="hidden" data-bind="value: shortname, attr: {'name': 'rankingitemshortname' + $parents[0].id(), 'data-id' : id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'rankingitemuid' + $parents[0].id(), 'data-id' : id()}" /> <label hidden><textarea data-bind="text: title(), attr: {'name': 'rankingitemtitle' + $parents[0].id(), 'data-id' : id()}" ></textarea>Title</label> <label hidden><textarea data-bind="text: originalTitle(), attr: {'name': 'rankingitemoriginaltitle' + $parent.id(), 'data-id' : id()}" ></textarea>Original title</label> </div> <!-- /ko --> <!-- /ko --> <!-- ko ifnot: foreditor --> <input type="hidden" data-bind="value:getAnswerValuesString(), attr: {'id': 'answer' + id(), 'data-id':id(), 'data-shortname': shortname(), 'name' : 'answer' + id(), 'class':css()}" type="text"></input> <!-- /ko --> </div> </div> <div id="password-template"> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <label for="defaultPasswordTemplateID" class='questiontitle' data-bind='attr: {for: "answer" + id(), id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> </label> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <input id="defaultPasswordTemplateID" data-bind="enable: !readonly(), value:getValueByQuestion(uniqueId()), attr: {'id': 'answer' + id(), 'data-id':id(), 'data-shortname': shortname(), 'name' : 'answer' + id(), 'class':css(), 'aria-labelledby':'questiontitle' + id(), 'aria-describedby': 'questionhelp' + id()}" onfocus="clearStars(this);" onkeyup="countChar(this); propagateChange(this);" onblur="validateInput($(this).parent(), true)" autocomplete="off" type="password"></input> <!-- ko if: isComparable --> <br /><label for="defaultPasswordSecondTemplateID" style="margin-left: 20px" data-bind="attr: {'for' : 'secondanswer' + id()}">Please repeat</label>:<br /> <input id="defaultPasswordSecondTemplateID" data-bind="enable: !readonly(), attr: {'id': 'answer' + id() + '2', 'data-id':id() + '2', 'name' : 'secondanswer' + id(), 'class': 'comparable-second ' + css()}" onfocus="clearStars(this);" autocomplete="off" type="password"></input> <!-- /ko --> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: type == 'RegExQuestion' ? 'regex' : 'freetext', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <input type="hidden" data-bind="value: isAttribute, attr: {'name': 'attribute' + id()}" /> <input type="hidden" data-bind="value: isDelphiQuestion, attr: {'name': 'delphiquestion' + id()}" /> <input type="hidden" data-bind="value: showExplanationBox, attr: {'name': 'explanationbox' + id()}" /> <input type="hidden" data-bind="value: attributeName, attr: {'name': 'nameattribute' + id()}" /> <input type="hidden" data-bind="value: numRows, attr: {'name': 'rows' + id()}" /> <input type="hidden" data-bind="value: minCharacters, attr: {'name': 'min' + id()}" /> <input type="hidden" data-bind="value: maxCharacters, attr: {'name': 'max' + id()}" /> <input type="hidden" data-bind="value: isPassword, attr: {'name': 'password' + id()}" /> <input type="hidden" data-bind="value: isUnique, attr: {'name': 'unique' + id()}" /> <input type="hidden" data-bind="value: isComparable, attr: {'name': 'comparable' + id()}" /> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <!-- ko foreach: scoringItems() --> <input type="hidden" data-bind="value: id, attr: {'name': 'scoringitem' + $parent.id()}" /> <input type="hidden" data-bind="value: type, attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: correct, attr: {'name': 'correct' + id()}" /> <input type="hidden" data-bind="value: value, attr: {'name': 'value' + id()}" /> <input type="hidden" data-bind="value: feedback, attr: {'name': 'feedback' + id()}" /> <input type="hidden" data-bind="value: points, attr: {'name': 'points' + id()}" /> <!-- /ko --> <!-- /ko --> </div> <div id="freetext-template"> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <!-- ko if: maxCharacters() > 0 --> <label for="defaultFreetextBiggerZeroTemplateID" class='questiontitle' data-bind='attr: {for: "answer" + id(), id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </label> <!-- /ko --> <!-- ko if: maxCharacters() == 0 --> <label for="defaultFreetextZeroTemplateID" class='questiontitle' data-bind='attr: {for: "answer" + id(), id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </label> <!-- /ko --> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <!-- ko if: minCharacters() != 0 && maxCharacters() != 0 --> <div class='limits' data-bind="html: getMinMaxCharacters(minCharacters(), maxCharacters()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: minCharacters() != 0 && maxCharacters() == 0 --> <div class='limits' data-bind="html: getMinCharacters(minCharacters()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: minCharacters() == 0 && maxCharacters() != 0 --> <div class='limits' data-bind="html: getMaxCharacters(maxCharacters()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: minCharacters() == 0 && maxCharacters() == 0 --> <div class='limits' data-bind="attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: type == "RegExQuestion" --> <input type="hidden" data-bind="value: regex, attr: {'name': 'regex' + id()}" /> <!-- /ko --> <!-- ko if: foreditor --> <!-- ko if: type == "RegExQuestion" --> <input type="hidden" data-bind="value: 'regex', attr: {'name': 'type' + id()}" /> <!-- /ko --> <!-- ko ifnot: type == "RegExQuestion" --> <input type="hidden" data-bind="value: 'freetext', attr: {'name': 'type' + id()}" /> <!-- /ko --> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <input type="hidden" data-bind="value: isAttribute, attr: {'name': 'attribute' + id()}" /> <input type="hidden" data-bind="value: isDelphiQuestion, attr: {'name': 'delphiquestion' + id()}" /> <input type="hidden" data-bind="value: showExplanationBox, attr: {'name': 'explanationbox' + id()}" /> <input type="hidden" data-bind="value: delphiChartType, attr: {'name': 'delphicharttype' + id()}" /> <input type="hidden" data-bind="value: attributeName, attr: {'name': 'nameattribute' + id()}" /> <input type="hidden" data-bind="value: numRows, attr: {'name': 'rows' + id()}" /> <input type="hidden" data-bind="value: minCharacters, attr: {'name': 'min' + id()}" /> <input type="hidden" data-bind="value: maxCharacters, attr: {'name': 'max' + id()}" /> <input type="hidden" data-bind="value: isPassword, attr: {'name': 'password' + id()}" /> <input type="hidden" data-bind="value: isUnique, attr: {'name': 'unique' + id()}" /> <input type="hidden" data-bind="value: isComparable, attr: {'name': 'comparable' + id()}" /> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <input type="hidden" data-bind="value: scoring, attr: {'name': 'scoring' + id()}" /> <input type="hidden" data-bind="value: points, attr: {'name': 'points' + id()}" /> <!-- ko foreach: scoringItems() --> <input type="hidden" data-bind="value: id, attr: {'name': 'scoringitem' + $parent.id()}" /> <input type="hidden" data-bind="value: type, attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: correct, attr: {'name': 'correct' + id()}" /> <input type="hidden" data-bind="value: value, attr: {'name': 'value' + id()}" /> <input type="hidden" data-bind="value: feedback, attr: {'name': 'feedback' + id()}" /> <input type="hidden" data-bind="value: points, attr: {'name': 'points' + id()}" /> <!-- /ko --> <!-- /ko --> <!-- ko if: maxCharacters() > 0 --> <textarea id="defaultFreetextBiggerZeroTemplateID" class="data" data-bind="enable: !readonly(), value:getValueByQuestion(uniqueId(), true), attr: {'id': 'answer' + id(), 'data-id':id(), 'data-shortname': shortname(), 'name' : 'answer' + id(), 'class':css() + ' expand', 'maxlength':maxCharacters(), 'data-rows':numRows(), 'rows':numRows(), 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questioninfo' + id() + ' questionhelp' + id(), 'aria-required':!optional()}" onkeyup="countChar(this);" oninput="propagateChange(this);" onblur="validateInput($(this).parent(),true)" ></textarea> <!-- ko if: !foreditor --> <div class="charactercounterdiv limits" style="max-width: 645px; text-align: right; margin-left: 20px;" aria-live="polite" aria-atomic="true"> <span class="glyphicon glyphicon-alert" style="display: none; margin-right: 5px;" data-toggle="tooltip" title="You have less than 5 characters left." aria-label="You have less than 5 characters left."></span> <span class="charactersused"> <span data-bind="html: getCharacterCountInfo(maxCharacters()), attr: {id: 'countinfo' + id()}"></span> </span> <span class="characterlimitreached" data-toggle="tooltip" aria-label="Character limit reached.">Character limit reached.</span> </div> <!-- /ko --> <!-- /ko --> <!-- ko if: maxCharacters() == 0 --> <textarea id="defaultFreetextZeroTemplateID" data-bind="enable: !readonly(), value:getValueByQuestion(uniqueId(), true), attr: {'id': 'answer' + id(), 'data-id':id(), 'data-shortname': shortname(), 'name' : 'answer' + id(), 'class':css() + ' expand', 'data-rows':numRows(), 'rows':numRows(), 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questioninfo' + id() + ' questionhelp' + id(), 'aria-required':!optional()}" onkeyup="countChar(this);" oninput="propagateChange(this);" onblur="validateInput($(this).parent(),true)"></textarea> <!-- /ko --> <!-- ko if: isComparable() --> <br /><label for="defaultFreetextSecondTemplateID" style="margin-left: 20px" data-bind="attr: {'for' : 'secondanswer' + id()}">Please repeat</label>:<br /> <textarea id="defaultFreetextSecondTemplateID" data-bind="enable: !readonly(), attr: {'data-id':id() + '2', 'class': 'comparable-second ' + css() + ' expand', 'data-rows':numRows, 'rows':numRows(), 'name' : 'secondanswer' + id(), 'id' : 'secondanswer' + id()}" onblur="validateInputForSecondAnswer($(this))"></textarea> <!-- /ko --> </div> <div id="confirmation-template"> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <label for="defaultConfirmationTemplateID" class='questiontitle confirmationelement' data-bind='attr: {for: "answer" + id(), id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> </label> <!-- ko if: usetext --> <button type="button" class="unstyledbutton confirmationlabel" style="margin-left: 40px; cursor: pointer;" onclick="$(this).parent().find('.confirmation-dialog').modal('show')" data-bind="html:confirmationlabel">Show</button> <div class="modal confirmation-dialog"> <div class="modal-dialog modal-sm runnerdialog"> <div class="modal-content"> <div class="modal-header">Confirmation</div> <div class="modal-body" data-bind="html: confirmationtext"></div> <div class="modal-footer"> <button type="button" class="btn btn-primary" onclick="$(this).closest('.confirmation-dialog').modal('hide');">Cancel</button> </div> </div> </div> </div> <!-- /ko --> <!-- ko if: useupload --> <div class="files" style="margin-left: 40px; margin-top: 10px;" data-bind="foreach: files"> <!-- ko if: $parent.foreditor --> <input id="defaultConfirmationTemplateID" type="hidden" data-bind="value: uid(), attr: {'name': 'files' + $parent.id()}" /> <!-- /ko --> <a class="visiblelink" target="_blank" data-bind="html: name, attr: {'href':'/eusurvey/files/442c3038-aa13-4d95-b97e-cfe766c5048f/' + uid()}"></a> <br /> </div> <!-- /ko --> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'confirmation', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: usetext, attr: {'name': 'usetext' + id()}" /> <input type="hidden" data-bind="value: useupload, attr: {'name': 'useupload' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <label hidden><textarea data-bind="text: confirmationtext, attr: {'name': 'confirmationtext' + id()}" ></textarea>Confirmation Text</label> <label hidden><textarea data-bind="text: confirmationlabel, attr: {'name': 'confirmationlabel' + id()}" ></textarea>Confirmation Label</label> <!-- /ko --> </div> <div id="rating-template"> <div class='questiontitle' data-bind='attr: {id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </div> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'rating', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: numIcons, attr: {'name': 'numIcons' + id()}" /> <input type="hidden" data-bind="value: isDelphiQuestion, attr: {'name': 'delphiquestion' + id()}" /> <input type="hidden" data-bind="value: showExplanationBox, attr: {'name': 'explanationbox' + id()}" /> <input type="hidden" data-bind="value: delphiChartType, attr: {'name': 'delphicharttype' + id()}" /> <input type="hidden" data-bind="value: iconType, attr: {'name': 'iconType' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <input type="hidden" data-bind="value: editorRowsLocked(), attr: {'name': 'editorRowsLocked' + id()}" /> <div class="hiddenratingquestions hideme"> <!-- ko foreach: childElements() --> <div data-bind="attr: {'pos': $index, 'data-id': id}"> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'questionuid' + $parent.id(), 'data-id' : id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'questionshortname' + $parent.id(), 'data-id' : id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'questionoptional' + $parent.id(), 'data-id' : id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'question' + $parent.id(), 'data-id' : id()}" ></textarea>Original title</label> </div> <!-- /ko --> </div> <!-- /ko --> <table class="ratingtable" role="list" data-bind="attr: {'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questionhelp' + id()}"> <thead> <tr> <th class="sr-only">Rating Item</th> <th class="sr-only">Rating</th> </tr> </thead> <tbody data-bind="foreach: childElements()"> <tr class="ratingquestion" data-bind="attr: {'data-id': id, 'data-uid': uniqueId}"> <td> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <span data-bind="html: title, attr:{id: 'answerlabel' + id()}"></span> <!-- ko if: $parents[0].ismobile || $parents[0].istablet --> <input data-bind="value:getValueByQuestion(uniqueId(), true), attr: {'id': 'input' + id(), 'data-id':id(), 'name' : 'answer' + id(), 'class' : 'rating ' + css()}" data-type="rating" type="hidden"></input> <div data-bind="foreach: new Array($parent.numIcons())"> <button type="button" class="unstyledbutton ratingitem" role="listitem" onclick="ratingClick(this)" data-bind="attr: {'data-icons' : $parents[1].numIcons(), 'data-shortname': $parents[1].shortname()}"> <!-- ko if: $parents[1].iconType() == 0 --> <img src="/eusurvey/resources/images/star_grey.png" alt="Rating Item" data-bind="title: $index()+1, attr: {'alt': $index()+1 + ' / ' + $parents[1].numIcons(), 'aria-label': $parent.title() + ' ' + ($index()+1) + labelOf + $parents[1].numIcons()}" /> <!-- /ko --> <!-- ko if: $parents[1].iconType() == 1 --> <img src="/eusurvey/resources/images/nav_plain_grey.png" alt="Rating Item" data-bind="title: $index()+1, attr: {'alt': $index()+1 + ' / ' + $parents[1].numIcons(), 'aria-label': $parent.title() + ' ' + ($index()+1) + labelOf + $parents[1].numIcons()}" /> <!-- /ko --> <!-- ko if: $parents[1].iconType() == 2 --> <img src="/eusurvey/resources/images/heart_grey.png" alt="Rating Item" data-bind="title: $index()+1, attr: {'alt': $index()+1 + ' / ' + $parents[1].numIcons(), 'aria-label': $parent.title() + ' ' + ($index()+1) + labelOf + $parents[1].numIcons()}" /> <!-- /ko --> </button> </div> <!-- /ko --> </td> <!-- ko if: !$parents[0].ismobile && !$parents[0].istablet --> <td> <input data-bind="value:getValueByQuestion(uniqueId(), true), attr: {'id': 'input' + id(), 'data-id':id(), 'name' : 'answer' + id(), 'class' : 'rating ' + css()}" data-type="rating" type="hidden"></input> <div data-bind="foreach: new Array($parent.numIcons())"> <button type="button" class="unstyledbutton ratingitem" role="listitem" onclick="ratingClick(this)" data-bind="attr: {'data-icons' : $parents[1].numIcons(), 'data-shortname': $parents[1].shortname()}"> <!-- ko if: $parents[1].iconType() == 0 --> <img src="/eusurvey/resources/images/star_grey.png" alt="Rating Item" data-bind="title: $index()+1, attr: {'alt': $index()+1 + ' / ' + $parents[1].numIcons(), 'aria-label': $parent.title() + ' ' + ($index()+1) + labelOf + $parents[1].numIcons()}" /> <!-- /ko --> <!-- ko if: $parents[1].iconType() == 1 --> <img src="/eusurvey/resources/images/nav_plain_grey.png" alt="Rating Item" data-bind="title: $index()+1, attr: {'alt': $index()+1 + ' / ' + $parents[1].numIcons(), 'aria-label': $parent.title() + ' ' + ($index()+1) + labelOf + $parents[1].numIcons()}" /> <!-- /ko --> <!-- ko if: $parents[1].iconType() == 2 --> <img src="/eusurvey/resources/images/heart_grey.png" alt="Rating Item" data-bind="title: $index()+1, attr: {'alt': $index()+1 + ' / ' + $parents[1].numIcons(), 'aria-label': $parent.title() + ' ' + ($index()+1) + labelOf + $parents[1].numIcons()}" /> <!-- /ko --> </button> </div> </td> <!-- /ko --> </tr> </tbody> </table> </div> <div id="number-template"> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <!-- ko if: display() == 'Slider' --> <label for="defaultNumberSliderTemplateID" class='questiontitle' data-bind='attr: {for: "answer" + id(), id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </label> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <div role="group" data-bind="hidden: isAnswered, attr: {'aria-labelledby': 'questiontitle' + id(), 'aria-describedby' : 'questioninfo' + id() + ' questionhelp' + id()}"> <div class="limits" data-bind="hidden: isAnswered, attr: {id: 'questioninfo' + id()}"> <!-- ko ifnot: foreditor --> Move the slider or <button type="button" class="unstyledbutton" data-bind="click: markAsAnswered, attr: {'aria-hidden': isAnswered, id: 'acceptInitialSlider' + id()}">accept the initial position</button>.<!-- /ko --> <!-- ko if: foreditor --> Move the slider or <button type="button" class="unstyledbutton">accept the initial position</button>.<!-- /ko --> </div> </div> <!-- /ko --> <!-- ko if: display() != 'Slider' --> <label for="defaultNumberTemplateID" class='questiontitle' data-bind='attr: {for: "answer" + id(), id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </label> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <!-- ko if: min() != null && min() != 0 && max() != null && max() != 0 --> <div class='limits' data-bind="html: getMinMax(minString(), maxString()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: min() != 0 && min() != null && (max() == 0 || max() == null) --> <div class='limits' data-bind="html: getMin(minString()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: (min() == 0 || min() == null) && max() != null && max() != 0 --> <div class='limits' data-bind="html: getMax(maxString()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: (min() == 0 || min() == null) && (max() == 0 || max() == null) --> <div class='limits' data-bind="attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <input id="defaultNumberTemplateID" data-bind="enable: !readonly(), value:getValueByQuestion(uniqueId(), true), attr: {'id': 'answer' + id(), 'data-id':id(), 'data-shortname': shortname(), 'name' : 'answer' + id(), 'class':css(), 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questioninfo' + id() + ' questionhelp' + id()}" oninput="propagateChange(this);" onblur="validateInput($(this).parent())" type="text" ></input><span class="unit-text" data-bind="html: unit"></span> <!-- /ko --> <!-- ko if: display() == 'Slider' --> <div class="question-reset-answer-message" data-bind="hidden: !isAnswered()"> <button type="button" class="unstyledbutton" data-bind="click: resetToInitialPosition, attr: {id: 'resetSlider' + id(), 'aria-describedby' : 'questiontitle' + id()}">Reset to initial position</button> </div> <div data-bind="attr: {'class' : maxDistance() > -1 ? 'slider-div median' : 'slider-div'}"> <div style="float: left; margin-left: -20px; padding-bottom: 20px; max-width: 45%; text-align: center;" data-bind="html: minLabel()"></div> <div style="float: right; padding-bottom: 20px; max-width: 45%; text-align: center;" data-bind="html: maxLabel()"></div> <div style="clear: both"></div> <div class="slider-widget-box" role="group" data-bind="attr: {'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questioninfo' + id() + ' questionhelp' + id()}"> <a data-bind='click: decrease'><svg aria-label="Decrease slider value by one step" xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-chevron-left" viewBox="0 0 16 16"> <path stroke="#337ab7" stroke-width="3" fill-rule="evenodd" d="M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z"/></svg></a> <input id="defaultNumberSliderTemplateID" type="text" onchange="propagateChange(this);" data-bind="enable: !readonly(), value:getValueByQuestion(uniqueId()), attr: {'class': css() + ' sliderbox', 'id': 'answer' + id(), 'data-id':id(), 'data-shortname': shortname(), 'name' : 'answer' + id(), 'data-slider-min' : min(), 'data-slider-max' : max(), 'precision' : decimalPlaces(), 'data-slider-step' : step(),'data-slider-ticks' : ticks(), 'data-slider-value' : initialValue(), 'data-is-answered': isAnswered() ? 'true' : 'false' }" /> <a data-bind='click: increase'><svg aria-label="Increase slider value by one step" xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-chevron-right" viewBox="0 0 16 16"> <path stroke="#337ab7" stroke-width="3" fill-rule="evenodd" d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z"/></svg></a> </div> </div> <!-- /ko --> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'number', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: decimalPlaces, attr: {'name': 'decimalplaces' + id()}" /> <input type="hidden" data-bind="value: unit, attr: {'name': 'unit' + id()}" /> <input type="hidden" data-bind="value: min, attr: {'name': 'min' + id()}" /> <input type="hidden" data-bind="value: max, attr: {'name': 'max' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <input type="hidden" data-bind="value: isAttribute, attr: {'name': 'attribute' + id()}" /> <input type="hidden" data-bind="value: isDelphiQuestion, attr: {'name': 'delphiquestion' + id()}" /> <input type="hidden" data-bind="value: delphiChartType, attr: {'name': 'delphicharttype' + id()}" /> <input type="hidden" data-bind="value: showExplanationBox, attr: {'name': 'explanationbox' + id()}" /> <input type="hidden" data-bind="value: attributeName, attr: {'name': 'nameattribute' + id()}" /> <input type="hidden" data-bind="value: isUnique, attr: {'name': 'unique' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <input type="hidden" data-bind="value: scoring, attr: {'name': 'scoring' + id()}" /> <input type="hidden" data-bind="value: points, attr: {'name': 'points' + id()}" /> <!-- ko foreach: scoringItems() --> <input type="hidden" data-bind="value: id, attr: {'name': 'scoringitem' + $parent.id()}" /> <input type="hidden" data-bind="value: type, attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: correct, attr: {'name': 'correct' + id()}" /> <input type="hidden" data-bind="value: value, attr: {'name': 'value' + id()}" /> <input type="hidden" data-bind="value: value2, attr: {'name': 'value2' + id()}" /> <input type="hidden" data-bind="value: feedback, attr: {'name': 'feedback' + id()}" /> <input type="hidden" data-bind="value: min, attr: {'name': 'min' + id()}" /> <input type="hidden" data-bind="value: max, attr: {'name': 'max' + id()}" /> <input type="hidden" data-bind="value: points, attr: {'name': 'points' + id()}" /> <!-- /ko --> <input type="hidden" data-bind="value: minLabel, attr: {'name': 'minLabel' + id()}" /> <input type="hidden" data-bind="value: maxLabel, attr: {'name': 'maxLabel' + id()}" /> <input type="hidden" data-bind="value: display, attr: {'name': 'display' + id()}" /> <input type="hidden" data-bind="value: initialSliderPosition, attr: {'name': 'initialSliderPosition' + id()}" /> <input type="hidden" data-bind="value: displayGraduationScale, attr: {'name': 'displayGraduationScale' + id()}" /> <input type="hidden" data-bind="value: maxDistance, attr: {'name': 'maxDistance' + id()}" /> <!-- /ko --> </div> <div id="email-template"> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <label for="defaultEmailTemplateID" class='questiontitle' data-bind='attr: {for: "answer" + id(), id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </label> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <div class="input-group" style="margin-left: 20px;"> <div class="input-group-addon" style="margin-bottom: 5px">@</div> <input id="defaultEmailTemplateID" data-bind="enable: !readonly(), value:getValueByQuestion(uniqueId(), true), attr: {'id': 'answer' + id(), 'data-id':id(), 'data-shortname': shortname(), 'name' : 'answer' + id(), 'class':css(), 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questionhelp' + id()}" onblur="validateInput($(this).parent().parent())" onkeyup="propagateChange(this);" onchange="validateInput($(this).parent());" style="width: 180px; margin-left: 0px; margin-bottom: 0px !important;" type='email' maxlength="255" /> </div> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'email', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <input type="hidden" data-bind="value: isAttribute, attr: {'name': 'attribute' + id()}" /> <input type="hidden" data-bind="value: isDelphiQuestion, attr: {'name': 'delphiquestion' + id()}" /> <input type="hidden" data-bind="value: showExplanationBox, attr: {'name': 'explanationbox' + id()}" /> <input type="hidden" data-bind="value: attributeName, attr: {'name': 'nameattribute' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <!-- /ko --> </div> <div id="date-template"> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <label for="defaultDateTemplateID" class='questiontitle' data-bind='attr: {for: "answer" + id(), id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </label> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <!-- ko if: min() != null && max() != null --> <div class='limits' data-bind="html: getMinMaxDate(minString(), maxString()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: min() != null && max() == null --> <div class='limits' data-bind="html: getMinDate(minString()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: min() == null && max() != null --> <div class='limits' data-bind="html: getMaxDate(maxString()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: min() == null && max() == null --> <div class='limits' data-bind="attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <div class="input-group"> <!-- ko if: !foreditor && !readonly() --> <div class="input-group-addon" tabindex="0" onclick='$(this).parent().find(".datepicker").datepicker( "show" );' onfocus='$(this).parent().find(".datepicker").datepicker( "show" );'><span class="glyphicon glyphicon-calendar" aria-hidden="true"></span></div> <!-- /ko --> <!-- ko if: foreditor || readonly() --> <div class="input-group-addon"><span class="glyphicon glyphicon-calendar" aria-hidden="true"></span></div> <!-- /ko --> <input id="defaultDateTemplateID" data-bind="enable: !readonly(), value:getValueByQuestion(uniqueId(), true), attr: {'id': 'answer' + id(), 'data-id':id(), 'data-shortname': shortname(), 'name' : 'answer' + id(), 'class': 'datepicker ' + css(), 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questioninfo' + id() + ' questionhelp' + id()}" onblur="if($(this).val().length > 0 && validateInput($(this).parent().parent())) { propagateChange(this); }" oninput="propagateChange(this);" type="text" placeholder="DD/MM/YYYY" style="display: inline; margin-left:0px; margin-bottom:0px !important;"></input> </div> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'date', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: minString(), attr: {'name': 'min' + id()}" /> <input type="hidden" data-bind="value: maxString(), attr: {'name': 'max' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <input type="hidden" data-bind="value: isAttribute, attr: {'name': 'attribute' + id()}" /> <input type="hidden" data-bind="value: isDelphiQuestion, attr: {'name': 'delphiquestion' + id()}" /> <input type="hidden" data-bind="value: showExplanationBox, attr: {'name': 'explanationbox' + id()}" /> <input type="hidden" data-bind="value: attributeName, attr: {'name': 'nameattribute' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <input type="hidden" data-bind="value: scoring, attr: {'name': 'scoring' + id()}" /> <input type="hidden" data-bind="value: points, attr: {'name': 'points' + id()}" /> <!-- ko foreach: scoringItems() --> <input type="hidden" data-bind="value: id, attr: {'name': 'scoringitem' + $parent.id()}" /> <input type="hidden" data-bind="value: type, attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: correct, attr: {'name': 'correct' + id()}" /> <input type="hidden" data-bind="value: value, attr: {'name': 'value' + id()}" /> <input type="hidden" data-bind="value: value2, attr: {'name': 'value2' + id()}" /> <input type="hidden" data-bind="value: feedback, attr: {'name': 'feedback' + id()}" /> <input type="hidden" data-bind="value: minDate, attr: {'name': 'minDate' + id()}" /> <input type="hidden" data-bind="value: maxDate, attr: {'name': 'maxDate' + id()}" /> <input type="hidden" data-bind="value: points, attr: {'name': 'points' + id()}" /> <!-- /ko --> <!-- /ko --> </div> <div id="time-template"> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <label for="defaultTimeTemplateID" class='questiontitle' data-bind='attr: {for: "answer" + id(), id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </label> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <!-- ko if: min() != null && max() != null && min() != '' && max() != '' --> <div class='limits' data-bind="html: getMinMaxDate(min(), max()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: min() != null && min() != '' && (max() == null || max() == '') --> <div class='limits' data-bind="html: getMinDate(min()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: max() != null && max() != '' && (min() == null || min() == '') --> <div class='limits' data-bind="html: getMaxDate(max()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: (max() == null || max() == '') && (min() == null || min() == '') --> <div class='limits' data-bind="attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <div class="input-group"> <div class="input-group-addon"><span class="glyphicon glyphicon-time" aria-hidden="true"></span></div> <input id="defaultTimeTemplateID" data-bind="enable: !readonly(), value:getValueByQuestion(uniqueId()), attr: {'id': 'answer' + id(), 'data-id':id(), 'data-shortname': shortname(), 'name' : 'answer' + id(), 'class': 'timepicker ' + css(), 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questioninfo' + id() + ' questionhelp' + id()}" onblur="if(validateInput($(this).parent().parent())) { propagateChange(this); }" oninput="propagateChange(this);" type="text" placeholder="HH:mm:ss" style="display: inline; margin-left:0px; margin-bottom:0px !important;"></input> </div> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'time', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: min(), attr: {'name': 'min' + id()}" /> <input type="hidden" data-bind="value: max(), attr: {'name': 'max' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <input type="hidden" data-bind="value: isAttribute, attr: {'name': 'attribute' + id()}" /> <input type="hidden" data-bind="value: isDelphiQuestion, attr: {'name': 'delphiquestion' + id()}" /> <input type="hidden" data-bind="value: showExplanationBox, attr: {'name': 'explanationbox' + id()}" /> <input type="hidden" data-bind="value: attributeName, attr: {'name': 'nameattribute' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <!-- /ko --> </div> <div id="upload-template"> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <label for="defaultUploadTemplateID" class='questiontitle' data-bind='attr: {for: "answer" + id(), id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </label> <span class="questionhelp" data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <!-- ko if: extensions() != null && extensions().length > 0 --> <div class="questionhelp"> <span class='glyphicon glyphicon-question-sign'></span> <span data-bind="html: getExtensionsHelp(extensions())"></span> </div> <!-- /ko --> <div class="uploadinfo" style="display: none; padding: 10px; color: #777;"> Upload started. This may take a while.</div> <input id="defaultUploadTemplateID" type="hidden" data-bind="attr: {'id': 'answer' + id(), 'name':'answer' + id()}" value="files" /> <div class="uploaded-files" data-bind="foreach: getFileAnswer(uniqueId(), true)"> <div> <button type="button" class="unstyledbutton" data-toggle="tooltip" title="Remove uploaded file" data-bind="click: function() {deleteFile($parent.id(),'ec8c6df4-a88b-450b-a325-03314d111f44',$data,$('#uploadlink' + $parent.id()));return false;}, attr: {'id' : 'uploadlink' + $parent.id(), 'aria-label' : $data}"> <span style="margin-right: 10px;" class="glyphicon glyphicon-trash"></span> </button> <span data-bind="html: $data"></span> </div> </div> <div data-bind="attr: {'class': css() + ' file-uploader', 'data-id':id}" style="margin-left: 10px; margin-top: 10px;"></div> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'upload', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <input type="hidden" data-bind="value: extensions, attr: {'name': 'extensions' + id()}" /> <input type="hidden" data-bind="value: maxFileSize, attr: {'name': 'maxFileSize' + id()}" /> <!-- /ko --> </div> <div id="download-template"> <div class='questiontitle' data-bind='attr: {id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </div> <span class="questionhelp" data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <div class="files" role="list" data-bind="foreach: files, attr: {'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questionhelp' + id()}"> <!-- ko if: $parent.foreditor --> <input type="hidden" data-bind="value: uid(), attr: {'name': 'files' + $parent.id()}" /> <!-- /ko --> <a class="visiblelink" target="_blank" data-bind="attr: {'href': '/eusurvey/files/442c3038-aa13-4d95-b97e-cfe766c5048f/' + uid(), 'aria-label' : 'Download file ' + name()}, html: name"></a> <br /> </div> <!-- ko if: foreditor --> <!-- ko if: files().length == 0 --> <div class="files"> <i>[Please add a file to your survey for your participants to download]</i> </div> <!-- /ko --> <input type="hidden" data-bind="value: 'download', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <!-- /ko --> </div> <div id="gallery-template"> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <span id="defaultGalleryTemplateID" class='questiontitle' data-bind='attr: {id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </span> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <!-- ko if: selection() && limit != null && limit() > 0 --> <div class='limits' data-bind="html: getMaxSelections(limit()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko ifnot: selection() && limit != null && limit() > 0 --> <div class='limits' data-bind="attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <div class="gallery-div" style="width: 920px; max-width: 100%; text-align:left;"> <!-- ko if: files().length == 0 --> <table data-bind="attr: {'class':'gallery-table limit' + limit()}"> <thead> <tr> <th class="sr-only">Photo Scenery"</th> <th class="sr-only">Photo Scenery"</th> </tr> </thead> <tbody> <tr> <td> <img alt="Photo Scenery" style="max-width: none;" src="/eusurvey/resources/images/photo_scenery.png" data-width="128" data-original-width="247" width="247px"> </td> <td> <img alt="Photo Scenery" style="max-width: none;" src="/eusurvey/resources/images/photo_scenery.png" data-width="128" data-original-width="247" width="247px"> </td> </tr> </tbody> </table> <!-- /ko --> <!-- ko if: files().length > 0 --> <table style="width: 100%" data-bind="attr: {'class':'gallery-table limit' + limit(), 'aria-rowcount': rows().length, 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questioninfo' + id() + ' questionhelp' + id()}" > <thead data-bind="foreach: rows"> <!-- ko if: $index() == 0 --> <tr data-bind="foreach: $data"> <th class="sr-only">Gallery Image Item</th> </tr> <!-- /ko --> </thead> <tbody data-bind="foreach: rows"> <tr data-bind="foreach: $data"> <td data-bind="attr: {'data-uid':uid()}" style="vertical-align: top"> <div class="galleryinfo"> <span data-bind="if: $parents[1].selection()"> <input aria-labelledby="defaultGalleryTemplateID" data-bind="value: $parentContext.$index() * $parents[1].columns() + $index(), checked: getValueByQuestionGallery($parents[1].uniqueId()).indexOf(($parentContext.$index() * $parents[1].columns() + $index()).toString()) > -1, attr: {'onclick': $parents[1].readonly() ? 'return false;':'propagateChange(this);', 'data-shortname': $parents[1].shortname(), 'class': $parents[1].css() + ' selection', 'name':'answer'+$parents[1].id(), 'aria-labelledby': 'answerlabel' + $parents[1].id() + $index()}" type="checkbox" /> </span> <!-- ko if: $parents[1].numbering() --> <span data-bind='html: ($parentContext.$index() * $parents[1].columns() + $index()+1) + "."'></span> <!-- /ko --> <span data-bind='html: name().replace("%20"," "), attr: {id: "answerlabel" + $parents[1].id() + $index()}'></span> </div> <a onclick="showGalleryBrowser($(this).parent())"> <img class="gallery-image" alt="Gallery Image Item" data-bind="attr: {'alt': (desc() != '' ? desc() : 'Gallery Image' + $index()) + (longdesc != '' ? '; URL ' + longdesc() : ''), 'src':'/eusurvey/files/442c3038-aa13-4d95-b97e-cfe766c5048f/'+ uid(), 'data-width': width(), 'data-original-width': Math.round((850-20-($parents[1].columns()*30))/$parents[1].columns()), 'width': Math.round((850-20-($parents[1].columns()*30))/$parents[1].columns())+'px'}" style="max-width: 100%;" /> </a> <div class="comment" data-bind="html: comment"></div> <!-- ko if: $parents[1].foreditor --> <input type="hidden" data-bind="value: name, attr: {'name': 'name' + ($parentContext.$index() * $parents[1].columns() + $index() + 1) + $parents[1].id()}" /> <input type="hidden" data-bind="value: uid, attr: {'name': 'image' + ($parentContext.$index() * $parents[1].columns() + $index() + 1) + $parents[1].id()}" /> <input type="hidden" data-bind="value: longdesc, attr: {'name': 'longdesc' + ($parentContext.$index() * $parents[1].columns() + $index() + 1) + $parents[1].id()}" /> <input type="hidden" data-bind="value: desc, attr: {'name': 'desc' + ($parentContext.$index() * $parents[1].columns() + $index() + 1) + $parents[1].id()}" /> <label hidden><textarea data-bind="text: comment, attr: {'name': 'comment' + ($parentContext.$index() * $parents[1].columns() + $index() + 1) + $parents[1].id()}" ></textarea>Comment</label> <!-- /ko --> </td> </tr> </tbody> </table> <!-- /ko --> </div> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'gallery', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <input type="hidden" data-bind="value: columns, attr: {'name': 'columns' + id()}" /> <input type="hidden" data-bind="value: selection, attr: {'name': 'selectable' + id()}" /> <input type="hidden" data-bind="value: numbering, attr: {'name': 'numbering' + id()}" /> <input type="hidden" data-bind="value: limit, attr: {'name': 'limit' + id()}" /> <input type="hidden" data-bind="value: files().length, attr: {'name': 'count' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <!-- /ko --> <!-- ko ifnot: foreditor --> <div class="modal" data-backdrop="static"> <div data-bind="attr: {'data-mobile': '' + ismobile, 'class': 'modal-dialog runnerdialog ' + (ismobile ? 'modal-sm' : (istablet ? 'modal-md' : 'modal-lg'))}"> <div class="modal-content"> <div class="modal-header">Browse Gallery</div> <div data-bind="foreach: files()" class="modal-body" data-bind="attr: {'style': 'overflow: auto; height: ' + ismobile ? '400px' : '600px;'}"> <div class="gallery-image hideme" style="text-align: center" data-bind="attr: {'data-uid': uid()}"> <div class="galleryinfo"> <span data-bind="if: $parent.selection()"> <input aria-labelledby="defaultGalleryTemplateID" onclick="synchronizeGallerySelection(this)" type="checkbox" data-bind="attr: {'aria-labelledby': 'answerlabel' + $parent.id() + $index()}" /> </span> <!-- ko if: $parent.numbering() --> <span data-bind='html: ($index()+1) + "."'></span> <!-- /ko --> <span data-bind='html: name().replace("%20"," "), attr: {id: "answerlabel" + $parent.id() + $index()}'></span> </div> <img style="width: 95%;" alt="Gallery Image Item" data-bind="attr: {'alt': (desc() != '' ? desc() : 'Gallery Image' + $index()) + (longdesc != '' ? '; URL ' + longdesc() : ''), 'src':'/eusurvey/files/442c3038-aa13-4d95-b97e-cfe766c5048f/'+uid()}" /> <div class="gallery-image-comment" style="text-align: center; padding: 15px;" data-bind="html: comment()"></div> </div> </div> <div class="modal-footer"> <a class="btn btn-default" onclick="openPreviousImage($(this).closest('.modal'))"><span class="glyphicon glyphicon-chevron-left"></span></a> <a class="btn btn-primary" onclick="$(this).closest('.modal').modal('hide');">Close</a> <a class="btn btn-default" onclick="openNextImage($(this).closest('.modal'))"><span class="glyphicon glyphicon-chevron-right"></span></a> </div> </div> </div> </div> <!-- /ko --> </div> <div id="matrix-template"> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'matrix', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: tableType, attr: {'name': 'tabletype' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: order, attr: {'name': 'order' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <input type="hidden" data-bind="value: isAttribute, attr: {'name': 'attribute' + id()}" /> <input type="hidden" data-bind="value: isDelphiQuestion, attr: {'name': 'delphiquestion' + id()}" /> <input type="hidden" data-bind="value: showExplanationBox, attr: {'name': 'explanationbox' + id()}" /> <input type="hidden" data-bind="value: delphiChartType, attr: {'name': 'delphicharttype' + id()}" /> <input type="hidden" data-bind="value: attributeName, attr: {'name': 'nameattribute' + id()}" /> <input type="hidden" data-bind="value: isInterdependent, attr: {'name': 'interdependent' + id()}" /> <input type="hidden" data-bind="value: isSingleChoice, attr: {'name': 'single' + id()}" /> <input type="hidden" data-bind="value: minRows, attr: {'name': 'rowsmin' + id()}" /> <input type="hidden" data-bind="value: maxRows, attr: {'name': 'rowsmax' + id()}" /> <input type="hidden" data-bind="value: widths, attr: {'name': 'widths' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <input type="hidden" data-bind="value: editorColumnsLocked(), attr: {'name': 'editorColumnsLocked' + id()}" /> <input type="hidden" data-bind="value: editorRowsLocked(), attr: {'name': 'editorRowsLocked' + id()}" /> <!-- /ko --> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <div id="defaultMatrixTemplateID" class='questiontitle' data-bind='attr: {id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </div> <span class="questionhelp" data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <!-- ko if: minRows() != 0 && maxRows() != 0 --> <div class='limits' data-bind="html: getMinMaxRows(minRows(), maxRows()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: minRows() != 0 && maxRows() == 0 --> <div class='limits' data-bind="html: getMinRows(minRows()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: minRows() == 0 && maxRows() != 0 --> <div class='limits' data-bind="html: getMaxRows(maxRows()), attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <!-- ko if: minRows() == 0 && maxRows() == 0 --> <div class='limits' data-bind="attr: {id: 'questioninfo' + id()}"></div> <!-- /ko --> <div style="width: 100%"> <!-- ko if: foreditor --> <div class="hiddenmatrixquestions hideme"> <!-- ko foreach: questions() --> <div data-bind="attr: {'pos': $index, 'data-id': id}"> <input type="hidden" data-bind="value: 'text', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <!-- ko foreach: $parent.answers() --> <input type="hidden" data-bind="attr: {'name': 'dependencies' + $parents[1].id(), 'value': $parents[1].dependentElementsStrings()[$index() + ($parent.originalIndex() * ($parents[1].columns()-1))], 'data-qaid': $parent.id() + '|' + id()}" /> <!-- /ko --> </div> <!-- /ko --> </div> <!-- /ko --> <div class="table-responsive"> <table data-bind="attr: {'class':'matrixtable ' + css(), 'style': tableType() == 1 ? 'width: 900px' : 'width: auto; max-width: auto', 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questioninfo' + id() + ' questionhelp' + id()}"> <thead> <tr> <td class="matrix-header firstCell" data-bind="attr: {'data-id': id(), 'style': tableType() != 2 ? '' : 'width: ' + getWidth(widths(), 0)}"> <!-- ko if: foreditor --> <textarea aria-labelledby="defaultMatrixTemplateID" style="display: none" data-bind="text: firstCellText, attr: {'name': 'firstCellText' + id()}"></textarea> <!-- /ko --> <span class="matrixheadertitle" data-bind="html: firstCellText"></span> </td> <!-- ko foreach: answers --> <td class="matrix-header" scope="col" data-bind="attr: {'id' : id(), 'data-id': id(), 'style': $parent.tableType() != 2 ? '' : 'width: ' + getWidth($parent.widths(), $index()+1)}"> <!-- ko if: $parent.foreditor --> <input type="hidden" data-bind="value: 'text', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <label hidden><textarea data-bind="text: title, attr: {'name': 'text' + id()}" ></textarea>Title</label> <!-- /ko --> <span class="matrixheadertitle" data-bind="html: title"></span> </td> <!-- /ko --> </tr> </thead> <tbody> <!-- ko foreach: questionsOrdered() --> <tr data-bind="attr: {'class': $data.isDependentMatrixQuestion() && isInvisible($data.uniqueId()) ? 'matrix-question untriggered hideme':'matrix-question', 'data-id': id(), 'data-uid': uniqueId(), 'data-triggers': getTriggersByQuestion(uniqueId()) + ';' + ($parent.foreditor ? '' : getTriggersByQuestion($parent.uniqueId)), 'data-useAndLogic': useAndLogic()}"> <th class="matrix-header" scope="row" data-bind="attr: {'id' : id(), 'data-id': id}"> <!-- ko if: optional() == false --> <span class="mandatory" style="position: absolute; margin-left: -7px; margin-top: 3px;">*</span> <!-- /ko --> <span class="matrixheadertitle" data-bind="html: title"></span> </th> <!-- ko foreach: $parent.answers --> <td class="matrix-cell" data-bind="attr: {'data-originalposition': ($parent.originalIndex() * ($parents[1].columns() - 1)) + $index()}"> <input aria-labelledby="defaultMatrixTemplateID" type="radio" data-bind="enable: !$parents[1].readonly() && !$parents[1].foreditor, checked: getPAByQuestion2($parent.uniqueId(), uniqueId(), id()), attr: {value: id(), 'data-shortname': $parent.shortname() + '|' + shortname(), onkeyup: 'singleKeyUp(event, this, '+$parents[1].readonly()+')', 'onclick': $parents[1].readonly() ? 'return false;' : 'findSurveyElementAndResetValidationErrors(this); checkSingleClick(this); event.stopImmediatePropagation();propagateChange(this);', 'id': $parent.id().toString() + id().toString(), 'data-id': $parent.id().toString() + id().toString(), 'aria-labelledby': $parent.id().toString() + ' ' + id().toString(), 'class': $parent.css() + ' trigger', 'name': 'answer' + $parent.id(), 'data-dependencies': $parents[1].dependentElementsStrings()[$index() + ($parent.originalIndex() * ($parents[1].columns()-1))], 'data-cellid' : $parent.id() + '|' + id(), type: $parents[1].isSingleChoice() ? 'radio' : 'checkbox', role: $parents[1].isSingleChoice() ? 'radio' : 'checkbox', 'data-dummy': getPAByQuestion2($parent.uniqueId(), uniqueId(), id())}" /> </td> <!-- /ko --> </tr> <!-- /ko --> </tbody> </table> </div> </div> </div> <div id="table-template"> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'table', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: tableType, attr: {'name': 'tabletype' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: isDelphiQuestion, attr: {'name': 'delphiquestion' + id()}" /> <input type="hidden" data-bind="value: showExplanationBox, attr: {'name': 'explanationbox' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <input type="hidden" data-bind="value: widths, attr: {'name': 'widths' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <input type="hidden" data-bind="value: editorColumnsLocked(), attr: {'name': 'editorColumnsLocked' + id()}" /> <input type="hidden" data-bind="value: editorRowsLocked(), attr: {'name': 'editorRowsLocked' + id()}" /> <!-- /ko --> <!-- ko if: optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <div id="defaultTableTemplateID" class='questiontitle' data-bind='attr: {id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </div> <span class="questionhelp" data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <div class="table-responsive"> <table data-bind="attr: {'data-widths':widths(), 'id':id(), 'data-readonly': readonly, 'style': tableType() == 1 ? 'width: 900px' : 'width: auto; max-width: auto', 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questionhelp' + id()}" class="tabletable"> <tbody> <tr style="background-color: #eee;"> <td class="table-header firstCell" data-bind="attr: {'data-id': id(), 'style': tableType() != 2 ? '' : 'width: ' + getWidth(widths(), 0)}"> <!-- ko if: foreditor --> <textarea aria-labelledby="defaultTableTemplateID" style="display: none" data-bind="text: firstCellText, attr: {'name': 'firstCellText' + id()}"></textarea> <!-- /ko --> <span class="matrixheadertitle" data-bind="html: firstCellText"></span> </td> <!-- ko foreach: answers --> <td class="table-header" scope="col" data-bind="attr: {'id' : id(), 'data-id' : id(), 'data-shortname' : shortname, 'data-uid' : uniqueId(), 'style': $parent.tableType() != 2 ? '' : 'width: ' + getWidth($parent.widths(), $index()+1)}"> <span data-bind="html: title"></span> <!-- ko if: $parent.foreditor --> <textarea aria-labelledby="defaultTableTemplateID" style="display: none" data-bind="text: originalTitle" ></textarea> <!-- /ko --> </td> <!-- /ko --> </tr> <!-- ko foreach: questions --> <tr data-bind="attr: {'data-id': id()}"> <th scope="row" style="padding-left: 10px" class="table-header" data-bind="attr: {'id' : id(), 'data-id' : id(),'data-shortname' : shortname, 'data-uid' : uniqueId(), 'data-optional' : optional().toString()}"> <!-- ko if: optional() == false --> <span class="mandatory" style="position: absolute; margin-left: -7px; margin-top: 3px;">*</span> <!-- /ko --> <span data-bind="html: title"></span> <!-- ko if: $parent.foreditor --> <textarea aria-labelledby="defaultTableTemplateID" style="display: none" data-bind="text: originalTitle" ></textarea> <!-- /ko --> </th> <!-- ko foreach: $parent.answers --> <td style="padding: 2px;"> <textarea aria-labelledby="defaultTableTemplateID" onblur="validateInput($(this).closest('.tabletable').parent(), true)" oninput="propagateChange(this);" data-bind="enable: !$parents[1].readonly(), value: getTableAnswer($parents[1].uniqueId(), $parentContext.$index()+1, $index()+1, true), attr: {'data-id': $parents[1].id() + $parentContext.$index() + '' + $index(), 'data-shortname': $parent.shortname() + '|' + shortname(), 'class':$parents[1].css() + ' ' + $parents[0].css(), 'name':'answer' + $parents[1].id() + '|' + ($parentContext.$index()+1) + '|' + ($index()+1), 'aria-labelledby': $parent.id().toString() + ' ' + id().toString()}"></textarea> </td> <!-- /ko --> </tr> <!-- /ko --> </tbody> </table> </div> </div> <div id="delphi-template" data-bind="class: ismobile || istablet ? 'delphi-template-mobile' : 'delphi-template'"> <!-- ko if: isDelphiQuestion() --> <div class="delphichildren"></div> <!-- ko if: maxDistanceExceeded() && !changedForMedian() --> <div class="maxDistanceExceededMessage"> Your answer to this question differs significantly from the group. Please change your answer or explain your decision.<input type="hidden" name="medianWarningVisible" value="true" /> <!-- ko if: median() --> <div>Group Median: <span data-bind="html: median()"></span></div> <!-- /ko --> </div> <!-- /ko --> <div class="row" style="margin-left: 0; margin-right: 0; margin-top: 20px;"> <div class="col-md-6" data-bind="style: {'padding-right': ismobile ? 0 : undefined, 'padding-left': 0}"> <!-- ko if: showExplanationBox() --> <div class="explanation-section"> <table class='table table-condensed table-bordered minh355' style="width: auto; margin-bottom: 0; background-color: #fff"> <tr> <th class='area-header'>OPTIONAL: Please feel free to provide any additional comments</th> </tr> <tr> <td> <label hidden for="explanationTemplateID" data-bind="attr: {'for': 'explanation' + id()}">Explanation</label> <textarea id="explanationTemplateID" style="height: 125px" class="explanation-editor" data-bind="attr: {'id': 'explanation' + id(), name: 'explanation' + id()}" ></textarea> </td> </tr> <tr> <td> <div class="explanation-file-upload-section"> <div class="text" style="margin-bottom: 5px;">Add a file to your explanation</div> <div class="uploadinfo" style="display: none; padding: 10px; color: #777;">Upload started. This may take a while.</div> <input type="hidden" value="files" /> <div class="uploaded-files" data-bind="foreach: getFileAnswer(uniqueId())"> <div> <button type="button" class="unstyledbutton" data-toggle="tooltip" title="Remove uploaded file" data-bind="attr: {'id' : 'uploadlink' + $parent.id(), 'aria-label' : $data}, click: function() {deleteFile($parent.id(),'ec8c6df4-a88b-450b-a325-03314d111f44',$data,$('#uploadlink' + $parent.id()));return false;}"> <span style="margin-right: 10px;" class="glyphicon glyphicon-trash"></span> </button> <span data-bind="html: $data"></span> </div> </div> <div data-bind="attr: {'class': 'file-uploader', 'data-id': id()}" style="margin-left: 10px; margin-top: 10px;"></div> </div> </td> </tr> </table> </div> <!-- /ko --> </div> <div class="col-md-6" style="padding:0;"> <!-- ko if: !foreditor --> <div class="chart-wrapper-loader"> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif"> </div> <!-- /ko --> <div class="chart-wrapper" data-bind="style: {float: ismobile || istablet ? 'left' : undefined}"> <table class="table table-condensed table-bordered chart-wrapper__table"> <tr> <th class="area-header"> <span>Statistics</span> <a onclick="loadGraphDataModal(this)" class="glyphicon glyphicon-resize-full delphi-chart-expand" data-toggle="tooltip" title="Expand" aria-label="Expand"></a> </th> </tr> <tr> <td class="chart-wrapper__chart-cell"> <div class="chart-wrapper__chart-container"></div> <div data-bind="attr: {id: 'wordcloud' + uniqueId()}" class="chart-wrapper__word-cloud-container"></div> </td> </tr> </table> <div style="clear: both"></div> </div> </div> </div> <div class="row" style="margin-left: 0; margin-right: 0; margin-top: 0px;"> <div class="col-md-12" style="padding:0;"> <div class="explanation-update-section"> <button type="button" class="btn btn-primary disabled" data-type="delphisavebutton" onclick="if (!$(this).hasClass('disabled')) { delphiUpdate($(this).closest('.survey-element')) }">Save</button> <span class="inline-loader"> <img alt="wait animation" class="center" src="/eusurvey/resources/images/ajax-loader.gif"/> </span> <br /><br /> <button type="button" data-type="delphireturntostart" class="unstyledbutton link" style="margin-right: 20px;" onclick="return checkGoToDelphiStart(this)">Return to start page</button> <button type="button" data-type="delphitonextquestion" class="unstyledbutton link delphitonextquestion" onclick="goToNextQuestion(this)">Go to next question</button> </div> <div class="delphiupdatemessage"></div> <!-- ko if: delphiTableNewComments() --> <div class="newdelphicomments label">There are new comments</div> <!-- /ko --> </div> </div> <div class="modal delete-confirmation-dialog" role="dialog" data-backdrop="static"> <div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-body"> Do you really want to delete this comment?</div> <div class="modal-footer"> <a class="btn btn-default delete-confirmation-dialog__confirmation-button">Delete</a> <a class="btn btn-primary" onclick="hideModalDialog($(this).closest('.modal'))">Cancel</a> </div> </div> </div> </div> <!-- /ko --> </div> <div id="complextable-template"> <div class='questiontitle' data-bind='attr: {id: "questiontitle" + id()}'> <span class="screen-reader-only">Question</span> <span data-bind='html: title'></span> <span class="screen-reader-only" data-bind="if: help">Additional help available</span> </div> <span class='questionhelp' data-bind="html: niceHelp, attr:{id: 'questionhelp' + id()}"></span> <div class="table-responsive"> <table class="table complextable" data-bind="css: { 'table-bordered': showHeadersAndBorders() || foreditor }, attr: {'style': size() == 0 ? 'width: auto' : 'width: 900px', 'aria-labelledby':'questiontitle' + id(), 'aria-describedby':'questionhelp' + id()}"> <tr data-bind="if: showHeadersAndBorders() || foreditor"> <!-- ko foreach: answers() --> <!-- ko if: $index() == 0--> <td class="headercell cell" data-bind="html: title, attr:{'data-id': id(), colspan: columnSpan()}">placeholder</td> <!-- /ko --> <!-- ko ifnot: $index() == 0--> <th class="headercell cell" data-bind="html: title, attr:{'data-id': id(), colspan: columnSpan()}">placeholder</th> <!-- /ko --> <!-- /ko --> </tr> <!-- ko foreach: questions() --> <tr> <!-- ko if: $parent.showHeadersAndBorders() || $parent.foreditor --> <th class="headercell cell" data-bind="html: title, attr:{'data-id': id(), 'data-type': cellType(), colspan: columnSpan()}">placeholder</th> <!-- /ko --> <!-- ko foreach: new Array($parent.columns()) --> <!-- ko if: $parents[1].isCellVisible($index()+1, $parentContext.$index()+1) --> <!--ko let: {child: $parents[1].getChild($index()+1, $parentContext.$index()+1)}--> <td class="cell" data-bind="attr:{'data-id': child == null ? '' : child.id(), 'data-type': child == null ? '' : child.cellType(), colspan: child && child.columnSpan(), 'data-col': $index()+1}"> <!-- ko if: child == null || child.cellType() == 0 --> <span> </span> <!-- /ko --> <!-- ko if: child && child.cellType() > 0 --> <!-- ko if: child.optional() == false --> <span class="mandatory">*</span> <!-- /ko --> <!-- ko if: child.title() --> <span id="defaultComplextableChildTemplateID" class='questiontitle' data-bind="attr: {id: 'questiontitle' + child.id()}"> <span class="screen-reader-only">Question</span> <span data-bind='html: child.title()'></span> <span class="screen-reader-only" data-bind="if: child.help()">Additional help available</span> </span> <!-- /ko --> <!-- ko ifnot: child.title() --> <div hidden class='questiontitle' data-bind="attr: {id: 'questiontitle' + child.id()}">Question</div> <!-- /ko --> <!-- ko if: child.help() --> <span class='questionhelp' data-bind="html: child.niceHelp(), attr:{id: 'questionhelp' + child.id()}"></span> <!-- /ko --> <!-- ko ifnot: child.help() --> <span hidden class='questionhelp' data-bind="attr:{id: 'questionhelp' + child.id()}"></span> <!-- /ko --> <!-- /ko --> <!-- ko if: child && child.cellType() > 1 --> <div data-bind="attr: {class: child.cellType() == 3 ? 'innercell' : 'innercell forprogress', onfocusout: !$parents[1].foreditor ? 'validateInput($(this).closest(\'.cell\'))' : '', onmouseleave: !$parents[1].foreditor ? 'validateInput($(this).closest(\'.cell\'))' : ''}"> <!-- focusout bubbles while blur does not; this combination of mouseleave and focusout covers all Tab/Mouse cases of leaving the cell --> <!-- ko if: child && child.cellType() == 2 --> <!-- ko if: child.minCharacters() > 0 && child.maxCharacters() > 0 --> <div class='limits' data-bind="html: getMinMaxCharacters(child.minCharacters(), child.maxCharacters()), attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <!-- ko if: child.minCharacters() > 0 && (child.maxCharacters() == 0 || child.maxCharacters() == null) --> <div class='limits' data-bind="html: getMinCharacters(child.minCharacters()), attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <!-- ko if: (child.minCharacters() == 0 || child.minCharacters() == null) && child.maxCharacters() > 0 --> <div class='limits' data-bind="html: getMaxCharacters(child.maxCharacters()), attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <!-- ko if: (child.minCharacters() == 0 || child.minCharacters() == null) && (child.maxCharacters() == 0 || child.maxCharacters() == null) --> <div class='limits' data-bind="attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <textarea aria-labelledby="defaultComplextableChildTemplateID" oninput="propagateChange(this)" data-bind="enable: child.foreditor == false && !child.readonly(), class: child.css(), value:getValueByQuestion(child.uniqueId(), true, $element), attr: {'name' : 'answer' + child.id(), rows: child.numRows(), maxlength: child.maxCharacters() > 0 ? child.maxCharacters() : '', onkeyup: child.maxCharacters() > 0 ? 'countChar(this);' : '', 'aria-labelledby':'questiontitle' + child.id(), 'aria-describedby':'questioninfo' + child.id() + ' questionhelp' + child.id()}"></textarea> <!-- ko if: child.maxCharacters() > 0 && !$parent.foreditor --> <div class="charactercounterdiv limits" style="max-width: 645px; text-align: right; margin-left: 20px;" aria-live="polite" aria-atomic="true"> <span class="glyphicon glyphicon-alert" style="display: none; margin-right: 5px;" data-toggle="tooltip" title="You have less than 5 characters left." aria-label="You have less than 5 characters left."></span> <span class="charactersused"> <span data-bind="html: getCharacterCountInfo(child.maxCharacters()), attr: {id: 'countinfo' + child.id()}"></span> </span> <span class="characterlimitreached" data-toggle="tooltip" aria-label="Character limit reached.">Character limit reached.</span> </div> <!-- /ko --> <!-- /ko --> <!-- ko if: child && child.cellType() == 3 --> <!-- ko if: child.min() != null && child.min() != 0 && child.max() != null && child.max() != 0 --> <div class='limits' data-bind="html: getMinMax(child.min(), child.max()), attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <!-- ko if: child.min() != 0 && child.min() != null && (child.max() == 0 || child.max() == null) --> <div class='limits' data-bind="html: getMin(child.min()), attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <!-- ko if: (child.min() == 0 || child.min() == null) && child.max() != null && child.max() != 0 --> <div class='limits' data-bind="html: getMax(child.max()), attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <!-- ko if: (child.min() == 0 || child.min() == null) && (child.max() == 0 || child.max() == null) --> <div class='limits' data-bind="attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <input aria-labelledby="defaultComplextableChildTemplateID" data-bind="enable: child.foreditor == false && !child.readonly(), value: child.result, attr: {'id': 'answer' + child.id(), 'data-id':child.id(), 'data-shortname': child.shortname(), 'name' : (child.readonly() ? '' : 'answer' + child.id()), 'class': child.css(), 'aria-labelledby':'questiontitle' + child.id(), 'aria-describedby':'questioninfo' + child.id() + ' questionhelp' + child.id()}" oninput="propagateChange(this);" onblur="resetValidationErrors($(this).closest('.cell'));validateInput($(this).parent())" type="text" autocomplete="off" /> <!-- ko if: child.readonly() --> <input type="hidden" data-bind="value: child.result, attr: {'name': 'answer' + child.id()}" /> <!-- /ko --> <!-- /ko --> <!-- ko if: child && child.cellType() == 4 --> <!-- ko if: child && child.useRadioButtons() --> <div style="display: table" role="radiogroup" data-bind="attr: {'aria-labelledby':'questiontitle' + child.id(), 'aria-describedby':'questionhelp' + child.id()}"> <div style="display: table-row"> <!-- ko foreach: child.orderedPossibleAnswersByColumn(false, false) --> <div style="display: table-cell; padding-right: 10px"> <!-- ko foreach: $data --> <input aria-labelledby="defaultComplextableChildTemplateID" type="radio" data-bind="enable: child.foreditor == false && !child.readonly(), checkedValue: true, checked: !child.foreditor && getPAByQuestion(child.uniqueId(), $element).indexOf(uniqueId()) > -1, value: id(), attr: {'name' : 'answer' + child.id(), 'id': 'answer' + child.id(), 'aria-labelledby': 'questiontitle' + child.id(), class: child.css(), 'onclick': child.readonly() ? 'return false;' : 'checkSingleClick(this); propagateChange(this);', onkeyup: 'singleKeyUp(event, this, '+child.readonly()+')', 'previousvalue': getPAByQuestion(child.uniqueId(), $element).indexOf(uniqueId()) > -1 ? 'checked' : 'false'}" /> <span data-bind="html: title()"></span><br /> <!-- /ko --> </div> <!-- /ko --> </div> </div> <!-- /ko --> <!-- ko if: child && !child.useRadioButtons() --> <select aria-labelledby="defaultComplextableChildTemplateID" data-bind="enable: child.foreditor == false && !child.readonly(), value: getPAByQuestion3(child.uniqueId(), $element), attr: {'id': 'answer' + child.id(), 'onclick': !child.foreditor ? 'validateInput($(this).parent(),true); checkDependenciesAsync(this); propagateChange(this);' : '', 'data-id':child.id(), 'data-shortname': child.shortname(), 'name' : child.foreditor ? '' : ('answer' + child.id()), 'class': child.css(), 'aria-labelledby':'questiontitle' + child.id(), 'aria-describedby':'questionhelp' + child.id()}"> <option selected="selected" value=''></option> <!-- ko foreach: child.orderedPossibleAnswers(false) --> <option data-bind="html: title(), attr: {value: id(), 'data-dependencies': dependentElementsString(), 'id': 'trigger'+id()}" class="possible-answer trigger"></option> <!-- /ko --> </select> <!-- /ko --> <!-- /ko --> <!-- ko if: child && child.cellType() == 5 --> <!-- ko if: child.minChoices() != 0 && child.maxChoices() != 0 --> <div class='limits' data-bind="html: getMinMaxChoice(child.minChoices(), child.maxChoices()), attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <!-- ko if: child.minChoices() != 0 && child.maxChoices() == 0 --> <div class='limits' data-bind="html: getMinChoice(child.minChoices()), attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <!-- ko if: child.minChoices() == 0 && child.maxChoices() != 0 --> <div class='limits' data-bind="html: getMaxChoice(child.maxChoices()), attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <!-- ko if: child.minChoices() == 0 && child.maxChoices() == 0 --> <div class='limits' data-bind="attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <!-- ko if: child && child.useCheckboxes() --> <div class="complex-multitable" style="display: table"> <div style="display: table-row" role="list" data-bind="attr: {'aria-labelledby':'questiontitle' + child.id(), 'aria-describedby':'questioninfo' + child.id() + ' questionhelp' + child.id()}"> <!-- ko foreach: child.orderedPossibleAnswersByColumn(false, false) --> <div style="display: table-cell; padding-right: 10px"> <!-- ko foreach: $data --> <input aria-labelledby="defaultComplextableChildTemplateID" type="checkbox" onclick="resetValidationErrors($(this).closest('.cell'));propagateChange(this)" data-bind="enable: child.foreditor == false && !child.readonly(), checked: !child.foreditor && getPAByQuestionCheckBox(child.uniqueId(), uniqueId(), $element).indexOf(uniqueId()) > -1, value: id(), attr: {'name' : 'answer' + child.id(), 'id': 'answer' + child.id(), 'aria-labelledby': 'questiontitle' + child.id(), class: child.css()}"/> <span data-bind="html: title()"></span><br /> <!-- /ko --> </div> <!-- /ko --> </div> </div> <!-- /ko --> <!-- ko if: child && !child.useCheckboxes() --> <ul role="listbox" data-bind="attr: {'class': child.css() + ' multiple-choice', 'aria-labelledby':'questiontitle' + child.id(), 'aria-describedby':'questioninfo' + child.id() + ' questionhelp' + child.id()}, foreach: child.orderedPossibleAnswers(false),"> <li role="listitem" data-bind="attr: { 'data-id': id(), 'class': 'possible-answer trigger ' + (getPAByQuestion(child.uniqueId()).indexOf(uniqueId()) > -1 ? 'selected-choice' : '')}"> <label for="defaultComplexMCListBoxTemplateID" data-bind="attr: {for: id()}"> <button type="button" class="unstyledbutton" data-bind="attr: {'data-shortname': shortname(), 'onclick' : child.readonly() || child.foreditor ? 'return false;' : 'selectMultipleChoiceAnswer($(this)); propagateChange($(this)); event.stopImmediatePropagation();'}" > <span class="screen-reader-only">Answer</span> <span data-bind="html: strip_tags(title()), attr: {'data-id' : id(), 'id': 'answerlabel' + id()}" class="answertext"></span> </button> </label> <input id="defaultComplexMCListBoxTemplateID" data-bind="value: id(), checked: getPAByQuestion2(child.uniqueId(), uniqueId(), id, $element), attr: {'name': 'answer' + child.id(), 'id':id(), 'data-id': child.id() + id(), 'data-dependencies': dependentElementsString, 'aria-labelledby': 'answerlabel' + id()}" style="display: none" type="checkbox" /> </li> </ul> <!-- /ko --> <!-- /ko --> <!-- ko if: child && child.cellType() == 6 --> <!-- ko if: child.min() != null && child.min() != 0 && child.max() != null && child.max() != 0 --> <div class='limits' data-bind="html: getMinMax(child.min(), child.max()), attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <!-- ko if: child.min() != 0 && child.min() != null && (child.max() == 0 || child.max() == null) --> <div class='limits' data-bind="html: getMin(child.min()), attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <!-- ko if: (child.min() == 0 || child.min() == null) && child.max() != null && child.max() != 0 --> <div class='limits' data-bind="html: getMax(child.max()), attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <!-- ko if: (child.min() == 0 || child.min() == null) && (child.max() == 0 || child.max() == null) --> <div class='limits' data-bind="attr: {id: 'questioninfo' + child.id()}"></div> <!-- /ko --> <input aria-labelledby="defaultComplextableChildTemplateID" type="number" oninput="propagateChange(this);" onblur="resetValidationErrors($(this).closest('.cell'));validateInput($(this).parent())" data-bind="enable: child.foreditor == false && !child.readonly(), class: child.css(), value:getValueByQuestion(child.uniqueId(), true, $element), attr: {'name' : 'answer' + child.id(), min: child.min(), max: child.max(), 'data-shortname': child.shortname(), 'aria-labelledby':'questiontitle' + child.id(), 'aria-describedby':'questioninfo' + child.id() + ' questionhelp' + child.id()}"/> <!-- ko if: child.unit --> <span data-bind="text: child.unit"></span> <!-- /ko --> <!-- /ko --> </div> <!-- /ko --> </td> <!-- /ko --> <!-- /ko --> <!-- /ko --> </tr> <!-- /ko --> </table> </div> <!-- ko if: foreditor --> <input type="hidden" data-bind="value: 'complextable', attr: {'name': 'type' + id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: useAndLogic, attr: {'name': 'useAndLogic' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: rows, attr: {'name': 'rows' + id()}" /> <input type="hidden" data-bind="value: columns, attr: {'name': 'columns' + id()}" /> <input type="hidden" data-bind="value: size, attr: {'name': 'size' + id()}" /> <input type="hidden" data-bind="value: showHeadersAndBorders, attr: {'name': 'showHeadersAndBorders' + id()}" /> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id()}" ></textarea>Original title</label> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <input type="hidden" data-bind="value: childIds(), attr: {'name': 'childelements' + id()}" /> <div class="children"> <!-- ko foreach: orderedChildElements --> <div data-bind="attr: {'id' : 'child' + id()}"> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'text' + id(), 'data-id': id()}" ></textarea>Original title</label> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'uid' + id()}" /> <input type="hidden" data-bind="value: shortname, attr: {'name': 'shortname' + id()}" /> <input type="hidden" data-bind="value: optional, attr: {'name': 'optional' + id()}" /> <input type="hidden" data-bind="value: cellType, attr: {'name': 'cellType' + id()}" /> <input type="hidden" data-bind="value: row, attr: {'name': 'row' + id()}" /> <input type="hidden" data-bind="value: column, attr: {'name': 'column' + id()}" /> <input type="hidden" data-bind="value: columnSpan, attr: {'name': 'columnSpan' + id()}" /> <label hidden><textarea data-bind="text: help, attr: {'name': 'help' + id()}" ></textarea>Help</label> <input type="hidden" data-bind="value: minCharacters, attr: {'name': 'minCharacters' + id()}" /> <input type="hidden" data-bind="value: maxCharacters, attr: {'name': 'maxCharacters' + id()}" /> <input type="hidden" data-bind="value: minChoices, attr: {'name': 'minChoices' + id()}" /> <input type="hidden" data-bind="value: maxChoices, attr: {'name': 'maxChoices' + id()}" /> <input type="hidden" data-bind="value: numRows, attr: {'name': 'numRows' + id()}" /> <input type="hidden" data-bind="value: useRadioButtons, attr: {'name': 'useRadioButtons' + id()}" /> <input type="hidden" data-bind="value: useCheckboxes, attr: {'name': 'useCheckboxes' + id()}" /> <input type="hidden" data-bind="value: numColumns, attr: {'name': 'numColumns' + id()}" /> <input type="hidden" data-bind="value: order, attr: {'name': 'order' + id()}" /> <input type="hidden" data-bind="value: resultText, attr: {'name': 'resultText' + id()}" /> <input type="hidden" data-bind="value: decimalPlaces, attr: {'name': 'decimalPlaces' + id()}" /> <input type="hidden" data-bind="value: unit, attr: {'name': 'unit' + id()}" /> <input type="hidden" data-bind="value: min, attr: {'name': 'min' + id()}" /> <input type="hidden" data-bind="value: max, attr: {'name': 'max' + id()}" /> <input type="hidden" data-bind="value: formula, attr: {'name': 'formula' + id()}" /> <input type="hidden" data-bind="value: readonly, attr: {'name': 'readonly' + id()}" /> <!-- ko foreach: possibleAnswers() --> <input type="hidden" data-bind="value: shortname, attr: {'name': 'pashortname' + $parents[0].id(), 'data-id' : id()}" /> <input type="hidden" data-bind="value: uniqueId(), attr: {'name': 'pauid' + $parents[0].id(), 'data-id' : id()}" /> <label hidden><textarea data-bind="text: title, attr: {'name': 'answer' + $parents[0].id(), 'data-id' : id()}" ></textarea>Title</label> <label hidden><textarea data-bind="text: originalTitle, attr: {'name': 'originalAnswer' + $parent.id(), 'data-id' : id()}" ></textarea>Original Answer</label> <!-- /ko --> </div> <!-- /ko --> </div> <!-- /ko --> </div> </div> <script type="text/javascript"> function getCharacterCountInfo(max) { var s = '[current] out of [max] characters used.'; return s.replace("[max]", max).replace("[current]", "<span class='charactercounter'>0</span>"); } function getMinMaxCharacters(min,max) { var s = 'Text of [min] to [max] characters will be accepted'; return s.replace("[min]", min).replace("[max]", max); } function getMinCharacters(min) { var s = '[min] character(s) minimum'; return s.replace("[min]", min); } function getMaxCharacters(max) { var s = '[max] character(s) maximum'; return s.replace("[max]", max); } function getMinMaxChoice(min,max) { var s = 'Between [min] and [max] selections'; return s.replace("[min]", min).replace("[max]", max); } function getMinChoice(min) { var s = 'Minimum [min] selection(s)'; return s.replace("[min]", min); } function getMaxChoice(max) { var s = 'Maximum [max] selection(s)'; return s.replace("[max]", max); } function getMaxSelections(max) { var s = 'at most [max] selection(s)'; return s.replace("[max]", max); } function getRankingQuestionInfo(max) { var s = 'Ranking Question list with [max] items.'; return s.replace("[max]", max); } function getInitialOrderInfoText() { return "Initial order is as follows"; } function round(value) { var d = parseFloat(value); var s = d.toString(); if (endsWith(s, ".0")) return s.replace(".0",""); return s; } function getMinMax(min,max) { var s = 'Only values between [min] and [max] are allowed'; return "<div class='limits'>" + s.replace("[min]", round(min)).replace("[max]", round(max)) + "</div>"; } function getMin(min) { var s = 'Only values of at least [min] are allowed'; return "<div class='limits'>" + s.replace("[min]", min) + "</div>"; } function getMax(max) { var s = 'Only values of at most [max] are allowed'; return "<div class='limits'>" + s.replace("[max]", max) + "</div>"; } function getMinMaxDate(min,max) { var s = 'between [min] and [max]'; return "<div class='limits'>" + s.replace("[min]", min).replace("[max]", max) + "</div>"; } function getMinDate(min) { var s = 'after [min]'; return "<div class='limits'>" + s.replace("[min]", min) + "</div>"; } function getMaxDate(max) { var s = 'before [max]'; return "<div class='limits'>" + s.replace("[max]", max) + "</div>"; } function getMinMaxRows(min,max) { var s = 'between [min] and [max] answered rows'; return "<div class='limits'>" + s.replace("[min]", min).replace("[max]", max) + "</div>"; } function getMinRows(min) { var s = 'at least [min] answered row(s)'; return "<div class='limits'>" + s.replace("[min]", min) + "</div>"; } function getMaxRows(max) { var s = 'at most [max] answered row(s)'; return "<div class='limits'>" + s.replace("[max]", max) + "</div>"; } var idsforuids = null; function initializeTriggers() { triggers = {}; idsforuids = {}; triggers["25d5b509-e332-4a32-98a6-d787647f02cb"] = ""; idsforuids["25d5b509-e332-4a32-98a6-d787647f02cb"] = "130228123"; triggers["376518fa-7ee6-447c-ba3f-49f292fef3c5"] = ""; idsforuids["376518fa-7ee6-447c-ba3f-49f292fef3c5"] = "130228124"; triggers["f4ada243-c3d9-48b2-a854-724bfb237ee4"] = ""; idsforuids["f4ada243-c3d9-48b2-a854-724bfb237ee4"] = "130228125"; triggers["aa65dc2e-5adc-47e5-9b17-23e1e147a104"] = ""; idsforuids["aa65dc2e-5adc-47e5-9b17-23e1e147a104"] = "130228126"; triggers["557b5915-f6eb-4e46-aafd-be105d8f8fb3"] = ""; idsforuids["557b5915-f6eb-4e46-aafd-be105d8f8fb3"] = "130228127"; triggers["1e5b00e4-7da1-42cb-974f-eebb7ed4453c"] = ""; idsforuids["1e5b00e4-7da1-42cb-974f-eebb7ed4453c"] = "130228129"; triggers["ffa06ce0-5e52-4fb5-bb50-dfbf59f01cfa"] = ""; idsforuids["ffa06ce0-5e52-4fb5-bb50-dfbf59f01cfa"] = "130228131"; triggers["372a9cfa-2dd1-4144-a20a-ef1d52c12878"] = ""; idsforuids["372a9cfa-2dd1-4144-a20a-ef1d52c12878"] = "130228132"; triggers["9db06e0f-531d-41aa-b9b6-a045e7949942"] = ""; idsforuids["9db06e0f-531d-41aa-b9b6-a045e7949942"] = "130228133"; triggers["66f9af89-6f5d-4c67-927d-fb848b692c34"] = ""; idsforuids["66f9af89-6f5d-4c67-927d-fb848b692c34"] = "130228135"; triggers["801f7d7a-2ab6-49e4-9a93-f12b1c0eccdc"] = ""; idsforuids["801f7d7a-2ab6-49e4-9a93-f12b1c0eccdc"] = "130228136"; triggers["2be1c78f-f6e1-46d8-8307-6b58bbef6e2c"] = ""; idsforuids["2be1c78f-f6e1-46d8-8307-6b58bbef6e2c"] = "130228137"; triggers["16a4e4cb-b18f-425a-9aea-8d1182e165f6"] = ""; idsforuids["16a4e4cb-b18f-425a-9aea-8d1182e165f6"] = "130228138"; triggers["06cfec8a-1f43-47ef-b253-6d663be4ae83"] = ""; idsforuids["06cfec8a-1f43-47ef-b253-6d663be4ae83"] = "130228139"; } function initializeAnswerData() { values = {}; pavalues = {}; pavaluesid = {}; tablevalues = {}; filevalues = {}; validationMessages = {}; if ($("#survey\\.id").length > 0) { initializeBackupHelper(); restoreBackup(); } } function initializeBackupHelper(){ backupHelper = {} backupHelper["130228123"] = { uid : "25d5b509-e332-4a32-98a6-d787647f02cb", type : "Text" } backupHelper["130228124"] = { uid : "376518fa-7ee6-447c-ba3f-49f292fef3c5", type : "Text" } backupHelper["130228125"] = { uid : "f4ada243-c3d9-48b2-a854-724bfb237ee4", type : "FreeTextQuestion" } backupHelper["130228126"] = { uid : "aa65dc2e-5adc-47e5-9b17-23e1e147a104", type : "FreeTextQuestion" } backupHelper["130228127"] = { uid : "557b5915-f6eb-4e46-aafd-be105d8f8fb3", type : "FreeTextQuestion" } backupHelper["130228129"] = { uid : "1e5b00e4-7da1-42cb-974f-eebb7ed4453c", type : "SingleChoiceQuestion" } backupHelper["130228131"] = { uid : "ffa06ce0-5e52-4fb5-bb50-dfbf59f01cfa", type : "PossibleAnswer" } backupHelper["130228132"] = { uid : "372a9cfa-2dd1-4144-a20a-ef1d52c12878", type : "PossibleAnswer" } backupHelper["130228133"] = { uid : "9db06e0f-531d-41aa-b9b6-a045e7949942", type : "Text" } backupHelper["130228135"] = { uid : "66f9af89-6f5d-4c67-927d-fb848b692c34", type : "FreeTextQuestion" } backupHelper["130228136"] = { uid : "801f7d7a-2ab6-49e4-9a93-f12b1c0eccdc", type : "Text" } backupHelper["130228137"] = { uid : "2be1c78f-f6e1-46d8-8307-6b58bbef6e2c", type : "FreeTextQuestion" } backupHelper["130228138"] = { uid : "16a4e4cb-b18f-425a-9aea-8d1182e165f6", type : "Text" } backupHelper["130228139"] = { uid : "06cfec8a-1f43-47ef-b253-6d663be4ae83", type : "Text" } } function doAnswersExist() { return false; } var invisibleElements = []; function isInvisible(uniqueId) { return true; } var validationMessages = null; function getValidationMessageByQuestion(uniqueId) { return typeof validationMessages[uniqueId] != 'undefined' ? validationMessages[uniqueId] : ""; } var triggers = null; function getTriggersByQuestion(uniqueId) { return typeof triggers[uniqueId] != 'undefined' ? triggers[uniqueId] : ""; } var values = null; function getValueByQuestion(uniqueId, readValueOnce, cellEl) { if (typeof values[uniqueId] != 'undefined' && values[uniqueId] != null) { if (cellEl != null && $(cellEl).is(".complex")){ $(cellEl).closest(".innercell").addClass("answered"); } else { $('.survey-element[data-uid="' + uniqueId + '"]').addClass("answered"); $('tr[data-uid="' + uniqueId + '"]').closest(".survey-element").addClass("answered"); } if (readValueOnce) { var ret = values[uniqueId]; values[uniqueId] = null return ret; } return values[uniqueId]; } return ""; } var valuesread = {}; function getValueByQuestionRating(uniqueId, answerUniqueId, cellEl) { if (typeof values[uniqueId] != 'undefined' && typeof valuesread[answerUniqueId] == 'undefined') { if (cellEl != null && $(cellEl).is(".complex")){ $(cellEl).closest(".innercell").addClass("answered"); } else { $('.survey-element[data-uid="' + uniqueId + '"]').addClass("answered"); $('tr[data-uid="' + uniqueId + '"]').closest(".survey-element").addClass("answered"); valuesread[answerUniqueId] += true } return values[uniqueId]; } return ""; } function getValueByQuestionGallery(uniqueId) { if (typeof values[uniqueId] != 'undefined') { return values[uniqueId]; } return ""; } var pavalues = null; var pavaluesread = {}; function getPAByQuestion(uniqueId, cellEl) { if (typeof pavalues[uniqueId] != 'undefined') { if (cellEl != null && $(cellEl).is(".complex")){ $(cellEl).closest(".innercell").addClass("answered"); } else { $('.survey-element[data-uid="' + uniqueId + '"]').addClass("answered"); } return pavalues[uniqueId]; } return ""; } var pavaluesread = {}; var pavaluesread2 = {}; function getPAByQuestionCheckBox(uniqueId, answerUniqueId, cellEl) { if (typeof pavalues[uniqueId] != 'undefined' && typeof pavaluesread2[answerUniqueId] == 'undefined') { if (cellEl != null && $(cellEl).is(".complex")){ $(cellEl).closest(".innercell").addClass("answered"); } else { $('.survey-element[data-uid="' + uniqueId + '"]').addClass("answered"); } if (typeof pavaluesread[answerUniqueId] != 'undefined') { pavaluesread2[answerUniqueId] += true; } else { pavaluesread[answerUniqueId] += true; } return pavalues[uniqueId]; } return ""; } var pavaluesid = null; function getPAIdByQuestion(uniqueId) { return typeof pavaluesid[uniqueId] != 'undefined' ? pavaluesid[uniqueId] : ""; } function getPAByQuestion2(parentuniqueId, uniqueId, id, cellEl) { if (getPAByQuestion(parentuniqueId).indexOf(uniqueId) > -1) { if (cellEl != null && $(cellEl).is(".complex, .multiple-choice li input")) { $(cellEl).closest(".innercell").addClass("answered"); } else { $('tr[data-uid="' + parentuniqueId + '"]').closest(".survey-element").addClass("answered"); } return id.toString(); } return ""; } function getPAByQuestion3(parentuniqueId, cellEl) { if (getPAByQuestion(parentuniqueId).length > 0) { var result = getIdForUniqueId(getPAByQuestion(parentuniqueId)); if (typeof result != 'undefined') { if (cellEl != null && $(cellEl).is("select.complex")){ $(cellEl).closest(".innercell").addClass("answered"); } return result; } } return ""; } function getTargetDatasetByQuestion(uniqueId) { return values[uniqueId]; } function getIdForUniqueId(uniqueId) { return typeof idsforuids[uniqueId] != 'undefined' ? idsforuids[uniqueId] : ""; } var tablevalues = null; function getTableAnswer(uniqueId, row, col, readOnce) { if (typeof tablevalues[uniqueId + "#" + row + "#" + col] != 'undefined' && tablevalues[uniqueId + "#" + row + "#" + col] != null) { $('.survey-element[data-uid="' + uniqueId + '"]').addClass("answered"); if (readOnce) { var res = tablevalues[uniqueId + "#" + row + "#" + col]; tablevalues[uniqueId + "#" + row + "#" + col] = null; return res; } return tablevalues[uniqueId + "#" + row + "#" + col]; } return ""; } var filevalues = null; var filesread = {}; var filesread2 = {}; function getFileAnswer(uniqueId) { const result = filevalues[uniqueId]; if (typeof result != 'undefined' && typeof filesread2[uniqueId] == 'undefined') { $('.survey-element[data-uid="' + uniqueId + '"]').addClass("answered"); if (typeof filesread[uniqueId] != 'undefined') { filesread2[uniqueId] += true; } else { filesread[uniqueId] += true; } return result; } return ""; } function deleteDelphiCommentFromRunner(button, isReply) { const dialog = $(button).closest(".survey-element").children("div").eq(1).find(".delete-confirmation-dialog"); showModalDialog(dialog, button); var deleteButton = $(dialog).find(".delete-confirmation-dialog__confirmation-button"); $(deleteButton).off("click"); $(deleteButton).click(function() { const questionUid = $(button).closest(".survey-element").attr("data-uid"); const viewModel = modelsForDelphiQuestions[questionUid]; const errorCallback = () => { showError("error"); } const successCallback = () => { loadTableData(questionUid, viewModel); } hideModalDialog(dialog); deleteDelphiComment(button, viewModel, isReply, errorCallback, successCallback); }); } initializeAnswerData(); initializeTriggers(); // showPopup function showPopup() { $("#motivationPopup").modal('show'); $("#motivationPopup").removeClass('not-shown'); } </script> <div> <input type="hidden" name="_csrf" value="a0e4a366-b0c8-43e4-bf96-6bff6c1005b1" /> </div></form></div> <div class="modal" id="busydialog" data-backdrop="static"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-body" style="padding-left: 30px; text-align: center"> Please wait<br /><br /> <img alt="wait animation" src="/eusurvey/resources/images/ajax-loader.gif" /> </div> </div> </div> </div> <div class="modal" id="unsaveddelphichangesdialog" role="dialog" data-backdrop="static"> <div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-body"> There are unsaved changed. Do you want to skip these changes and return to the overview page?</div> <div class="modal-footer"> <button type="button" class="btn btn-default" id="unsaveddelphichangesdialoglink">Yes</button> <button type="button" class="btn btn-primary" onclick="hideModalDialog($('#unsaveddelphichangesdialog'))">Cancel</button> </div> </div> </div> </div> </div> </div> <div class="footer2 footer-bottom" style="height: auto"> <div class="row"> <div style="max-width: 1000px; margin-left: auto; margin-right: auto"> <div class="col-md-6"> <a class="logolink" href="/eusurvey/home/welcome"><img src="/eusurvey/resources/images/logo_Eusurvey-small-white.png" alt="EUSurvey"/></a> <br /><br /> <i> <b>Intellectual Property:</b> Built by DG DIGIT and funded under the ISA, <a target="_blank" href="https://ec.europa.eu/isa2/home_en/" aria-label="ISA虏 programme - Opens in new window">ISA虏</a> and <a target="_blank" href="https://digital-strategy.ec.europa.eu/en/activities/digital-programme" aria-label="DIGITAL">Digital Europe Programme</a> (DIGITAL) EUSurvey is fully open source and published under the <a target="_blank" href="https://joinup.ec.europa.eu/collection/eupl">EUPL</a> licence. You can download the source code from GitHub: <a target="_blank" href="https://github.com/EUSurvey">https://github.com/EUSurvey</a></i> </div> <div class="col-md-3" style="padding-top: 40px;"> <a href="/eusurvey/home/privacystatement">EUSurvey Privacy Statement</a><br /> <a href="/eusurvey/home/tos">Terms of Service</a><br /> <a href="https://ec.europa.eu/info/cookies_en">Cookies</a><br /> </div> <div class="col-md-3" style="padding-top: 40px;"> <a href="https://commission.europa.eu/languages-our-websites_en">Languages policy</a><br /> <a href="https://commission.europa.eu/privacy-policy-websites-managed-european-commission_en">Privacy policy</a><br /> <a href="https://commission.europa.eu/legal-notice_en">Legal notice</a><br /> </div> </div> </div> <div class="row" id="footer-content-languages"> <div style="max-width: 970px; margin-left: auto; margin-right: auto"> <a href="?language=bg">袘褗谢谐邪褉褋泻懈</a>  <a href="?language=cs">膶e拧tina</a>  <a href="?language=da">Dansk</a>  <a href="?language=de">Deutsch</a>  <a href="?language=et">Eesti keel</a>  <a href="?language=el">螘位位畏谓喂魏维</a>  <a href="?language=en">English</a>  <a href="?language=es">Espa帽ol</a>  <a href="?language=fr">Fran莽ais</a>  <a href="?language=ga">Gaeilge</a>  <a href="?language=hr">Hrvatski jezik</a>  <a href="?language=it">Italiano</a>  <a href="?language=lv">Latvie拧u valoda</a>  <a href="?language=lt">Lietuvi懦 kalba</a>  <a href="?language=hu">Magyar</a>  <a href="?language=mt">Malti</a>  <a href="?language=nl">Nederlands</a>  <a href="?language=pl">Polski</a>  <a href="?language=pt">Portugu锚s</a>  <a href="?language=ro">Rom芒n膬</a>  <a href="?language=sk">Sloven膷ina</a>  <a href="?language=sl">Sloven拧膷ina</a>  <a href="?language=fi">Suomi</a>  <a href="?language=sv">Svenska</a>  </div> </div> <div class="row" id="footer-content-languages-form" style="display: none"> <div style="max-width: 970px; margin-left: auto; margin-right: auto"> <a href="?surveylanguage=EN">English</a> </div> </div> <div class="row" style="text-align: center"> <div id="footerVersionNumber"> Version  v1.5.3.3 625447edf6ac2f69bd9ee79032f971bb3c1ea311 (20/11/2024 18:10)</div> </div> </div> <div class="modal" id="export-name-dialog" data-backdrop="static"> <div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-header" style="font-weight: bold;"> Start <span id="export-name-dialog-type"></span> Export</div> <div class="modal-body" style="padding-left: 30px;"> <label for="export-name" style="display:inline"><span class="mandatory">*</span>Please give your export a name for identification</label> <input class="form-control" type="text" id="export-name" maxlength="255" name="export-name" style="width:220px; margin-top: 10px" /> <span id="validation-error-required" class="validation-error hideme"><br />This field is required.</span> <span id="validation-error-exportname" class="validation-error hideme">Alias must be composed of lowercase and uppercase letters (a-z and A-Z), numbers (0-9), hyphens and underscores only.</span> </div> <div class="modal-footer"> <img alt="wait animation" class="hideme" style="margin-right:90px;" src="/eusurvey/resources/images/ajax-loader.gif" /> <a id="okStartExportButton" onclick="checkAndStartExport($('#export-name').val());" class="btn btn-primary">OK</a> <a class="btn btn-default" data-dismiss="modal">Cancel</a> </div> </div> </div> </div> <div class="modal" id="generic-wait-dialog" data-backdrop="static"> <div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-body" style="text-align: center;"> <div id="generic-wait-dialog-div" class="dialog-wait-image" style="padding: 30px"> </div> </div> </div> </div> </div> <form id="logoutform" action="/eusurvey/j_spring_security_logout" method="post"><div> <input type="hidden" name="_csrf" value="a0e4a366-b0c8-43e4-bf96-6bff6c1005b1" /> </div></form><script type="text/javascript"> $(function() { var spinner = new Spinner().spin(); $("#generic-wait-dialog-div").append(spinner.el); }); </script> <noscript> <div style="position: fixed; top: 0pc; left: 0px; width: 100%; height: 100%; background-color: #fff; z-index: 1002; padding: 30px;"> Javascript is disabled in your browser. In order to use EUSurvey, please enable Javascript and reload the page.<br /><br /> <a href="/eusurvey/">EUSurvey home</a> </div> </noscript> <div class="modal" id="nocookies2" data-backdrop="static"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-body" style="text-align: center"> Cookies are disabled in your browser. In order to use EUSurvey, please enable cookies and reload the page.<br /><br /> <a href="/eusurvey/">EUSurvey home</a> </div> </div> </div> </div> <script type="text/javascript"> $(function() { var date = new Date().getFullYear().toString(); document.cookie = "testcookie=" + date + "; path=/"; var nameEQ = "testcookie="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) == 0){ var value = c.substring(nameEQ.length, c.length); if (value == date) { return; } } } $("#nocookies2").modal('show'); }); </script> <script> $('#footer-content-languages').hide(); </script><div id="export-available-box" class="alert message-success-right hideme"> <div style="float: right; margin-left: 10px;"><a onclick="$(this).parent().parent().hide();"><span class="glyphicon glyphicon-remove"></span></a></div> <div style="float: left; margin: 5px; margin-top: 5px; margin-right: 10px""><img src="/eusurvey/resources/images/check.png" alt="system message icon"></div> <div class="generic-box-text"> Export <span id="export-available-box-name" style="font-weight: bold;"></span> available for download<br /> Go to <a class="visiblelink" href="/eusurvey/exports/list">Export Page</a> </div> </div> <div id="messages-box-div" style="display: none"> <div id="messages-box"> <!-- ko foreach: systemMessages --> <!-- ko if: Hidden() == false --> <div class="message" style="display: none"> <!-- ko if: Criticality() == '1' --> <div class="message-success-header"> <div style="float: left; margin-right: 20px;"><span class="glyphicon glyphicon-ok"></span></div> <div style="float: right"><span data-bind="click: removeMessage" class="glyphicon glyphicon-remove"></span></div> <div style="clear: both"></div> </div> <!-- /ko --> <!-- ko if: Criticality() == '2' --> <div class="message-info-header"> <div style="float: left; margin-right: 20px;"><span class="glyphicon glyphicon-info-sign"></span></div> <div style="float: right"><span data-bind="click: removeMessage" class="glyphicon glyphicon-remove"></span></div> <div style="clear: both"></div> </div> <!-- /ko --> <!-- ko if: Criticality() == '3' --> <div class="message-error-header"> <div style="float: left; margin-right: 20px;"><span class="glyphicon glyphicon-exclamation-sign"></span></div> <div style="float: right"><span data-bind="click: removeMessage" class="glyphicon glyphicon-remove"></span></div> <div style="clear: both"></div> </div> <!-- /ko --> <div data-bind="html: Content"></div> </div> <!-- /ko --> <!-- /ko --> <!-- ko foreach: messages --> <!-- ko if: Hidden() == false --> <div class="message" style="display: none"> <!-- ko if: Type() == 'success' --> <div class="message-success-header"> <div style="float: left"><span class="glyphicon glyphicon-ok"></span></div> <div style="float: right"><span data-bind="click: removeMessage" class="glyphicon glyphicon-remove"></span></div> <div style="clear: both"></div> </div> <!-- /ko --> <!-- ko if: Type() == 'info' --> <div class="message-info-header"> <div style="float: left"><span class="glyphicon glyphicon-info-sign"></span></div> <div style="float: right"><span data-bind="click: removeMessage" class="glyphicon glyphicon-remove"></span></div> <div style="clear: both"></div> </div> <!-- /ko --> <!-- ko if: Type() == 'error' --> <div class="message-error-header"> <div style="float: left"><span class="glyphicon glyphicon-exclamation-sign"></span></div> <div style="float: right"><span data-bind="click: removeMessage" class="glyphicon glyphicon-remove"></span></div> <div style="clear: both"></div> </div> <!-- /ko --> <div data-bind="html: Content"></div> </div> <!-- /ko --> <!-- /ko --> </div> </div> <div id="messages-log-div" style="display: none" > <div id="messages-log"> <div id="messages-log-header"> <div style="float: left">Notifications</div> <div style="float: right"><span data-bind="click: allRead" class="glyphicon glyphicon-remove"></span></div> <div style="clear: both"></div> </div> <div style="max-height: 500px; overflow-y: auto"> <div data-bind="foreach: systemMessages"> <div class="log-message"> <div style="float: left; margin-right: 20px;"> <!-- ko if: Criticality() == '1' --> <span style="color: #4caf50" class="glyphicon glyphicon-ok"></span> <!-- /ko --> <!-- ko if: Criticality() == '2' --> <span style="color: #337ab7" class="glyphicon glyphicon-info-sign"></span> <!-- /ko --> <!-- ko if: Criticality() == '3' --> <span style="color: #c11c1c" class="glyphicon glyphicon-exclamation-sign"></span> <!-- /ko --> </div> <div data-bind="html: Content"></div> </div> </div> <table class="table" style="margin-bottom: 0px"> <thead> <tr> <th class="sr-only">Message Type</th> <th class="sr-only">Message Text</th> <th class="sr-only">Close</th> </tr> </thead> <tbody> <!-- ko foreach: messages --> <!-- ko if: Deleted() == false --> <tr class="log-message"> <td style="width: 30px; padding-right: 0px;"> <!-- ko if: Type() == 'success' --> <span style="color: #4caf50" class="glyphicon glyphicon-ok"></span> <!-- /ko --> <!-- ko if: Type() == 'info' --> <span style="color: #337ab7" class="glyphicon glyphicon-info-sign"></span> <!-- /ko --> <!-- ko if: Type() == 'error' --> <span style="color: #c11c1c" class="glyphicon glyphicon-exclamation-sign"></span> <!-- /ko --> </td> <td data-bind="html: Content"></td> <td style="width: 40px;"> <span data-bind="click: deleteMessage" class="glyphicon glyphicon-remove"></span> </td> </tr> <!-- /ko --> <!-- /ko --> </tbody> </table> </div> </div> </div> <div class="modal" id="generic-show-messages-dialog" data-backdrop="static"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-body"> <span id="generic-show-messages-dialog-text"></span> </div> <div class="modal-footer"> <a class="btn btn-primary" data-dismiss="modal">OK</a> </div> </div> </div> </div> <div class="modal" id="generic-show-multiple-messages-dialog" data-backdrop="static"> <div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-header"> <b>Result</b> </div> <div class="modal-body"> </div> <div class="modal-footer"> <a class="btn btn-primary" data-dismiss="modal">OK</a> </div> </div> </div> </div> <div class="modal" id="timeout-dialog" data-backdrop="static"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <b>Session Timeout</b> </div> <div class="modal-body"> <div id="timeout-dialog-info"> Your session will expire in <span style="color:#f00" id="timeoutleft"></span>.<br /> Click "Extend" if you want to stay logged in.</div> <div id="timeout-dialog-error" style="display: none"> Your session has timed out. Please reload the page.</div> </div> <div class="modal-footer"> <a class="btn btn-primary" id="timeout-dialog-extend" onclick="extend()">Extend</a> </div> </div> </div> </div> <script type="text/javascript"> var Message = function() { this.Type = ko.observable(""); this.Content = ko.observable(""); this.Hidden = ko.observable(false); this.Deleted = ko.observable(false); this.Read = ko.observable(false); this.Icon = ko.observable(""); this.Criticality = ko.observable(1); this.removeMessage = function () { this.Hidden(true); if (this.Type() == "system") { deleteUserMessage(); } _messages.saveToLocalStorage(); }; this.deleteMessage = function() { this.Deleted(true); _messages.saveToLocalStorage(); }; } var Messages = function() { var self = this; this.messages = ko.observableArray(); this.systemMessages = ko.observableArray(); this.totalMessages = ko.computed(function(){ var counter = 0; for (var i = 0; i < self.messages().length; i++) { if (!self.messages()[i].Read()) counter++; } for (var i = 0; i < self.systemMessages().length; i++) { if (!self.systemMessages()[i].Read()) counter++; } return counter; }); this.allRead = function() { for (var i = 0; i < self.messages().length; i++) { self.messages()[i].Read(true); } for (var i = 0; i < self.systemMessages().length; i++) { self.systemMessages()[i].Read(true); } $('#messages-log-div').hide(); self.saveToLocalStorage(); } this.showAll = function() { for (var i = 0; i < this.messages().length; i++) { this.messages()[i].Hidden(false); } window.setTimeout("showMessages()", 100); } this.hideSystemMessages = function() { for (var i = 0; i < this.systemMessages().length; i++) { this.systemMessages()[i].Hidden(true); } } this.addMessage = function(message, fromLoad) { this.messages.splice(0, 0, message); window.setTimeout("showMessages()", 100); window.setTimeout(function() { message.removeMessage(); }, 5000) if (!fromLoad) { self.saveToLocalStorage(); } } this.saveToLocalStorage = function() { try { localStorage.setItem("messagelog", ko.toJSON(this.messages())); } catch (e) {}; } this.addSuccessMessage = function (text) { text = self.sanitizeErrorPageText(text); var message = new Message(); message.Type("success"); message.Content(text); self.addMessage(message, false); } this.addInfoMessage = function (text) { text = self.sanitizeErrorPageText(text); var message = new Message(); message.Type("info"); message.Content(text); self.addMessage(message, false); } this.addErrorMessage = function (text) { text = self.sanitizeErrorPageText(text); var message = new Message(); message.Type("error"); message.Content(text); self.addMessage(message, false); } this.addSystemMessage = function (m) { var message = new Message(); message.Type("system"); message.Content(self.sanitizeErrorPageText(m.text)); message.Icon(m.icon) message.Criticality(m.criticality); this.systemMessages.splice(0, 0, message); window.setTimeout("showMessages()", 100); } this.sanitizeErrorPageText = function (text){ //Tomcat error responses always start with <!doctype html> //Like this they can't be added to the notifications if (text.toLowerCase().startsWith("<!doctype html>")){ let sanitizerNode = document.createElement("div") sanitizerNode.innerHTML = text return sanitizerNode.innerText.substr(0, 60) + "..." } return text } try { var messagelog = localStorage.getItem("messagelog"); var parsed = JSON.parse(messagelog); for (var i = 0; i < parsed.length; i++) { var message = new Message(); message.Type(parsed[i].Type); message.Content(parsed[i].Content); message.Deleted(parsed[i].Deleted); message.Read(parsed[i].Read); message.Hidden(parsed[i].Hidden); self.addMessage(message, true); } } catch (e) {}; } var _messages = new Messages(); $(function() { ko.applyBindings(_messages, $("#messages-box")[0]); ko.applyBindings(_messages, $("#messages-log")[0]); if ($("#messages-button").length > 0) { ko.applyBindings(_messages, $("#messages-button")[0]); } checkTimeout(); $('#messages-box-div').show(); }); function showInfo(text) { _messages.addInfoMessage(text); } function showSuccess(text) { _messages.addSuccessMessage(text); } function showError(text) { _messages.addErrorMessage(text); } let lastTimeAjaxError = new Date(0) let stopAjaxErrors = false function showAjaxError(statuscode){ if (!stopAjaxErrors && new Date().getTime() - lastTimeAjaxError.getTime() > 2500) { //Prevent Spam showError("Connection Error " + statuscode); lastTimeAjaxError = new Date() } } //When unloading the page, prevent ajaxErrors, as they might be thrown when the request is interrupted by the browser window.addEventListener("beforeunload", () => {stopAjaxErrors = true}) function showSystemMessage(message) { _messages.addSystemMessage(message); } function showMessages() { $('.message:hidden').show(); } function hideMessages() { for (var i = 0; i < _messages.messages().length; i++) { _messages.messages()[i].Hidden(true); } } function showExportDialogAndFocusEmail(caller) { $('#ask-export-dialog').find(".foremail").hide(); $('#ask-export-dialog').find(".forexport").show(); showModalDialog($('#ask-export-dialog'), caller); setTimeout(function() { $('#email').focus(); }, 1000); } function showAskEmailDialog(caller) { $('#ask-export-dialog').find(".foremail").show(); $('#ask-export-dialog').find(".forexport").hide(); showModalDialog($('#ask-export-dialog'), caller); } var sessiontimeout = 3600; var timeoutTime = new Date(); refreshTimeout(); function refreshTimeout() { timeoutTime = new Date(); timeoutTime.setSeconds(timeoutTime.getSeconds() + sessiontimeout); } function checkTimeout() { if (sessiontimeout == 0) return; var diffTimeMilliseconds = getTimeoutMilliseconds(); if (diffTimeMilliseconds < 5 * 60 * 1000) { $('#timeout-dialog').modal('show'); updateTimeout(); } else { window.setTimeout(function() { checkTimeout(); }, 60000); } } function getTimeoutMilliseconds() { var currentTime = new Date(); return timeoutTime - currentTime; } function showSessionError() { //forcing timeout by setting the timeoutTime to yesterday timeoutTime.setDate(timeoutTime.getDate() - 1); $('#timeout-dialog').modal('show'); updateTimeout(); } function showLocalBackupFilesInfo(){ showInfo("Uploaded files can not be restored from local backup") } function updateTimeout() { var diffTimeMilliseconds = getTimeoutMilliseconds(); if (diffTimeMilliseconds <= 0) { //this means the session has timed out $('#timeout-dialog-info').hide(); $('#timeout-dialog-error').show(); $('#timeout-dialog-extend').hide(); return; } if (diffTimeMilliseconds > 5 * 60 * 1000) { //this means there was a request in the meantime that extended the session $('#timeout-dialog').modal('hide'); checkTimeout(); return; } var diffTimeSeconds = diffTimeMilliseconds / 1000; var minutes = Math.floor(diffTimeSeconds / 60); var seconds = Math.floor(diffTimeSeconds - (minutes * 60)); $('#timeoutleft').html(minutes + ":" + (seconds < 10 ? "0" + seconds : seconds)); window.setTimeout(function() { updateTimeout(); }, 1000); } function extend() { $.ajax({ url: contextpath + "/info/renewsession", cache: false, error: function(e) { //this happens when there is no message }, success: function(message) { //session timeout reset $('#timeout-dialog').modal('hide'); refreshTimeout(); checkTimeout(); } }); } function testTimeoutExpiration(restTime) { lastEditDate.setDate(lastEditDate.getDate()-1); let originalTimeout = sessiontimeout sessiontimeout = 300; if (Number.isInteger(restTime)) { sessiontimeout = restTime; } refreshTimeout(); checkTimeout(); console.log("Function for testing purposes. Set Timeout to", timeoutTime); sessiontimeout = originalTimeout } </script><script type="text/javascript"> $(document).ready(function(){ $("#language-selector option").each(function(){ if($(this).val() == $("#newlang").val()) { $(this).attr("selected", "selected"); } else { $(this).removeAttr("selected"); } }); }); </script> <div class="modal" id="networkproblemsdialog" role="dialog"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> Network Problems</div> <div class="modal-body"> Your browser seems to have no Internet connection. Therefore you cannot save or submit your contribution. Make sure to have a valid internet connection and try again.</div> <div class="modal-footer"> <a onclick="$('#networkproblemsdialog').modal('hide')" target="_blank" class="btn btn-primary">OK</a> </div> </div> </div> </div> </body> </html>