Rev 1 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
{"version":3,"file":"columns.min.js","sources":["../../../src/local/editor/columns.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 editor\n *\n * @module core_reportbuilder/local/editor/columns\n * @copyright 2021 Paul Holden <paulh@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3
or later\n */\n\n\"use strict\";\n\nimport {dispatchEvent} from 'core/event_dispatcher';\nimport 'core/inplace_editable';\nimport {eventTypes as inplaceEditableEvents} from 'core/local/inplace_editable/events';\nimport Notification from 'core/notification';\nimport Pending from 'core/pending';\nimport {prefetchStrings} from 'core/prefetch';\nimport {publish} from 'core/pubsub';\nimport SortableList from 'core/sortable_list';\nimport {getString} from 'core/str';\nimport {add as addToast} from 'core/toast';\nimport * as reportEvents from 'core_reportbuilder/local/events';\nimport * as reportSelectors from 'core_reportbuilder/local/selectors';\nimport {addColumn, deleteColumn, reorderColumn} from 'core_reportbuilder/local/repository/columns';\nimport {getColumnSorting} from 'core_reportbuilder/local/repository/sorting';\n\n/**\n * Initialise module, prefetch all required strings\n *\n * @param {Boolean} initialized Ensure we only add our listeners once\n */\nexport const init = initialized => {\n prefetchStr
ings('core_reportbuilder', [\n 'columnadded',\n 'columnaggregated',\n 'columndeleted',\n 'columnmoved',\n 'deletecolumn',\n 'deletecolumnconfirm',\n ]);\n\n prefetchStrings('core', [\n 'delete',\n ]);\n\n if (initialized) {\n return;\n }\n\n document.addEventListener('click', event => {\n\n // Add column to report.\n const reportAddColumn = event.target.closest(reportSelectors.actions.reportAddColumn);\n if (reportAddColumn) {\n event.preventDefault();\n\n const pendingPromise = new Pending('core_reportbuilder/columns:add');\n const reportElement = reportAddColumn.closest(reportSelectors.regions.report);\n\n addColumn(reportElement.dataset.reportId, reportAddColumn.dataset.uniqueIdentifier)\n .then(data => publish(reportEvents.publish.reportColumnsUpdated, data))\n .then(() => getString('columnadded', 'core_reportbuilder', reportAddColumn.dat
aset.name))\n .then(addToast)\n .then(() => {\n dispatchEvent(reportEvents.tableReload, {preservePagination: true}, reportElement);\n return pendingPromise.resolve();\n })\n .catch(Notification.exception);\n }\n\n // Remove column from report.\n const reportRemoveColumn = event.target.closest(reportSelectors.actions.reportRemoveColumn);\n if (reportRemoveColumn) {\n event.preventDefault();\n\n const reportElement = reportRemoveColumn.closest(reportSelectors.regions.report);\n const columnHeader = reportRemoveColumn.closest(reportSelectors.regions.columnHeader);\n const columnName = columnHeader.dataset.columnName;\n\n Notification.saveCancelPromise(\n getString('deletecolumn', 'core_reportbuilder', columnName),\n getString('deletecolumnconfirm', 'core_reportbuilder', columnName),\n getS
tring('delete', 'core'),\n {triggerElement: reportRemoveColumn}\n ).then(() => {\n const pendingPromise = new Pending('core_reportbuilder/columns:remove');\n\n return deleteColumn(reportElement.dataset.reportId, columnHeader.dataset.columnId)\n .then(data => publish(reportEvents.publish.reportColumnsUpdated, data))\n .then(() => addToast(getString('columndeleted', 'core_reportbuilder', columnName)))\n .then(() => {\n dispatchEvent(reportEvents.tableReload, {preservePagination: true}, reportElement);\n return pendingPromise.resolve();\n })\n .catch(Notification.exception);\n }).catch(() => {\n return;\n });\n }\n });\n\n // Initialize sortable list to handle column moving.\n const columnHeadingSelector = `${reportSelectors.regions.reportTable} thead tr`;\n cons
t columnHeadingSortableList = new SortableList(columnHeadingSelector, {isHorizontal: true});\n columnHeadingSortableList.getElementName = element => Promise.resolve(element.data('columnName'));\n\n document.addEventListener(SortableList.EVENTS.elementDrag, event => {\n const reportOrderColumn = event.target.closest(`${columnHeadingSelector} ${reportSelectors.regions.columnHeader}`);\n if (reportOrderColumn) {\n const reportElement = event.target.closest(reportSelectors.regions.report);\n const {columnPosition} = reportOrderColumn.dataset;\n\n // Select target position, shift table columns to match.\n const targetColumnPosition = event.detail.targetNextElement.data('columnPosition');\n\n const reportTableRows = reportElement.querySelectorAll(`${reportSelectors.regions.reportTable} tbody tr`);\n reportTableRows.forEach(reportTableRow => {\n const reportTableRowCell = reportTableRow.querySelector(`td.c${columnPo
sition - 1}`);\n if (targetColumnPosition) {\n const reportTableRowCellTarget = reportTableRow.querySelector(`td.c${targetColumnPosition - 1}`);\n reportTableRow.insertBefore(reportTableRowCell, reportTableRowCellTarget);\n } else {\n reportTableRow.appendChild(reportTableRowCell);\n }\n });\n }\n });\n\n document.addEventListener(SortableList.EVENTS.elementDrop, event => {\n const reportOrderColumn = event.target.closest(`${columnHeadingSelector} ${reportSelectors.regions.columnHeader}`);\n if (reportOrderColumn && event.detail.positionChanged) {\n const pendingPromise = new Pending('core_reportbuilder/columns:reorder');\n\n const reportElement = reportOrderColumn.closest(reportSelectors.regions.report);\n const {columnId, columnPosition, columnName} = reportOrderColumn.dataset;\n\n // Select target position, if moving to the
end then count number of element siblings.\n let targetColumnPosition = event.detail.targetNextElement.data('columnPosition')\n || event.detail.element.siblings().length + 2;\n if (targetColumnPosition > columnPosition) {\n targetColumnPosition--;\n }\n\n // Re-order column, giving drop event transition time to finish.\n const reorderPromise = reorderColumn(reportElement.dataset.reportId, columnId, targetColumnPosition);\n Promise.all([reorderPromise, new Promise(resolve => setTimeout(resolve, 1000))])\n .then(() => getString('columnmoved', 'core_reportbuilder', columnName))\n .then(addToast)\n .then(() => {\n dispatchEvent(reportEvents.tableReload, {preservePagination: true}, reportElement);\n return pendingPromise.resolve();\n })\n .catch(Notification.exception);\n }\n });\n\n // Initiali
ze inplace editable listeners for column aggregation.\n document.addEventListener(inplaceEditableEvents.elementUpdated, event => {\n const columnAggregation = event.target.closest('[data-itemtype=\"columnaggregation\"]');\n if (columnAggregation) {\n const pendingPromise = new Pending('core_reportbuilder/columns:aggregate');\n const reportElement = columnAggregation.closest(reportSelectors.regions.report);\n const columnHeader = columnAggregation.closest(reportSelectors.regions.columnHeader);\n\n getString('columnaggregated', 'core_reportbuilder', columnHeader.dataset.columnName)\n .then(addToast)\n .then(() => {\n // Pass preserveTriggerElement parameter so columnAggregationLink will be focused after the report reload.\n const columnAggregationLink = `[data-itemtype=\"columnaggregation\"][data-itemid=\"`\n + `${columnAggregation.dataset.itemid}\"] > a`;\n\n
// Now reload the table, and notify listeners that columns have been updated.\n dispatchEvent(reportEvents.tableReload, {preserveTriggerElement: columnAggregationLink}, reportElement);\n return getColumnSorting(reportElement.dataset.reportId);\n })\n .then(data => publish(reportEvents.publish.reportColumnsUpdated, data))\n .then(() => pendingPromise.resolve())\n .catch(Notification.exception);\n }\n });\n};\n"],"names":["initialized","document","addEventListener","event","reportAddColumn","target","closest","reportSelectors","actions","preventDefault","pendingPromise","Pending","reportElement","regions","report","dataset","reportId","uniqueIdentifier","then","data","reportEvents","publish","reportColumnsUpdated","name","addToast","tableReload","preservePagination","resolve","catch","Notification","exception","reportRemoveColumn","columnHeader","columnName","saveCancelPromise","trigge
rElement","columnId","columnHeadingSelector","reportTable","SortableList","isHorizontal","getElementName","element","Promise","EVENTS","elementDrag","reportOrderColumn","columnPosition","targetColumnPosition","detail","targetNextElement","querySelectorAll","forEach","reportTableRow","reportTableRowCell","querySelector","reportTableRowCellTarget","insertBefore","appendChild","elementDrop","positionChanged","siblings","length","reorderPromise","all","setTimeout","inplaceEditableEvents","elementUpdated","columnAggregation","columnAggregationLink","itemid","preserveTriggerElement"],"mappings":"07DA6CoBA,+CACA,qBAAsB,CAClC,cACA,mBACA,gBACA,cACA,eACA,sDAGY,OAAQ,CACpB,WAGAA,mBAIJC,SAASC,iBAAiB,SAASC,cAGzBC,gBAAkBD,MAAME,OAAOC,QAAQC,gBAAgBC,QAAQJ,oBACjEA,gBAAiB,CACjBD,MAAMM,uBAEAC,eAAiB,IAAIC,iBAAQ,kCAC7BC,cAAgBR,gBAAgBE,QAAQC,gBAAgBM,QAAQC,+BAE5DF,cAAcG,QAAQC,SAAUZ,gBAAgBW,QAAQE,kBAC7DC,MAAKC,OAAQ,mBAAQC,aAAaC,QAAQC,qBAAsBH,QAChED,MAAK,KAAM,kBAAU,cAAe,qBAAsBd,gBAAgBW,QAAQQ,QAClFL,KAAKM,YACLN,MAAK,yCACYE,aAAaK,YAAa,
CAACC,oBAAoB,GAAOd,eAC7DF,eAAeiB,aAEzBC,MAAMC,sBAAaC,iBAItBC,mBAAqB5B,MAAME,OAAOC,QAAQC,gBAAgBC,QAAQuB,uBACpEA,mBAAoB,CACpB5B,MAAMM,uBAEAG,cAAgBmB,mBAAmBzB,QAAQC,gBAAgBM,QAAQC,QACnEkB,aAAeD,mBAAmBzB,QAAQC,gBAAgBM,QAAQmB,cAClEC,WAAaD,aAAajB,QAAQkB,iCAE3BC,mBACT,kBAAU,eAAgB,qBAAsBD,aAChD,kBAAU,sBAAuB,qBAAsBA,aACvD,kBAAU,SAAU,QACpB,CAACE,eAAgBJ,qBACnBb,MAAK,WACGR,eAAiB,IAAIC,iBAAQ,4CAE5B,yBAAaC,cAAcG,QAAQC,SAAUgB,aAAajB,QAAQqB,UACpElB,MAAKC,OAAQ,mBAAQC,aAAaC,QAAQC,qBAAsBH,QAChED,MAAK,KAAM,eAAS,kBAAU,gBAAiB,qBAAsBe,eACrEf,MAAK,yCACYE,aAAaK,YAAa,CAACC,oBAAoB,GAAOd,eAC7DF,eAAeiB,aAEzBC,MAAMC,sBAAaC,cACzBF,OAAM,mBAOXS,gCAA2B9B,gBAAgBM,QAAQyB,yBACvB,IAAIC,uBAAaF,sBAAuB,CAACG,cAAc,IAC/DC,eAAiBC,SAAWC,QAAQhB,QAAQe,QAAQvB,KAAK,eAEnFlB,SAASC,iBAAiBqC,uBAAaK,OAAOC,aAAa1C,cACjD2C,kBAAoB3C,MAAME,OAAOC,kBAAW+B,kCAAyB9B,gBAAgBM,QAAQmB,kBAC/Fc,kBAAmB,OACblC,cAAgBT,MAAME,OAAOC,QAAQC,gBAAgBM,QAAQC,SAC7DiC,eAACA,gBAAkBD,kBAAkB/B,QAGrCiC,qBAAuB7C,MAAM8C,OAAOC,kBAAkB/B,KAAK,kBAEzCP,cAAcuC,2BAAoB5C,gBAAgBM,QAAQyB,0BAClEc,SAAQC,uBAC
dC,mBAAqBD,eAAeE,4BAAqBR,eAAiB,OAC5EC,qBAAsB,OAChBQ,yBAA2BH,eAAeE,4BAAqBP,qBAAuB,IAC5FK,eAAeI,aAAaH,mBAAoBE,+BAEhDH,eAAeK,YAAYJ,2BAM3CrD,SAASC,iBAAiBqC,uBAAaK,OAAOe,aAAaxD,cACjD2C,kBAAoB3C,MAAME,OAAOC,kBAAW+B,kCAAyB9B,gBAAgBM,QAAQmB,kBAC/Fc,mBAAqB3C,MAAM8C,OAAOW,gBAAiB,OAC7ClD,eAAiB,IAAIC,iBAAQ,sCAE7BC,cAAgBkC,kBAAkBxC,QAAQC,gBAAgBM,QAAQC,SAClEsB,SAACA,SAADW,eAAWA,eAAXd,WAA2BA,YAAca,kBAAkB/B,YAG7DiC,qBAAuB7C,MAAM8C,OAAOC,kBAAkB/B,KAAK,mBACxDhB,MAAM8C,OAAOP,QAAQmB,WAAWC,OAAS,EAC5Cd,qBAAuBD,gBACvBC,6BAIEe,gBAAiB,0BAAcnD,cAAcG,QAAQC,SAAUoB,SAAUY,sBAC/EL,QAAQqB,IAAI,CAACD,eAAgB,IAAIpB,SAAQhB,SAAWsC,WAAWtC,QAAS,SACnET,MAAK,KAAM,kBAAU,cAAe,qBAAsBe,cAC1Df,KAAKM,YACLN,MAAK,yCACYE,aAAaK,YAAa,CAACC,oBAAoB,GAAOd,eAC7DF,eAAeiB,aAEzBC,MAAMC,sBAAaC,eAKhC7B,SAASC,iBAAiBgE,mBAAsBC,gBAAgBhE,cACtDiE,kBAAoBjE,MAAME,OAAOC,QAAQ,0CAC3C8D,kBAAmB,OACb1D,eAAiB,IAAIC,iBAAQ,wCAC7BC,cAAgBwD,kBAAkB9D,QAAQC,gBAAgBM,QAAQC,QAClEkB,aAAeoC,kBAAkB9D,QAAQC,gBAAgBM,QAAQmB,iCAE7D,mBAAoB,qBAAsBA,aAAajB,QAAQkB,YACpEf,KAAKM,YACLN,MAAK,WAEImD,sBAAwB
,8DACrBD,kBAAkBrD,QAAQuD,2DAGrBlD,aAAaK,YAAa,CAAC8C,uBAAwBF,uBAAwBzD,gBAClF,6BAAiBA,cAAcG,QAAQC,aAEjDE,MAAKC,OAAQ,mBAAQC,aAAaC,QAAQC,qBAAsBH,QAChED,MAAK,IAAMR,eAAeiB,YAC1BC,MAAMC,sBAAaC"}