109 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
|  * Apply the predefined action for the current element
 | |
|  *
 | |
|  * @param {Event} event
 | |
|  */
 | |
| function gridItemAction(event) {
 | |
|   let item = event.target;
 | |
|   if (item.nodeName === 'SPAN' && ['A', 'BUTTON'].includes(item.parentNode.nodeName)) {
 | |
|     item = item.parentNode;
 | |
|   }
 | |
|   if (item.nodeName === 'A') {
 | |
|     event.preventDefault();
 | |
|   }
 | |
|   if (item.hasAttribute('disabled') || !item.hasAttribute('data-item-task')) {
 | |
|     return;
 | |
|   }
 | |
|   const {
 | |
|     itemId
 | |
|   } = item.dataset;
 | |
|   const {
 | |
|     itemTask
 | |
|   } = item.dataset;
 | |
|   const {
 | |
|     itemFormId
 | |
|   } = item.dataset;
 | |
|   if (itemFormId) {
 | |
|     Joomla.listItemTask(itemId, itemTask, itemFormId);
 | |
|   } else {
 | |
|     Joomla.listItemTask(itemId, itemTask);
 | |
|   }
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * Apply the transition state for the current element
 | |
|  *
 | |
|  * @param {Event} event
 | |
|  */
 | |
| function gridTransitionItemAction(event) {
 | |
|   const item = event.target;
 | |
|   if (item.nodeName !== 'SELECT' || item.hasAttribute('disabled')) {
 | |
|     return;
 | |
|   }
 | |
|   const {
 | |
|     itemId
 | |
|   } = item.dataset;
 | |
|   const {
 | |
|     itemTask
 | |
|   } = item.dataset;
 | |
|   const {
 | |
|     itemFormId
 | |
|   } = item.dataset;
 | |
|   item.form.transition_id.value = item.value;
 | |
|   if (itemFormId) {
 | |
|     Joomla.listItemTask(itemId, itemTask, itemFormId);
 | |
|   } else {
 | |
|     Joomla.listItemTask(itemId, itemTask);
 | |
|   }
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * Apply the transition state for the current element
 | |
|  *
 | |
|  * @param {Event} event
 | |
|  */
 | |
| function gridTransitionButtonAction(event) {
 | |
|   let item = event.target;
 | |
|   if (item.nodeName === 'SPAN' && item.parentNode.nodeName === 'BUTTON') {
 | |
|     item = item.parentNode;
 | |
|   }
 | |
|   if (item.hasAttribute('disabled')) {
 | |
|     return;
 | |
|   }
 | |
|   Joomla.toggleAllNextElements(item, 'd-none');
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * Switch the check state for the current element
 | |
|  *
 | |
|  * @param {Event} event
 | |
|  */
 | |
| function applyIsChecked(event) {
 | |
|   const item = event.target;
 | |
|   const itemFormId = item.dataset.itemFormId || '';
 | |
|   if (itemFormId) {
 | |
|     Joomla.isChecked(item.checked, itemFormId);
 | |
|   } else {
 | |
|     Joomla.isChecked(item.checked);
 | |
|   }
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * Set up an interactive list elements
 | |
|  *
 | |
|  * @param {Event} event
 | |
|  */
 | |
| const setup = ({
 | |
|   target
 | |
| }) => {
 | |
|   target.querySelectorAll('.js-grid-item-check-all').forEach(element => element.addEventListener('click', event => Joomla.checkAll(event.target)));
 | |
|   target.querySelectorAll('.js-grid-item-is-checked').forEach(element => element.addEventListener('click', applyIsChecked));
 | |
|   target.querySelectorAll('.js-grid-item-action').forEach(element => element.addEventListener('click', gridItemAction));
 | |
|   target.querySelectorAll('.js-grid-item-transition-action').forEach(element => element.addEventListener('change', gridTransitionItemAction));
 | |
|   target.querySelectorAll('.js-grid-button-transition-action').forEach(element => element.addEventListener('click', gridTransitionButtonAction));
 | |
| };
 | |
| setup({
 | |
|   target: document
 | |
| });
 | |
| document.addEventListener('joomla:updated', setup);
 |