{"version":3,"file":"oneline.min.js","sources":["https:\/\/udearroba.udea.edu.co\/externos\/course\/format\/onetopic\/amd\/src\/oneline.js"],"sourcesContent":["\/\/ This file is part of Moodle - http:\/\/moodle.org\/\n\/\/\n\/\/ Moodle is free software: you can redistribute it and\/or modify\n\/\/ it under the terms of the GNU General Public License as published by\n\/\/ the Free Software Foundation, either version 3 of the License, or\n\/\/ (at your option) any later version.\n\/\/\n\/\/ Moodle is distributed in the hope that it will be useful,\n\/\/ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\/\/ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\/\/ GNU General Public License for more details.\n\/\/\n\/\/ You should have received a copy of the GNU General Public License\n\/\/ along with Moodle. If not, see .\n\n\/*\n * @package format_onetopic\n * @copyright 2021 David Herney Bernal - cirano\n * @license http:\/\/www.gnu.org\/copyleft\/gpl.html GNU GPL v3 or later\n *\/\nimport $ from 'jquery';\n\n\/**\n * Load tabs in a single line, with scroll if it is required.\n *\n * @method load\n * @param {object} icons A list of usable icons: left arrow, right arrow.\n *\/\n export const load = (icons) => {\n\n $('.format-onetopic .onelinetabs .tabs-wrapper').each(function() {\n\n var $container = $(this);\n\n var $menu = $container.find('> ul.nav.nav-tabs');\n\n var itemsLength = $menu.find('> li.nav-item').length;\n var itemSize = $menu.find('> li.nav-item').outerWidth(true);\n\n \/\/ Duration of scroll animation.\n var scrollDuration = 300;\n\n \/\/ Get some relevant size for the paddle triggering point.\n var paddleMargin = 20;\n\n var $leftarrow = $('' + icons.left + '<\/button>');\n var $rightarrow = $('' + icons.right + '<\/button>');\n\n $container.append($leftarrow);\n $container.append($rightarrow);\n\n \/\/ Get total width of all menu items.\n var getMenuSize = function() {\n return itemsLength * itemSize;\n };\n\n \/\/ Get how much have we scrolled to the left.\n var getMenuPosition = function() {\n return $menu.scrollLeft();\n };\n\n \/\/ Get wrapper width.\n var getMenuWrapperSize = function() {\n return $container.width();\n };\n\n \/\/ Get wrapper padding.\n var getMenuWrapperPadding = function() {\n return $container.outerWidth() - $container.width();\n };\n\n \/\/ Check if has scoll.\n var hasScroll = function() {\n return $menu.get(0).scrollWidth > $menu.get(0).clientWidth;\n };\n\n var getInvisibleSize = function() {\n return menuSize - getMenuPosition() - menuWrapperSize;\n };\n\n var getMaxScrollLeft = function() {\n return $menu.get(0).scrollWidth - $menu.get(0).clientWidth;\/\/ - menuWrapperSize;\n };\n\n if (hasScroll()) {\n $container.addClass('hasscroll');\n }\n\n var menuWrapperSize = getMenuWrapperSize();\n var wrapPadding = getMenuWrapperPadding();\n\n var menuSize = getMenuSize();\n\n \/\/ Get how much of menu is invisible.\n var menuInvisibleSize = getInvisibleSize();\n\n \/\/ The wrapper is responsive.\n $(window).on('resize', function() {\n menuWrapperSize = getMenuWrapperSize();\n menuSize = getMenuSize();\n calcArrowVisible();\n });\n\n var calcArrowVisible = function() {\n \/\/ Get how much have we scrolled so far.\n var menuPosition = getMenuPosition();\n\n \/\/ Get how much of menu is invisible.\n menuInvisibleSize = getInvisibleSize();\n\n var maxScrollLeft = getMaxScrollLeft();\n\n var menuEndOffset = menuInvisibleSize - paddleMargin;\n\n \/\/ Show & hide the paddles depending on scroll position.\n if (!hasScroll()) {\n $leftarrow.addClass('hidden');\n $rightarrow.addClass('hidden');\n $container.removeClass('hasscroll');\n } else {\n $container.addClass('hasscroll');\n if (menuPosition <= paddleMargin) {\n $leftarrow.addClass('hidden');\n $rightarrow.removeClass('hidden');\n } else if (menuPosition < maxScrollLeft) {\n \/\/ Show both paddles in the middle.\n $leftarrow.removeClass('hidden');\n $rightarrow.removeClass('hidden');\n } else if (menuPosition >= menuEndOffset) {\n $leftarrow.removeClass('hidden');\n $rightarrow.addClass('hidden');\n }\n }\n };\n\n \/\/ Finally, what happens when we are actually scrolling the menu.\n $menu.on('scroll', function() {\n calcArrowVisible();\n });\n\n \/\/ Scroll to left.\n $rightarrow.on('click', function(event) {\n event.preventDefault();\n var newX = getMenuPosition() + (menuWrapperSize * 0.8);\n $menu.animate({scrollLeft: newX}, scrollDuration);\n });\n\n \/\/ Scroll to right.\n $leftarrow.on('click', function(event) {\n event.preventDefault();\n var newX = getMenuPosition() - (menuWrapperSize * 0.8);\n $menu.animate({scrollLeft: newX}, scrollDuration);\n });\n\n \/\/ Change position to see the active tab.\n var $active = $container.find('.nav-link.active');\n if ($active.length > 0) {\n var newX = $active.position().left - (wrapPadding \/ 2);\n $menu.animate({scrollLeft: newX}, scrollDuration);\n }\n\n calcArrowVisible();\n });\n};\n"],"names":["icons","each","$container","this","$menu","find","itemsLength","length","itemSize","outerWidth","$leftarrow","left","$rightarrow","right","append","getMenuSize","getMenuPosition","scrollLeft","getMenuWrapperSize","width","hasScroll","get","scrollWidth","clientWidth","getInvisibleSize","menuSize","menuWrapperSize","addClass","wrapPadding","menuInvisibleSize","window","on","calcArrowVisible","menuPosition","maxScrollLeft","menuEndOffset","removeClass","event","preventDefault","newX","animate","$active","position"],"mappings":";;;;;wJA4BsBA,4BAEhB,+CAA+CC,MAAK,eAE9CC,YAAa,mBAAEC,MAEfC,MAAQF,WAAWG,KAAK,qBAExBC,YAAcF,MAAMC,KAAK,iBAAiBE,OAC1CC,SAAWJ,MAAMC,KAAK,iBAAiBI,YAAW,GAQlDC,YAAa,mBAAE,2CAA6CV,MAAMW,KAAO,aACzEC,aAAc,mBAAE,4CAA8CZ,MAAMa,MAAQ,aAEhFX,WAAWY,OAAOJ,YAClBR,WAAWY,OAAOF,iBAGdG,YAAc,kBACPT,YAAcE,UAIrBQ,gBAAkB,kBACXZ,MAAMa,cAIbC,mBAAqB,kBACdhB,WAAWiB,SASlBC,UAAY,kBACLhB,MAAMiB,IAAI,GAAGC,YAAclB,MAAMiB,IAAI,GAAGE,aAG\/CC,iBAAmB,kBACZC,SAAWT,kBAAoBU,iBAOtCN,aACAlB,WAAWyB,SAAS,iBAGpBD,gBAAkBR,qBAClBU,YArBO1B,WAAWO,aAAeP,WAAWiB,QAuB5CM,SAAWV,cAGXc,kBAAoBL,uCAGtBM,QAAQC,GAAG,UAAU,WACnBL,gBAAkBR,qBAClBO,SAAWV,cACXiB,0BAGAA,iBAAmB,eAEfC,aAAejB,kBAGnBa,kBAAoBL,uBAEhBU,cA7BG9B,MAAMiB,IAAI,GAAGC,YAAclB,MAAMiB,IAAI,GAAGE,YA+B3CY,cAAgBN,kBArEL,GAwEVT,aAKDlB,WAAWyB,SAAS,aAChBM,cA9EO,IA+EPvB,WAAWiB,SAAS,UACpBf,YAAYwB,YAAY,WACjBH,aAAeC,eAEtBxB,WAAW0B,YAAY,UACvBxB,YAAYwB,YAAY,WACjBH,cAAgBE,gBACvBzB,WAAW0B,YAAY,UACvBxB,YAAYe,SAAS,aAdzBjB,WAAWiB,SAAS,UACpBf,YAAYe,SAAS,UACrBzB,WAAWkC,YAAY,eAkB\/BhC,MAAM2B,GAAG,UAAU,WACfC,sBAIJpB,YAAYmB,GAAG,SAAS,SAASM,OAC7BA,MAAMC,qBACFC,KAAOvB,kBAAuC,GAAlBU,gBAChCtB,MAAMoC,QAAQ,CAACvB,WAAYsB,MAxGV,QA4GrB7B,WAAWqB,GAAG,SAAS,SAASM,OAC5BA,MAAMC,qBACFC,KAAOvB,kBAAuC,GAAlBU,gBAChCtB,MAAMoC,QAAQ,CAACvB,WAAYsB,MA\/GV,YAmHjBE,QAAUvC,WAAWG,KAAK,uBAC1BoC,QAAQlC,OAAS,EAAG,KAChBgC,KAAOE,QAAQC,WAAW\/B,KAAQiB,YAAc,EACpDxB,MAAMoC,QAAQ,CAACvB,WAAYsB,MAtHV,KAyHrBP"}