Proyectos de Subversion Moodle

Rev

Rev 1 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

{"version":3,"file":"popover.min.js","sources":["../src/popover.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 * Javascript popover for the `core_calendar` subsystem.\n *\n * @module core_calendar/popover\n * @copyright 2021 Huong Nguyen <huongnv13@gmail.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 4.0\n */\n\nimport 'theme_boost/popover';\nimport jQuery from 'jquery';\nimport * as CalendarSelectors from 'core_calendar/selectors';\n\n/**\n * Check if we are allowing to enable the popover or not.\n * @param {Element} dateContainer\n * @returns {boolean}\n */\nconst isPopoverAvailable = (dateContainer) => {\n    return window.getComputedStyle(dateContainer.querySelector(CalendarSelectors.elements.dateContent)).display === 'none';\n};\n\nconst isPopoverConfigured = new Map();\n\nconst showPopover = target => {\n    const dateContainer = target.closest(CalendarSelectors.elements.dateContainer);\n    if (!isPopoverConfigured.has(dateContainer)) {\n        const dateEle = jQuery(target);\n        dateEle.popover({\n            trigger: 'manual',\n            placement: 'top',\n            html: true,\n            title: dateContainer.dataset.title,\n            content: () => {\n                const source = jQuery(dateContainer).find(CalendarSelectors.elements.dateContent);\n                const content = jQuery('<div>');\n                if (source.length) {\n                    const temptContent = source.find('.hidden').clone(false);\n                    content.html(temptContent.html());\n                }\n                return content.html();\n            },\n            'animation': false,\n        });\n\n        isPopoverConfigured.set(dateContainer, true);\n    }\n\n    if (isPopoverAvailable(dateContainer)) {\n        jQuery(target).popover('show');\n        target.addEventListener('mouseleave', hidePopover);\n        target.addEventListener('focusout', hidePopover);\n        // Set up the hide function to the click event type.\n        target.addEventListener('click', hidePopover);\n    }\n};\n\nconst hidePopover = e => {\n    const target = e.target;\n    const dateContainer = e.target.closest(CalendarSelectors.elements.dateContainer);\n    if (!dateContainer) {\n        return;\n    }\n    if (isPopoverConfigured.has(dateContainer)) {\n        const isTargetActive = target.contains(document.activeElement);\n        const isTargetHover = target.matches(':hover');\n\n        // Checks if a target element is clicked or pressed.\n        const isTargetClicked = document.activeElement.contains(target);\n\n        let removeListener = true;\n        if (!isTargetActive && !isTargetHover) {\n            jQuery(target).popover('hide');\n        } else if (isTargetClicked) {\n            jQuery(document.activeElement).popover('hide');\n        } else {\n            removeListener = false;\n        }\n\n        if (removeListener) {\n            target.removeEventListener('mouseleave', hidePopover);\n            target.removeEventListener('focusout', hidePopover);\n            target.removeEventListener('click', hidePopover);\n        }\n    }\n};\n\n/**\n * Register events for date container.\n */\nconst registerEventListeners = () => {\n    const showPopoverHandler = (e) => {\n        const dayLink = e.target.closest(CalendarSelectors.links.dayLink);\n        if (!dayLink) {\n            return;\n        }\n\n        e.preventDefault();\n        showPopover(dayLink);\n    };\n\n    document.addEventListener('mouseover', showPopoverHandler);\n    document.addEventListener('focusin', showPopoverHandler);\n};\n\nlet listenersRegistered = false;\nif (!listenersRegistered) {\n    registerEventListeners();\n    listenersRegistered = true;\n}\n"],"names":["isPopoverConfigured","Map","showPopover","target","dateContainer","closest","CalendarSelectors","elements","has","popover","trigger","placement","html","title","dataset","content","source","find","dateContent","length","temptContent","clone","set","window","getComputedStyle","querySelector","display","isPopoverAvailable","addEventListener","hidePopover","e","isTargetActive","contains","document","activeElement","isTargetHover","matches","isTargetClicked","removeListener","removeEventListener","listenersRegistered","showPopoverHandler","dayLink","links","preventDefault","registerEventListeners"],"mappings":";;;;;;;;wgCAqCMA,oBAAsB,IAAIC,IAE1BC,YAAcC,eACVC,cAAgBD,OAAOE,QAAQC,kBAAkBC,SAASH,mBAC3DJ,oBAAoBQ,IAAIJ,eAAgB,EACzB,mBAAOD,QACfM,QAAQ,CACZC,QAAS,SACTC,UAAW,MACXC,MAAM,EACNC,MAAOT,cAAcU,QAAQD,MAC7BE,QAAS,WACCC,QAAS,mBAAOZ,eAAea,KAAKX,kBAAkBC,SAASW,aAC/DH,SAAU,mBAAO,YACnBC,OAAOG,OAAQ,OACTC,aAAeJ,OAAOC,KAAK,WAAWI,OAAM,GAClDN,QAAQH,KAAKQ,aAAaR,eAEvBG,QAAQH,mBAEN,IAGjBZ,oBAAoBsB,IAAIlB,eAAe,GA3BnBA,CAAAA,eACwF,SAAzGmB,OAAOC,iBAAiBpB,cAAcqB,cAAcnB,kBAAkBC,SAASW,cAAcQ,QA6BhGC,CAAmBvB,qCACZD,QAAQM,QAAQ,QACvBN,OAAOyB,iBAAiB,aAAcC,aACtC1B,OAAOyB,iBAAiB,WAAYC,aAEpC1B,OAAOyB,iBAAiB,QAASC,eAInCA,YAAcC,UACV3B,OAAS2B,EAAE3B,OACXC,cAAgB0B,EAAE3B,OAAOE,QAAQC,kBAAkBC,SAASH,kBAC7DA,eAGDJ,oBAAoBQ,IAAIJ,eAAgB,OAClC2B,eAAiB5B,OAAO6B,SAASC,SAASC,eAC1CC,cAAgBhC,OAAOiC,QAAQ,UAG/BC,gBAAkBJ,SAASC,cAAcF,SAAS7B,YAEpDmC,gBAAiB,EAChBP,gBAAmBI,cAEbE,oCACAJ,SAASC,eAAezB,QAAQ,QAEvC6B,gBAAiB,sBAJVnC,QAAQM,QAAQ,QAOvB6B,iBACAnC,OAAOoC,oBAAoB,aAAcV,aACzC1B,OAAOoC,oBAAoB,WAAYV,aACvC1B,OAAOoC,oBAAoB,QAASV,oBAuB5CW,qBAAsB,EACrBA,sBAhB0B,YACrBC,mBAAsBX,UAClBY,QAAUZ,EAAE3B,OAAOE,QAAQC,kBAAkBqC,MAAMD,SACpDA,UAILZ,EAAEc,iBACF1C,YAAYwC,WAGhBT,SAASL,iBAAiB,YAAaa,oBACvCR,SAASL,iBAAiB,UAAWa,qBAKrCI,GACAL,qBAAsB"}