Rev 1 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
{"version":3,"file":"sorting.min.js","sources":["../../../src/local/editor/sorting.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 * Report builder columns sorting editor\n *\n * @module core_reportbuilder/local/editor/sorting\n * @copyright 2021 David Matamoros <davidmc@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.ht
ml GNU GPL v3 or later\n */\n\n\"use strict\";\n\nimport 'core/inplace_editable';\nimport Notification from 'core/notification';\nimport Pending from 'core/pending';\nimport {subscribe} from 'core/pubsub';\nimport SortableList from 'core/sortable_list';\nimport {getString} from 'core/str';\nimport {add as addToast} from 'core/toast';\nimport * as reportSelectors from 'core_reportbuilder/local/selectors';\nimport {reorderColumnSorting, toggleColumnSorting} from 'core_reportbuilder/local/repository/sorting';\nimport Templates from 'core/templates';\nimport {dispatchEvent} from 'core/event_dispatcher';\nimport * as reportEvents from 'core_reportbuilder/local/events';\n\n// These constants match PHP consts SORT_ASC, SORT_DESC.\nconst SORTORDER = {\n ASCENDING: 4,\n DESCENDING: 3,\n};\n\n/**\n * Reload sorting settings region\n *\n * @param {Object} context\n * @return {Promise}\n */\nconst reloadSettingsSortingRegion = context => {\n const pendingPromise = new Pending('core_reportbuilder/sorting:reload'
);\n const settingsSortingRegion = document.querySelector(reportSelectors.regions.settingsSorting);\n\n return Templates.renderForPromise('core_reportbuilder/local/settings/sorting', {sorting: context})\n .then(({html, js}) => {\n Templates.replaceNode(settingsSortingRegion, html, js);\n return pendingPromise.resolve();\n });\n};\n\n/**\n * Updates column sorting\n *\n * @param {Element} reportElement\n * @param {Element} element\n * @param {Number} sortenabled\n * @param {Number} sortdirection\n * @return {Promise}\n */\nconst updateSorting = (reportElement, element, sortenabled, sortdirection) => {\n const columnSortContainer = element.closest(reportSelectors.regions.activeColumnSort);\n const {columnSortId, columnSortName} = columnSortContainer.dataset;\n\n return toggleColumnSorting(reportElement.dataset.reportId, columnSortId, sortenabled, sortdirection)\n .then(reloadSettingsSortingRegion)\n .then(() => getString('columnsortupdated', 'cor
e_reportbuilder', columnSortName))\n .then(addToast)\n .then(() => {\n dispatchEvent(reportEvents.tableReload, {}, reportElement);\n return null;\n });\n};\n\n/**\n * Initialise module\n *\n * @param {Boolean} initialized Ensure we only add our listeners once\n */\nexport const init = (initialized) => {\n if (initialized) {\n return;\n }\n\n // Update sorting region each time report columns are updated (added or removed).\n subscribe(reportEvents.publish.reportColumnsUpdated, data => reloadSettingsSortingRegion(data)\n .catch(Notification.exception)\n );\n\n document.addEventListener('click', event => {\n\n // Enable/disable sorting on columns.\n const toggleSorting = event.target.closest(reportSelectors.actions.reportToggleColumnSort);\n if (toggleSorting) {\n event.preventDefault();\n\n const pendingPromise = new Pending('core_reportbuilder/sorting:toggle');\n const reportElement
= toggleSorting.closest(reportSelectors.regions.report);\n const columnSortContainer = toggleSorting.closest(reportSelectors.regions.activeColumnSort);\n const sortdirection = parseInt(columnSortContainer.dataset.columnSortDirection);\n\n updateSorting(reportElement, toggleSorting, toggleSorting.checked, sortdirection)\n .then(() => {\n // Re-focus the toggle sorting element after reloading the region.\n const toggleSortingElement = document.getElementById(toggleSorting.id);\n toggleSortingElement?.focus();\n return pendingPromise.resolve();\n })\n .catch(Notification.exception);\n }\n\n // Change column sort direction.\n const toggleSortDirection = event.target.closest(reportSelectors.actions.reportToggleColumnSortDirection);\n if (toggleSortDirection) {\n event.preventDefault();\n\n const pendingPromise =
new Pending('core_reportbuilder/sorting:direction');\n const reportElement = toggleSortDirection.closest(reportSelectors.regions.report);\n const columnSortContainer = toggleSortDirection.closest(reportSelectors.regions.activeColumnSort);\n const toggleSorting = columnSortContainer.querySelector(reportSelectors.actions.reportToggleColumnSort);\n\n let sortdirection = parseInt(columnSortContainer.dataset.columnSortDirection);\n if (sortdirection === SORTORDER.ASCENDING) {\n sortdirection = SORTORDER.DESCENDING;\n } else if (sortdirection === SORTORDER.DESCENDING) {\n sortdirection = SORTORDER.ASCENDING;\n }\n\n updateSorting(reportElement, toggleSortDirection, toggleSorting.checked, sortdirection)\n .then(() => {\n // Re-focus the toggle sort direction element after reloading the region.\n const toggleSortDirectionElement = document.getElem
entById(toggleSortDirection.id);\n toggleSortDirectionElement?.focus();\n return pendingPromise.resolve();\n })\n .catch(Notification.exception);\n }\n });\n\n // Initialize sortable list to handle column sorting moving.\n const columnsSortingSelector = `${reportSelectors.regions.settingsSorting} ul`;\n const columnsSortingSortableList = new SortableList(columnsSortingSelector, {isHorizontal: false});\n columnsSortingSortableList.getElementName = element => Promise.resolve(element.data('columnSortName'));\n\n document.addEventListener(SortableList.EVENTS.elementDrop, event => {\n const toggleSortOrder = event.target.closest(`${columnsSortingSelector} ${reportSelectors.regions.activeColumnSort}`);\n if (toggleSortOrder && event.detail.positionChanged) {\n const pendingPromise = new Pending('core_reportbuilder/sorting:reorder');\n\n const reportElement = toggleSortOrder.closest(repor
tSelectors.regions.report);\n const {columnSortId, columnSortPosition, columnSortName} = toggleSortOrder.dataset;\n\n // Select target position, if moving to the end then count number of element siblings.\n let targetColumnSortPosition = event.detail.targetNextElement.data('columnSortPosition')\n || event.detail.element.siblings().length + 2;\n if (targetColumnSortPosition > columnSortPosition) {\n targetColumnSortPosition--;\n }\n\n // Re-order column sorting, giving drop event transition time to finish.\n const reorderPromise = reorderColumnSorting(reportElement.dataset.reportId, columnSortId, targetColumnSortPosition);\n Promise.all([reorderPromise, new Promise(resolve => setTimeout(resolve, 1000))])\n .then(([data]) => reloadSettingsSortingRegion(data))\n .then(() => getString('columnsortupdated', 'core_reportbuilder', columnSortName))\n .then(
addToast)\n .then(() => {\n dispatchEvent(reportEvents.tableReload, {}, reportElement);\n return pendingPromise.resolve();\n })\n .catch(Notification.exception);\n }\n });\n};\n"],"names":["SORTORDER","reloadSettingsSortingRegion","context","pendingPromise","Pending","settingsSortingRegion","document","querySelector","reportSelectors","regions","settingsSorting","Templates","renderForPromise","sorting","then","_ref","html","js","replaceNode","resolve","updateSorting","reportElement","element","sortenabled","sortdirection","columnSortContainer","closest","activeColumnSort","columnSortId","columnSortName","dataset","reportId","addToast","reportEvents","tableReload","initialized","publish","reportColumnsUpdated","data","catch","Notification","exception","addEventListener","event","toggleSorting","target","actions","reportToggleColumnSort","preventDefault","report","parseInt","columnSortDirection","checked","toggleSortin
gElement","getElementById","id","focus","toggleSortDirection","reportToggleColumnSortDirection","toggleSortDirectionElement","columnsSortingSelector","SortableList","isHorizontal","getElementName","Promise","EVENTS","elementDrop","toggleSortOrder","detail","positionChanged","columnSortPosition","targetColumnSortPosition","targetNextElement","siblings","length","reorderPromise","all","setTimeout","_ref2"],"mappings":"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"}