Autoría | Ultima modificación | Ver Log |
{"version":3,"file":"progressbar.min.js","sources":["../src/progressbar.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 <http://www.gnu.org/licenses/>.\n\n/**\n * Completion Progress block progress bar behaviour.\n *\n * @module block_completion_progress/progressbar\n * @copyright 2020 Jonathon Fowler <fowlerj@usq.edu.au>\n * @license http://www.gnu.org/copyleft/gpl.html G
NU GPL v3 or later\n */\ndefine(['jquery', 'core/pubsub', 'core/utils'],\n function($, PubSub, Utils) {\n /**\n * Show progress event information for a cell.\n * @param {Event} event\n */\n function showInfo(event) {\n var cell = $(this);\n var container = cell.closest('.block_completion_progress .barContainer');\n var visibleinfo = container.siblings('.progressEventInfo:visible');\n var infotoshow = container.siblings('#' + cell.data('infoRef'));\n\n if (!visibleinfo.is(infotoshow)) {\n visibleinfo.hide();\n infotoshow.show();\n }\n\n event.preventDefault();\n }\n\n /**\n * Show all progress event information (for accessibility).\n * @param {Event} event\n */\n function showAllInfo(event) {\n var initialinfo = $(this).closest('.progressEventInfo');\n\n initialinfo.siblings('.progressEventInfo').s
how();\n initialinfo.hide();\n\n event.preventDefault();\n }\n\n /**\n * Navigate to a cell's activity location.\n */\n function viewActivity() {\n var cell = $(this);\n var container = cell.closest('.block_completion_progress .barContainer');\n var infotoshow = container.siblings('#' + cell.data('infoRef'));\n var infolink = infotoshow.find('a.action_link');\n if (infolink.prop('onclick') !== null) {\n infolink.click();\n } else {\n document.location = infolink.prop('href');\n }\n }\n\n /**\n * Scroll the bar corresponding to the arrow clicked.\n * @param {Event} event\n */\n function scrollContainer(event) {\n var barrow = $(this).closest('.block_completion_progress .barContainer').find('.barRow');\n var amount = event.data * barrow.prop('scrollWidth') * 0.15;\n\n ba
rrow.prop('scrollLeft', barrow.prop('scrollLeft') + amount);\n\n event.preventDefault();\n }\n\n /**\n * Show or hide the scroll arrows based on the visible position.\n */\n function checkArrows() {\n var barrow = $(this);\n var barcontainer = barrow.closest('.block_completion_progress .barContainer');\n var leftarrow = barcontainer.find('.left-arrow-svg');\n var rightarrow = barcontainer.find('.right-arrow-svg');\n var scrolled = barrow.prop('scrollLeft');\n var scrollWidth = barrow.prop('scrollWidth') - barrow.prop('offsetWidth');\n var threshold = Math.floor(barrow.find('.progressBarCell:first-child').width() * 0.25);\n\n if (document.dir === 'rtl') {\n scrolled = -scrolled;\n\n if (scrolled > threshold) {\n rightarrow.css('display', 'block');\n } else {\n rightarrow.css('display', 'none');
\n }\n if (scrollWidth > threshold && scrolled < scrollWidth - threshold) {\n leftarrow.css('display', 'block');\n } else {\n leftarrow.css('display', 'none');\n }\n } else {\n if (scrolled > threshold) {\n leftarrow.css('display', 'block');\n } else {\n leftarrow.css('display', 'none');\n }\n if (scrollWidth > threshold && scrolled < scrollWidth - threshold) {\n rightarrow.css('display', 'block');\n } else {\n rightarrow.css('display', 'none');\n }\n }\n }\n\n /**\n * Prepare scroll mode behaviour.\n * @param {jQuery} barcontainers there could be many nodes here in overview mode\n */\n function setupScroll(barcontainers) {\n var barrows = barcontainers.find('.barRow');\n\
n /**\n * Check arrow visibility for each of the bar rows.\n */\n function checkEachBar() {\n barrows.each(checkArrows);\n }\n\n barrows.scroll(checkArrows);\n $(window).resize(checkEachBar);\n PubSub.subscribe('nav-drawer-toggle-end', checkEachBar); // Boost ≤3.11.\n $(document).on('theme_boost/drawers:shown theme_boost/drawers:hidden',\n Utils.debounce(checkEachBar, 250)); // Boost ≥4.0.\n\n // On page load, place the 'now' marker in the centre of the scrolled bar\n // and adjust which arrows should be visible.\n $(function() {\n var nowicons = barcontainers.find('.nowicon');\n nowicons.each(function() {\n var nowicon = $(this);\n var barrow = nowicon.closest('.block_completion_progress .barRow');\n\n barrow.prop('scrollLeft', 0);\n barr
ow.prop('scrollLeft', nowicon.offset().left - barrow.offset().left -\n barrow.width() / 2);\n });\n\n barrows.each(checkArrows);\n });\n\n barcontainers.on('click', '.left-arrow-svg', -1, scrollContainer);\n barcontainers.on('click', '.right-arrow-svg', 1, scrollContainer);\n }\n\n /**\n * Set up event handlers for a particular progress bar instance.\n * @param {integer} instanceid the bar instance id\n */\n function initialiseBar(instanceid) {\n var barcontainers = $('.block_completion_progress ' +\n '.barContainer[data-instanceid=\"' + instanceid + '\"]');\n\n // Show information elements on hover or tap.\n barcontainers.on('touchstart mouseover', '.progressBarCell', showInfo);\n\n // Navigate to the activity when its cell is clicked.\n barcontainers.on('click', '.progressBarCell[data-haslink=true]', viewActi
vity);\n\n // Show all information elements when the 'show all' link is clicked.\n barcontainers.siblings('.progressEventInfo').find('.progressShowAllInfo').click(showAllInfo);\n\n setupScroll(barcontainers);\n }\n\n return /** @alias module:block_completion_progress/progressbar */ {\n /**\n * Initialise progress bar instances.\n * @param {array} instanceids an array of progress bar instance ids\n */\n init: function(instanceids) {\n for (var i = instanceids.length - 1; i >= 0; i--) {\n initialiseBar(instanceids[i]);\n }\n },\n };\n });\n"],"names":["define","$","PubSub","Utils","showInfo","event","cell","this","container","closest","visibleinfo","siblings","infotoshow","data","is","hide","show","preventDefault","showAllInfo","initialinfo","viewActivity","infolink","find","prop","click","document","location","scrollContainer","barrow","
amount","checkArrows","barcontainer","leftarrow","rightarrow","scrolled","scrollWidth","threshold","Math","floor","width","dir","css","initialiseBar","instanceid","barcontainers","on","barrows","checkEachBar","each","scroll","window","resize","subscribe","debounce","nowicon","offset","left","setupScroll","init","instanceids","i","length"],"mappings":";;;;;;;AAsBAA,+CAAO,CAAC,SAAU,cAAe,eAC7B,SAASC,EAAGC,OAAQC,gBAKPC,SAASC,WACVC,KAAOL,EAAEM,MACTC,UAAYF,KAAKG,QAAQ,4CACzBC,YAAcF,UAAUG,SAAS,8BACjCC,WAAaJ,UAAUG,SAAS,IAAML,KAAKO,KAAK,YAE/CH,YAAYI,GAAGF,cAChBF,YAAYK,OACZH,WAAWI,QAGfX,MAAMY,0BAODC,YAAYb,WACbc,YAAclB,EAAEM,MAAME,QAAQ,sBAElCU,YAAYR,SAAS,sBAAsBK,OAC3CG,YAAYJ,OAEZV,MAAMY,0BAMDG,mBACDd,KAAOL,EAAEM,MAGTc,SAFYf,KAAKG,QAAQ,4CACFE,SAAS,IAAML,KAAKO,KAAK,YAC1BS,KAAK,iBACE,OAA7BD,SAASE,KAAK,WACdF,SAASG,QAETC,SAASC,SAAWL,SAASE,KAAK,iBAQjCI,gBAAgBtB,WACjBuB,OAAS3B,EAAEM,MAAME,QAAQ,4CAA4Ca,KAAK,WAC1EO,OAASxB,MAAMQ,KAAOe,OAAOL,KAAK,eAAiB,IAEvDK,OAAOL,KAAK,aAAcK,OAAOL,KAAK,cAAgBM,QAEtDxB,MAAMY,0BAMDa,kBACDF,OAAS3B,EA
AEM,MACXwB,aAAeH,OAAOnB,QAAQ,4CAC9BuB,UAAYD,aAAaT,KAAK,mBAC9BW,WAAaF,aAAaT,KAAK,oBAC/BY,SAAWN,OAAOL,KAAK,cACvBY,YAAcP,OAAOL,KAAK,eAAiBK,OAAOL,KAAK,eACvDa,UAAYC,KAAKC,MAA4D,IAAtDV,OAAON,KAAK,gCAAgCiB,SAElD,QAAjBd,SAASe,MACTN,UAAYA,UAEGE,UACXH,WAAWQ,IAAI,UAAW,SAE1BR,WAAWQ,IAAI,UAAW,QAE1BN,YAAcC,WAAaF,SAAWC,YAAcC,UACpDJ,UAAUS,IAAI,UAAW,SAEzBT,UAAUS,IAAI,UAAW,UAGzBP,SAAWE,UACXJ,UAAUS,IAAI,UAAW,SAEzBT,UAAUS,IAAI,UAAW,QAEzBN,YAAcC,WAAaF,SAAWC,YAAcC,UACpDH,WAAWQ,IAAI,UAAW,SAE1BR,WAAWQ,IAAI,UAAW,kBAiD7BC,cAAcC,gBACfC,cAAgB3C,EAAE,6DACkB0C,WAAa,MAGrDC,cAAcC,GAAG,uBAAwB,mBAAoBzC,UAG7DwC,cAAcC,GAAG,QAAS,sCAAuCzB,cAGjEwB,cAAcjC,SAAS,sBAAsBW,KAAK,wBAAwBE,MAAMN,sBAnD/D0B,mBACbE,QAAUF,cAActB,KAAK,oBAKxByB,eACLD,QAAQE,KAAKlB,aAGjBgB,QAAQG,OAAOnB,aACf7B,EAAEiD,QAAQC,OAAOJ,cACjB7C,OAAOkD,UAAU,wBAAyBL,cAC1C9C,EAAEwB,UAAUoB,GAAG,uDACX1C,MAAMkD,SAASN,aAAc,MAIjC9C,GAAE,WACiB2C,cAActB,KAAK,YACzB0B,MAAK,eACNM,QAAUrD,EAAEM,MACZqB,OAAS0B,QAAQ7C,QAAQ,sCAE7BmB,OAAOL,KAAK,aAAc,GAC1BK,OAAOL,KAAK,aAAc+B,QAAQC,SAASC,KAAO5B,OAAO2B,SAASC,KAC
9D5B,OAAOW,QAAU,MAGzBO,QAAQE,KAAKlB,gBAGjBc,cAAcC,GAAG,QAAS,mBAAoB,EAAGlB,iBACjDiB,cAAcC,GAAG,QAAS,mBAAoB,EAAGlB,iBAoBjD8B,CAAYb,qBAGkD,CAK9Dc,KAAM,SAASC,iBACN,IAAIC,EAAID,YAAYE,OAAS,EAAGD,GAAK,EAAGA,IACzClB,cAAciB,YAAYC"}