primo commit
This commit is contained in:
165
media/com_menus/js/admin-item-edit_modules.js
Normal file
165
media/com_menus/js/admin-item-edit_modules.js
Normal file
@ -0,0 +1,165 @@
|
||||
/**
|
||||
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
const options = Joomla.getOptions('menus-edit-modules', {});
|
||||
const viewLevels = options.viewLevels || [];
|
||||
const menuId = options.itemId || 0;
|
||||
const assigned1 = document.getElementById('jform_toggle_modules_assigned1');
|
||||
const assigned0 = document.getElementById('jform_toggle_modules_assigned0');
|
||||
const published1 = document.getElementById('jform_toggle_modules_published1');
|
||||
const published0 = document.getElementById('jform_toggle_modules_published0');
|
||||
if (assigned1) {
|
||||
assigned1.addEventListener('click', () => {
|
||||
document.querySelectorAll('tr.no').forEach(item => {
|
||||
item.classList.add('table-row');
|
||||
item.classList.remove('hidden');
|
||||
});
|
||||
});
|
||||
}
|
||||
if (assigned0) {
|
||||
assigned0.addEventListener('click', () => {
|
||||
document.querySelectorAll('tr.no').forEach(item => {
|
||||
item.classList.add('hidden');
|
||||
item.classList.remove('table-row');
|
||||
});
|
||||
});
|
||||
}
|
||||
if (published1) {
|
||||
published1.addEventListener('click', () => {
|
||||
document.querySelectorAll('.table tr.unpublished').forEach(item => {
|
||||
item.classList.add('table-row');
|
||||
item.classList.remove('hidden');
|
||||
});
|
||||
});
|
||||
}
|
||||
if (published0) {
|
||||
published0.addEventListener('click', () => {
|
||||
document.querySelectorAll('.table tr.unpublished').forEach(item => {
|
||||
item.classList.add('hidden');
|
||||
item.classList.remove('table-row');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* A helper to create an element
|
||||
* @param {String} tag
|
||||
* @param {String} content
|
||||
* @param {Array} classList
|
||||
* @returns {HTMLElement}
|
||||
*/
|
||||
const createElement = (tag, content, classList = []) => {
|
||||
const el = document.createElement(tag);
|
||||
el.textContent = content;
|
||||
if (classList.length) {
|
||||
el.classList.add(...classList);
|
||||
}
|
||||
return el;
|
||||
};
|
||||
|
||||
/**
|
||||
* Update module in list
|
||||
* @param {Object} data
|
||||
*/
|
||||
const updateView = data => {
|
||||
const modId = data.id;
|
||||
const updPosition = data.position;
|
||||
const updTitle = data.title;
|
||||
const updMenus = data.assignment;
|
||||
const updStatus = data.status;
|
||||
const updAccess = data.access;
|
||||
const tmpMenu = document.getElementById(`menus-${modId}`);
|
||||
const tmpRow = document.getElementById(`tr-${modId}`);
|
||||
const tmpStatus = document.getElementById(`status-${modId}`);
|
||||
const assigned = data.assigned || [];
|
||||
const inMenus = assigned.map(v => Math.abs(v));
|
||||
const inAssignedList = inMenus.indexOf(menuId);
|
||||
let assignedState = 0; // 0 = No, 1 = Yes, 2 = All
|
||||
|
||||
// Update assignment badge
|
||||
if (updMenus === '-') {
|
||||
assignedState = 0;
|
||||
} else if (updMenus === 0) {
|
||||
assignedState = 2;
|
||||
} else if (updMenus > 0) {
|
||||
if (inAssignedList >= 0) {
|
||||
assignedState = 1;
|
||||
} else if (inAssignedList < 0) {
|
||||
assignedState = 0;
|
||||
}
|
||||
} else if (updMenus < 0) {
|
||||
if (inAssignedList >= 0) {
|
||||
assignedState = 0;
|
||||
} else if (inAssignedList < 0) {
|
||||
assignedState = 1;
|
||||
}
|
||||
}
|
||||
switch (assignedState) {
|
||||
case 1:
|
||||
tmpMenu.innerHTML = createElement('span', Joomla.Text._('JYES'), ['badge', 'bg-success']).outerHTML;
|
||||
tmpRow.classList.add('no');
|
||||
break;
|
||||
case 2:
|
||||
tmpMenu.innerHTML = createElement('span', Joomla.Text._('JALL'), ['badge', 'bg-info']).outerHTML;
|
||||
tmpRow.classList.add('no');
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
tmpMenu.innerHTML = createElement('span', Joomla.Text._('JNO'), ['badge', 'bg-danger']).outerHTML;
|
||||
tmpRow.classList.add('no');
|
||||
}
|
||||
|
||||
// Update status
|
||||
if (updStatus === 1) {
|
||||
tmpStatus.innerHTML = createElement('span', Joomla.Text._('JYES'), ['badge', 'bg-success']).outerHTML;
|
||||
tmpRow.classList.remove('unpublished');
|
||||
} else if (updStatus === 0) {
|
||||
tmpStatus.innerHTML = createElement('span', Joomla.Text._('JNO'), ['badge', 'bg-danger']).outerHTML;
|
||||
tmpRow.classList.add('unpublished');
|
||||
} else if (updStatus === -2) {
|
||||
tmpStatus.innerHTML = createElement('span', Joomla.Text._('JTRASHED'), ['badge', 'bg-secondary']).outerHTML;
|
||||
tmpRow.classList.add('unpublished');
|
||||
}
|
||||
|
||||
// Update Title, Position and Access
|
||||
document.querySelector(`#title-${modId}`).textContent = updTitle;
|
||||
document.querySelector(`#position-${modId}`).textContent = updPosition;
|
||||
document.querySelector(`#access-${modId}`).textContent = viewLevels[updAccess] || '';
|
||||
};
|
||||
|
||||
/**
|
||||
* Message listener
|
||||
* @param {MessageEvent} event
|
||||
*/
|
||||
const msgListener = function msgListener(event) {
|
||||
// Avoid cross origins
|
||||
if (event.origin !== window.location.origin) return;
|
||||
// Check message
|
||||
if (event.data.messageType === 'joomla:content-select' && event.data.contentType === 'com_modules.module') {
|
||||
// Update view, if there are any changes
|
||||
if (event.data.id) {
|
||||
updateView(event.data);
|
||||
}
|
||||
// Close dialog
|
||||
this.close();
|
||||
}
|
||||
};
|
||||
|
||||
// Listen when "add module" dialog opens, and add message listener
|
||||
document.addEventListener('joomla-dialog:open', ({
|
||||
target
|
||||
}) => {
|
||||
if (!target.classList.contains('menus-dialog-module-editing')) return;
|
||||
// Create a listener with current dialog context
|
||||
const listener = msgListener.bind(target);
|
||||
|
||||
// Wait for a message
|
||||
window.addEventListener('message', listener);
|
||||
|
||||
// Remove listener on close
|
||||
target.addEventListener('joomla-dialog:close', () => {
|
||||
window.removeEventListener('message', listener);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user