{"version":3,"file":"assessment-edit.js","sources":["../../src/js/assessment-edit.js"],"sourcesContent":["(function($){\n\n $.fn.isInViewport = function() {\n var elementTop = $(this).offset().top;\n var elementBottom = elementTop + $(this).outerHeight();\n\n var viewportTop = $(window).scrollTop();\n var viewportBottom = viewportTop + $(window).height();\n\n return elementBottom > viewportTop && elementTop < viewportBottom;\n };\n\n function setCommentCookie() {\n var token = 's--Plone' + window.location.pathname.split('/').slice(0,-1).join('-');\n document.cookie = token + \"=\" + Date.now() + \";path=/\";\n }\n\n function colorComments() {\n // setup colored chat depending on user\n colorPalette = {\n 'light': [\"lightgreen\", \"lightblue\", \"lightgoldenrodyellow\", \"lightgrey\"],\n 'dark': [\"darkgreen\", \"darkblue\", \"darkmagenta\", \"darkred\"]\n }\n\n usernames = {\n 'light': [],\n 'dark': []\n };\n\n $('.comment-name').each(function(){\n var groupId = $(this).attr('group-id');\n var username = $(this).text();\n\n if (usernames[groupId].indexOf(username) === -1) {\n usernames[groupId].push(username);\n }\n\n });\n\n $('.comms').each(function(){\n var $commentName = $(this).find('.comment-name');\n var commenter = $commentName.text();\n var groupId = $commentName.attr('group-id');\n var colorP = colorPalette[groupId];\n\n indx = usernames[groupId].indexOf(commenter);\n color = colorP[indx % colorP.length];\n\n $comment = $(this).find('.comment');\n $comment.css('background-color', color);\n if (groupId === 'light'){\n $comment.css('color', 'black');\n }\n });\n }\n\n function setupAccordions($el) {\n var $acc = $el.find('.accordion');\n var i;\n\n for (i = 0; i < $acc.length; i++) {\n $acc[i].addEventListener(\"click\", function() {\n this.classList.toggle(\"active\");\n var $comments = $(this).nextUntil('li.accordion');\n $comments.each(function(){\n this.classList.toggle(\"active\");\n });\n });\n\n if(i == $acc.length -1) {\n $acc[i].classList.toggle(\"active\");\n var $comments = $($acc[i]).nextUntil('li.accordion');\n $comments.each(function(){\n this.classList.toggle(\"active\");\n });\n }\n }\n }\n\n function loadComments($el) {\n var qid = $el.data('question-id');\n var threadId = $el.data('thread-id');\n var url = './@@ast-comments?q=' + qid + '&thread_id=' + threadId;\n $.get(url, function(text){\n //console.log('getting comments from url', url);\n $el.html(text);\n colorComments();\n setupAccordions($el);\n });\n }\n\n function setupDeleteComments($el) {\n $el.find('.comms .comm-del').each(function(){\n var $this = $(this);\n clickEventExists = $this.data('click-event-setup');\n if(clickEventExists === 'true'){\n return;\n }\n $this.data('click-event-setup', 'true');\n //console.log(\"setup delete comments\");\n\n $this.on('click', function(){\n var $this = $(this);\n var $comel = $('.comments', $this.closest('.right')); //comment element\n var commentName = $this.siblings('.comm-crtr').find('.comment-name').text();\n var commentTime = $this.siblings('.comm-crtr').find('.comment-time').text();\n var text = $this.siblings('.comment').text();\n var qid = $el.data('question-id');\n var threadId = $el.data('thread-id');\n\n if (confirm(\"Are you sure you want to delete the comment '\" + text + \"'?\")) {\n var url = './@@del_comment';\n var data = {\n comm_name: commentName,\n comm_time: commentTime,\n text: text,\n q: qid,\n thread_id: threadId,\n };\n $.post(url, data, function(text){\n setCommentCookie();\n $comel.html(text);\n colorComments();\n setupAccordions($el);\n });\n }\n });\n });\n }\n\n function setupEditComments($el) {\n $el.find('.comms .comm-edit').each(function(){\n var $this = $(this);\n clickEventExists = $this.data('click-event-setup');\n if(clickEventExists === 'true'){\n return;\n }\n $this.data('click-event-setup', 'true');\n \n $this.on('click', function(){\n var $this = $(this);\n var $comel = $('.comments', $this.closest('.right')); // comment element\n var commentName = $this.siblings('.comm-crtr').find('.comment-name').text();\n var commentTime = $this.siblings('.comm-crtr').find('.comment-time').text();\n var text = $this.siblings('.comment').text();\n var qid = $el.data('question-id');\n var threadId = $el.data('thread-id');\n \n var $editCommentModal = $('#edit-comment-modal');\n $('#comment-original-text', $editCommentModal).text(text);\n $('#new_comment', $editCommentModal).val(text);\n\n $('#comm_original', $editCommentModal).val(text);\n $('#comm_name', $editCommentModal).val(commentName);\n $('#comm_time', $editCommentModal).val(commentTime);\n $('#q', $editCommentModal).val(qid);\n $('#thread_id', $editCommentModal).val(threadId);\n $('#form-edit-comment').data('comel', $comel);\n $('#form-edit-comment').data('el', $el);\n });\n });\n }\n\n function setupCommentsListing() {\n $(window).on('resize scroll', function() {\n $('.subform .right .comments').each(function(){\n var $n = $(this);\n\n if ($n.data('comments-loaded') === 'true') {\n return;\n }\n if ($n.isInViewport()) {\n $n.data('comments-loaded', 'true');\n loadComments($n);\n }\n });\n });\n }\n\n function setupPostComments() {\n $('.subform .right .textline button').on('click', function() {\n var $btn = $(this);\n var $comel = $('.comments', $btn.closest('.right'));\n var $textarea = $('textarea', $btn.closest('.textline'));\n\n var qid = $comel.data('question-id');\n var threadId = $comel.data('thread-id');\n var text = $textarea.val();\n\n if (!text) return false;\n\n var url = './@@add_comment';\n var data = {\n text:text,\n q: qid,\n thread_id: threadId\n };\n\n $.post(url, data, function(text){\n setCommentCookie();\n $comel.html(text);\n $textarea.val('');\n colorComments();\n setupAccordions($comel);\n });\n // console.log(qid, text);\n return false;\n });\n }\n\n function setupToggleComments() {\n var $discTl = $('.right.disc-tl')\n var $discEc = $('.right.disc-ec')\n var existsDiscTl = $discTl.length\n var existsDiscEc = $discEc.length\n\n $('.comm-hide').click(function() {\n // Close button transformed into a 'show all comments' button\n // $(this).closest('.right').addClass('inactive');\n $(this).siblings('.comments').find('li').each(function(){\n $(this).addClass('active');\n });\n });\n\n $('.right.discussion .comments').click(function(){\n $thisComm = $(this).closest('.right');\n\n if($thisComm.hasClass('inactive')){\n $thisComm.toggleClass('inactive');\n }\n });\n }\n\n function setupDisableAssessmentForms(){\n // used in edit assessment form\n // add the disabled attribute for select/textarea elements\n // if the question type does not match the process phase\n $('#comp-national-descriptor div.subform.disabled div.left')\n .find('textarea').each(function(){\n $(this).attr('disabled', true);\n });\n\n // used in edit assessment form\n // remove the disabled attribute when submitting the form\n // data from disabled attributes is not submitted\n $('.kssattr-formname-edit-assessment-data-2018').submit(function(){\n $(':disabled').each(function(){\n $(this).removeAttr('disabled');\n });\n });\n }\n\n function setupFormSelectOptions() {\n // used in edit assessment form\n // override plone's default 'No value' option with '-'\n $('#comp-national-descriptor div.subform div.left div.assessment-form-input')\n .find(\"option:contains('No value'), span.select2-chosen:contains('No value')\").each(function(){\n $(this).text('-');\n });\n\n // in edit ms responses to recommendations remove the 'No value' from the options\n $('.edit-recommendation-feedback div.assessment-form-input')\n .find(\"option:contains('No value'), span.select2-chosen:contains('No value')\").each(function(){\n $(this).remove();\n });\n }\n\n function setupUnloadWarning() {\n // National descriptor edit assessment data\n // Warn user before leaving the page with unsaved changes\n var submitted = false;\n var modified = false;\n var $nd = $('.fields-container');\n\n $('#comp-national-descriptor form').submit(function() {\n submitted = true;\n });\n\n $nd.on('change', 'input, textarea, select', function(e) {\n modified = true;\n });\n\n $(window).bind('beforeunload', function() {\n if (modified && !submitted) {\n // most browsers ignores custom messages,\n // in that case the browser default message will be used\n return \"You have unsaved changes. Do you want to leave this page?\";\n }\n });\n\n var $select = $nd.find('.select2-container');\n var $textarea = $nd.find('textarea');\n $select.closest('.fields-container-row').addClass('flex-select');\n $textarea.closest('.fields-container-row').addClass('flex-textarea');\n }\n\n function adjustInfoboxPosition() {\n var $repNavToggle = $('#report-nav-toggle');\n var $repNav = $('.report-nav.sticky');\n var $infobox = $('#assessment-edit-infobox');\n var infoboxLength = $infobox.children().length;\n var $ff = $('.form-right-side.fixed-save-btn');\n\n if (infoboxLength > 0 && $repNav.length){\n $repNav.addClass('has-infobox');\n $infobox.show().css('display', 'inline-block');\n var leftPos = $repNavToggle.position().left - 16;\n\n if ($ff.length) leftPos = $ff.position().left;\n\n leftPos = leftPos - $infobox.width();\n $infobox.css('left', leftPos + 'px');\n }\n else {\n $repNav.removeClass('has-infobox');\n $infobox.hide();\n }\n }\n\n function setupAssessmentInfobox() {\n // add the infobox to the top sticky bar\n // the infobox will show all ges components/targets with 'Not relevant' option selected\n function _addGescompsToInfobox() {\n var gesComps = [];\n var $allQuestions = $('
');\n var $infobox = $('div#assessment-edit-infobox');\n var message = \"'Not relevant' option selected for the following questions:\";\n $infobox.empty();\n\n $('.subform .left select option:selected').each(function(){\n var value = $(this).text();\n var _id = $(this).parent().attr('id').split('_').slice(-2);\n var questionId = _id[0];\n var _idGescomp = _id[1];\n\n if (_idGescomp.match('[^a-zA-Z]')) _idGescomp = _idGescomp.split('-').join('.');\n\n if(value == 'Not relevant') {\n $allQuestions.append($(\"\").addClass('infobox-popover')\n .append(questionId + \": \" + _idGescomp));\n\n if (gesComps.indexOf(_idGescomp) === -1) gesComps.push(_idGescomp);\n }\n });\n\n gesComps.forEach(function(value, index, array) {\n $infobox.append($('').attr('class', 'info-item').append(value)\n );\n });\n\n $infobox.attr('class', 'help-popover')\n .attr('data-trigger', 'hover')\n .attr('data-html', 'true')\n .attr('data-placement', 'bottom')\n .attr('data-content', $allQuestions.html())\n .attr('data-original-title', message).popover();\n\n if(gesComps.length === 0) {\n $infobox.hide();\n return;\n }\n\n $infobox\n .append($(''));\n\n }\n _addGescompsToInfobox();\n\n $('select').change(function(){\n _addGescompsToInfobox();\n adjustInfoboxPosition();\n });\n }\n\n function setupQuestionIntroModal() {\n $('i.question-intro').click(function() {\n var questionIntroText = $(this).data().text;\n var questionId = $(this).data().questionid;\n $('#question-intro .modal-body').html(questionIntroText);\n $('#question-intro .modal-title .modal-question-id').text(questionId);\n });\n }\n\n $(document).ready(function() {\n setCommentCookie();\n setupCommentsListing();\n setupPostComments();\n setupToggleComments();\n setupDisableAssessmentForms();\n setupFormSelectOptions();\n setupUnloadWarning();\n setupAssessmentInfobox();\n setupQuestionIntroModal();\n\n $('.help-popover').popover();\n\n // When hovering over the comments section add delete comment event for each comment\n $('.subform .right .comments').mouseenter(\n function(){\n setupDeleteComments($(this));\n setupEditComments($(this));\n }\n );\n $('#form-edit-comment').submit(function(event){\n event.preventDefault();\n\n if( $(this).hasClass('form-submitted') ){\n return;\n }\n \n $(this).addClass('form-submitted');\n $('#edit-comment-modal *').css(\"cursor\", \"wait\");\n var url = './@@edit_comment';\n var $comel = $(this).data('comel');\n var $el = $(this).data('el');\n \n $.post(url, $(this).serialize(), function(text){\n setCommentCookie();\n $comel.html(text);\n colorComments();\n setupAccordions($el);\n $('#edit-comment-modal *').css(\"cursor\", \"default\");\n jQuery.noConflict();\n $('#edit-comment-modal').modal('toggle');\n $('#form-edit-comment').removeClass('form-submitted');\n });\n\n });\n\n var $win = $(window);\n\n // set comment section height for overflow\n var $sf = $('.subform');\n $sf.each(function() {\n var $this = $(this);\n var $com = $this.find('.right');\n var formHeight = $this.find('.left').innerHeight();\n\n $com.innerHeight(formHeight + 30);\n\n var resizeTimer;\n $win.resize(function() {\n clearTimeout(resizeTimer);\n resizeTimer = setTimeout(function(){\n $com = $this.find('.right');\n formHeight = $this.find('.left').innerHeight();\n $com.innerHeight(formHeight);\n }, 100)\n });\n });\n\n // sticky save button\n var $sfw = $('.form-right-side');\n var $rn = $('.report-nav');\n var btnPos = 0;\n var rnOffset = 0;\n var scroll, space;\n\n if ($sfw.offset()) btnPos = $sfw.offset().top;\n if ($rn.length > 0) rnOffset = $rn.offset().top;\n\n space = $win.height() - $sfw.height() * 2;\n\n // $sfw.find('#form-buttons-save').addClass('btn-success');\n // Button to translate targets only displayed for art10\n var $btnTranslate = $sfw.find('#form-buttons-translate');\n $btnTranslate.addClass('btn-secondary');\n if(window.location.pathname.indexOf('art10') == -1){\n $btnTranslate.css('display', 'none');\n }\n\n $win.scroll(function() {\n scroll = $win.scrollTop();\n var fixElement = (scroll + space < btnPos) && (scroll >= rnOffset);\n $sfw.toggleClass('fixed-save-btn', fixElement);\n adjustInfoboxPosition();\n });\n\n });\n\n}(jQuery));\n"],"names":["$","setCommentCookie","token","window","location","pathname","split","slice","join","document","cookie","Date","now","colorComments","colorPalette","light","dark","usernames","each","groupId","this","attr","username","text","indexOf","push","$commentName","find","commenter","colorP","indx","color","length","$comment","css","setupAccordions","$el","$acc","i","addEventListener","classList","toggle","nextUntil","setupCommentsListing","on","threadId","$n","data","isInViewport","qid","get","html","adjustInfoboxPosition","$repNavToggle","$repNav","$infobox","infoboxLength","children","$ff","addClass","show","leftPos","position","left","width","removeClass","hide","fn","elementTop","offset","top","elementBottom","outerHeight","viewportTop","scrollTop","viewportBottom","height","ready","submitted","modified","_addGescompsToInfobox","gesComps","$allQuestions","empty","value","_id","parent","questionId","_idGescomp","match","append","forEach","index","array","popover","$btn","$comel","closest","$textarea","val","post","q","thread_id","$discTl","$discEc","click","siblings","$thisComm","hasClass","toggleClass","submit","removeAttr","remove","$nd","e","bind","$select","change","questionIntroText","questionid","mouseenter","$this","clickEventExists","commentName","commentTime","confirm","comm_name","comm_time","$editCommentModal","event","preventDefault","serialize","jQuery","noConflict","modal","scroll","space","$win","$sfw","resizeTimer","$com","formHeight","innerHeight","resize","clearTimeout","setTimeout","$rn","btnPos","rnOffset","$btnTranslate","fixElement"],"mappings":"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"}