{"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 are position: absolute, they don't get the height of\n // the cells, and the other way around.\n\n this.each(function () {\n $(\"th\", this).each(function (index) {\n if ($(this).parents(\"table\").hasClass(\"skip-height-fix\")) {\n return;\n }\n\n var isSideBySideLeft = $(this)\n .parents(\".overflow-table\")\n .hasClass(\"side-by-side-table-left\");\n var isSideBySideRigth = $(this)\n .parents(\".overflow-table\")\n .hasClass(\"side-by-side-table-right\");\n\n if (isSideBySideRigth) {\n return;\n }\n\n var $th = $(this);\n // var $next = $('td:not(\".sub-header\")', $th.parent());\n var $next = $th.parent().children('td:not(\".sub-header\")');\n\n if (isSideBySideLeft) {\n var $nextSideBySide = $(\n $(this)\n .parents(\".overflow-table.side-by-side-table\")\n .siblings(\".overflow-table.side-by-side-table-right\")\n .find(\"tr\")[index]\n ).children();\n $next = $.merge($next, $nextSideBySide);\n }\n\n var $subheader = $(\"td.sub-header\", $th.parent());\n var tdHeights = [];\n\n $next.each(function () {\n var $this = $(this);\n if ($this.hasClass(\"translatable\")) {\n var hght = $this.find(\".tr-text\").height();\n tdHeights.push(hght);\n } else {\n tdHeights.push($this.height());\n }\n });\n\n var cells_max_height = Math.max.apply(Math, tdHeights);\n var height = Math.max(\n $th.height(),\n $subheader.height(),\n cells_max_height\n );\n\n $th.height(height);\n $subheader.height(height);\n var thHeight = $th.height();\n var thInnerHeight = $th.innerHeight();\n\n if (thHeight >= cells_max_height) {\n $next.each(function () {\n if ($(this).hasClass(\"translatable\")) {\n $(this).height(thInnerHeight);\n } else {\n $(this).height(thHeight);\n }\n });\n //$next.height(thHeight);\n }\n\n $(\"div\", this).css(\"margin-top\", \"-4px\");\n });\n });\n\n // $('tr .lang-toolbar', this).each(function() {\n // console.log('fixing', this);\n // var $this = $(this);\n // var height = $this.parents('tr').height();\n // $this.css('height', height);\n // });\n };\n\n $.fn.fixTableHeaderHeight = function fixTableHeaderHeight() {\n // TODO not used anymore, replaced by fixTableHeaderAndCellsHeight\n\n // Because of the way the cells are positioned absolute, to be able to\n // keep them fixed, they are \"disconnected\" from the regular box sizing\n // layout algorithm. For this reason we have to recompute their height (to\n // make either the or the match same height\n this.each(function () {\n if ($(this).parents(\"table\").hasClass(\"skip-height-fix\")) {\n return;\n }\n\n $(\"th\", this).each(function (index) {\n var $th = $(this);\n var $next = $(\"td\", $th.parent());\n var tdHeights = [];\n var isSideBySideLeft = $(this)\n .parents(\".overflow-table\")\n .hasClass(\"side-by-side-table-left\");\n var isSideBySideRigth = $(this)\n .parents(\".overflow-table\")\n .hasClass(\"side-by-side-table-right\");\n\n if (isSideBySideRigth || isSideBySideLeft) {\n return;\n }\n\n if (isSideBySideLeft) {\n var $rowSideBySide = $(\n $(this)\n .parents(\".overflow-table.side-by-side-table\")\n .siblings(\".overflow-table.side-by-side-table-right\")\n .find(\"tr\")[index]\n );\n var $nextSideBySide = $rowSideBySide.children(\"td\");\n var $thSideBySide = $rowSideBySide.children(\"th\");\n $next = $.merge($next, $nextSideBySide);\n }\n\n $next.each(function () {\n var $this = $(this);\n if ($this.hasClass(\"translatable\")) {\n var hght = $this.find(\".tr-text\").height();\n tdHeights.push(hght);\n } else {\n tdHeights.push($this.height());\n }\n });\n\n var cells_max_height = Math.max.apply(Math, tdHeights);\n\n $th.height(cells_max_height);\n if (isSideBySideLeft) {\n $thSideBySide.height(cells_max_height);\n }\n });\n });\n };\n\n function mergeCellsInRow(row, cache) {\n /* This function visually groups and merges cells in table, to optimize\n * for reading information.\n *\n * It joins adjacent cells that have identical text, but uses group\n * definitions to establish \"limits\" on what it can merge. Finally, those\n * \"groups\" end cells are marked with special classes, to distinguish them\n * visually.\n */\n\n var sets = [];\n\n // get the appropriate limits from the cache, based on the current level\n var limits = [];\n var rowLevel = $(row).data(\"level\");\n rowLevel = rowLevel != undefined ? parseInt(rowLevel) : -1;\n $(cache.setlimits).each(function () {\n if (this.level == rowLevel) {\n limits = this.limits;\n return false;\n }\n });\n if (limits.length == 0) {\n limits = cache.setlimits[cache.setlimits.length - 1].limits;\n }\n\n // group cells by similarity\n $(\"td\", row)\n .not(\".sub-header\")\n .each(function (ix) {\n if (sets.length == 0 || limits.includes(ix)) {\n sets.push([this]);\n } else {\n var thisText = $(this).text().trim();\n var lastText = $(sets.last().last()).text().trim();\n\n if (thisText == lastText) {\n sets.last().push(this);\n } else {\n sets.push([this]);\n }\n }\n });\n\n // merge cells that are duplicated\n $(sets).each(function () {\n if (this.length > 1) {\n var colspan = this.length;\n $(this[0]).attr(\"colspan\", colspan); // .addClass('merged');\n $(this.slice(1)).each(function () {\n $(this).remove();\n });\n }\n });\n\n // compute new group limits\n if (rowLevel != -1) {\n limits = [];\n cache.curentLevel = rowLevel;\n\n $(sets).each(function () {\n var l = this.length;\n if (limits.length) {\n l += limits[limits.length - 1];\n }\n limits.push(l);\n });\n cache.setlimits.push({\n level: cache.curentLevel,\n limits: limits.slice(0), // makes a copy\n });\n }\n\n // apply special class to group end cells\n var cursor = 0;\n $(\"td\", row)\n .not(\".sub-header\")\n .each(function (iy) {\n var level = cache.curentLevel;\n var l;\n var prevset;\n\n var c = parseInt($(this).attr(\"colspan\") || \"1\");\n cursor += c;\n\n if (limits.includes(cursor)) {\n if (level > 0) {\n // traverse all previous limits to see which major one includes\n // this limit\n for (l = 0; l < cache.setlimits.length; l++) {\n prevset = cache.setlimits[l].limits;\n if (prevset.includes(cursor)) {\n level = cache.setlimits[l].level;\n break;\n }\n }\n }\n $(this).addClass(\"endgroup_\" + level);\n }\n });\n }\n\n $.fn.simplifyTable = function simplifyTable() {\n var $table = $(this);\n\n if (!$table.data(\"original\")) {\n $table.data(\"original\", $table.html());\n }\n\n var cache = {\n curentLevel: 0,\n setlimits: [\n {\n level: -1,\n limits: [],\n },\n ],\n };\n $(\"tr\", this).each(function () {\n mergeCellsInRow(this, cache);\n });\n\n // Laci disable\n // $table.fixTableHeaderHeight();\n // $table.fixTableHeaderAndCellsHeight();\n $table.data(\"simplified\", $table.html());\n };\n\n $.fn.toggleTable = function toggleTable(onoff) {\n var original = $(this).data(\"original\");\n var simplified = $(this).data(\"simplified\");\n\n if (onoff) {\n //$(this).simplifyTable();\n $(this).html(simplified);\n } else {\n $(this).hide();\n $(this).empty().html(original);\n $(this).show();\n //setupTranslateClickHandlers();\n //setupReadMoreModal();\n }\n setupReadMoreModal();\n setupTranslateClickHandlers();\n $(this).fixTableHeaderAndCellsHeight();\n };\n\n /* Used in report data table create a 'read more' modal if the cell content\n * is too long\n */\n window.setupReadMoreModal = function () {\n var $table = $(\".table-report\");\n var $modal = $(\"#read-more-modal\");\n var $modalContent = $(\".modal-content-wrapper\");\n var maxchars = 397;\n var sep = \"...\";\n var $cells = $table.find(\".tr-text\");\n $cells.each(function () {\n var t = $(this).text();\n var t_html = $(this).html();\n\n if (t_html.length > maxchars) {\n $(this).addClass(\"short\");\n var sh = t_html.substr(0, 0.75 * maxchars) + sep;\n $(this).html(sh);\n $(this).on(\"click\", function () {\n $modalContent.html(t_html);\n $modal.modal(\"show\");\n });\n }\n });\n\n $(\".btn-close-modal\").click(function () {\n $modalContent.empty();\n });\n\n // Laci disable\n // $table.fixTableHeaderAndCellsHeight();\n };\n\n function setupReportNavigation() {\n // This is a menu that is triggered from a button. When scrolling down, it\n // sticks to the top. Allows navigation between articles/years\n var $reportnav = $(\"#report-data-navigation\");\n $(\"button\", $reportnav).on(\"click\", function () {\n $(\".nav-body\", $reportnav).toggle();\n $(this)\n .children()\n .addClass(\"glyphicon\")\n .toggleClass(\"glyphicon-menu-hamburger glyphicon-remove-circle\");\n return false;\n });\n $(\".nav-body\", $reportnav).hide();\n\n // sticky report data navigation\n var $rn = $(\".report-nav\");\n var $title = $(\".report-title\");\n\n if ($rn.length > 0) {\n var stickyOffset = $rn.offset().top;\n\n $(window).scroll(function () {\n var scroll = $(window).scrollTop();\n var fixElement = scroll >= stickyOffset;\n $rn.toggleClass(\"sticky\", fixElement);\n $title.toggleClass(\"fixed-title\", fixElement);\n });\n }\n }\n\n function setupTableScrolling() {\n // TODO not used\n // When dealing with a really wide table, with wide cells, we want to keep\n // the text relatively narrow, but always keep in view that cell content\n var $ot = $(\".overflow-table table\");\n\n $ot.each(function () {\n var $tw = $(this);\n var $td = $tw.find(\"td\");\n\n if (!$td.length) {\n return;\n }\n\n // get table header cell right position\n var $th = $tw.find(\"th\");\n var thRight = $th.position().left + $th.outerWidth();\n\n $td.each(function () {\n var $this = $(this);\n var scrollTimer;\n\n $(\".report-page-view .overflow-table .inner\").scroll(function () {\n clearTimeout(scrollTimer);\n\n if ($this.attr(\"colspan\") > 1) {\n var tdText = $this.find(\".td-content\");\n var tdLeft = $this.position().left;\n var tdRight = tdLeft + $this.outerWidth(); // get table cell right position\n var tdTextWidth = $this.find(\".td-content\").width();\n var thAndCellWidth = tdTextWidth + thRight;\n\n $this.css(\"height\", $this.outerHeight());\n\n scrollTimer = setTimeout(afterScroll, 1);\n\n if (tdLeft < thRight) {\n tdText.addClass(\"td-scrolled\").css(\"left\", thRight + 5);\n } else {\n $this.css(\"height\", \"\");\n tdText.removeClass(\"td-scrolled\");\n }\n\n if (thAndCellWidth >= tdRight) {\n $this.addClass(\"td-relative\");\n } else {\n $this.removeClass(\"td-relative\");\n }\n }\n });\n\n function afterScroll() {\n // Tibi: temporarily disabled\n // $('.btn-translate').on('click', function() {\n // var $btn = $(this);\n // var transTextHeight = $btn.closest('.td-content').outerHeight();\n // var $td = $btn.closest('td.translatable');\n // var $th = $td.siblings('th');\n // $td.css({\n // 'height': transTextHeight,\n // 'padding': '0'\n // });\n // $btn.closest('.td-content').css('padding', '8px');\n // $th.css('height', transTextHeight);\n // });\n }\n });\n });\n }\n\n // check if element is in viewport\n $.fn.isInViewport = function () {\n var elementTop = $(this).offset().top;\n var elementBottom = elementTop + $(this).height();\n\n var viewportTop = $(window).scrollTop();\n var viewportBottom = viewportTop + $(window).height();\n\n return elementBottom > viewportTop && elementTop < viewportBottom;\n };\n\n function addCustomScroll() {\n var $cs = $(\n '
' +\n '' +\n '
' +\n '
' +\n \"
\" +\n \"
\"\n );\n\n $cs.insertAfter($(\".overflow-table\").find(\".inner\"));\n }\n\n function setupCustomScroll() {\n // A fixed scrollbar at the bottom of the window for tables\n\n var $ot = $(\".overflow-table\");\n var $win = $(window);\n\n $ot.each(function () {\n var $t = $(this);\n // var $tParent = $t.parent();\n var $tParent = $t;\n var topScroll = $(\".top-scroll\", $tParent);\n var topScrollInner = topScroll.find(\".top-scroll-inner\");\n var tableScroll = $(\".inner\", $tParent);\n var tableWidth = $(\".table-report\", $tParent).outerWidth(\n (includeMargin = true)\n );\n var tableHeaderWidth = $(\"th\", $tParent).width();\n var tableAndHeaderWidth = tableWidth + tableHeaderWidth;\n var customScroll = $(\".scroll-wrapper\", $tParent);\n\n topScrollInner.width(tableWidth);\n\n topScroll.on(\"scroll\", function () {\n tableScroll.scrollLeft($(this).scrollLeft());\n });\n\n tableScroll.on(\"scroll\", function () {\n topScroll.scrollLeft($(this).scrollLeft());\n });\n\n if (tableAndHeaderWidth > $t.width()) {\n $win.on(\"resize scroll\", function () {\n var scroll = $win.scrollTop();\n\n if ($t.isInViewport()) {\n customScroll.addClass(\"fixed-scroll\");\n } else {\n customScroll.removeClass(\"fixed-scroll\");\n }\n\n // hide custom scrollbar when it reaches the bottom of the table\n if (\n scroll >=\n $t.offset().top + $t.outerHeight() - window.innerHeight\n ) {\n customScroll.hide();\n } else {\n customScroll.show();\n }\n });\n }\n });\n }\n\n function addFixedTable() {\n var $ot = $(\".overflow-table\");\n\n $ot.each(function () {\n var $table = $(this).find(\"table\");\n var $cb = $('');\n var $ft = $(\n '
' +\n '\" +\n '
' +\n '' +\n \"
\" +\n \"
\" +\n \"
\"\n );\n\n // Register click event for button to clear all pinned rows for the current table\n $ft.find(\"button.reset-pins\").click(function () {\n $ftw = $(this).closest(\".fixed-table-wrapper\");\n $ftw.removeClass(\"sticky-table\");\n $ftw.find(\"tr\").remove();\n\n $innerTable = $ftw.siblings(\".inner\");\n $innerTable.find(\"tr input\").prop(\"checked\", false);\n });\n\n if ($table.find(\"td.sub-header\").length) {\n // Regional descriptors\n $table.find(\"td.sub-header\").append($cb);\n } else {\n // National descriptors\n $table.find(\"th div\").append($cb);\n }\n\n $ft.insertBefore($(this).find(\".inner\"));\n });\n }\n\n $.fn.setupFixedTableRows = function () {\n // Allows report table rows to be fixed while scrolling\n // var $ot = $('.overflow-table');\n var $ot = $(this);\n\n // The .each is necessary, we can have more overflow-tables\n $ot.each(function () {\n var $t = $(this);\n var $fixedTable = $t.find(\".fixed-table-wrapper\");\n var $th = $(\"th\", $t.parent());\n var tableW = $(\".table-report\", $t).width();\n var tableScroll = $(\".inner\", $t);\n var fixedTableInner = $(\".fixed-table-inner\", $t);\n\n function toggleSyncScrolls(onoff) {\n function f1() {\n tableScroll.scrollLeft($(this).scrollLeft());\n }\n function f2() {\n fixedTableInner.scrollLeft($(this).scrollLeft());\n }\n if (onoff) {\n fixedTableInner.on(\"scroll\", f1);\n tableScroll.on(\"scroll\", f2);\n } else {\n fixedTableInner.off(\"scroll\", f1);\n tableScroll.off(\"scroll\", f2);\n }\n }\n toggleSyncScrolls(true);\n\n $t.find(\".fix-row\").each(function (i) {\n var val = \"cb\" + i++;\n // var checkBox = $(this).find('.fix-row');\n var checkBox = $(this);\n checkBox.val(val);\n });\n\n var checkBox = $t.find(\".fix-row\");\n checkBox.change(function () {\n var $this = $(this);\n var value = $this.val();\n var table = $this.closest(\".overflow-table\").find(\".fixed-table\");\n var tableWrapper = $this\n .closest(\".overflow-table\")\n .find(\".fixed-table-wrapper\");\n table.width(tableW);\n\n if ($this.is(\":checked\")) {\n tableWrapper.addClass(\"sticky-table\");\n\n //for other tables find the reset button and trigger the click event\n var $parentReportSection = $this.closest(\".report-section\");\n var $otherReportSections =\n $parentReportSection.siblings(\".report-section\");\n $otherReportSections.each(function () {\n $ftw = $(this).find(\".fixed-table-wrapper\");\n $ftw.find(\"button.reset-pins\").click();\n });\n\n // clone table row, but keep the width of the original table cells\n var target = $this.closest(\"tr\");\n var target_children = target.children(\"td\");\n var clone = target.clone();\n clone.children(\"td\").width(function (i, val) {\n return target_children.eq(i).outerWidth();\n });\n clone.appendTo(table).attr(\"data-row\", value);\n\n // disable for test\n //$t.find('.table').fixTableHeaderAndCellsHeight();\n // setupTableScrolling();\n } else {\n $fixedTable\n .find('tr[data-row=\"' + value + '\"]')\n .slideUp(\"fast\", function () {\n $(this).remove();\n });\n\n if (table.find(\"tr\").length === 1) {\n tableWrapper.removeClass(\"sticky-table\");\n }\n }\n\n var $cb = $fixedTable.find(\".fix-row\");\n $cb.change(function () {\n var $this = $(this);\n var value = $this.val();\n\n if ($this.closest(\"tr\").siblings().length === 0) {\n $this.closest(\".fixed-table-wrapper\").removeClass(\"sticky-table\");\n }\n\n $this.closest(\"tr\").remove();\n $('.fix-row[value=\"' + value + '\"]').prop(\"checked\", false);\n });\n\n toggleSyncScrolls(false);\n fixedTableInner.scrollLeft(tableScroll.scrollLeft());\n toggleSyncScrolls(true);\n });\n });\n\n $(window).on(\"resize scroll\", function () {\n if ($(\".report-nav.sticky\").length > 0) {\n $(\".fixed-table-wrapper\").each(function () {\n $(this).css(\"top\", \"56px\");\n });\n } else {\n $(\".fixed-table-wrapper\").each(function () {\n $(this).css(\"top\", \"0\");\n });\n }\n });\n };\n\n function setupResponsiveness() {\n // fire resize event after the browser window resizing it's completed\n var resizeTimer;\n $(window).resize(function () {\n clearTimeout(resizeTimer);\n resizeTimer = setTimeout(doneResizing, 500);\n });\n\n function doneResizing() {\n // $('.table-report').fixTableHeaderHeight();\n $(\".table-report\").each(function () {\n $(this).fixTableHeaderAndCellsHeight();\n });\n }\n\n if (window.matchMedia(\"(max-width: 768px)\").matches) {\n $(\".overflow-table h5\").width($(\".overflow-table table\").width());\n }\n\n // tibi: temporarily disabled. I don't know what td-content does\n // var $td = $('.overflow-table table td');\n // $td.children('div').wrapInner('
');\n }\n\n function setupSimplifiedTables() {\n $(\".simplify-form\")\n .next()\n .find(\".table-report\")\n .each(function () {\n $(this).simplifyTable();\n });\n\n $(\".simplify-form button\").on(\"click\", function () {\n var onoff = $(this).attr(\"aria-pressed\") == \"true\";\n $p = $(this).parent().next();\n $(\".table-report\", $p).toggleTable(!onoff);\n // Laci disable\n $p.setupFixedTableRows();\n setupCustomScroll();\n });\n }\n\n function regionalDescriptorsGroupTableHeaders() {\n var $headers = $(\".first-header\");\n if ($headers.length === 0) {\n return;\n }\n var compareText = \"\";\n var currentText = \"\";\n\n compareText = $headers[0].firstElementChild.innerText;\n\n for (i = 1; i < $headers.length; i++) {\n currentText = $headers[i].firstElementChild.innerText;\n\n if (compareText === currentText) {\n $headers[i].firstElementChild.innerText = \"\";\n $($headers[i - 1]).css(\"border-bottom\", \"0px\");\n } else {\n compareText = currentText;\n }\n\n //debugger;\n }\n }\n\n $.fn.setupStickyRows = function () {\n // make first th element(s) with 'sticky-col' class stick to the left of the\n // screen when scrolling horizontally\n $stickyTable = $(\".table-sticky-first-col\");\n $stickyTable.find(\"tr\").each(function () {\n $(this)\n .find(\"th.sticky-col\")\n .each(function () {\n $currentTh = $(this);\n $prevTh = $(this).prev(\".sticky-col\");\n\n if ($prevTh.hasClass(\"sticky-col\")) {\n prevWidth = $prevTh.outerWidth();\n prevLeft = parseInt($prevTh.css(\"left\"));\n $currentTh.css({ left: prevWidth + prevLeft });\n } else {\n $currentTh.css(\"left\", -1);\n }\n });\n });\n\n // Pin all rows with 'sticky-row' class\n $fixedTable = $(this).find(\".fixed-table\");\n var tableWrapper = $(this).find(\".fixed-table-wrapper\");\n tableWrapper.addClass(\"sticky-table\");\n\n if ($(this).find(\".inner table\").hasClass(\"table-sticky-first-col\")) {\n $fixedTable.addClass(\"table-sticky-first-col\");\n }\n\n $(this)\n .find(\"tr.sticky-row\")\n .each(function () {\n $(this)\n .children()\n .each(function () {\n var width = $(this).outerWidth();\n $(this).css(\"min-width\", width);\n $(this).css(\"width\", width);\n $(this).css(\"background-color\", $(this).css(\"background-color\"));\n $(this).css(\"color\", $(this).css(\"color\"));\n $(this).css(\"text-align\", $(this).css(\"text-align\"));\n });\n\n clone = $(this).clone();\n clone.appendTo($fixedTable);\n });\n\n // on scroll check if the all rows 'sticky-row' are displayed on screen\n // if not show the 'fixed-table' with the pinned rows\n $(window).on(\"resize scroll\", function () {\n $(\".overflow-table\").each(function () {\n var $ot = $(this);\n var tableWrapper = $ot.find(\".fixed-table-wrapper\");\n var stickyRowsInView = [];\n\n $ot.find(\".inner tr.sticky-row\").each(function () {\n var elementTop = $(this).offset().top;\n var viewportTop = parseInt($(window).scrollTop());\n // var viewportBottom = viewportTop + $(window).height();\n var $currentOT = $(this).parents(\".overflow-table\");\n var otTop = $currentOT.offset().top;\n var otBottom = otTop + $currentOT.outerHeight();\n var theadHeight = $(this).parents(\"thead\").outerHeight();\n\n // if this is false, we display the sticky bar on the top\n isInViewport =\n // $(this).isInViewport() ||\n // elementTop > viewportBottom\n elementTop > viewportTop || otBottom < viewportTop + theadHeight;\n\n stickyRowsInView.push(isInViewport);\n });\n\n if (stickyRowsInView.includes(false)) {\n $ot.removeClass(\"hidden-fixed-table\");\n } else {\n $ot.addClass(\"hidden-fixed-table\");\n }\n });\n });\n };\n\n $(document).ready(function ($) {\n setupReadMoreModal();\n initStyling();\n setupSelects2();\n setupReportNavigation();\n // setupTableScrolling();\n setupResponsiveness();\n addCustomScroll();\n addFixedTable();\n regionalDescriptorsGroupTableHeaders();\n\n $(\".pat-plone-modal\").attr(\"href\", \"https://water.europa.eu/marine/assessment-module/login\");\n $(\".assessment-read-more\").click(function () {\n var $this = $(this);\n $this.text(function (a, b) {\n return b.startsWith(\"Show\")\n ? \"Hide reports\"\n : $(this).attr(\"display-text\");\n });\n $this.parents().siblings(\".assessment-dd-list\").fadeToggle();\n $this\n .parents()\n .siblings(\".text-reports-table\")\n .find(\".assessment-dd-list\")\n .fadeToggle();\n });\n\n var $scrollBtn = $(\".scroll-to-top\");\n $(window).scroll(function () {\n if ($(this).scrollTop() > 400) {\n $scrollBtn.fadeIn();\n } else {\n $scrollBtn.fadeOut();\n }\n });\n\n $scrollBtn.click(function () {\n $(\"html, body\").animate({ scrollTop: 0 }, 400);\n return false;\n });\n\n $(window).on(\"load\", function () {\n // setupReadMoreModal();\n setupSimplifiedTables();\n var $ot = $(\".overflow-table\");\n $ot.each(function () {\n $(this).setupFixedTableRows();\n $(this).find(\".table-report\").fixTableHeaderAndCellsHeight();\n // when loading the screen pin all rows marked with 'sticky-row' class\n // and display them if they are not in viewport\n $(this).setupStickyRows();\n });\n setupCustomScroll();\n\n // setupScrollableTargets();\n setupTargetsWidth();\n setupAssessmentStatusChange();\n\n setupProcessStateCheckboxes();\n });\n });\n})(window, document, $);\n"],"names":["Array","prototype","last","this","length","window","document","$","setupCustomScroll","$ot","$win","each","$t","$tParent","topScroll","topScrollInner","find","tableScroll","tableWidth","outerWidth","includeMargin","tableAndHeaderWidth","width","customScroll","on","scrollLeft","scroll","scrollTop","isInViewport","addClass","removeClass","offset","top","outerHeight","innerHeight","hide","show","fn","fixTableHeaderAndCellsHeight","index","$th","$next","tdHeights","cells_max_height","height","thHeight","thInnerHeight","parents","hasClass","isSideBySideLeft","parent","children","$nextSideBySide","siblings","merge","$subheader","hght","$this","push","Math","max","apply","css","fixTableHeaderHeight","$thSideBySide","$rowSideBySide","simplifyTable","$table","cache","data","html","curentLevel","setlimits","level","limits","row","sets","rowLevel","cursor","undefined","parseInt","not","ix","includes","text","trim","colspan","attr","slice","remove","l","iy","c","toggleTable","onoff","original","simplified","empty","setupReadMoreModal","setupTranslateClickHandlers","$modal","$modalContent","sh","t_html","substr","modal","click","elementTop","elementBottom","viewportTop","viewportBottom","setupFixedTableRows","$fixedTable","tableW","fixedTableInner","toggleSyncScrolls","f1","f2","off","i","val","change","target_children","value","table","closest","tableWrapper","is","$ftw","target","clone","eq","appendTo","slideUp","prop","setupStickyRows","$stickyTable","$currentTh","$prevTh","prev","prevWidth","prevLeft","left","stickyRowsInView","$currentOT","otBottom","theadHeight","ready","selector","forbiddenIDs","stickyOffset","$reportnav","$rn","$title","resizeTimer","doneResizing","ind","selectElement","selectedElementID","indexOf","options","placeholder","closeOnSelect","dropdownAutoWidth","theme","minimumResultsForSearch","Infinity","select2","toggle","toggleClass","fixElement","resize","clearTimeout","setTimeout","matchMedia","matches","insertAfter","$cb","$ft","$innerTable","append","insertBefore","$headers","currentText","compareText","firstElementChild","innerText","a","b","startsWith","fadeToggle","$scrollBtn","fadeIn","fadeOut","animate","maxGescompWidth","$tableWrap","next","$p","display","min-width","hover","$form","$assessmentContainers","url","action","body","ajax","type","serialize","success","location","reload","$newPhaseSelector","replaceWith"],"mappings":"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"}