first commit
This commit is contained in:
216
media/system/js/fields/modal-fields.js
Normal file
216
media/system/js/fields/modal-fields.js
Normal file
@ -0,0 +1,216 @@
|
||||
/**
|
||||
* @copyright (C) 2016 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
(function() {
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* Process modal fields in parent.
|
||||
*
|
||||
* @param string fieldPrefix The fields to be updated prefix.
|
||||
* @param string id The new id for the item.
|
||||
* @param string title The new title for the item.
|
||||
* @param string catid Future usage.
|
||||
* @param object object Future usage.
|
||||
* @param string url Future usage.
|
||||
* @param string language Future usage.
|
||||
*
|
||||
* @return boolean
|
||||
*
|
||||
* @since 3.7.0
|
||||
*/
|
||||
window.processModalParent = function (fieldPrefix, id, title, catid, url, language, object)
|
||||
{
|
||||
var fieldId = document.getElementById(fieldPrefix + '_id') || document.getElementById(fieldPrefix + '_value'),
|
||||
fieldTitle = document.getElementById(fieldPrefix + '_name') || document.getElementById(fieldPrefix);
|
||||
|
||||
// Default values.
|
||||
id = id || '';
|
||||
title = title || '';
|
||||
catid = catid || '';
|
||||
object = object || '';
|
||||
url = url || '';
|
||||
language = language || '';
|
||||
|
||||
var isChanged = fieldId.value !== id;
|
||||
|
||||
if (id)
|
||||
{
|
||||
fieldId.value = id;
|
||||
fieldTitle.value = title;
|
||||
|
||||
if (document.getElementById(fieldPrefix + '_select'))
|
||||
{
|
||||
document.getElementById(fieldPrefix + '_select').classList.add('hidden');
|
||||
}
|
||||
if (document.getElementById(fieldPrefix + '_new'))
|
||||
{
|
||||
document.getElementById(fieldPrefix + '_new').classList.add('hidden');
|
||||
}
|
||||
if (document.getElementById(fieldPrefix + '_edit'))
|
||||
{
|
||||
document.getElementById(fieldPrefix + '_edit').classList.remove('hidden');
|
||||
}
|
||||
if (document.getElementById(fieldPrefix + '_clear'))
|
||||
{
|
||||
document.getElementById(fieldPrefix + '_clear').classList.remove('hidden');
|
||||
}
|
||||
if (document.getElementById(fieldPrefix + '_propagate'))
|
||||
{
|
||||
document.getElementById(fieldPrefix + '_propagate').classList.remove('hidden');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fieldId.value = '';
|
||||
fieldTitle.value = fieldId.getAttribute('data-text');
|
||||
|
||||
if (document.getElementById(fieldPrefix + '_select'))
|
||||
{
|
||||
document.getElementById(fieldPrefix + '_select').classList.remove('hidden');
|
||||
}
|
||||
if (document.getElementById(fieldPrefix + '_new'))
|
||||
{
|
||||
document.getElementById(fieldPrefix + '_new').classList.remove('hidden');
|
||||
}
|
||||
if (document.getElementById(fieldPrefix + '_edit'))
|
||||
{
|
||||
document.getElementById(fieldPrefix + '_edit').classList.add('hidden');
|
||||
}
|
||||
if (document.getElementById(fieldPrefix + '_clear'))
|
||||
{
|
||||
document.getElementById(fieldPrefix + '_clear').classList.add('hidden');
|
||||
}
|
||||
if (document.getElementById(fieldPrefix + '_propagate'))
|
||||
{
|
||||
document.getElementById(fieldPrefix + '_propagate').classList.add('hidden');
|
||||
}
|
||||
}
|
||||
|
||||
if (isChanged) {
|
||||
fieldId.dispatchEvent(new CustomEvent('change', { bubbles: true, cancelable: true }));
|
||||
}
|
||||
|
||||
if (fieldId.getAttribute('data-required') == '1')
|
||||
{
|
||||
document.formvalidator.validate(fieldId);
|
||||
document.formvalidator.validate(fieldTitle);
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Process new/edit modal fields in child.
|
||||
*
|
||||
* @param object element The modal footer button element.
|
||||
* @param string fieldPrefix The fields to be updated prefix.
|
||||
* @param string action Modal action (add, edit).
|
||||
* @param string itemType The item type (Article, Contact, etc).
|
||||
* @param string task Task to be done (apply, save, cancel).
|
||||
* @param string formId Id of the form field (defaults to itemtype-form).
|
||||
* @param string idFieldId Id of the id field (defaults to jform_id).
|
||||
* @param string titleFieldId Id of the title field (defaults to jform_title).
|
||||
*
|
||||
* @return boolean
|
||||
*
|
||||
* @since 3.7.0
|
||||
*/
|
||||
window.processModalEdit = function (element, fieldPrefix, action, itemType, task, formId, idFieldId, titleFieldId)
|
||||
{
|
||||
formId = formId || itemType.toLowerCase() + '-form';
|
||||
idFieldId = idFieldId || 'jform_id';
|
||||
titleFieldId = titleFieldId || 'jform_title';
|
||||
|
||||
var modalId = element.parentNode.parentNode.parentNode.parentNode.id, submittedTask = task;
|
||||
var iframe = document.getElementById(modalId).getElementsByTagName('iframe')[0];
|
||||
|
||||
// Set frame id.
|
||||
iframe.id = 'Frame_' + modalId;
|
||||
|
||||
var iframeDocument = iframe.contentDocument;
|
||||
|
||||
// If Close (cancel task), close the modal.
|
||||
if (task === 'cancel')
|
||||
{
|
||||
// Submit button on child iframe so we can check out.
|
||||
iframe.contentWindow.Joomla.submitbutton(itemType.toLowerCase() + '.' + task);
|
||||
|
||||
Joomla.Modal.getCurrent().close();
|
||||
}
|
||||
// For Save (apply task) and Save & Close (save task).
|
||||
else
|
||||
{
|
||||
// Attach onload event to the iframe.
|
||||
iframe.addEventListener('load', function()
|
||||
{
|
||||
// Reload iframe document var value.
|
||||
iframeDocument = this.contentDocument;
|
||||
|
||||
// Validate the child form and update parent form.
|
||||
if (
|
||||
iframeDocument.getElementById(idFieldId)
|
||||
&& iframeDocument.getElementById(idFieldId).value != '0'
|
||||
&& [].slice.call(iframeDocument.querySelectorAll('joomla-alert[type="danger"]')).length == 0
|
||||
) {
|
||||
window.processModalParent(fieldPrefix, iframeDocument.getElementById(idFieldId).value, iframeDocument.getElementById(titleFieldId).value);
|
||||
|
||||
// If Save & Close (save task), submit the edit close action (so we don't have checked out items).
|
||||
if (task === 'save')
|
||||
{
|
||||
window.processModalEdit(element, fieldPrefix, 'edit', itemType, 'cancel', formId, idFieldId, titleFieldId);
|
||||
}
|
||||
}
|
||||
|
||||
// Show the iframe again for future modals or in case of error.
|
||||
iframe.classList.remove('visually-hidden');
|
||||
});
|
||||
|
||||
// Submit button on child iframe.
|
||||
if (iframeDocument.formvalidator.isValid(iframeDocument.getElementById(formId)))
|
||||
{
|
||||
// For Save & Close (save task) when creating we need to replace the task as apply because of redirects after submit and hide the iframe.
|
||||
if (task === 'save')
|
||||
{
|
||||
submittedTask = 'apply';
|
||||
iframe.classList.add('visually-hidden');
|
||||
}
|
||||
|
||||
iframe.contentWindow.Joomla.submitbutton(itemType.toLowerCase() + '.' + submittedTask);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Process select modal fields in child.
|
||||
*
|
||||
* @param string itemType The item type (Article, Contact, etc).
|
||||
* @param string fieldPrefix The fields to be updated prefix.
|
||||
* @param string id The new id for the item.
|
||||
* @param string title The new title for the item.
|
||||
* @param string catid Future usage.
|
||||
* @param object object Future usage.
|
||||
* @param string url Future usage.
|
||||
* @param string language Future usage.
|
||||
*
|
||||
* @return boolean
|
||||
*
|
||||
* @since 3.7.0
|
||||
*/
|
||||
window.processModalSelect = function(itemType, fieldPrefix, id, title, catid, object, url, language) {
|
||||
window.processModalParent(fieldPrefix, id, title, catid, url, language, object);
|
||||
|
||||
// Close Modal only when necessary.
|
||||
if (Joomla.Modal.getCurrent())
|
||||
{
|
||||
Joomla.Modal.getCurrent().close();
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
}());
|
||||
Reference in New Issue
Block a user