{"version":3,"file":"compliance.js","sources":["../../src/js/compliance.js"],"sourcesContent":["if (!Array.prototype.last) {\n Array.prototype.last = function () {\n return this[this.length - 1];\n };\n}\n\n(function (window, document, $) {\n var selectorFormContainer = \".wise-search-form-container\";\n var exceptVal = [\"all\", \"none\", \"invert\", \"apply\"];\n /*\n * SELECT2 functions\n * */\n // TODO: please explain what this does and why it's needed\n function setupSelects2(selector) {\n var forbiddenIDs = [];\n var selectorFormCont = selector || selectorFormContainer;\n\n $(selectorFormCont + \" select\").each(function (ind, selectElement) {\n var selectedElementID = $(selectElement).attr(\"id\");\n if (forbiddenIDs.indexOf(selectedElementID) !== -1) {\n return false;\n }\n\n $(selectElement).addClass(\"js-example-basic-single\");\n var lessOptions = $(selectElement).find(\"option\").length < 10;\n\n var options = {\n placeholder: \"Select an option\",\n closeOnSelect: true,\n dropdownAutoWidth: true,\n width: \"100%\",\n theme: \"flat\",\n };\n if (lessOptions) options.minimumResultsForSearch = Infinity;\n\n $(selectElement).select2(options);\n });\n }\n\n function initStyling() {\n // TODO: is this still needed? I don't think so\n //$(\"#form-buttons-continue\").hide(\"fast\");\n $(\".button-field\").addClass(\"btn\");\n\n // mobile hide .toggle-sidebar\n $(\".toggle-sidebar\").hide();\n }\n\n function setupTargetsWidth() {\n // Make targets extend on multiple rows when there are many targets\n // and the assessment-data-table is scrollable\n var $tableWrap = $(\".table-wrap\");\n var $assessmentTable = $(\n \"#container-assessment-data-2018 .assessment-data-table\"\n );\n if ($assessmentTable.width() <= $tableWrap.width()) {\n return;\n }\n\n $(\"div.gescomp\", $tableWrap).css({\n display: \"inline-table\",\n \"min-width\": \"inherit\",\n width: \"inherit\",\n });\n\n var maxGescompWidth = 0;\n $(\"div.gescomp\", $tableWrap).each(function () {\n var width = $(this).width();\n if (width > maxGescompWidth) {\n maxGescompWidth = width;\n }\n });\n\n $(\"div.gescomp\", $tableWrap).css({ width: maxGescompWidth });\n\n // $(window).on('resize', adjustTargetsWidth);\n }\n\n function setupScrollableTargets() {\n // NOT USED\n // create a clone of the assessment data 2018 table and overlap the original table\n // with fixed question and score columns\n $(\n \"#container-assessment-data-2018 .table.table-condensed.assessment-data-table\"\n )\n .clone(true)\n .appendTo(\"#container-assessment-data-2018\")\n .addClass(\"clone\");\n\n var $orig = $(\".table-wrap .table.table-condensed.assessment-data-table\");\n var $clone = $(\".table.table-condensed.assessment-data-table.clone\");\n var origLength = $orig.find(\"tr\").length;\n var origHeight, cloneHeight;\n\n for (var i = 0; i < origLength; i++) {\n var x = $clone.find(\"tr\")[i];\n cloneHeight = $(x).find(\".fixed-center\").innerHeight();\n origHeight = $($orig.find(\"tr\")[i]).innerHeight();\n\n if (origHeight > cloneHeight) {\n $(x).css(\"height\", origHeight + \"px\");\n } else {\n $($orig.find(\"tr\")[i]).css(\"height\", cloneHeight + \"px\");\n }\n }\n }\n\n function setupAssessmentStatusChange() {\n // Setup the process status change forms to make it possible\n // to change the assessment status on pages like\n // ./assessment-module/national-descriptors-assessments/fi/assessments\n // ./assessment-module/regional-descriptors-assessments/bal/assessments\n\n $(\".assessment-status-colorbar.show-assessment-wrapper\").hover(\n function () {\n $(this).siblings(\".assessment-status-wrapper\").css(\"display\", \"flex\");\n },\n function () {\n $(this).siblings(\".assessment-status-wrapper\").css(\"display\", \"none\");\n }\n );\n\n $(\".assessment-status-processstate\").each(function () {\n var $this = $(this);\n var $processState = $this.find(\".process-state\");\n\n $this.on(\"click\", function () {\n $this.toggleClass(\"active\");\n });\n });\n\n $(\n \".assessment-status-wrapper .assessment-status.process-state select\"\n ).change(function () {\n var $form = $(this).parents(\"form\");\n var $assessmentContainers = $(\".assessment-status-container2\");\n var url = $form[0].action;\n\n $(document.body).addClass(\"cursor-wait\");\n $form.addClass(\"cursor-wait\");\n $assessmentContainers.each(function () {\n $(this).addClass(\"cursor-wait\");\n });\n\n $.ajax({\n url: url,\n type: \"POST\",\n data: $form.serialize(),\n success: function () {\n location.reload();\n },\n });\n });\n }\n\n function setupProcessStateCheckboxes() {\n // setup submit button\n $(\"#process-state-change-bulk-wrapper .btn-submit-form\").click(function () {\n var $form = $(this).siblings(\"form#form-process-state-change-bulk\");\n var url = $form[0].action;\n\n $(document.body).addClass(\"cursor-wait\");\n $form.addClass(\"cursor-wait\");\n $(\"#process-state-change-bulk-wrapper\").addClass(\"change-initiated\");\n $(\"#process-state-change-bulk-wrapper > *\").css(\"display\", \"none\");\n $(\n \"#process-state-change-bulk-wrapper .process-state-change-message\"\n ).fadeIn(200);\n\n $.ajax({\n url: url,\n type: \"POST\",\n data: $form.serialize(),\n success: function () {\n location.reload();\n },\n });\n });\n\n // setup clear button, uncheck all checkboxes and clear the form\n $(\"#process-state-change-bulk-wrapper .btn-clear-checkboxes\").click(\n function () {\n $(\n \".assessment-status-td.enable-process-state-change input[name='process-state-change']\"\n ).each(function () {\n $(this).prop(\"checked\", false);\n });\n\n $(\"#process-state-change-bulk-wrapper\").css(\"display\", \"none\");\n\n $(\n \"#process-state-change-bulk-wrapper #form-process-state-change-bulk input[name='process-state-change']\"\n ).remove();\n }\n );\n\n // setup checkboxes\n $(\".assessment-status-td.enable-process-state-change\").each(function () {\n var $this = $(this);\n var action = $this.find(\".assessment-status-wrapper form\").attr(\"action\");\n\n var $inputCheckbox = $(\"\")\n .attr(\"name\", \"process-state-change\")\n .attr(\"value\", action)\n .appendTo($this);\n\n $inputCheckbox.change(function () {\n var value = $(this).attr(\"value\");\n var ischecked = $(this).is(\":checked\");\n\n if (ischecked) {\n // when the checkbox is checked\n var inputNotExists =\n $(\"#form-process-state-change-bulk\").find(\n \"input[value='\" + value + \"' ]\"\n ).length === 0;\n\n if (inputNotExists) {\n $(this)\n .clone()\n .attr(\"type\", \"hidden\")\n .appendTo(\"#form-process-state-change-bulk\");\n }\n\n // add select with the process states if does not exists yet\n var $newPhaseSelector = $(this)\n .parent(\"td\")\n .find(\".phase-selector\")\n .clone()\n .attr(\"id\", \"process-state-bulk-select\");\n\n $(\"#form-process-state-change-bulk .phase-selector\").replaceWith(\n $newPhaseSelector\n );\n\n $(\"#process-state-change-bulk-wrapper\").css(\"display\", \"block\");\n } else {\n // when the checkbox is unchecked\n $(\"#form-process-state-change-bulk\")\n .find(\"input[value='\" + value + \"' ]\")\n .remove();\n\n // if there are no checkboxes checked, remove the select box too\n if (\n $(\"#form-process-state-change-bulk\").find(\n \"input[name='process-state-change']\"\n ).length === 0\n ) {\n $(\n \"#form-process-state-change-bulk .phase-selector select\"\n ).remove();\n $(\"#process-state-change-bulk-wrapper\").css(\"display\", \"none\");\n }\n }\n });\n });\n }\n\n $.fn.fixTableHeaderAndCellsHeight = function () {\n // because the