diff --git a/lib/table/amd/build/dynamic.min.js b/lib/table/amd/build/dynamic.min.js index b3075bbb979..a0089f7f9a0 100644 --- a/lib/table/amd/build/dynamic.min.js +++ b/lib/table/amd/build/dynamic.min.js @@ -1,10 +1,10 @@ -define("core_table/dynamic",["exports","core_table/local/dynamic/selectors","./local/dynamic/events","core/pending","core/loadingicon","core_table/local/dynamic/repository","core/notification"],(function(_exports,Selectors,_events,_pending,_loadingicon,_repository,_notification){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Events",{enumerable:!0,get:function(){return _events.default}}),_exports.updateTable=_exports.showColumn=_exports.setSortOrder=_exports.setPageSize=_exports.setPageNumber=_exports.setLastInitial=_exports.setFirstInitial=_exports.setFilters=_exports.refreshTableContent=_exports.init=_exports.hideColumn=_exports.getTableFromId=_exports.getPageSize=_exports.getPageNumber=_exports.getLastInitial=_exports.getFirstInitial=_exports.getFilters=void 0,Selectors=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj} +define("core_table/dynamic",["exports","core_table/local/dynamic/selectors","./local/dynamic/events","core/pending","core/loadingicon","core_table/local/dynamic/repository","core/notification","core/templates"],(function(_exports,Selectors,_events,_pending,_loadingicon,_repository,_notification,_templates){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Events",{enumerable:!0,get:function(){return _events.default}}),_exports.updateTable=_exports.showColumn=_exports.setSortOrder=_exports.setPageSize=_exports.setPageNumber=_exports.setLastInitial=_exports.setFirstInitial=_exports.setFilters=_exports.refreshTableContent=_exports.init=_exports.hideColumn=_exports.getTableFromId=_exports.getPageSize=_exports.getPageNumber=_exports.getLastInitial=_exports.getFirstInitial=_exports.getFilters=void 0,Selectors=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj} /** * Module to handle dynamic table features. * * @module core_table/dynamic * @copyright 2020 Simey Lameze * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */(Selectors),_events=_interopRequireDefault(_events),_pending=_interopRequireDefault(_pending),_notification=_interopRequireDefault(_notification);let watching=!1;const checkTableIsDynamic=tableRoot=>{if(!tableRoot)throw new Error("The table specified is not a dynamic table and cannot be updated");if(!tableRoot.matches(Selectors.main.region))throw new Error("The table specified is not a dynamic table and cannot be updated");return!0},getFiltersetFromTable=tableRoot=>JSON.parse(tableRoot.dataset.tableFilters),refreshTableContent=function(tableRoot){let resetContent=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const filterset=getFiltersetFromTable(tableRoot);(0,_loadingicon.addIconToContainer)(tableRoot);const pendingPromise=new _pending.default("core_table/dynamic:refreshTableContent");return(0,_repository.fetch)(tableRoot.dataset.tableComponent,tableRoot.dataset.tableHandler,tableRoot.dataset.tableUniqueid,{sortData:JSON.parse(tableRoot.dataset.tableSortData),joinType:filterset.jointype,filters:filterset.filters,firstinitial:tableRoot.dataset.tableFirstInitial,lastinitial:tableRoot.dataset.tableLastInitial,pageNumber:tableRoot.dataset.tablePageNumber,pageSize:tableRoot.dataset.tablePageSize,hiddenColumns:JSON.parse(tableRoot.dataset.tableHiddenColumns)},resetContent).then((data=>{const placeholder=document.createElement("div");return placeholder.innerHTML=data.html,tableRoot.replaceWith(...placeholder.childNodes),getTableFromId(tableRoot.dataset.tableUniqueid)})).then((tableRoot=>(tableRoot.dispatchEvent(new CustomEvent(_events.default.tableContentRefreshed,{bubbles:!0})),tableRoot))).then((tableRoot=>(pendingPromise.resolve(),tableRoot)))};_exports.refreshTableContent=refreshTableContent;const updateTable=function(tableRoot){let{sortBy:sortBy=null,sortOrder:sortOrder=null,filters:filters=null,firstInitial:firstInitial=null,lastInitial:lastInitial=null,pageNumber:pageNumber=null,pageSize:pageSize=null,hiddenColumns:hiddenColumns=null}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];checkTableIsDynamic(tableRoot);const pendingPromise=new _pending.default("core_table/dynamic:updateTable");let tableConfigChanged=!1;if(sortBy&&sortOrder){tableConfigChanged=!0;const sortData=JSON.parse(tableRoot.dataset.tableSortData);sortData.unshift({sortby:sortBy,sortorder:parseInt(sortOrder,10)}),tableRoot.dataset.tableSortData=JSON.stringify(sortData)}if(null!==firstInitial&&(tableRoot.dataset.tableFirstInitial!==firstInitial&&(tableConfigChanged=!0),tableRoot.dataset.tableFirstInitial=firstInitial),null!==lastInitial&&(tableRoot.dataset.tableLastInitial!==lastInitial&&(tableConfigChanged=!0),tableRoot.dataset.tableLastInitial=lastInitial),null!==pageSize&&(tableRoot.dataset.tablePageSize!=pageSize&&(tableConfigChanged=!0),tableRoot.dataset.tablePageSize=pageSize),filters){const filterJson=JSON.stringify(filters);tableRoot.dataset.tableFilters!==filterJson&&(tableConfigChanged=!0),tableRoot.dataset.tableFilters=filterJson}if(tableConfigChanged&&(pageNumber=1),hiddenColumns){const columnJson=JSON.stringify(hiddenColumns);tableRoot.dataset.tableHiddenColumns!==columnJson&&(tableConfigChanged=!0),tableRoot.dataset.tableHiddenColumns=columnJson}return null!==pageNumber&&(tableRoot.dataset.tablePageNumber!=pageNumber&&(tableConfigChanged=!0),tableRoot.dataset.tablePageNumber=pageNumber),refreshContent&&tableConfigChanged?refreshTableContent(tableRoot).then((tableRoot=>(pendingPromise.resolve(),tableRoot))):(pendingPromise.resolve(),Promise.resolve(tableRoot))};_exports.updateTable=updateTable;const getTableData=tableRoot=>(checkTableIsDynamic(tableRoot),tableRoot.dataset);_exports.setFilters=function(tableRoot,filters){let refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{filters:filters},refreshContent)};_exports.getFilters=tableRoot=>(checkTableIsDynamic(tableRoot),getFiltersetFromTable(tableRoot));const setSortOrder=function(tableRoot,sortBy,sortOrder){let refreshContent=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return updateTable(tableRoot,{sortBy:sortBy,sortOrder:sortOrder},refreshContent)};_exports.setSortOrder=setSortOrder;const setPageNumber=function(tableRoot,pageNumber){let refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{pageNumber:pageNumber},refreshContent)};_exports.setPageNumber=setPageNumber;_exports.getPageNumber=tableRoot=>getTableData(tableRoot).tablePageNumber;const setPageSize=function(tableRoot,pageSize){let refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{pageSize:pageSize,pageNumber:1},refreshContent)};_exports.setPageSize=setPageSize;_exports.getPageSize=tableRoot=>getTableData(tableRoot).tablePageSize;const setFirstInitial=function(tableRoot,firstInitial){let refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{firstInitial:firstInitial},refreshContent)};_exports.setFirstInitial=setFirstInitial;_exports.getFirstInitial=tableRoot=>getTableData(tableRoot).tableFirstInitial;const setLastInitial=function(tableRoot,lastInitial){let refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{lastInitial:lastInitial},refreshContent)};_exports.setLastInitial=setLastInitial;_exports.getLastInitial=tableRoot=>getTableData(tableRoot).tableLastInitial;const hideColumn=function(tableRoot,columnToHide){let refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const hiddenColumns=JSON.parse(tableRoot.dataset.tableHiddenColumns);return hiddenColumns.push(columnToHide),updateTable(tableRoot,{hiddenColumns:hiddenColumns},refreshContent)};_exports.hideColumn=hideColumn;const showColumn=function(tableRoot,columnToShow){let refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],hiddenColumns=JSON.parse(tableRoot.dataset.tableHiddenColumns);return hiddenColumns=hiddenColumns.filter((columnName=>columnName!==columnToShow)),updateTable(tableRoot,{hiddenColumns:hiddenColumns},refreshContent)};_exports.showColumn=showColumn;_exports.init=()=>{watching||(watching=!0,document.addEventListener("click",(e=>{const tableRoot=e.target.closest(Selectors.main.region);if(!tableRoot)return;const sortableLink=e.target.closest(Selectors.table.links.sortableColumn);sortableLink&&(e.preventDefault(),setSortOrder(tableRoot,sortableLink.dataset.sortby,sortableLink.dataset.sortorder).catch(_notification.default.exception));const firstInitialLink=e.target.closest(Selectors.initialsBar.links.firstInitial);null!==firstInitialLink&&(e.preventDefault(),setFirstInitial(tableRoot,firstInitialLink.dataset.initial).catch(_notification.default.exception));const lastInitialLink=e.target.closest(Selectors.initialsBar.links.lastInitial);null!==lastInitialLink&&(e.preventDefault(),setLastInitial(tableRoot,lastInitialLink.dataset.initial).catch(_notification.default.exception));const pageItem=e.target.closest(Selectors.paginationBar.links.pageItem);pageItem&&(e.preventDefault(),setPageNumber(tableRoot,pageItem.dataset.pageNumber).catch(_notification.default.exception));const hide=e.target.closest(Selectors.table.links.hide);hide&&(e.preventDefault(),hideColumn(tableRoot,hide.dataset.column).catch(_notification.default.exception));const show=e.target.closest(Selectors.table.links.show);show&&(e.preventDefault(),showColumn(tableRoot,show.dataset.column).catch(_notification.default.exception));e.target.closest(".resettable a")&&(e.preventDefault(),(tableRoot=>refreshTableContent(tableRoot,!0))(tableRoot).catch(_notification.default.exception));const showCountLink=e.target.closest(Selectors.showCount.links.toggle);showCountLink&&(e.preventDefault(),setPageSize(tableRoot,showCountLink.dataset.targetPageSize).catch(_notification.default.exception))})))};const getTableFromId=tableRegionId=>{const tableRoot=document.querySelector(Selectors.main.fromRegionId(tableRegionId));if(!tableRoot)throw new Error("The table specified is not a dynamic table and cannot be updated");return tableRoot};_exports.getTableFromId=getTableFromId})); + */(Selectors),_events=_interopRequireDefault(_events),_pending=_interopRequireDefault(_pending),_notification=_interopRequireDefault(_notification);let watching=!1;const checkTableIsDynamic=tableRoot=>{if(!tableRoot)throw new Error("The table specified is not a dynamic table and cannot be updated");if(!tableRoot.matches(Selectors.main.region))throw new Error("The table specified is not a dynamic table and cannot be updated");return!0},getFiltersetFromTable=tableRoot=>JSON.parse(tableRoot.dataset.tableFilters),refreshTableContent=function(tableRoot){let resetContent=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const filterset=getFiltersetFromTable(tableRoot);(0,_loadingicon.addIconToContainer)(tableRoot);const pendingPromise=new _pending.default("core_table/dynamic:refreshTableContent");return(0,_repository.fetch)(tableRoot.dataset.tableComponent,tableRoot.dataset.tableHandler,tableRoot.dataset.tableUniqueid,{sortData:JSON.parse(tableRoot.dataset.tableSortData),joinType:filterset.jointype,filters:filterset.filters,firstinitial:tableRoot.dataset.tableFirstInitial,lastinitial:tableRoot.dataset.tableLastInitial,pageNumber:tableRoot.dataset.tablePageNumber,pageSize:tableRoot.dataset.tablePageSize,hiddenColumns:JSON.parse(tableRoot.dataset.tableHiddenColumns)},resetContent).then((data=>(0,_templates.replaceNode)(tableRoot,data.html,"")[0])).then((tableRoot=>(tableRoot.dispatchEvent(new CustomEvent(_events.default.tableContentRefreshed,{bubbles:!0})),tableRoot))).then((tableRoot=>(pendingPromise.resolve(),tableRoot)))};_exports.refreshTableContent=refreshTableContent;const updateTable=function(tableRoot){let{sortBy:sortBy=null,sortOrder:sortOrder=null,filters:filters=null,firstInitial:firstInitial=null,lastInitial:lastInitial=null,pageNumber:pageNumber=null,pageSize:pageSize=null,hiddenColumns:hiddenColumns=null}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];checkTableIsDynamic(tableRoot);const pendingPromise=new _pending.default("core_table/dynamic:updateTable");let tableConfigChanged=!1;if(sortBy&&sortOrder){tableConfigChanged=!0;const sortData=JSON.parse(tableRoot.dataset.tableSortData);sortData.unshift({sortby:sortBy,sortorder:parseInt(sortOrder,10)}),tableRoot.dataset.tableSortData=JSON.stringify(sortData)}if(null!==firstInitial&&(tableRoot.dataset.tableFirstInitial!==firstInitial&&(tableConfigChanged=!0),tableRoot.dataset.tableFirstInitial=firstInitial),null!==lastInitial&&(tableRoot.dataset.tableLastInitial!==lastInitial&&(tableConfigChanged=!0),tableRoot.dataset.tableLastInitial=lastInitial),null!==pageSize&&(tableRoot.dataset.tablePageSize!=pageSize&&(tableConfigChanged=!0),tableRoot.dataset.tablePageSize=pageSize),filters){const filterJson=JSON.stringify(filters);tableRoot.dataset.tableFilters!==filterJson&&(tableConfigChanged=!0),tableRoot.dataset.tableFilters=filterJson}if(tableConfigChanged&&(pageNumber=1),hiddenColumns){const columnJson=JSON.stringify(hiddenColumns);tableRoot.dataset.tableHiddenColumns!==columnJson&&(tableConfigChanged=!0),tableRoot.dataset.tableHiddenColumns=columnJson}return null!==pageNumber&&(tableRoot.dataset.tablePageNumber!=pageNumber&&(tableConfigChanged=!0),tableRoot.dataset.tablePageNumber=pageNumber),refreshContent&&tableConfigChanged?refreshTableContent(tableRoot).then((tableRoot=>(pendingPromise.resolve(),tableRoot))):(pendingPromise.resolve(),Promise.resolve(tableRoot))};_exports.updateTable=updateTable;const getTableData=tableRoot=>(checkTableIsDynamic(tableRoot),tableRoot.dataset);_exports.setFilters=function(tableRoot,filters){let refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{filters:filters},refreshContent)};_exports.getFilters=tableRoot=>(checkTableIsDynamic(tableRoot),getFiltersetFromTable(tableRoot));const setSortOrder=function(tableRoot,sortBy,sortOrder){let refreshContent=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return updateTable(tableRoot,{sortBy:sortBy,sortOrder:sortOrder},refreshContent)};_exports.setSortOrder=setSortOrder;const setPageNumber=function(tableRoot,pageNumber){let refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{pageNumber:pageNumber},refreshContent)};_exports.setPageNumber=setPageNumber;_exports.getPageNumber=tableRoot=>getTableData(tableRoot).tablePageNumber;const setPageSize=function(tableRoot,pageSize){let refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{pageSize:pageSize,pageNumber:1},refreshContent)};_exports.setPageSize=setPageSize;_exports.getPageSize=tableRoot=>getTableData(tableRoot).tablePageSize;const setFirstInitial=function(tableRoot,firstInitial){let refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{firstInitial:firstInitial},refreshContent)};_exports.setFirstInitial=setFirstInitial;_exports.getFirstInitial=tableRoot=>getTableData(tableRoot).tableFirstInitial;const setLastInitial=function(tableRoot,lastInitial){let refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{lastInitial:lastInitial},refreshContent)};_exports.setLastInitial=setLastInitial;_exports.getLastInitial=tableRoot=>getTableData(tableRoot).tableLastInitial;const hideColumn=function(tableRoot,columnToHide){let refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const hiddenColumns=JSON.parse(tableRoot.dataset.tableHiddenColumns);return hiddenColumns.push(columnToHide),updateTable(tableRoot,{hiddenColumns:hiddenColumns},refreshContent)};_exports.hideColumn=hideColumn;const showColumn=function(tableRoot,columnToShow){let refreshContent=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],hiddenColumns=JSON.parse(tableRoot.dataset.tableHiddenColumns);return hiddenColumns=hiddenColumns.filter((columnName=>columnName!==columnToShow)),updateTable(tableRoot,{hiddenColumns:hiddenColumns},refreshContent)};_exports.showColumn=showColumn;_exports.init=()=>{watching||(watching=!0,document.addEventListener("click",(e=>{const tableRoot=e.target.closest(Selectors.main.region);if(!tableRoot)return;const sortableLink=e.target.closest(Selectors.table.links.sortableColumn);sortableLink&&(e.preventDefault(),setSortOrder(tableRoot,sortableLink.dataset.sortby,sortableLink.dataset.sortorder).catch(_notification.default.exception));const firstInitialLink=e.target.closest(Selectors.initialsBar.links.firstInitial);null!==firstInitialLink&&(e.preventDefault(),setFirstInitial(tableRoot,firstInitialLink.dataset.initial).catch(_notification.default.exception));const lastInitialLink=e.target.closest(Selectors.initialsBar.links.lastInitial);null!==lastInitialLink&&(e.preventDefault(),setLastInitial(tableRoot,lastInitialLink.dataset.initial).catch(_notification.default.exception));const pageItem=e.target.closest(Selectors.paginationBar.links.pageItem);pageItem&&(e.preventDefault(),setPageNumber(tableRoot,pageItem.dataset.pageNumber).catch(_notification.default.exception));const hide=e.target.closest(Selectors.table.links.hide);hide&&(e.preventDefault(),hideColumn(tableRoot,hide.dataset.column).catch(_notification.default.exception));const show=e.target.closest(Selectors.table.links.show);show&&(e.preventDefault(),showColumn(tableRoot,show.dataset.column).catch(_notification.default.exception));e.target.closest(".resettable a")&&(e.preventDefault(),(tableRoot=>refreshTableContent(tableRoot,!0))(tableRoot).catch(_notification.default.exception));const showCountLink=e.target.closest(Selectors.showCount.links.toggle);showCountLink&&(e.preventDefault(),setPageSize(tableRoot,showCountLink.dataset.targetPageSize).catch(_notification.default.exception))})))};_exports.getTableFromId=tableRegionId=>{const tableRoot=document.querySelector(Selectors.main.fromRegionId(tableRegionId));if(!tableRoot)throw new Error("The table specified is not a dynamic table and cannot be updated");return tableRoot}})); //# sourceMappingURL=dynamic.min.js.map \ No newline at end of file diff --git a/lib/table/amd/build/dynamic.min.js.map b/lib/table/amd/build/dynamic.min.js.map index ef0ab001e29..4b60b1e252e 100644 --- a/lib/table/amd/build/dynamic.min.js.map +++ b/lib/table/amd/build/dynamic.min.js.map @@ -1 +1 @@ -{"version":3,"file":"dynamic.min.js","sources":["../src/dynamic.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 .\n\n/**\n * Module to handle dynamic table features.\n *\n * @module core_table/dynamic\n * @copyright 2020 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport * as Selectors from 'core_table/local/dynamic/selectors';\nimport Events from './local/dynamic/events';\nimport Pending from 'core/pending';\nimport {addIconToContainer} from 'core/loadingicon';\nimport {fetch as fetchTableData} from 'core_table/local/dynamic/repository';\nimport Notification from 'core/notification';\n\nlet watching = false;\n\n/**\n * Ensure that a table is a dynamic table.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Bool}\n */\nconst checkTableIsDynamic = tableRoot => {\n if (!tableRoot) {\n // The table is not a dynamic table.\n throw new Error(\"The table specified is not a dynamic table and cannot be updated\");\n }\n\n if (!tableRoot.matches(Selectors.main.region)) {\n // The table is not a dynamic table.\n throw new Error(\"The table specified is not a dynamic table and cannot be updated\");\n }\n\n return true;\n};\n\n/**\n * Get the filterset data from a known dynamic table.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Object}\n */\nconst getFiltersetFromTable = tableRoot => {\n return JSON.parse(tableRoot.dataset.tableFilters);\n};\n\n/**\n * Update the specified table based on its current values.\n *\n * @param {HTMLElement} tableRoot\n * @param {Bool} resetContent\n * @returns {Promise}\n */\nexport const refreshTableContent = (tableRoot, resetContent = false) => {\n const filterset = getFiltersetFromTable(tableRoot);\n addIconToContainer(tableRoot);\n\n const pendingPromise = new Pending('core_table/dynamic:refreshTableContent');\n\n return fetchTableData(\n tableRoot.dataset.tableComponent,\n tableRoot.dataset.tableHandler,\n tableRoot.dataset.tableUniqueid,\n {\n sortData: JSON.parse(tableRoot.dataset.tableSortData),\n joinType: filterset.jointype,\n filters: filterset.filters,\n firstinitial: tableRoot.dataset.tableFirstInitial,\n lastinitial: tableRoot.dataset.tableLastInitial,\n pageNumber: tableRoot.dataset.tablePageNumber,\n pageSize: tableRoot.dataset.tablePageSize,\n hiddenColumns: JSON.parse(tableRoot.dataset.tableHiddenColumns),\n },\n resetContent,\n )\n .then(data => {\n const placeholder = document.createElement('div');\n placeholder.innerHTML = data.html;\n tableRoot.replaceWith(...placeholder.childNodes);\n\n // Update the tableRoot.\n return getTableFromId(tableRoot.dataset.tableUniqueid);\n }).then(tableRoot => {\n tableRoot.dispatchEvent(new CustomEvent(Events.tableContentRefreshed, {\n bubbles: true,\n }));\n\n return tableRoot;\n })\n .then(tableRoot => {\n pendingPromise.resolve();\n\n return tableRoot;\n });\n};\n\nexport const updateTable = (tableRoot, {\n sortBy = null,\n sortOrder = null,\n filters = null,\n firstInitial = null,\n lastInitial = null,\n pageNumber = null,\n pageSize = null,\n hiddenColumns = null,\n} = {}, refreshContent = true) => {\n checkTableIsDynamic(tableRoot);\n\n const pendingPromise = new Pending('core_table/dynamic:updateTable');\n let tableConfigChanged = false;\n\n // Update sort fields.\n if (sortBy && sortOrder) {\n // Always update the table if requested and there were sort fields.\n // These fields are only ever normalised in the backend.\n tableConfigChanged = true;\n\n const sortData = JSON.parse(tableRoot.dataset.tableSortData);\n sortData.unshift({\n sortby: sortBy,\n sortorder: parseInt(sortOrder, 10),\n });\n tableRoot.dataset.tableSortData = JSON.stringify(sortData);\n }\n\n // Update initials.\n if (firstInitial !== null) {\n if (tableRoot.dataset.tableFirstInitial !== firstInitial) {\n tableConfigChanged = true;\n }\n\n tableRoot.dataset.tableFirstInitial = firstInitial;\n }\n\n if (lastInitial !== null) {\n if (tableRoot.dataset.tableLastInitial !== lastInitial) {\n tableConfigChanged = true;\n }\n\n tableRoot.dataset.tableLastInitial = lastInitial;\n }\n\n if (pageSize !== null) {\n if (tableRoot.dataset.tablePageSize != pageSize) {\n tableConfigChanged = true;\n }\n\n tableRoot.dataset.tablePageSize = pageSize;\n }\n\n // Update filters.\n if (filters) {\n const filterJson = JSON.stringify(filters);\n\n if (tableRoot.dataset.tableFilters !== filterJson) {\n tableConfigChanged = true;\n }\n\n tableRoot.dataset.tableFilters = filterJson;\n }\n\n // Reset to page 1 when table content is being altered by filtering or sorting.\n // This ensures the table page being loaded always exists, and gives a consistent experience.\n if (tableConfigChanged) {\n pageNumber = 1;\n }\n\n // Update hidden columns.\n if (hiddenColumns) {\n const columnJson = JSON.stringify(hiddenColumns);\n\n if (tableRoot.dataset.tableHiddenColumns !== columnJson) {\n tableConfigChanged = true;\n }\n\n tableRoot.dataset.tableHiddenColumns = columnJson;\n }\n\n if (pageNumber !== null) {\n if (tableRoot.dataset.tablePageNumber != pageNumber) {\n tableConfigChanged = true;\n }\n\n tableRoot.dataset.tablePageNumber = pageNumber;\n }\n\n // Refresh.\n if (refreshContent && tableConfigChanged) {\n return refreshTableContent(tableRoot)\n .then(tableRoot => {\n pendingPromise.resolve();\n return tableRoot;\n });\n } else {\n pendingPromise.resolve();\n return Promise.resolve(tableRoot);\n }\n};\n\n/**\n * Get the table dataset for the specified tableRoot, ensuring that the provided table is a dynamic table.\n *\n * @param {HTMLElement} tableRoot\n * @returns {DOMStringMap}\n */\nconst getTableData = tableRoot => {\n checkTableIsDynamic(tableRoot);\n\n return tableRoot.dataset;\n};\n\n/**\n * Update the specified table using the new filters.\n *\n * @param {HTMLElement} tableRoot\n * @param {Object} filters\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setFilters = (tableRoot, filters, refreshContent = true) =>\n updateTable(tableRoot, {filters}, refreshContent);\n\n/**\n * Get the filter data for the specified table.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Object}\n */\nexport const getFilters = tableRoot => {\n checkTableIsDynamic(tableRoot);\n\n return getFiltersetFromTable(tableRoot);\n};\n\n/**\n * Update the sort order.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} sortBy\n * @param {Number} sortOrder\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setSortOrder = (tableRoot, sortBy, sortOrder, refreshContent = true) =>\n updateTable(tableRoot, {sortBy, sortOrder}, refreshContent);\n\n/**\n * Set the page number.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} pageNumber\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setPageNumber = (tableRoot, pageNumber, refreshContent = true) =>\n updateTable(tableRoot, {pageNumber}, refreshContent);\n\n/**\n * Get the current page number.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Number}\n */\nexport const getPageNumber = tableRoot => getTableData(tableRoot).tablePageNumber;\n\n/**\n * Set the page size.\n *\n * @param {HTMLElement} tableRoot\n * @param {Number} pageSize\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setPageSize = (tableRoot, pageSize, refreshContent = true) =>\n updateTable(tableRoot, {pageSize, pageNumber: 1}, refreshContent);\n\n/**\n * Get the current page size.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Number}\n */\nexport const getPageSize = tableRoot => getTableData(tableRoot).tablePageSize;\n\n/**\n * Update the first initial to show.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} firstInitial\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setFirstInitial = (tableRoot, firstInitial, refreshContent = true) =>\n updateTable(tableRoot, {firstInitial}, refreshContent);\n\n/**\n * Get the current first initial filter.\n *\n * @param {HTMLElement} tableRoot\n * @returns {String}\n */\nexport const getFirstInitial = tableRoot => getTableData(tableRoot).tableFirstInitial;\n\n/**\n * Update the last initial to show.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} lastInitial\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setLastInitial = (tableRoot, lastInitial, refreshContent = true) =>\n updateTable(tableRoot, {lastInitial}, refreshContent);\n\n/**\n * Get the current last initial filter.\n *\n * @param {HTMLElement} tableRoot\n * @returns {String}\n */\nexport const getLastInitial = tableRoot => getTableData(tableRoot).tableLastInitial;\n\n/**\n * Hide a column in the participants table.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} columnToHide\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const hideColumn = (tableRoot, columnToHide, refreshContent = true) => {\n const hiddenColumns = JSON.parse(tableRoot.dataset.tableHiddenColumns);\n hiddenColumns.push(columnToHide);\n\n return updateTable(tableRoot, {hiddenColumns}, refreshContent);\n};\n\n/**\n * Make a hidden column visible in the participants table.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} columnToShow\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const showColumn = (tableRoot, columnToShow, refreshContent = true) => {\n let hiddenColumns = JSON.parse(tableRoot.dataset.tableHiddenColumns);\n hiddenColumns = hiddenColumns.filter(columnName => columnName !== columnToShow);\n\n return updateTable(tableRoot, {hiddenColumns}, refreshContent);\n};\n\n/**\n * Reset table preferences.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Promise}\n */\nconst resetTablePreferences = tableRoot => refreshTableContent(tableRoot, true);\n\n/**\n * Set up listeners to handle table updates.\n */\nexport const init = () => {\n if (watching) {\n // Already watching.\n return;\n }\n watching = true;\n\n document.addEventListener('click', e => {\n const tableRoot = e.target.closest(Selectors.main.region);\n\n if (!tableRoot) {\n return;\n }\n\n const sortableLink = e.target.closest(Selectors.table.links.sortableColumn);\n if (sortableLink) {\n e.preventDefault();\n\n setSortOrder(tableRoot, sortableLink.dataset.sortby, sortableLink.dataset.sortorder)\n .catch(Notification.exception);\n }\n\n const firstInitialLink = e.target.closest(Selectors.initialsBar.links.firstInitial);\n if (firstInitialLink !== null) {\n e.preventDefault();\n\n setFirstInitial(tableRoot, firstInitialLink.dataset.initial).catch(Notification.exception);\n }\n\n const lastInitialLink = e.target.closest(Selectors.initialsBar.links.lastInitial);\n if (lastInitialLink !== null) {\n e.preventDefault();\n\n setLastInitial(tableRoot, lastInitialLink.dataset.initial).catch(Notification.exception);\n }\n\n const pageItem = e.target.closest(Selectors.paginationBar.links.pageItem);\n if (pageItem) {\n e.preventDefault();\n\n setPageNumber(tableRoot, pageItem.dataset.pageNumber).catch(Notification.exception);\n }\n\n const hide = e.target.closest(Selectors.table.links.hide);\n if (hide) {\n e.preventDefault();\n\n hideColumn(tableRoot, hide.dataset.column).catch(Notification.exception);\n }\n\n const show = e.target.closest(Selectors.table.links.show);\n if (show) {\n e.preventDefault();\n\n showColumn(tableRoot, show.dataset.column).catch(Notification.exception);\n }\n\n const resetTablePreferencesLink = e.target.closest('.resettable a');\n if (resetTablePreferencesLink) {\n e.preventDefault();\n\n resetTablePreferences(tableRoot).catch(Notification.exception);\n }\n\n const showCountLink = e.target.closest(Selectors.showCount.links.toggle);\n if (showCountLink) {\n e.preventDefault();\n\n setPageSize(tableRoot, showCountLink.dataset.targetPageSize).catch(Notification.exception);\n }\n });\n};\n\n/**\n * Fetch the table via its table region id.\n *\n * @param {String} tableRegionId\n * @returns {HTMLElement}\n */\nexport const getTableFromId = tableRegionId => {\n const tableRoot = document.querySelector(Selectors.main.fromRegionId(tableRegionId));\n\n\n if (!tableRoot) {\n // The table is not a dynamic table.\n throw new Error(\"The table specified is not a dynamic table and cannot be updated\");\n }\n\n return tableRoot;\n};\n\nexport {\n Events\n};\n"],"names":["watching","checkTableIsDynamic","tableRoot","Error","matches","Selectors","main","region","getFiltersetFromTable","JSON","parse","dataset","tableFilters","refreshTableContent","resetContent","filterset","pendingPromise","Pending","tableComponent","tableHandler","tableUniqueid","sortData","tableSortData","joinType","jointype","filters","firstinitial","tableFirstInitial","lastinitial","tableLastInitial","pageNumber","tablePageNumber","pageSize","tablePageSize","hiddenColumns","tableHiddenColumns","then","data","placeholder","document","createElement","innerHTML","html","replaceWith","childNodes","getTableFromId","dispatchEvent","CustomEvent","Events","tableContentRefreshed","bubbles","resolve","updateTable","sortBy","sortOrder","firstInitial","lastInitial","refreshContent","tableConfigChanged","unshift","sortby","sortorder","parseInt","stringify","filterJson","columnJson","Promise","getTableData","setSortOrder","setPageNumber","setPageSize","setFirstInitial","setLastInitial","hideColumn","columnToHide","push","showColumn","columnToShow","filter","columnName","addEventListener","e","target","closest","sortableLink","table","links","sortableColumn","preventDefault","catch","Notification","exception","firstInitialLink","initialsBar","initial","lastInitialLink","pageItem","paginationBar","hide","column","show","resetTablePreferences","showCountLink","showCount","toggle","targetPageSize","tableRegionId","querySelector","fromRegionId"],"mappings":";;;;;;;2JA6BIA,UAAW,QAQTC,oBAAsBC,gBACnBA,gBAEK,IAAIC,MAAM,wEAGfD,UAAUE,QAAQC,UAAUC,KAAKC,cAE5B,IAAIJ,MAAM,2EAGb,GASLK,sBAAwBN,WACnBO,KAAKC,MAAMR,UAAUS,QAAQC,cAU3BC,oBAAsB,SAACX,eAAWY,2EACrCC,UAAYP,sBAAsBN,+CACrBA,iBAEbc,eAAiB,IAAIC,iBAAQ,iDAE5B,qBACHf,UAAUS,QAAQO,eAClBhB,UAAUS,QAAQQ,aAClBjB,UAAUS,QAAQS,cAClB,CACIC,SAAUZ,KAAKC,MAAMR,UAAUS,QAAQW,eACvCC,SAAUR,UAAUS,SACpBC,QAASV,UAAUU,QACnBC,aAAcxB,UAAUS,QAAQgB,kBAChCC,YAAa1B,UAAUS,QAAQkB,iBAC/BC,WAAY5B,UAAUS,QAAQoB,gBAC9BC,SAAU9B,UAAUS,QAAQsB,cAC5BC,cAAezB,KAAKC,MAAMR,UAAUS,QAAQwB,qBAEhDrB,cAEHsB,MAAKC,aACIC,YAAcC,SAASC,cAAc,cAC3CF,YAAYG,UAAYJ,KAAKK,KAC7BxC,UAAUyC,eAAeL,YAAYM,YAG9BC,eAAe3C,UAAUS,QAAQS,kBACzCgB,MAAKlC,YACJA,UAAU4C,cAAc,IAAIC,YAAYC,gBAAOC,sBAAuB,CAClEC,SAAS,KAGNhD,aAEVkC,MAAKlC,YACFc,eAAemC,UAERjD,qEAIFkD,YAAc,SAAClD,eAAWmD,OACnCA,OAAS,KAD0BC,UAEnCA,UAAY,KAFuB7B,QAGnCA,QAAU,KAHyB8B,aAInCA,aAAe,KAJoBC,YAKnCA,YAAc,KALqB1B,WAMnCA,WAAa,KANsBE,SAOnCA,SAAW,KAPwBE,cAQnCA,cAAgB,6DAChB,GAAIuB,0EACJxD,oBAAoBC,iBAEdc,eAAiB,IAAIC,iBAAQ,sCAC/ByC,oBAAqB,KAGrBL,QAAUC,UAAW,CAGrBI,oBAAqB,QAEfrC,SAAWZ,KAAKC,MAAMR,UAAUS,QAAQW,eAC9CD,SAASsC,QAAQ,CACbC,OAAQP,OACRQ,UAAWC,SAASR,UAAW,MAEnCpD,UAAUS,QAAQW,cAAgBb,KAAKsD,UAAU1C,aAIhC,OAAjBkC,eACIrD,UAAUS,QAAQgB,oBAAsB4B,eACxCG,oBAAqB,GAGzBxD,UAAUS,QAAQgB,kBAAoB4B,cAGtB,OAAhBC,cACItD,UAAUS,QAAQkB,mBAAqB2B,cACvCE,oBAAqB,GAGzBxD,UAAUS,QAAQkB,iBAAmB2B,aAGxB,OAAbxB,WACI9B,UAAUS,QAAQsB,eAAiBD,WACnC0B,oBAAqB,GAGzBxD,UAAUS,QAAQsB,cAAgBD,UAIlCP,QAAS,OACHuC,WAAavD,KAAKsD,UAAUtC,SAE9BvB,UAAUS,QAAQC,eAAiBoD,aACnCN,oBAAqB,GAGzBxD,UAAUS,QAAQC,aAAeoD,cAKjCN,qBACA5B,WAAa,GAIbI,cAAe,OACT+B,WAAaxD,KAAKsD,UAAU7B,eAE9BhC,UAAUS,QAAQwB,qBAAuB8B,aACzCP,oBAAqB,GAGzBxD,UAAUS,QAAQwB,mBAAqB8B,kBAGxB,OAAfnC,aACI5B,UAAUS,QAAQoB,iBAAmBD,aACrC4B,oBAAqB,GAGzBxD,UAAUS,QAAQoB,gBAAkBD,YAIpC2B,gBAAkBC,mBACX7C,oBAAoBX,WAC1BkC,MAAKlC,YACFc,eAAemC,UACRjD,cAGXc,eAAemC,UACRe,QAAQf,QAAQjD,oDAUzBiE,aAAejE,YACjBD,oBAAoBC,WAEbA,UAAUS,6BAWK,SAACT,UAAWuB,aAASgC,iFAC3CL,YAAYlD,UAAW,CAACuB,QAAAA,SAAUgC,qCAQZvD,YACtBD,oBAAoBC,WAEbM,sBAAsBN,kBAYpBkE,aAAe,SAAClE,UAAWmD,OAAQC,eAAWG,iFACvDL,YAAYlD,UAAW,CAACmD,OAAAA,OAAQC,UAAAA,WAAYG,0DAUnCY,cAAgB,SAACnE,UAAW4B,gBAAY2B,iFACjDL,YAAYlD,UAAW,CAAC4B,WAAAA,YAAa2B,6EAQZvD,WAAaiE,aAAajE,WAAW6B,sBAUrDuC,YAAc,SAACpE,UAAW8B,cAAUyB,iFAC7CL,YAAYlD,UAAW,CAAC8B,SAAAA,SAAUF,WAAY,GAAI2B,uEAQ3BvD,WAAaiE,aAAajE,WAAW+B,oBAUnDsC,gBAAkB,SAACrE,UAAWqD,kBAAcE,iFACrDL,YAAYlD,UAAW,CAACqD,aAAAA,cAAeE,mFAQZvD,WAAaiE,aAAajE,WAAWyB,wBAUvD6C,eAAiB,SAACtE,UAAWsD,iBAAaC,iFACnDL,YAAYlD,UAAW,CAACsD,YAAAA,aAAcC,gFAQZvD,WAAaiE,aAAajE,WAAW2B,uBAUtD4C,WAAa,SAACvE,UAAWwE,kBAAcjB,gFAC1CvB,cAAgBzB,KAAKC,MAAMR,UAAUS,QAAQwB,2BACnDD,cAAcyC,KAAKD,cAEZtB,YAAYlD,UAAW,CAACgC,cAAAA,eAAgBuB,sDAWtCmB,WAAa,SAAC1E,UAAW2E,kBAAcpB,0EAC5CvB,cAAgBzB,KAAKC,MAAMR,UAAUS,QAAQwB,2BACjDD,cAAgBA,cAAc4C,QAAOC,YAAcA,aAAeF,eAE3DzB,YAAYlD,UAAW,CAACgC,cAAAA,eAAgBuB,8DAc/B,KACZzD,WAIJA,UAAW,EAEXuC,SAASyC,iBAAiB,SAASC,UACzB/E,UAAY+E,EAAEC,OAAOC,QAAQ9E,UAAUC,KAAKC,YAE7CL,uBAICkF,aAAeH,EAAEC,OAAOC,QAAQ9E,UAAUgF,MAAMC,MAAMC,gBACxDH,eACAH,EAAEO,iBAEFpB,aAAalE,UAAWkF,aAAazE,QAAQiD,OAAQwB,aAAazE,QAAQkD,WACzE4B,MAAMC,sBAAaC,kBAGlBC,iBAAmBX,EAAEC,OAAOC,QAAQ9E,UAAUwF,YAAYP,MAAM/B,cAC7C,OAArBqC,mBACAX,EAAEO,iBAEFjB,gBAAgBrE,UAAW0F,iBAAiBjF,QAAQmF,SAASL,MAAMC,sBAAaC,kBAG9EI,gBAAkBd,EAAEC,OAAOC,QAAQ9E,UAAUwF,YAAYP,MAAM9B,aAC7C,OAApBuC,kBACAd,EAAEO,iBAEFhB,eAAetE,UAAW6F,gBAAgBpF,QAAQmF,SAASL,MAAMC,sBAAaC,kBAG5EK,SAAWf,EAAEC,OAAOC,QAAQ9E,UAAU4F,cAAcX,MAAMU,UAC5DA,WACAf,EAAEO,iBAEFnB,cAAcnE,UAAW8F,SAASrF,QAAQmB,YAAY2D,MAAMC,sBAAaC,kBAGvEO,KAAOjB,EAAEC,OAAOC,QAAQ9E,UAAUgF,MAAMC,MAAMY,MAChDA,OACAjB,EAAEO,iBAEFf,WAAWvE,UAAWgG,KAAKvF,QAAQwF,QAAQV,MAAMC,sBAAaC,kBAG5DS,KAAOnB,EAAEC,OAAOC,QAAQ9E,UAAUgF,MAAMC,MAAMc,MAChDA,OACAnB,EAAEO,iBAEFZ,WAAW1E,UAAWkG,KAAKzF,QAAQwF,QAAQV,MAAMC,sBAAaC,YAGhCV,EAAEC,OAAOC,QAAQ,mBAE/CF,EAAEO,iBAhEgBtF,CAAAA,WAAaW,oBAAoBX,WAAW,GAkE9DmG,CAAsBnG,WAAWuF,MAAMC,sBAAaC,kBAGlDW,cAAgBrB,EAAEC,OAAOC,QAAQ9E,UAAUkG,UAAUjB,MAAMkB,QAC7DF,gBACArB,EAAEO,iBAEFlB,YAAYpE,UAAWoG,cAAc3F,QAAQ8F,gBAAgBhB,MAAMC,sBAAaC,uBAW/E9C,eAAiB6D,sBACpBxG,UAAYqC,SAASoE,cAActG,UAAUC,KAAKsG,aAAaF,oBAGhExG,gBAEK,IAAIC,MAAM,2EAGbD"} \ No newline at end of file +{"version":3,"file":"dynamic.min.js","sources":["../src/dynamic.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 .\n\n/**\n * Module to handle dynamic table features.\n *\n * @module core_table/dynamic\n * @copyright 2020 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport * as Selectors from 'core_table/local/dynamic/selectors';\nimport Events from './local/dynamic/events';\nimport Pending from 'core/pending';\nimport {addIconToContainer} from 'core/loadingicon';\nimport {fetch as fetchTableData} from 'core_table/local/dynamic/repository';\nimport Notification from 'core/notification';\nimport {replaceNode} from 'core/templates';\n\nlet watching = false;\n\n/**\n * Ensure that a table is a dynamic table.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Bool}\n */\nconst checkTableIsDynamic = tableRoot => {\n if (!tableRoot) {\n // The table is not a dynamic table.\n throw new Error(\"The table specified is not a dynamic table and cannot be updated\");\n }\n\n if (!tableRoot.matches(Selectors.main.region)) {\n // The table is not a dynamic table.\n throw new Error(\"The table specified is not a dynamic table and cannot be updated\");\n }\n\n return true;\n};\n\n/**\n * Get the filterset data from a known dynamic table.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Object}\n */\nconst getFiltersetFromTable = tableRoot => {\n return JSON.parse(tableRoot.dataset.tableFilters);\n};\n\n/**\n * Update the specified table based on its current values.\n *\n * @param {HTMLElement} tableRoot\n * @param {Bool} resetContent\n * @returns {Promise}\n */\nexport const refreshTableContent = (tableRoot, resetContent = false) => {\n const filterset = getFiltersetFromTable(tableRoot);\n addIconToContainer(tableRoot);\n\n const pendingPromise = new Pending('core_table/dynamic:refreshTableContent');\n\n return fetchTableData(\n tableRoot.dataset.tableComponent,\n tableRoot.dataset.tableHandler,\n tableRoot.dataset.tableUniqueid,\n {\n sortData: JSON.parse(tableRoot.dataset.tableSortData),\n joinType: filterset.jointype,\n filters: filterset.filters,\n firstinitial: tableRoot.dataset.tableFirstInitial,\n lastinitial: tableRoot.dataset.tableLastInitial,\n pageNumber: tableRoot.dataset.tablePageNumber,\n pageSize: tableRoot.dataset.tablePageSize,\n hiddenColumns: JSON.parse(tableRoot.dataset.tableHiddenColumns),\n },\n resetContent,\n )\n .then(data => {\n const tableRootReplacement = replaceNode(tableRoot, data.html, '');\n\n // Update the tableRoot.\n return tableRootReplacement[0];\n }).then(tableRoot => {\n tableRoot.dispatchEvent(new CustomEvent(Events.tableContentRefreshed, {\n bubbles: true,\n }));\n\n return tableRoot;\n })\n .then(tableRoot => {\n pendingPromise.resolve();\n\n return tableRoot;\n });\n};\n\nexport const updateTable = (tableRoot, {\n sortBy = null,\n sortOrder = null,\n filters = null,\n firstInitial = null,\n lastInitial = null,\n pageNumber = null,\n pageSize = null,\n hiddenColumns = null,\n} = {}, refreshContent = true) => {\n checkTableIsDynamic(tableRoot);\n\n const pendingPromise = new Pending('core_table/dynamic:updateTable');\n let tableConfigChanged = false;\n\n // Update sort fields.\n if (sortBy && sortOrder) {\n // Always update the table if requested and there were sort fields.\n // These fields are only ever normalised in the backend.\n tableConfigChanged = true;\n\n const sortData = JSON.parse(tableRoot.dataset.tableSortData);\n sortData.unshift({\n sortby: sortBy,\n sortorder: parseInt(sortOrder, 10),\n });\n tableRoot.dataset.tableSortData = JSON.stringify(sortData);\n }\n\n // Update initials.\n if (firstInitial !== null) {\n if (tableRoot.dataset.tableFirstInitial !== firstInitial) {\n tableConfigChanged = true;\n }\n\n tableRoot.dataset.tableFirstInitial = firstInitial;\n }\n\n if (lastInitial !== null) {\n if (tableRoot.dataset.tableLastInitial !== lastInitial) {\n tableConfigChanged = true;\n }\n\n tableRoot.dataset.tableLastInitial = lastInitial;\n }\n\n if (pageSize !== null) {\n if (tableRoot.dataset.tablePageSize != pageSize) {\n tableConfigChanged = true;\n }\n\n tableRoot.dataset.tablePageSize = pageSize;\n }\n\n // Update filters.\n if (filters) {\n const filterJson = JSON.stringify(filters);\n\n if (tableRoot.dataset.tableFilters !== filterJson) {\n tableConfigChanged = true;\n }\n\n tableRoot.dataset.tableFilters = filterJson;\n }\n\n // Reset to page 1 when table content is being altered by filtering or sorting.\n // This ensures the table page being loaded always exists, and gives a consistent experience.\n if (tableConfigChanged) {\n pageNumber = 1;\n }\n\n // Update hidden columns.\n if (hiddenColumns) {\n const columnJson = JSON.stringify(hiddenColumns);\n\n if (tableRoot.dataset.tableHiddenColumns !== columnJson) {\n tableConfigChanged = true;\n }\n\n tableRoot.dataset.tableHiddenColumns = columnJson;\n }\n\n if (pageNumber !== null) {\n if (tableRoot.dataset.tablePageNumber != pageNumber) {\n tableConfigChanged = true;\n }\n\n tableRoot.dataset.tablePageNumber = pageNumber;\n }\n\n // Refresh.\n if (refreshContent && tableConfigChanged) {\n return refreshTableContent(tableRoot)\n .then(tableRoot => {\n pendingPromise.resolve();\n return tableRoot;\n });\n } else {\n pendingPromise.resolve();\n return Promise.resolve(tableRoot);\n }\n};\n\n/**\n * Get the table dataset for the specified tableRoot, ensuring that the provided table is a dynamic table.\n *\n * @param {HTMLElement} tableRoot\n * @returns {DOMStringMap}\n */\nconst getTableData = tableRoot => {\n checkTableIsDynamic(tableRoot);\n\n return tableRoot.dataset;\n};\n\n/**\n * Update the specified table using the new filters.\n *\n * @param {HTMLElement} tableRoot\n * @param {Object} filters\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setFilters = (tableRoot, filters, refreshContent = true) =>\n updateTable(tableRoot, {filters}, refreshContent);\n\n/**\n * Get the filter data for the specified table.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Object}\n */\nexport const getFilters = tableRoot => {\n checkTableIsDynamic(tableRoot);\n\n return getFiltersetFromTable(tableRoot);\n};\n\n/**\n * Update the sort order.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} sortBy\n * @param {Number} sortOrder\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setSortOrder = (tableRoot, sortBy, sortOrder, refreshContent = true) =>\n updateTable(tableRoot, {sortBy, sortOrder}, refreshContent);\n\n/**\n * Set the page number.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} pageNumber\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setPageNumber = (tableRoot, pageNumber, refreshContent = true) =>\n updateTable(tableRoot, {pageNumber}, refreshContent);\n\n/**\n * Get the current page number.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Number}\n */\nexport const getPageNumber = tableRoot => getTableData(tableRoot).tablePageNumber;\n\n/**\n * Set the page size.\n *\n * @param {HTMLElement} tableRoot\n * @param {Number} pageSize\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setPageSize = (tableRoot, pageSize, refreshContent = true) =>\n updateTable(tableRoot, {pageSize, pageNumber: 1}, refreshContent);\n\n/**\n * Get the current page size.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Number}\n */\nexport const getPageSize = tableRoot => getTableData(tableRoot).tablePageSize;\n\n/**\n * Update the first initial to show.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} firstInitial\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setFirstInitial = (tableRoot, firstInitial, refreshContent = true) =>\n updateTable(tableRoot, {firstInitial}, refreshContent);\n\n/**\n * Get the current first initial filter.\n *\n * @param {HTMLElement} tableRoot\n * @returns {String}\n */\nexport const getFirstInitial = tableRoot => getTableData(tableRoot).tableFirstInitial;\n\n/**\n * Update the last initial to show.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} lastInitial\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setLastInitial = (tableRoot, lastInitial, refreshContent = true) =>\n updateTable(tableRoot, {lastInitial}, refreshContent);\n\n/**\n * Get the current last initial filter.\n *\n * @param {HTMLElement} tableRoot\n * @returns {String}\n */\nexport const getLastInitial = tableRoot => getTableData(tableRoot).tableLastInitial;\n\n/**\n * Hide a column in the participants table.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} columnToHide\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const hideColumn = (tableRoot, columnToHide, refreshContent = true) => {\n const hiddenColumns = JSON.parse(tableRoot.dataset.tableHiddenColumns);\n hiddenColumns.push(columnToHide);\n\n return updateTable(tableRoot, {hiddenColumns}, refreshContent);\n};\n\n/**\n * Make a hidden column visible in the participants table.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} columnToShow\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const showColumn = (tableRoot, columnToShow, refreshContent = true) => {\n let hiddenColumns = JSON.parse(tableRoot.dataset.tableHiddenColumns);\n hiddenColumns = hiddenColumns.filter(columnName => columnName !== columnToShow);\n\n return updateTable(tableRoot, {hiddenColumns}, refreshContent);\n};\n\n/**\n * Reset table preferences.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Promise}\n */\nconst resetTablePreferences = tableRoot => refreshTableContent(tableRoot, true);\n\n/**\n * Set up listeners to handle table updates.\n */\nexport const init = () => {\n if (watching) {\n // Already watching.\n return;\n }\n watching = true;\n\n document.addEventListener('click', e => {\n const tableRoot = e.target.closest(Selectors.main.region);\n\n if (!tableRoot) {\n return;\n }\n\n const sortableLink = e.target.closest(Selectors.table.links.sortableColumn);\n if (sortableLink) {\n e.preventDefault();\n\n setSortOrder(tableRoot, sortableLink.dataset.sortby, sortableLink.dataset.sortorder)\n .catch(Notification.exception);\n }\n\n const firstInitialLink = e.target.closest(Selectors.initialsBar.links.firstInitial);\n if (firstInitialLink !== null) {\n e.preventDefault();\n\n setFirstInitial(tableRoot, firstInitialLink.dataset.initial).catch(Notification.exception);\n }\n\n const lastInitialLink = e.target.closest(Selectors.initialsBar.links.lastInitial);\n if (lastInitialLink !== null) {\n e.preventDefault();\n\n setLastInitial(tableRoot, lastInitialLink.dataset.initial).catch(Notification.exception);\n }\n\n const pageItem = e.target.closest(Selectors.paginationBar.links.pageItem);\n if (pageItem) {\n e.preventDefault();\n\n setPageNumber(tableRoot, pageItem.dataset.pageNumber).catch(Notification.exception);\n }\n\n const hide = e.target.closest(Selectors.table.links.hide);\n if (hide) {\n e.preventDefault();\n\n hideColumn(tableRoot, hide.dataset.column).catch(Notification.exception);\n }\n\n const show = e.target.closest(Selectors.table.links.show);\n if (show) {\n e.preventDefault();\n\n showColumn(tableRoot, show.dataset.column).catch(Notification.exception);\n }\n\n const resetTablePreferencesLink = e.target.closest('.resettable a');\n if (resetTablePreferencesLink) {\n e.preventDefault();\n\n resetTablePreferences(tableRoot).catch(Notification.exception);\n }\n\n const showCountLink = e.target.closest(Selectors.showCount.links.toggle);\n if (showCountLink) {\n e.preventDefault();\n\n setPageSize(tableRoot, showCountLink.dataset.targetPageSize).catch(Notification.exception);\n }\n });\n};\n\n/**\n * Fetch the table via its table region id.\n *\n * @param {String} tableRegionId\n * @returns {HTMLElement}\n */\nexport const getTableFromId = tableRegionId => {\n const tableRoot = document.querySelector(Selectors.main.fromRegionId(tableRegionId));\n\n\n if (!tableRoot) {\n // The table is not a dynamic table.\n throw new Error(\"The table specified is not a dynamic table and cannot be updated\");\n }\n\n return tableRoot;\n};\n\nexport {\n Events\n};\n"],"names":["watching","checkTableIsDynamic","tableRoot","Error","matches","Selectors","main","region","getFiltersetFromTable","JSON","parse","dataset","tableFilters","refreshTableContent","resetContent","filterset","pendingPromise","Pending","tableComponent","tableHandler","tableUniqueid","sortData","tableSortData","joinType","jointype","filters","firstinitial","tableFirstInitial","lastinitial","tableLastInitial","pageNumber","tablePageNumber","pageSize","tablePageSize","hiddenColumns","tableHiddenColumns","then","data","html","dispatchEvent","CustomEvent","Events","tableContentRefreshed","bubbles","resolve","updateTable","sortBy","sortOrder","firstInitial","lastInitial","refreshContent","tableConfigChanged","unshift","sortby","sortorder","parseInt","stringify","filterJson","columnJson","Promise","getTableData","setSortOrder","setPageNumber","setPageSize","setFirstInitial","setLastInitial","hideColumn","columnToHide","push","showColumn","columnToShow","filter","columnName","document","addEventListener","e","target","closest","sortableLink","table","links","sortableColumn","preventDefault","catch","Notification","exception","firstInitialLink","initialsBar","initial","lastInitialLink","pageItem","paginationBar","hide","column","show","resetTablePreferences","showCountLink","showCount","toggle","targetPageSize","tableRegionId","querySelector","fromRegionId"],"mappings":"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"} \ No newline at end of file diff --git a/lib/table/amd/src/dynamic.js b/lib/table/amd/src/dynamic.js index 571b5ab6212..5fa26ca1af5 100644 --- a/lib/table/amd/src/dynamic.js +++ b/lib/table/amd/src/dynamic.js @@ -26,6 +26,7 @@ import Pending from 'core/pending'; import {addIconToContainer} from 'core/loadingicon'; import {fetch as fetchTableData} from 'core_table/local/dynamic/repository'; import Notification from 'core/notification'; +import {replaceNode} from 'core/templates'; let watching = false; @@ -89,12 +90,10 @@ export const refreshTableContent = (tableRoot, resetContent = false) => { resetContent, ) .then(data => { - const placeholder = document.createElement('div'); - placeholder.innerHTML = data.html; - tableRoot.replaceWith(...placeholder.childNodes); + const tableRootReplacement = replaceNode(tableRoot, data.html, ''); // Update the tableRoot. - return getTableFromId(tableRoot.dataset.tableUniqueid); + return tableRootReplacement[0]; }).then(tableRoot => { tableRoot.dispatchEvent(new CustomEvent(Events.tableContentRefreshed, { bubbles: true,