{"version":3,"file":"utilities.min.js","sources":["../../../../css/bootstrap-accessibility/js/bootstrap-accessibility.js","../../../../js/globalization.js","../../../../js/admin/quiz/results.js"],"sourcesContent":["(function($) { \r\n \"use strict\"; \r\n\r\n // GENERAL UTILITY FUNCTIONS\r\n // ===============================\r\n \r\n var uniqueId = function(prefix) {\r\n return (prefix || 'ui-id') + '-' + Math.floor((Math.random()*1000)+1)\r\n }\r\n\r\n \r\n var removeMultiValAttributes = function (el, attr, val) {\r\n var describedby = (el.attr( attr ) || \"\").split( /\\s+/ )\r\n , index = $.inArray(val, describedby)\r\n if ( index !== -1 ) {\r\n describedby.splice( index, 1 )\r\n }\r\n describedby = $.trim( describedby.join( \" \" ) )\r\n if (describedby ) {\r\n el.attr( attr, describedby )\r\n } else {\r\n el.removeAttr( attr )\r\n }\r\n }\r\n\r\n// selectors Courtesy: https://github.com/jquery/jquery-ui/blob/master/ui/focusable.js and tabbable.js\r\n/*\r\nCopyright jQuery Foundation and other contributors, https://jquery.org/\r\n\r\nThis software consists of voluntary contributions made by many\r\nindividuals. For exact contribution history, see the revision history\r\navailable at https://github.com/jquery/jquery-ui\r\n\r\nThe following license applies to all parts of this software except as\r\ndocumented below:\r\n\r\n====\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n====\r\n\r\nCopyright and related rights for sample code are waived via CC0. Sample\r\ncode is defined as all source code contained within the demos directory.\r\n\r\nCC0: http://creativecommons.org/publicdomain/zero/1.0/\r\n\r\n====\r\n*/\r\n\r\n var focusable = function (element, isTabIndexNotNaN) {\r\n var map, mapName, img,\r\n nodeName = element.nodeName.toLowerCase();\r\n if ( \"area\" === nodeName ) {\r\n map = element.parentNode;\r\n mapName = map.name;\r\n if ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\r\n return false;\r\n }\r\n img = $( \"img[usemap='#\" + mapName + \"']\" )[ 0 ];\r\n return !!img && visible( img );\r\n }\r\n return ( /input|select|textarea|button|object/.test( nodeName ) ?\r\n !element.disabled :\r\n \"a\" === nodeName ?\r\n element.href || isTabIndexNotNaN :isTabIndexNotNaN) && visible( element ); // the element and all of its ancestors must be visible \r\n }\r\n var visible = function ( element ) {\r\n return $.expr.filters.visible( element ) &&\r\n !$( element ).parents().addBack().filter(function() {\r\n return $.css( this, \"visibility\" ) === \"hidden\";\r\n }).length;\r\n }\r\n\r\n $.extend( $.expr[ \":\" ], {\r\n data: $.expr.createPseudo ?\r\n $.expr.createPseudo(function( dataName ) {\r\n return function( elem ) {\r\n return !!$.data( elem, dataName );\r\n };\r\n }) :\r\n // support: jQuery <1.8\r\n function( elem, i, match ) {\r\n return !!$.data( elem, match[ 3 ] );\r\n },\r\n\r\n focusable: function( element ) {\r\n return focusable( element, !isNaN( $.attr( element, \"tabindex\" ) ) );\r\n },\r\n\r\n tabbable: function( element ) {\r\n var tabIndex = $.attr( element, \"tabindex\" ),\r\n isTabIndexNaN = isNaN( tabIndex );\r\n return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );\r\n }\r\n });\r\n\r\n // Modal Extension\r\n // ===============================\r\n\r\n $('.modal-dialog').attr( {'role' : 'document'})\r\n var modalhide = $.fn.modal.Constructor.prototype.hide\r\n $.fn.modal.Constructor.prototype.hide = function(){\r\n modalhide.apply(this, arguments)\r\n $(document).off('keydown.bs.modal')\r\n }\r\n\r\n var modalfocus = $.fn.modal.Constructor.prototype.enforceFocus\r\n $.fn.modal.Constructor.prototype.enforceFocus = function(){\r\n var $content = this.$element.find(\".modal-content\")\r\n var focEls = $content.find(\":tabbable\")\r\n , $lastEl = $(focEls[focEls.length-1])\r\n , $firstEl = $(focEls[0])\r\n $lastEl.on('keydown.bs.modal', $.proxy(function (ev) {\r\n if(ev.keyCode === 9 && !(ev.shiftKey | ev.ctrlKey | ev.metaKey | ev.altKey)) { // TAB pressed\r\n ev.preventDefault();\r\n $firstEl.focus();\r\n }\r\n }, this))\r\n $firstEl.on('keydown.bs.modal', $.proxy(function (ev) {\r\n if(ev.keyCode === 9 && ev.shiftKey) { // SHIFT-TAB pressed\r\n ev.preventDefault();\r\n $lastEl.focus();\r\n }\r\n }, this))\r\n modalfocus.apply(this, arguments)\r\n }\r\n\r\n // DROPDOWN Extension\r\n // ===============================\r\n\r\n var toggle = '[data-toggle=dropdown]'\r\n , $par\r\n , firstItem\r\n , focusDelay = 200\r\n , menus = $(toggle).parent().find('ul').attr('role','menu')\r\n , lis = menus.find('li').attr('role','presentation')\r\n // add aria attributes to dropdown toggle\r\n $(toggle).attr({ 'aria-haspopup':'true', 'aria-expanded': 'false'})\r\n\r\n $(toggle).parent()\r\n // Update aria-expanded when open\r\n .on('shown.bs.dropdown',function(e){\r\n $par = $(this)\r\n var $toggle = $par.find(toggle)\r\n $toggle.attr('aria-expanded','true')\r\n $toggle.on('keydown.bs.dropdown', $.proxy(function (ev) {\r\n setTimeout(function() {\r\n firstItem = $('.dropdown-menu [role=menuitem]:visible', $par)[0]\r\n try{ firstItem.focus()} catch(ex) {}\r\n }, focusDelay)\r\n }, this))\r\n\r\n })\r\n // Update aria-expanded when closed\r\n .on('hidden.bs.dropdown',function(e){\r\n $par = $(this)\r\n var $toggle = $par.find(toggle)\r\n $toggle.attr('aria-expanded','false')\r\n })\r\n\r\n // Close the dropdown if tabbed away from\r\n $(document)\r\n .on('focusout.dropdown.data-api', '.dropdown-menu', function(e){\r\n var $this = $(this)\r\n , that = this;\r\n // since we're trying to close when appropriate,\r\n // make sure the dropdown is open\r\n if (!$this.parent().hasClass('open')) {\r\n return;\r\n }\r\n setTimeout(function() {\r\n if(!$.contains(that, document.activeElement)){\r\n $this.parent().removeClass('open')\r\n }\r\n }, 150)\r\n })\r\n .on('keydown.bs.dropdown.data-api',\r\n toggle + ', [role=menu]', $.fn.dropdown.Constructor.prototype.keydown);\r\n\r\n // Tab Extension\r\n // ===============================\r\n \r\n var $tablist = $('.nav-tabs, .nav-pills')\r\n , $lis = $tablist.children('li')\r\n , $tabs = $tablist.find('[data-toggle=\"tab\"], [data-toggle=\"pill\"]')\r\n\r\n if($tabs){\r\n $tablist.attr('role', 'tablist')\r\n $lis.attr('role', 'presentation')\r\n $tabs.attr('role', 'tab')\r\n }\r\n\r\n $tabs.each(function( index ) {\r\n var tabpanel = $($(this).attr('href'))\r\n , tab = $(this)\r\n , tabid = tab.attr('id') || uniqueId('ui-tab')\r\n\r\n tab.attr('id', tabid)\r\n\r\n if(tab.parent().hasClass('active')){\r\n tab.attr( { 'tabIndex' : '0', 'aria-selected' : 'true', 'aria-controls': tab.attr('href').substr(1) } )\r\n tabpanel.attr({ 'role' : 'tabpanel', 'tabIndex' : '0', 'aria-hidden' : 'false', 'aria-labelledby':tabid })\r\n }else{\r\n tab.attr( { 'tabIndex' : '-1', 'aria-selected' : 'false', 'aria-controls': tab.attr('href').substr(1) } )\r\n tabpanel.attr( { 'role' : 'tabpanel', 'tabIndex' : '-1', 'aria-hidden' : 'true', 'aria-labelledby':tabid } )\r\n }\r\n })\r\n\r\n $.fn.tab.Constructor.prototype.keydown = function (e) {\r\n var $this = $(this)\r\n , $items\r\n , $ul = $this.closest('ul[role=tablist] ')\r\n , index\r\n , k = e.which || e.keyCode\r\n\r\n $this = $(this)\r\n if (!/(37|38|39|40)/.test(k)) return\r\n\r\n $items = $ul.find('[role=tab]:visible')\r\n index = $items.index($items.filter(':focus'))\r\n\r\n if (k == 38 || k == 37) index-- // up & left\r\n if (k == 39 || k == 40) index++ // down & right\r\n\r\n\r\n if(index < 0) index = $items.length -1\r\n if(index == $items.length) index = 0\r\n\r\n var nextTab = $items.eq(index)\r\n if(nextTab.attr('role') ==='tab'){\r\n\r\n nextTab.tab('show') //Comment this line for dynamically loaded tabPabels, to save Ajax requests on arrow key navigation\r\n .focus()\r\n }\r\n // nextTab.focus()\r\n\r\n e.preventDefault()\r\n e.stopPropagation()\r\n }\r\n\r\n $(document).on('keydown.tab.data-api','[data-toggle=\"tab\"], [data-toggle=\"pill\"]' , $.fn.tab.Constructor.prototype.keydown)\r\n\r\n var tabactivate = $.fn.tab.Constructor.prototype.activate;\r\n $.fn.tab.Constructor.prototype.activate = function (element, container, callback) {\r\n var $active = container.find('> .active')\r\n $active.find('[data-toggle=tab], [data-toggle=pill]').attr({ 'tabIndex' : '-1','aria-selected' : false })\r\n $active.filter('.tab-pane').attr({ 'aria-hidden' : true,'tabIndex' : '-1' })\r\n\r\n tabactivate.apply(this, arguments)\r\n\r\n element.addClass('active')\r\n element.find('[data-toggle=tab], [data-toggle=pill]').attr({ 'tabIndex' : '0','aria-selected' : true })\r\n element.filter('.tab-pane').attr({ 'aria-hidden' : false,'tabIndex' : '0' })\r\n }\r\n\r\n // Collapse Extension\r\n // ===============================\r\n\r\n var $colltabs = $('[data-toggle=\"collapse\"]')\r\n $colltabs.each(function( index ) {\r\n var colltab = $(this)\r\n , collpanel = (colltab.attr('data-target')) ? $(colltab.attr('data-target')) : $(colltab.attr('href'))\r\n , parent = colltab.attr('data-parent')\r\n , collparent = parent && $(parent)\r\n , collid = colltab.attr('id') || uniqueId('ui-collapse')\r\n\r\n colltab.attr('id', collid)\r\n\r\n if(collparent){\r\n colltab.attr({ 'role':'tab', 'aria-selected':'false', 'aria-expanded':'false' })\r\n $(collparent).find('div:not(.collapse,.panel-body), h4').attr('role','presentation')\r\n collparent.attr({ 'role' : 'tablist', 'aria-multiselectable' : 'true' })\r\n\r\n if(collpanel.hasClass('in')){\r\n colltab.attr({ 'aria-controls': collpanel.attr('id'), 'aria-selected':'true', 'aria-expanded':'true', 'tabindex':'0' })\r\n collpanel.attr({ 'role':'tabpanel', 'tabindex':'0', 'aria-labelledby':collid, 'aria-hidden':'false' })\r\n }else{\r\n colltab.attr({'aria-controls' : collpanel.attr('id'), 'tabindex':'-1' })\r\n collpanel.attr({ 'role':'tabpanel', 'tabindex':'-1', 'aria-labelledby':collid, 'aria-hidden':'true' })\r\n }\r\n }\r\n })\r\n\r\n var collToggle = $.fn.collapse.Constructor.prototype.toggle\r\n $.fn.collapse.Constructor.prototype.toggle = function(){\r\n var prevTab = this.$parent && this.$parent.find('[aria-expanded=\"true\"]') , href\r\n\r\n if(prevTab){\r\n var prevPanel = prevTab.attr('data-target') || (href = prevTab.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')\r\n , $prevPanel = $(prevPanel)\r\n , $curPanel = this.$element\r\n , par = this.$parent\r\n , curTab\r\n\r\n if (this.$parent) curTab = this.$parent.find('[data-toggle=collapse][href=\"#' + this.$element.attr('id') + '\"]')\r\n\r\n collToggle.apply(this, arguments)\r\n\r\n if ($.support.transition) {\r\n this.$element.one($.support.transition.end, function(){\r\n\r\n prevTab.attr({ 'aria-selected':'false','aria-expanded':'false', 'tabIndex':'-1' })\r\n $prevPanel.attr({ 'aria-hidden' : 'true','tabIndex' : '-1'})\r\n\r\n curTab.attr({ 'aria-selected':'true','aria-expanded':'true', 'tabIndex':'0' })\r\n\r\n if($curPanel.hasClass('in')){\r\n $curPanel.attr({ 'aria-hidden' : 'false','tabIndex' : '0' })\r\n }else{\r\n curTab.attr({ 'aria-selected':'false','aria-expanded':'false'})\r\n $curPanel.attr({ 'aria-hidden' : 'true','tabIndex' : '-1' })\r\n }\r\n })\r\n }\r\n }else{\r\n collToggle.apply(this, arguments)\r\n }\r\n }\r\n\r\n $.fn.collapse.Constructor.prototype.keydown = function (e) {\r\n var $this = $(this)\r\n , $items\r\n , $tablist = $this.closest('div[role=tablist] ')\r\n , index\r\n , k = e.which || e.keyCode\r\n\r\n $this = $(this)\r\n if (!/(32|37|38|39|40)/.test(k)) return\r\n if(k==32) $this.click()\r\n\r\n $items = $tablist.find('[role=tab]')\r\n index = $items.index($items.filter(':focus'))\r\n\r\n if (k == 38 || k == 37) index-- // up & left\r\n if (k == 39 || k == 40) index++ // down & right\r\n if(index < 0) index = $items.length -1\r\n if(index == $items.length) index = 0\r\n\r\n $items.eq(index).focus()\r\n\r\n e.preventDefault()\r\n e.stopPropagation()\r\n\r\n }\r\n\r\n $(document).on('keydown.collapse.data-api','[data-toggle=\"collapse\"]' , $.fn.collapse.Constructor.prototype.keydown);\r\n \r\n\r\n// Carousel Extension\r\n // ===============================\r\n\r\n $('.carousel').each(function (index) {\r\n\r\n // This function positions a highlight box around the tabs in the tablist to use in focus styling\r\n\r\n function setTablistHighlightBox() {\r\n\r\n var $tab\r\n , offset\r\n , height\r\n , width\r\n , highlightBox = {}\r\n\r\n highlightBox.top = 0\r\n highlightBox.left = 32000\r\n highlightBox.height = 0\r\n highlightBox.width = 0\r\n\r\n for (var i = 0; i < $tabs.length; i++) {\r\n $tab = $tabs[i]\r\n offset = $($tab).offset()\r\n height = $($tab).height()\r\n width = $($tab).width()\r\n\r\n// console.log(\" Top: \" + offset.top + \" Left: \" + offset.left + \" Height: \" + height + \" Width: \" + width)\r\n\r\n if (highlightBox.top < offset.top) {\r\n highlightBox.top = Math.round(offset.top)\r\n }\r\n\r\n if (highlightBox.height < height) {\r\n highlightBox.height = Math.round(height)\r\n }\r\n\r\n if (highlightBox.left > offset.left) {\r\n highlightBox.left = Math.round(offset.left)\r\n }\r\n\r\n var w = (offset.left - highlightBox.left) + Math.round(width)\r\n\r\n if (highlightBox.width < w) {\r\n highlightBox.width = w\r\n }\r\n\r\n } // end for\r\n\r\n// console.log(\"[HIGHLIGHT] Top: \" + highlightBox.top + \" Left: \" + highlightBox.left + \" Height: \" + highlightBox.height + \" Width: \" + highlightBox.width)\r\n\r\n $tablistHighlight.style.top = (highlightBox.top - 2) + 'px'\r\n $tablistHighlight.style.left = (highlightBox.left - 2) + 'px'\r\n $tablistHighlight.style.height = (highlightBox.height + 7) + 'px'\r\n $tablistHighlight.style.width = (highlightBox.width + 8) + 'px'\r\n\r\n } // end function\r\n\r\n var $this = $(this)\r\n , $prev = $this.find('[data-slide=\"prev\"]')\r\n , $next = $this.find('[data-slide=\"next\"]')\r\n , $tablist = $this.find('.carousel-indicators')\r\n , $tabs = $this.find('.carousel-indicators li')\r\n , $tabpanels = $this.find('.item')\r\n , $tabpanel\r\n , $tablistHighlight\r\n , $pauseCarousel\r\n , $complementaryLandmark\r\n , $tab\r\n , $is_paused = false\r\n , offset\r\n , height\r\n , width\r\n , i\r\n , id_title = 'id_title'\r\n , id_desc = 'id_desc'\r\n\r\n\r\n $tablist.attr('role', 'tablist')\r\n\r\n $tabs.focus(function() {\r\n $this.carousel('pause')\r\n $is_paused = true\r\n $pauseCarousel.innerHTML = \"Play Carousel\"\r\n $(this).parent().addClass('active');\r\n// $(this).addClass('focus')\r\n setTablistHighlightBox()\r\n $($tablistHighlight).addClass('focus')\r\n $(this).parents('.carousel').addClass('contrast')\r\n })\r\n\r\n $tabs.blur(function(event) {\r\n $(this).parent().removeClass('active');\r\n// $(this).removeClass('focus')\r\n $($tablistHighlight).removeClass('focus')\r\n $(this).parents('.carousel').removeClass('contrast')\r\n })\r\n\r\n\r\n for (i = 0; i < $tabpanels.length; i++) {\r\n $tabpanel = $tabpanels[i]\r\n $tabpanel.setAttribute('role', 'tabpanel')\r\n $tabpanel.setAttribute('id', 'tabpanel-' + index + '-' + i)\r\n $tabpanel.setAttribute('aria-labelledby', 'tab-' + index + '-' + i)\r\n }\r\n\r\n for (i = 0; i < $tabs.length; i++) {\r\n $tab = $tabs[i]\r\n\r\n $tab.setAttribute('role', 'tab')\r\n $tab.setAttribute('id', 'tab-' + index + '-' + i)\r\n $tab.setAttribute('aria-controls', 'tabpanel-' + index + '-' + i)\r\n\r\n var tpId = '#tabpanel-' + index + '-' + i\r\n var caption = $this.find(tpId).find('h1').text()\r\n\r\n if ((typeof caption !== 'string') || (caption.length === 0)) caption = $this.find(tpId).text()\r\n if ((typeof caption !== 'string') || (caption.length === 0)) caption = $this.find(tpId).find('h3').text()\r\n if ((typeof caption !== 'string') || (caption.length === 0)) caption = $this.find(tpId).find('h4').text()\r\n if ((typeof caption !== 'string') || (caption.length === 0)) caption = $this.find(tpId).find('h5').text()\r\n if ((typeof caption !== 'string') || (caption.length === 0)) caption = $this.find(tpId).find('h6').text()\r\n if ((typeof caption !== 'string') || (caption.length === 0)) caption = \"no title\";\r\n\r\n// console.log(\"CAPTION: \" + caption )\r\n\r\n var tabName = document.createElement('span')\r\n tabName.setAttribute('class', 'sr-only')\r\n tabName.innerHTML='Slide ' + (i+1)\r\n if (caption) tabName.innerHTML += \": \" + caption\r\n $tab.appendChild(tabName)\r\n\r\n }\r\n\r\n // create div for focus styling of tablist\r\n $tablistHighlight = document.createElement('div')\r\n $tablistHighlight.className = 'carousel-tablist-highlight'\r\n document.body.appendChild($tablistHighlight)\r\n\r\n setTablistHighlightBox()\r\n\r\n $( window ).resize(function() {\r\n setTablistHighlightBox()\r\n })\r\n\r\n // Add space bar behavior to prev and next buttons for SR compatibility\r\n $prev.attr('aria-label', 'Previous Slide')\r\n $prev.keydown(function(e) {\r\n var k = e.which || e.keyCode\r\n if (/(13|32)/.test(k)) {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n $prev.trigger('click');\r\n }\r\n });\r\n\r\n $prev.focus(function() {\r\n $(this).parents('.carousel').addClass('contrast')\r\n })\r\n\r\n $prev.blur(function() {\r\n $(this).parents('.carousel').removeClass('contrast')\r\n })\r\n\r\n $next.attr('aria-label', 'Next Slide')\r\n $next.keydown(function(e) {\r\n var k = e.which || e.keyCode\r\n if (/(13|32)/.test(k)) {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n $next.trigger('click');\r\n }\r\n });\r\n\r\n $next.focus(function() {\r\n $(this).parents('.carousel').addClass('contrast')\r\n })\r\n\r\n $next.blur(function() {\r\n $(this).parents('.carousel').removeClass('contrast')\r\n })\r\n\r\n $('.carousel-inner a').focus(function() {\r\n $(this).parents('.carousel').addClass('contrast')\r\n })\r\n\r\n $('.carousel-inner a').blur(function() {\r\n $(this).parents('.carousel').removeClass('contrast')\r\n })\r\n\r\n $tabs.each(function () {\r\n var item = $(this)\r\n if(item.hasClass('active')) {\r\n item.attr({ 'aria-selected': 'true', 'tabindex' : '0' })\r\n }else{\r\n item.attr({ 'aria-selected': 'false', 'tabindex' : '-1' })\r\n }\r\n })\r\n })\r\n\r\n var slideCarousel = $.fn.carousel.Constructor.prototype.slide\r\n $.fn.carousel.Constructor.prototype.slide = function (type, next) {\r\n var $element = this.$element\r\n , $active = $element.find('[role=tabpanel].active')\r\n , $next = next || $active[type]()\r\n , $tab\r\n , $tab_count = $element.find('[role=tabpanel]').size()\r\n , $prev_side = $element.find('[data-slide=\"prev\"]')\r\n , $next_side = $element.find('[data-slide=\"next\"]')\r\n , $index = 0\r\n , $prev_index = $tab_count -1\r\n , $next_index = 1\r\n , $id\r\n\r\n if ($next && $next.attr('id')) {\r\n $id = $next.attr('id')\r\n $index = $id.lastIndexOf(\"-\")\r\n if ($index >= 0) $index = parseInt($id.substring($index+1), 10)\r\n\r\n $prev_index = $index - 1\r\n if ($prev_index < 1) $prev_index = $tab_count - 1\r\n\r\n $next_index = $index + 1\r\n if ($next_index >= $tab_count) $next_index = 0\r\n }\r\n\r\n $prev_side.attr('aria-label', 'Show slide ' + ($prev_index+1) + ' of ' + $tab_count)\r\n $next_side.attr('aria-label', 'Show slide ' + ($next_index+1) + ' of ' + $tab_count)\r\n\r\n\r\n slideCarousel.apply(this, arguments)\r\n\r\n $active\r\n .one('bsTransitionEnd', function () {\r\n var $tab\r\n\r\n $tab = $element.find('li[aria-controls=\"' + $active.attr('id') + '\"]')\r\n if ($tab) $tab.attr({'aria-selected':false, 'tabIndex': '-1'})\r\n\r\n $tab = $element.find('li[aria-controls=\"' + $next.attr('id') + '\"]')\r\n if ($tab) $tab.attr({'aria-selected': true, 'tabIndex': '0'})\r\n\r\n })\r\n }\r\n\r\n var $this;\r\n $.fn.carousel.Constructor.prototype.keydown = function (e) {\r\n\r\n $this = $this || $(this)\r\n if(this instanceof Node) $this = $(this)\r\n\r\n function selectTab(index) {\r\n if (index >= $tabs.length) return\r\n if (index < 0) return\r\n\r\n $carousel.carousel(index)\r\n setTimeout(function () {\r\n $tabs[index].focus()\r\n // $this.prev().focus()\r\n }, 150)\r\n }\r\n\r\n var $carousel = $(e.target).closest('.carousel')\r\n , $tabs = $carousel.find('[role=tab]')\r\n , k = e.which || e.keyCode\r\n , index\r\n\r\n if (!/(37|38|39|40)/.test(k)) return\r\n\r\n index = $tabs.index($tabs.filter('.active'))\r\n if (k == 37 || k == 38) { // Up\r\n index--\r\n selectTab(index);\r\n }\r\n\r\n if (k == 39 || k == 40) { // Down\r\n index++\r\n selectTab(index);\r\n }\r\n\r\n e.preventDefault()\r\n e.stopPropagation()\r\n }\r\n $(document).on('keydown.carousel.data-api', 'li[role=tab]', $.fn.carousel.Constructor.prototype.keydown);\r\n\r\n\r\n })(jQuery);","function GetLanguage(useParent) {\r\n var userLanguage = \"en-US\";\r\n\r\n var cookie = getCookie(\"layout\");\r\n var cookies = cookie.split(\"&\");\r\n for (var i = 0; i < cookies.length; i++) {\r\n var dateIndex = cookies[i].indexOf(\"userLanguage=\");\r\n if (dateIndex > -1) {\r\n userLanguage = cookies[i].substring(13);\r\n break;\r\n }\r\n }\r\n\r\n if (useParent) {\r\n var indexOfDash = userLanguage.indexOf('-');\r\n if (indexOfDash > -1) {\r\n userLanguage = userLanguage.substring(0, indexOfDash);\r\n }\r\n }\r\n\r\n return userLanguage;\r\n}\r\n\r\nfunction GetUserDateFormat(originalCase) {\r\n var userDateFormat = \"MM/DD/YYYY\";\r\n\r\n var cookie = getCookie(\"layout\");\r\n var cookies = cookie.split(\"&\");\r\n for (var i = 0; i < cookies.length; i++) {\r\n var dateIndex = cookies[i].indexOf(\"userDateFormat=\");\r\n if (dateIndex > -1) {\r\n if (originalCase)\r\n userDateFormat = cookies[i].substring(15);\r\n else\r\n userDateFormat = cookies[i].substring(15).toUpperCase();\r\n break;\r\n }\r\n }\r\n\r\n return userDateFormat;\r\n}\r\n\r\nfunction GetUserDateTimeFormat () {\r\n var userDateFormat = \"MM/DD/YYYY\";\r\n var userTimeFormat = \"hh:mm A\";\r\n\r\n var cookie = getCookie(\"layout\");\r\n var cookies = cookie.split(\"&\");\r\n for (var i = 0; i < cookies.length; i++) {\r\n var dateIndex = cookies[i].indexOf(\"userDateFormat=\");\r\n var timeIndex = cookies[i].indexOf(\"userTimeFormat=\");\r\n\r\n if (dateIndex > -1) {\r\n userDateFormat = cookies[i].substring(15).toUpperCase();\r\n }\r\n\r\n if (timeIndex > -1) {\r\n userTimeFormat = cookies[i].substring(15);\r\n userTimeFormat = userTimeFormat.replace(\"tt\", \"A\");\r\n }\r\n }\r\n\r\n return userDateFormat + \" \" + userTimeFormat;\r\n}\r\n\r\nfunction GetUserTimeZone() {\r\n var userTimeZone = \"America/New_York\";\r\n\r\n var cookie = getCookie(\"layout\");\r\n var cookies = cookie.split(\"&\");\r\n for (var i = 0; i < cookies.length; i++) {\r\n var dateIndex = cookies[i].indexOf(\"userTimeZone=\");\r\n if (dateIndex > -1) {\r\n userTimeZone = cookies[i].substring(13);\r\n break;\r\n }\r\n }\r\n\r\n return userTimeZone;\r\n}\r\n\r\nfunction GetTimeFormat() {\r\n return Show24Hours() ? \"HH:mm\" : \"hh:mm A\";\r\n}\r\n\r\nfunction Show24Hours() {\r\n var show24Hours = true;\r\n var cookie = getCookie(\"layout\");\r\n var cookies = cookie.split(\"&\");\r\n\r\n for (var i = 0; i < cookies.length; i++) {\r\n var timeIndex = cookies[i].indexOf(\"userTimeFormat=\");\r\n \r\n if (timeIndex > -1) {\r\n var userTimeFormat = cookies[i].substring(15);\r\n if (userTimeFormat.indexOf(\"tt\") > -1)\r\n show24Hours = false;\r\n }\r\n }\r\n\r\n return show24Hours;\r\n}\r\n\r\nfunction getCookie(cname) {\r\n var name = cname + \"=\";\r\n var decodedCookie = decodeURIComponent(document.cookie);\r\n var ca = decodedCookie.split(';');\r\n for (var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) == ' ') {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) == 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return \"\";\r\n}\r\n\r\nfunction ConvertFromUtcToLocalDateTimeFromNow(utcDateTime) {\r\n try {\r\n var justNow = \"Just Now\";\r\n\r\n var userTimeZone = GetUserTimeZone();\r\n var localDateTimeFromNow = moment.utc(utcDateTime).tz(userTimeZone).fromNow();\r\n\r\n if (localDateTimeFromNow.indexOf(justNow) > -1)\r\n localDateTimeFromNow = moment.utc(utcDateTime).tz(userTimeZone).fromNow(true);\r\n\r\n return localDateTimeFromNow;\r\n } catch (e) {\r\n console.log(e);\r\n\r\n return utcDateTime;\r\n }\r\n}\r\n\r\nfunction ConvertFromUtcToLocalDateWithUserFormat(utcDateTime) {\r\n try {\r\n var userTimeZone = GetUserTimeZone();\r\n var localDate = moment.utc(utcDateTime).tz(userTimeZone).toDate();\r\n var userdateFormat = GetUserDateFormat();\r\n\r\n return formatDateTime(localDate, userdateFormat);\r\n } catch (e) {\r\n console.log(e);\r\n\r\n return utcDateTime;\r\n }\r\n}\r\n\r\nfunction formatDateTime(dateTime, dateTimeFormat) {\r\n return moment(dateTime).format(dateTimeFormat);\r\n}","var EnsembleVideo = EnsembleVideo || {};\r\nEnsembleVideo.Quiz = EnsembleVideo.Quiz || {};\r\n\r\n(function ($) {\r\n 'use strict';\r\n EnsembleVideo.Quiz.Results = (function () {\r\n var globalization = {\r\n dateTimeFormat: '',\r\n language: '',\r\n timeZone: ''\r\n },\r\n questions = {\r\n breadcrumbDom: null,\r\n reportWrapperDom: null,\r\n reportLoaderDom: null,\r\n reportErrorDom: null,\r\n focus: function () {\r\n $('html, body').animate({\r\n scrollTop: $(questions.breadcrumbDom).offset().top-60\r\n }, 1000);\r\n },\r\n showLoader: function () {\r\n $(questions.reportWrapperDom).empty();\r\n $(questions.reportErrorDom).hide();\r\n $(questions.reportLoaderDom).show();\r\n },\r\n hideLoader: function () {\r\n $(questions.reportLoaderDom).hide();\r\n },\r\n showError: function () {\r\n $(questions.reportWrapperDom).hide();\r\n $(questions.reportLoaderDom).hide();\r\n $(questions.reportErrorDom).show();\r\n },\r\n overview: {\r\n tmplOverviewDom: null,\r\n title: 'Results by Questions',\r\n createBreadcrumb: function (focus) {\r\n $(questions.breadcrumbDom)\r\n .html('
  • ' + this.title + '
  • ');\r\n\t\t\t\t\t if (focus) \r\n questions.focus();\r\n },\r\n generate: function (focus) {\r\n $.ajax({\r\n url: '/hapi/v1/Contents/' + contentId + '/Quizzes/' + quizKey + '/questions/results',\r\n context: this,\r\n success: function (data) {\r\n $.tmpl(this.tmplOverviewDom, data).appendTo(questions.reportWrapperDom);\r\n var grid = $(questions.reportWrapperDom).find('#overview_question_table')\r\n .bootgrid({\r\n columnSelection: false,\r\n caseSensitive: false,\r\n labels: {\r\n all: \"All\",\r\n infos: \"Showing {{ctx.start}} to {{ctx.end}} of {{ctx.total}} entries\",\r\n noResults: \"No available results\",\r\n search: 'Search'\r\n },\r\n rowCount: [10, 25, 50, 100, -1],\r\n css: {\r\n pagination: 'pagination pagerCustom'\r\n },\r\n formatters: {\r\n \"details\": function (column, row) {\r\n return ' ';\r\n }\r\n },\r\n downloadSettings: {\r\n dropdownSettings: {\r\n icon: 'glyphicon-save-file',\r\n title: 'Download Results',\r\n links: [\r\n {\r\n icon: 'fa fa-file-pdf-o text-dark5',\r\n text: 'PDF',\r\n url: '/hapi/v1/Contents/' + contentId + '/Quizzes/' + quizKey + '/questions/results/download.pdf'\r\n },\r\n {\r\n icon: 'fa fa-file-pdf-o text-dark5',\r\n text: 'PDF (details included)',\r\n url: '/hapi/v1/Contents/' + contentId + '/Quizzes/' + quizKey + '/questions/results/download.pdf?includeDetails=true'\r\n },\r\n {\r\n icon: 'fa fa-file-excel-o text-dark5',\r\n text: 'CSV',\r\n url: '/hapi/v1/Contents/' + contentId + '/Quizzes/' + quizKey + '/questions/results/download.csv'\r\n }\r\n ]\r\n }\r\n }\r\n })\r\n .on(\"loaded.rs.jquery.bootgrid\", $.proxy(function (e) {\r\n if (!(data && data.questions && data.questions.length > 0)) {\r\n $(questions.reportWrapperDom).find('.actionBar').hide();\r\n $(questions.reportWrapperDom).find('.pagerCustom').hide();\r\n }\r\n\r\n $(grid).find('.question-details')\r\n .on('click', $.proxy(this.onDetailsClick, this))\r\n .on('focusin', function () {\r\n $(this).addClass('focus');\r\n })\r\n .on('focusout', function () {\r\n $(this).removeClass('focus');\r\n });\r\n\r\n\r\n $(grid).find('.sortable')\r\n .on('focusin', function () {\r\n $(this).parent('.ev-sortable').addClass('focus');\r\n })\r\n .on('focusout', function () {\r\n $(this).parent('.ev-sortable').removeClass('focus');\r\n });\r\n\r\n questions.reportWrapperDom.show();\r\n questions.hideLoader();\r\n }, this));\r\n },\r\n type: 'GET',\r\n dataType: \"json\",\r\n beforeSend: function () {\r\n questions.overview.createBreadcrumb(focus);\r\n questions.showLoader();\r\n },\r\n error: questions.showError\r\n });\r\n },\r\n onDetailsClick: function (e) {\r\n e.preventDefault();\r\n var questionText = $(e.currentTarget).parents('tr').find('.question-text').html();\r\n questions.details.generate.call(questions.details, $(e.currentTarget).data('question-key'), questionText, true);\r\n },\r\n init: function () {\r\n this.tmplOverviewDom = $('#overviewTmpl');\r\n $(questions.breadcrumbDom)\r\n .on('click', '.back-to-question-owerview', $.proxy(this.generate, this, true))\r\n .on('focusin', '.back-to-question-owerview', function () {\r\n $(this).addClass('focus');\r\n })\r\n .on('focusout', '.back-to-question-owerview', function () {\r\n $(this).removeClass('focus');\r\n });\r\n }\r\n },\r\n details: {\r\n tmplQuestionDetailsDom: null,\r\n title: 'Results by Question',\r\n createBreadcrumb: function (questionText, focus) {\r\n $(questions.breadcrumbDom).html('
  • ' +\r\n EnsembleVideo.Quiz.Results.Trim(questionText, 50) + '
  • ').append($('
  • ').text(this.title));\r\n \t\t\t\t\t if (focus) \r\n questions.focus();\r\n },\r\n generate: function (questionKey, questionText) {\r\n $.ajax({\r\n url: '/hapi/v1/Contents/' + contentId + '/Quizzes/' + quizKey + '/Questions/' + questionKey + '/results',\r\n context: this,\r\n success: function (data) {\r\n $.tmpl(this.tmplQuestionDetailsDom, data).appendTo(questions.reportWrapperDom);\r\n\r\n var grid = $(questions.reportWrapperDom).find('#details_question_table')\r\n .bootgrid({\r\n columnSelection: false,\r\n caseSensitive: false,\r\n labels: {\r\n all: \"All\",\r\n infos: \"Showing {{ctx.start}} to {{ctx.end}} of {{ctx.total}} entries\",\r\n noResults: \"No available results\",\r\n search: 'Search'\r\n },\r\n rowCount: [10, 25, 50, 100, -1],\r\n css: {\r\n pagination: 'pagination pagerCustom'\r\n },\r\n formatters: {\r\n \"status\": function (column, row) {\r\n var isCorrect = $.trim(row.isCorrect).toLowerCase() == 'true';\r\n return '';\r\n }\r\n },\r\n converters: {\r\n datetime: {\r\n from: function (value) { return moment.utc(value).tz(globalization.timeZone); },\r\n to: function(value) { return value.format(globalization.dateTimeFormat); }\r\n }\r\n },\r\n downloadSettings: {\r\n dropdownSettings: {\r\n icon: 'glyphicon-save-file',\r\n title: 'Download Results',\r\n links: [\r\n {\r\n icon: 'fa fa-file-pdf-o text-dark5',\r\n text: 'PDF',\r\n url: '/hapi/v1/Contents/' + contentId + '/Quizzes/' + quizKey + '/Questions/' + questionKey + '/results/download.pdf'\r\n },\r\n {\r\n icon: 'fa fa-file-excel-o text-dark5',\r\n text: 'CSV',\r\n url: '/hapi/v1/Contents/' + contentId + '/Quizzes/' + quizKey + '/Questions/' + questionKey + '/results/download.csv'\r\n }\r\n ]\r\n }\r\n }\r\n })\r\n .on(\"loaded.rs.jquery.bootgrid\", function (e) {\r\n if (!(data && data.answers && data.answers.length > 0)) {\r\n $(questions.reportWrapperDom).find('.actionBar').hide();\r\n $(questions.reportWrapperDom).find('.pagerCustom').hide();\r\n }\r\n\r\n\r\n $(grid).find('.sortable')\r\n .on('focusin', function () {\r\n $(this).parent('.ev-sortable').addClass('focus');\r\n })\r\n .on('focusout', function () {\r\n $(this).parent('.ev-sortable').removeClass('focus');\r\n });\r\n\r\n questions.hideLoader();\r\n questions.reportWrapperDom.show();\r\n });\r\n },\r\n type: 'GET',\r\n dataType: \"json\",\r\n beforeSend: function () {\r\n questions.details.createBreadcrumb(questionText, focus);\r\n questions.showLoader();\r\n },\r\n error: questions.showError\r\n });\r\n },\r\n init: function () {\r\n this.tmplQuestionDetailsDom = $('#questionDetailsTmpl');\r\n }\r\n },\r\n init: function () {\r\n this.breadcrumbDom = $('ol#question_breadcrumb');\r\n this.reportWrapperDom = $('div#quiz_results_question_container');\r\n this.reportLoaderDom = $('div#quiz_results_question_loader');\r\n this.reportErrorDom = $('div#quiz_results_question_error');\r\n this.overview.init();\r\n this.details.init();\r\n }\r\n },\r\n users = {\r\n breadcrumbDom: null,\r\n reportWrapperDom: null,\r\n reportLoaderDom: null,\r\n reportErrorDom: null,\r\n showLoader: function () {\r\n $(users.reportWrapperDom).empty();\r\n $(users.reportErrorDom).hide();\r\n $(users.reportLoaderDom).show();\r\n },\r\n focus: function () {\r\n $('html, body').animate({\r\n scrollTop: $(users.breadcrumbDom).offset().top-60\r\n }, 1000);\r\n },\r\n hideLoader: function () {\r\n $(users.reportLoaderDom).hide();\r\n },\r\n showError: function () {\r\n $(users.reportWrapperDom).hide();\r\n $(users.reportLoaderDom).hide();\r\n $(users.reportErrorDom).show();\r\n },\r\n overview: {\r\n tmplOverviewDom: null,\r\n title: 'Results by Users',\r\n createBreadcrumb: function (focus) {\r\n $(users.breadcrumbDom)\r\n .html('
  • ' + this.title + '
  • ');\r\n\t\t\t\t\t\tif (focus)\r\n users.focus();\r\n },\r\n generate: function (focus) {\r\n users.details.reset();\r\n $.ajax({\r\n url: '/hapi/v1/Contents/' + contentId + '/Quizzes/' + quizKey + '/users/results',\r\n context: this,\r\n success: function (data) {\r\n $.tmpl(this.tmplOverviewDom, data).appendTo(users.reportWrapperDom);\r\n var grid = $(users.reportWrapperDom).find('#overview_user_table')\r\n .bootgrid({\r\n columnSelection: false,\r\n caseSensitive: false,\r\n labels: {\r\n all: \"All\",\r\n infos: \"Showing {{ctx.start}} to {{ctx.end}} of {{ctx.total}} entries\",\r\n noResults: \"No available results\",\r\n search: 'Search'\r\n },\r\n rowCount: [10, 25, 50, 100, -1],\r\n css: {\r\n pagination: 'pagination pagerCustom'\r\n },\r\n formatters: {\r\n \"details\": function (column, row) {\r\n return ' ';\r\n }\r\n },\r\n downloadSettings: {\r\n dropdownSettings: {\r\n icon: 'glyphicon-save-file',\r\n title: 'Download Results',\r\n links: [\r\n {\r\n icon: 'fa fa-file-pdf-o text-dark5',\r\n text: 'PDF',\r\n url: '/hapi/v1/Contents/' + contentId + '/Quizzes/' + quizKey + '/users/results/download.pdf'\r\n },\r\n {\r\n icon: 'fa fa-file-pdf-o text-dark5',\r\n text: 'PDF (details included)',\r\n url: '/hapi/v1/Contents/' + contentId + '/Quizzes/' + quizKey + '/users/results/download.pdf?includeDetails=true'\r\n },\r\n {\r\n icon: 'fa fa-file-excel-o text-dark5',\r\n text: 'CSV',\r\n url: '/hapi/v1/Contents/' + contentId + '/Quizzes/' + quizKey + '/users/results/download.csv'\r\n }\r\n ]\r\n }\r\n }\r\n })\r\n .on(\"loaded.rs.jquery.bootgrid\", $.proxy(function (e) {\r\n if (!(data && data.users && data.users.length > 0)) {\r\n $(users.reportWrapperDom).find('.actionBar').hide();\r\n $(users.reportWrapperDom).find('.pagerCustom').hide();\r\n }\r\n\r\n $(grid).find('.question-details')\r\n .on('click', $.proxy(this.onDetailsClick, this))\r\n .on('focusin', function () {\r\n $(this).addClass('focus');\r\n })\r\n .on('focusout', function () {\r\n $(this).removeClass('focus');\r\n });\r\n\r\n $(grid).find('.sortable')\r\n .on('focusin', function () {\r\n $(this).parent('.ev-sortable').addClass('focus');\r\n })\r\n .on('focusout', function () {\r\n $(this).parent('.ev-sortable').removeClass('focus');\r\n });\r\n\r\n users.reportWrapperDom.show();\r\n users.hideLoader();\r\n }, this));\r\n },\r\n type: 'GET',\r\n dataType: \"json\",\r\n beforeSend: function () {\r\n users.overview.createBreadcrumb(focus);\r\n users.showLoader();\r\n },\r\n error: users.showError\r\n });\r\n },\r\n onDetailsClick: function (e) {\r\n e.preventDefault();\r\n\r\n users.details.userId = $(e.currentTarget).data('user-key');\r\n users.details.fullName = $(e.currentTarget).parents('tr').find('.full-name-text').text();\r\n users.details.generate.call(users.details);\r\n },\r\n init: function () {\r\n this.tmplOverviewDom = $('#userOverviewTmpl');\r\n $(users.breadcrumbDom)\r\n .on('click', '.back-to-users-owerview', $.proxy(this.generate, this))\r\n .on('focusin', '.back-to-users-owerview', function () {\r\n $(this).addClass('focus');\r\n })\r\n .on('focusout', '.back-to-users-owerview', function () {\r\n $(this).removeClass('focus');\r\n });\r\n }\r\n },\r\n details: {\r\n tmplUserDetailsDom: null,\r\n attemptsTmplDom: null,\r\n customControlsPlaceHolderDom: null,\r\n userId: '',\r\n fullName: '',\r\n totalAttempts:0,\r\n filterAttempt: '-1',\r\n title: 'Results by User',\r\n createBreadcrumb: function (fullName, focus) {\r\n $(users.breadcrumbDom).html('
  • ' +\r\n EnsembleVideo.Quiz.Results.Trim(fullName, 50) + '
  • ').append($('
  • ').text(this.title));\r\n\t\t\t\t\t\tif (focus)\r\n users.focus();\r\n },\r\n createAttemptDropdown: function (totalAttempts) {\r\n if (!totalAttempts || isNaN(totalAttempts))\r\n return;\r\n\r\n if (this.filterAttempt == '-1') {\r\n this.totalAttempts = totalAttempts;\r\n }\r\n\r\n var data = {\r\n attempts: [],\r\n selected: this.filterAttempt\r\n }\r\n\r\n for (var i = 1; i <= this.totalAttempts; i++) {\r\n data.attempts.push(i);\r\n }\r\n\r\n var placeHolder = $(users.reportWrapperDom).find(this.customControlsPlaceHolderSelector);\r\n $(placeHolder).empty();\r\n $.tmpl(this.attemptsTmplDom, data).appendTo(placeHolder);\r\n },\r\n generate: function (focus) {\r\n var queryParameters = (this.filterAttempt != '-1') ? '?attempt=' + (this.filterAttempt) : '';\r\n $.ajax({\r\n url: '/hapi/v1/Contents/' + contentId + '/Quizzes/' + quizKey + '/users/' + this.userId + '/results' + queryParameters,\r\n context: this,\r\n success: function (data) {\r\n $.tmpl(this.tmplQuestionDetailsDom, data).appendTo(users.reportWrapperDom);\r\n\r\n var grid = $(users.reportWrapperDom).find('#details_user_table')\r\n .bootgrid({\r\n columnSelection: false,\r\n caseSensitive: false,\r\n labels: {\r\n all: \"All\",\r\n infos: \"Showing {{ctx.start}} to {{ctx.end}} of {{ctx.total}} entries\",\r\n noResults: \"No available results\",\r\n search: 'Search'\r\n },\r\n rowCount: [10, 25, 50, 100, -1],\r\n css: {\r\n pagination: 'pagination pagerCustom'\r\n },\r\n formatters: {\r\n \"status\": function (column, row) {\r\n var isCorrect = $.trim(row.isCorrect).toLowerCase() == 'true';\r\n return '';\r\n }\r\n },\r\n converters: {\r\n datetime: {\r\n from: function (value) { return moment.utc(value).tz(globalization.timeZone); },\r\n to: function(value) { return value.format(globalization.dateTimeFormat); }\r\n }\r\n },\r\n downloadSettings: {\r\n dropdownSettings: {\r\n icon: 'glyphicon-save-file',\r\n title: 'Download Results',\r\n links: [\r\n {\r\n icon: 'fa fa-file-pdf-o text-dark5',\r\n text: 'PDF',\r\n url: '/hapi/v1/Contents/' + contentId + '/Quizzes/' + quizKey + '/users/' + this.userId + '/results/download.pdf' + queryParameters\r\n },\r\n {\r\n icon: 'fa fa-file-excel-o text-dark5',\r\n text: 'CSV',\r\n url: '/hapi/v1/Contents/' + contentId + '/Quizzes/' + quizKey + '/users/' + this.userId + '/results/download.csv' + queryParameters\r\n }\r\n ]\r\n }\r\n }\r\n })\r\n .on(\"loaded.rs.jquery.bootgrid\", $.proxy(function (e) {\r\n if (data && data.attempts && data.attempts.length > 0) {\r\n this.createAttemptDropdown(data.attempts.length);\r\n } else {\r\n $(users.reportWrapperDom).find('.actionBar').hide();\r\n $(users.reportWrapperDom).find('.pagerCustom').hide();\r\n }\r\n\r\n $(grid).find('.sortable')\r\n .on('focusin', function () {\r\n $(this).parent('.ev-sortable').addClass('focus');\r\n })\r\n .on('focusout', function () {\r\n $(this).parent('.ev-sortable').removeClass('focus');\r\n });\r\n\r\n users.hideLoader();\r\n users.reportWrapperDom.show();\r\n }, this));\r\n },\r\n type: 'GET',\r\n dataType: \"json\",\r\n beforeSend: function () {\r\n this.createBreadcrumb(this.fullName, focus);\r\n users.showLoader();\r\n },\r\n error: this.showError\r\n });\r\n },\r\n reset: function () {\r\n this.userId = '';\r\n this.fullName = '';\r\n this.filterAttempt = '-1';\r\n },\r\n init: function () {\r\n this.tmplQuestionDetailsDom = $('#userDetailsTmpl');\r\n this.attemptsTmplDom = $('#attemptsTmpl');\r\n this.customControlsPlaceHolderSelector = '.custom-controls';\r\n\r\n $(users.reportWrapperDom).on('click', '.attempt-dropdown-item-button', $.proxy(function (e) {\r\n this.filterAttempt = $(e.currentTarget).data('value');\r\n this.generate();\r\n e.preventDefault();\r\n }, this));\r\n }\r\n },\r\n\r\n init: function () {\r\n this.breadcrumbDom = $('ol#user_breadcrumb');\r\n this.reportWrapperDom = $('div#quiz_results_user_container');\r\n this.reportLoaderDom = $('div#quiz_results_user_loader');\r\n this.reportErrorDom = $('div#quiz_results_user_error');\r\n\r\n this.overview.init();\r\n this.details.init();\r\n }\r\n },\r\n deleteResults = {\r\n deleteResultsDom: null,\r\n\r\n confirmDeleteResults: function (e) {\r\n this.configConfirmModalForDeleteResults();\r\n this.bodyContentDom.empty().append(this.messages.modalMessageForDeleteResults);\r\n this.confirmModalDom.modal('show');\r\n },\r\n configConfirmModalForDeleteResults: function () {\r\n var self = this;\r\n\r\n this.confirmModalDom.on('show.bs.modal', function (e) {\r\n $(this).find('.btn-ok').off().on('click', function () {\r\n self.deleteQuizResults();\r\n self.confirmModalDom.modal('hide');\r\n });\r\n });\r\n },\r\n deleteQuizResults: function (e) {\r\n jQuery.ajax({\r\n beforeSend: function () {\r\n \r\n },\r\n complete: function () {\r\n },\r\n cache: false,\r\n url: '/hapi/v1/Bulk/Quizzes/DeleteResults',\r\n type: 'DELETE',\r\n dataType: 'json',\r\n data: {\r\n quizKeys: quizKey\r\n },\r\n success: jQuery.proxy(function (response) {\r\n EnsembleVideo.Quiz.Results.Questions.overview.generate();\r\n EnsembleVideo.Quiz.Results.Users.overview.generate();\r\n },\r\n this),\r\n error: jQuery.proxy(function (response) {\r\n },\r\n this)\r\n });\r\n\r\n },\r\n messages: {\r\n modalMessageForDeleteResults: 'Are you sure you want to delete quiz results?'\r\n },\r\n init: function () {\r\n this.deleteResultsDom = $('a#deleteResults');\r\n this.confirmModalDom = $('#confirmModal');\r\n this.bodyContentDom = $('.bodyContent');\r\n\r\n \r\n this.deleteResultsDom.on('click', this.confirmDeleteResults.bind(this));\r\n }\r\n },\r\n contentId,\r\n quizKey,\r\n percentage = function (totalAnswered, correctAnswered) {\r\n if (totalAnswered == 0)\r\n return 0;\r\n\r\n return Math.floor((correctAnswered / totalAnswered) * 100);\r\n },\r\n trim = function (textToTrim, numberOfChars) {\r\n if (textToTrim == null)\r\n return '';\r\n textToTrim = $.trim(textToTrim);\r\n return textToTrim.length > numberOfChars ? textToTrim.substring(0, numberOfChars) + '...' : textToTrim;\r\n },\r\n init = function () {\r\n $.ajax({\r\n cache: false\r\n });\r\n \r\n questions.init();\r\n users.init();\r\n deleteResults.init();\r\n\r\n contentId = $(questions.reportWrapperDom).data('content-id');\r\n quizKey = $(questions.reportWrapperDom).data('quiz-key');\r\n\r\n\r\n globalization.dateTimeFormat = GetUserDateTimeFormat();\r\n globalization.language = GetLanguage();\r\n globalization.timeZone = GetUserTimeZone();\r\n\r\n moment.locale(globalization.language);\r\n moment.tz.setDefault(globalization.timeZone);\r\n\r\n questions.overview.generate();\r\n users.overview.generate();\r\n };\r\n\r\n return {\r\n Init: init,\r\n Percentage: percentage,\r\n Trim: trim,\r\n Questions: questions,\r\n Users: users\r\n };\r\n\r\n })();\r\n\r\n $(document).ready(EnsembleVideo.Quiz.Results.Init);\r\n}(jQuery));\r\n\r\n\r\n"],"names":["adminUtilitiesInstance","adminUtilities","Class","create","confirmDeleteSelector","selectAllOnClickElementSelector","confirmInModalWindowOnDeleteContainerID","confirmDynamicContentID","infoTriggerSelector","infoTriggerInputGroupSelector","tooltipTriggerSelector","redirectButtonSelector","refreshPageSelector","refreshPageWithQueryStringSelector","reloadOnEnterSelector","reloadOnClickSelector","saveButtonSelector","cancelButtonSelector","videoTabClass","videoTabSelector","goBackSelector","videoTabSelectedClass","setFocusSelector","adminMenuSelector","hideObserver","confirmYesButtonID","confirmNoButtonID","confirmMessage","noneSelected","noneResults","triggerElement","contentStateSelector","InstitutionsSelector","OrganizationsSelector","reSubmitJobSelector","btnRecordAction","btnRtspLiveAction","btnRtspCaptureAction","btnProcessingButtonFormat","thumbnailImageID","shouldNotUpdateContentStatusRegEx","RegExp","convertingContentStatusRegEx","failedContentStatusRegEx","readyContentStatusRegEx","confirmMessageTemplate","Template","apiUrl","hapiUrl","initialize","statusMessageContainer","$$","this","AdjustPageDim","$","empty","hide","invoke","ConfirmDelete","bind","ShowInfo","ShowInfoFromGroup","RedirectPage","ReloadPageOnEnter","GoBack","ReloadPageOnClick","ReloadPageWithQueryStringOnClick","LiveStreamRecordAction","LiveStreamRtspAction","LiveCaptureRtspAction","adminMenu","length","observe","currentLocation","location","pathname","gsub","toLowerCase","isReport","indexOf","i","options","isReportingIndex","value","include","isOtherIndex","selectedIndex","each","e","readAttribute","href","removeClassName","addClassName","ActivateField","ObserveSelectAllOnClick","SetupContentStateUpdate","SetupShortcuts","UpdateContentState","SetupConfirmation","update","evaluate","confirmMessageText","activate","$break","event","Event","element","select","newUrl","$F","type","keyCode","KEY_RETURN","url","referanceElement","undefined","stop","refreshUrl","search","stripFromQuery","queryString","$H","toQueryParams","unset","toQueryString","nodeName","up","ConfigConfirmModal","ConfigConfirmModalCustom","jQuery","append","innerHTML","modal","confirm","on","find","submitConfirm","ClearAndHideConfirmModal","saveButton","GetElement","cancelButton","shortcut","add","click","infoElement","parentNode","SetAndShowInfoModal","outerHTML","infoModalContent","show","cssSelector","FindPosY","obj","curtop","offsetParent","offsetTop","y","GetViewportHeight","viewportwidth","viewportheight","window","innerWidth","innerHeight","document","documentElement","clientWidth","clientHeight","getElementsByTagName","ResubmitJob","contentStateContainer","contentID","app","Old_App_Code","DataAccess","RescheduleContentTranscoding","contentState","SetContentState","PeriodicalExecuter","pe","ContentState","state","ReadableStatus","match","replace","writeAttribute","ThumbnailImageUrl","message","Message","reload","CssClass","history","go","streamId","btnParentContainer","itemRowContainer","stopRecButton","startRecButton","itemInfoContainer","itemThumbnailContent","liveIcon","itemStateControl","viewersCountControl","onAirThumbnail","offAirThumbnail","isRecording","hasClassName","getValue","processingOverlay","self","request","Ajax","Request","method","onCreate","response","setStyle","display","onSuccess","actionResult","responseText","evalJSON","success","status","TranslateStreamingStatusMessage","onFailure","startStreamButton","stopStreamButton","all_shortcuts","shortcut_combination","callback","opt","default_options","propagate","disable_in_input","target","keycode","dfo","ele","getElementById","ths","func","srcElement","nodeType","tagName","code","which","character","String","fromCharCode","keys","split","kp","shift_nums","`","1","2","3","4","5","6","7","8","9","0","-","=",";","'",",",".","/","\\","special_keys","esc","escape","tab","space","return","enter","backspace","scrolllock","scroll_lock","scroll","capslock","caps_lock","caps","numlock","num_lock","num","pause","break","insert","home","delete","end","pageup","page_up","pu","pagedown","page_down","pd","left","right","down","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","modifiers","shift","wanted","pressed","ctrl","alt","meta","ctrlKey","shiftKey","altKey","metaKey","k","cancelBubble","returnValue","stopPropagation","preventDefault","addEventListener","attachEvent","remove","binding","detachEvent","removeEventListener"],"mappings":"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"}