Proyectos de Subversion Moodle

Rev

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 GNU 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').show();\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            barrow.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                    barrow.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]', viewActivity);\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,EAAEM,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,KAC9D5B,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"}