primo commit

This commit is contained in:
2024-12-17 17:34:10 +01:00
commit e650f8df99
16435 changed files with 2451012 additions and 0 deletions

View File

@ -0,0 +1,120 @@
/**
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
Joomla = window.Joomla || {};
(Joomla => {
Joomla.submitbutton = task => {
if (task === 'module.cancel' || document.formvalidator.isValid(document.getElementById('module-form'))) {
Joomla.submitform(task, document.getElementById('module-form'));
const options = Joomla.getOptions('module-edit');
if (window.self !== window.top) {
if (window.parent.viewLevels) {
const updPosition = document.getElementById('jform_position').value;
const updTitle = document.getElementById('jform_title').value;
const updMenus = document.querySelector('#jform_assignment').value;
const updStatus = document.querySelector('#jform_published').value;
const updAccess = document.querySelector('#jform_access').value;
const tmpMenu = window.parent.document.getElementById(`menus-${options.itemId}`);
const tmpRow = window.parent.document.getElementById(`tr-${options.itemId}`);
const tmpStatus = window.parent.document.getElementById(`status-${options.itemId}`);
window.parent.inMenus = [];
window.parent.numMenus = [].slice.call(document.querySelectorAll('input[name="jform[assigned][]"]')).length;
[].slice.call(document.querySelectorAll('input[name="jform[assigned][]"]')).forEach(element => {
if (updMenus > 0) {
if (element.checked) {
window.parent.inMenus.push(parseInt(element.value, 10));
}
}
if (updMenus < 0) {
if (!element.checked) {
window.parent.inMenus.push(parseInt(element.value, 10));
}
}
});
if (updMenus === '-') {
tmpMenu.innerHTML = Joomla.sanitizeHtml(`<span class="badge bg-danger">${Joomla.Text._('JNO')}</span>`);
if (!tmpRow.classList.contains('no') || tmpRow.classList.length === 0) {
tmpRow.classList.add('no');
}
}
if (parseInt(updMenus, 10) === 0) {
tmpMenu.innerHTML = Joomla.sanitizeHtml(`<span class="badge bg-info">${Joomla.Text._('JALL')}</span>`);
if (tmpRow.classList.contains('no')) {
tmpRow.classList.remove('no');
}
}
if (parseInt(updMenus, 10) > 0) {
if (window.parent.inMenus.indexOf(window.parent.menuId) >= 0) {
if (window.parent.numMenus === window.parent.inMenus.length) {
tmpMenu.innerHTML = Joomla.sanitizeHtml(`<span class="badge bg-info">${Joomla.Text._('JALL')}</span>`);
if (tmpRow.classList.contains('no') || tmpRow.classList.length === 0) {
tmpRow.classList.remove('no');
}
} else {
tmpMenu.innerHTML = Joomla.sanitizeHtml(`<span class="badge bg-success">${Joomla.Text._('JYES')}</span>`);
if (tmpRow.classList.contains('no')) {
tmpRow.classList.remove('no');
}
}
}
if (window.parent.inMenus.indexOf(window.parent.menuId) < 0) {
tmpMenu.innerHTML = Joomla.sanitizeHtml(`<span class="badge bg-danger">${Joomla.Text._('JNO')}</span>`);
if (!tmpRow.classList.contains('no')) {
tmpRow.classList.add('no');
}
}
}
if (parseInt(updMenus, 10) < 0) {
if (window.parent.inMenus.indexOf(window.parent.menuId) >= 0) {
if (window.parent.numMenus === window.parent.inMenus.length) {
tmpMenu.innerHTML = Joomla.sanitizeHtml(`<span class="badge bg-info">${Joomla.Text._('JALL')}</span>`);
if (tmpRow.classList.contains('no')) {
tmpRow.classList.remove('no');
}
} else {
tmpMenu.innerHTML = Joomla.sanitizeHtml(`<span class="badge bg-success">${Joomla.Text._('JYES')}</span>`);
if (tmpRow.classList.contains('no')) {
tmpRow.classList.remove('no');
}
}
}
if (window.parent.inMenus.indexOf(window.parent.menuId) < 0) {
tmpMenu.innerHTML = Joomla.sanitizeHtml(`<span class="badge bg-danger">${Joomla.Text._('JNO')}</span>`);
if (!tmpRow.classList.contains('no') || tmpRow.classList.length === 0) {
tmpRow.classList.add('no');
}
}
}
if (parseInt(updStatus, 10) === 1) {
tmpStatus.innerHTML = Joomla.sanitizeHtml(`<span class="badge bg-success">${Joomla.Text._('JYES')}</span>`);
if (tmpRow.classList.contains('unpublished')) {
tmpRow.classList.remove('unpublished');
}
}
if (parseInt(updStatus, 10) === 0) {
tmpStatus.innerHTML = Joomla.sanitizeHtml(`<span class="badge bg-danger">${Joomla.Text._('JNO')}</span>`);
if (!tmpRow.classList.contains('unpublished') || tmpRow.classList.length === 0) {
tmpRow.classList.add('unpublished');
}
}
if (parseInt(updStatus, 10) === -2) {
tmpStatus.innerHTML = Joomla.sanitizeHtml(`<span class="badge bg-secondary">${Joomla.Text._('JTRASHED')}</span>`);
if (!tmpRow.classList.contains('unpublished') || tmpRow.classList.length === 0) {
tmpRow.classList.add('unpublished');
}
}
if (document.formvalidator.isValid(document.getElementById('module-form'))) {
window.parent.document.querySelector(`#title-${options.itemId}`).innerText = updTitle;
window.parent.document.querySelector(`#position-${options.itemId}`).innerText = updPosition;
window.parent.document.querySelector(`#access-${options.itemId}`).innerHTML = Joomla.sanitizeHtml(window.parent.viewLevels[updAccess]);
}
}
if (task !== 'module.apply') {
window.parent.Joomla.Modal.getCurrent().close();
}
}
}
};
})(Joomla);

View File

@ -0,0 +1,4 @@
/**
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/Joomla=window.Joomla||{},(e=>{e.submitbutton=d=>{if(d==="module.cancel"||document.formvalidator.isValid(document.getElementById("module-form"))){e.submitform(d,document.getElementById("module-form"));const t=e.getOptions("module-edit");if(window.self!==window.top){if(window.parent.viewLevels){const o=document.getElementById("jform_position").value,r=document.getElementById("jform_title").value,i=document.querySelector("#jform_assignment").value,c=document.querySelector("#jform_published").value,u=document.querySelector("#jform_access").value,s=window.parent.document.getElementById(`menus-${t.itemId}`),n=window.parent.document.getElementById(`tr-${t.itemId}`),l=window.parent.document.getElementById(`status-${t.itemId}`);window.parent.inMenus=[],window.parent.numMenus=[].slice.call(document.querySelectorAll('input[name="jform[assigned][]"]')).length,[].slice.call(document.querySelectorAll('input[name="jform[assigned][]"]')).forEach(a=>{i>0&&a.checked&&window.parent.inMenus.push(parseInt(a.value,10)),i<0&&(a.checked||window.parent.inMenus.push(parseInt(a.value,10)))}),i==="-"&&(s.innerHTML=e.sanitizeHtml(`<span class="badge bg-danger">${e.Text._("JNO")}</span>`),(!n.classList.contains("no")||n.classList.length===0)&&n.classList.add("no")),parseInt(i,10)===0&&(s.innerHTML=e.sanitizeHtml(`<span class="badge bg-info">${e.Text._("JALL")}</span>`),n.classList.contains("no")&&n.classList.remove("no")),parseInt(i,10)>0&&(window.parent.inMenus.indexOf(window.parent.menuId)>=0&&(window.parent.numMenus===window.parent.inMenus.length?(s.innerHTML=e.sanitizeHtml(`<span class="badge bg-info">${e.Text._("JALL")}</span>`),(n.classList.contains("no")||n.classList.length===0)&&n.classList.remove("no")):(s.innerHTML=e.sanitizeHtml(`<span class="badge bg-success">${e.Text._("JYES")}</span>`),n.classList.contains("no")&&n.classList.remove("no"))),window.parent.inMenus.indexOf(window.parent.menuId)<0&&(s.innerHTML=e.sanitizeHtml(`<span class="badge bg-danger">${e.Text._("JNO")}</span>`),n.classList.contains("no")||n.classList.add("no"))),parseInt(i,10)<0&&(window.parent.inMenus.indexOf(window.parent.menuId)>=0&&(window.parent.numMenus===window.parent.inMenus.length?(s.innerHTML=e.sanitizeHtml(`<span class="badge bg-info">${e.Text._("JALL")}</span>`),n.classList.contains("no")&&n.classList.remove("no")):(s.innerHTML=e.sanitizeHtml(`<span class="badge bg-success">${e.Text._("JYES")}</span>`),n.classList.contains("no")&&n.classList.remove("no"))),window.parent.inMenus.indexOf(window.parent.menuId)<0&&(s.innerHTML=e.sanitizeHtml(`<span class="badge bg-danger">${e.Text._("JNO")}</span>`),(!n.classList.contains("no")||n.classList.length===0)&&n.classList.add("no"))),parseInt(c,10)===1&&(l.innerHTML=e.sanitizeHtml(`<span class="badge bg-success">${e.Text._("JYES")}</span>`),n.classList.contains("unpublished")&&n.classList.remove("unpublished")),parseInt(c,10)===0&&(l.innerHTML=e.sanitizeHtml(`<span class="badge bg-danger">${e.Text._("JNO")}</span>`),(!n.classList.contains("unpublished")||n.classList.length===0)&&n.classList.add("unpublished")),parseInt(c,10)===-2&&(l.innerHTML=e.sanitizeHtml(`<span class="badge bg-secondary">${e.Text._("JTRASHED")}</span>`),(!n.classList.contains("unpublished")||n.classList.length===0)&&n.classList.add("unpublished")),document.formvalidator.isValid(document.getElementById("module-form"))&&(window.parent.document.querySelector(`#title-${t.itemId}`).innerText=r,window.parent.document.querySelector(`#position-${t.itemId}`).innerText=o,window.parent.document.querySelector(`#access-${t.itemId}`).innerHTML=e.sanitizeHtml(window.parent.viewLevels[u]))}d!=="module.apply"&&window.parent.Joomla.Modal.getCurrent().close()}}}})(Joomla);

Binary file not shown.

View File

@ -0,0 +1,30 @@
/**
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
(() => {
const onChange = value => {
if (value === '-' || parseInt(value, 10) === 0) {
document.getElementById('menuselect-group').classList.add('hidden');
} else {
document.getElementById('menuselect-group').classList.remove('hidden');
}
};
const onBoot = () => {
const element = document.getElementById('jform_assignment');
if (element) {
// Initialise the state
onChange(element.value);
// Check for changes in the state
element.addEventListener('change', ({
target
}) => {
onChange(target.value);
});
}
document.removeEventListener('DOMContentLoaded', onBoot);
};
document.addEventListener('DOMContentLoaded', onBoot);
})();

View File

@ -0,0 +1,4 @@
/**
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/(()=>{const n=e=>{e==="-"||parseInt(e,10)===0?document.getElementById("menuselect-group").classList.add("hidden"):document.getElementById("menuselect-group").classList.remove("hidden")},t=()=>{const e=document.getElementById("jform_assignment");e&&(n(e.value),e.addEventListener("change",({target:d})=>{n(d.value)})),document.removeEventListener("DOMContentLoaded",t)};document.addEventListener("DOMContentLoaded",t)})();

View File

@ -0,0 +1,102 @@
/**
* @copyright (C) 2020 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
/**
* Add a keyboard event listener to the Select a Module Type search element.
*
* IMPORTANT! This script is meant to be loaded deferred. This means that a. it's non-blocking
* (the browser can load it whenever) and b. it doesn't need an on DOMContentLoaded event handler
* because the browser is guaranteed to execute it only after the DOM content has loaded, the
* whole point of it being deferred.
*
* The search box has a keyboard handler that fires every time you press a keyboard button or send
* a keypress with a touch / virtual keyboard. We then iterate all module type cards and check if
* the plain text (HTML stripped out) representation of the module title or description partially
* matches the text you entered in the search box. If it doesn't we add a Bootstrap class to hide
* the module.
*
* This way we limit the displayed modules only to those searched.
*
* This feature follows progressive enhancement. The search box is hidden by default and only
* displayed when this JavaScript here executes. Furthermore, session storage is only used if it
* is available in the browser. That's a bit of a pain but makes sure things won't break in older
* browsers.
*
* Furthermore and to facilitate the user experience we auto-focus the search element which has a
* suitable title so that non-sighted users are not startled. This way we address both UX concerns
* and accessibility.
*
* Finally, the search string is saved into session storage on the assumption that the user is
* probably going to be creating multiple instances of the same module, one after another, as is
* typical when building a new Joomla! site.
*/
// Make sure the element exists i.e. a template override has not removed it.
const elSearch = document.getElementById('comModulesSelectSearch');
const elSearchContainer = document.getElementById('comModulesSelectSearchContainer');
const elSearchHeader = document.getElementById('comModulesSelectTypeHeader');
const elSearchResults = document.getElementById('comModulesSelectResultsContainer');
const alertElement = document.querySelector('.modules-alert');
if (elSearch && elSearchContainer) {
// Add the keyboard event listener which performs the live search in the cards
elSearch.addEventListener('keyup', event => {
/** @type {KeyboardEvent} event */
const partialSearch = event.target.value;
let hasSearchResults = false;
// Save the search string into session storage
if (typeof sessionStorage !== 'undefined') {
sessionStorage.setItem('Joomla.com_modules.new.search', partialSearch);
}
// Iterate all the module cards
document.querySelectorAll('.comModulesSelectCard').forEach(card => {
// First remove the class which hide the module cards
card.classList.remove('d-none');
// An empty search string means that we should show everything
if (!partialSearch) {
return;
}
const cardHeader = card.querySelector('.new-module-title');
const cardBody = card.querySelector('.new-module-caption');
const title = cardHeader ? cardHeader.textContent : '';
const description = cardBody ? cardBody.textContent : '';
// If the module title and description dont match add a class to hide it.
if (title && !title.toLowerCase().includes(partialSearch.toLowerCase()) && description && !description.toLowerCase().includes(partialSearch.toLowerCase())) {
card.classList.add('d-none');
} else {
hasSearchResults = true;
}
});
if (hasSearchResults || !partialSearch) {
alertElement.classList.add('d-none');
elSearchHeader.classList.remove('d-none');
elSearchResults.classList.remove('d-none');
} else {
alertElement.classList.remove('d-none');
elSearchHeader.classList.add('d-none');
elSearchResults.classList.add('d-none');
}
});
// For reasons of progressive enhancement the search box is hidden by default.
elSearchContainer.classList.remove('d-none');
// Focus the just show element
elSearch.focus();
try {
if (typeof sessionStorage !== 'undefined') {
// Load the search string from session storage
elSearch.value = sessionStorage.getItem('Joomla.com_modules.new.search') || '';
// Trigger the keyboard handler event manually to initiate the search
elSearch.dispatchEvent(new KeyboardEvent('keyup'));
}
} catch (e) {
// This is probably Internet Explorer which doesn't support the KeyboardEvent constructor :(
}
}

View File

@ -0,0 +1,4 @@
/**
* @copyright (C) 2020 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/const elSearch=document.getElementById("comModulesSelectSearch"),elSearchContainer=document.getElementById("comModulesSelectSearchContainer"),elSearchHeader=document.getElementById("comModulesSelectTypeHeader"),elSearchResults=document.getElementById("comModulesSelectResultsContainer"),alertElement=document.querySelector(".modules-alert");if(elSearch&&elSearchContainer){elSearch.addEventListener("keyup",o=>{const e=o.target.value;let s=!1;typeof sessionStorage<"u"&&sessionStorage.setItem("Joomla.com_modules.new.search",e),document.querySelectorAll(".comModulesSelectCard").forEach(t=>{if(t.classList.remove("d-none"),!e)return;const n=t.querySelector(".new-module-title"),c=t.querySelector(".new-module-caption"),l=n?n.textContent:"",a=c?c.textContent:"";l&&!l.toLowerCase().includes(e.toLowerCase())&&a&&!a.toLowerCase().includes(e.toLowerCase())?t.classList.add("d-none"):s=!0}),s||!e?(alertElement.classList.add("d-none"),elSearchHeader.classList.remove("d-none"),elSearchResults.classList.remove("d-none")):(alertElement.classList.remove("d-none"),elSearchHeader.classList.add("d-none"),elSearchResults.classList.add("d-none"))}),elSearchContainer.classList.remove("d-none"),elSearch.focus();try{typeof sessionStorage<"u"&&(elSearch.value=sessionStorage.getItem("Joomla.com_modules.new.search")||"",elSearch.dispatchEvent(new KeyboardEvent("keyup")))}catch{}}

Binary file not shown.

View File

@ -0,0 +1,45 @@
/**
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
(() => {
// Use a JoomlaExpectingPostMessage flag to be able to distinct legacy methods
if (window.parent.JoomlaExpectingPostMessage) {
return;
}
// Assign listener for click event (for single module id insertion)
document.querySelectorAll('.js-module-insert').forEach(element => {
element.addEventListener('click', event => {
event.preventDefault();
const modid = event.target.getAttribute('data-module');
const editor = event.target.getAttribute('data-editor');
// Use the API
if (window.parent.Joomla && window.parent.Joomla.editors && window.parent.Joomla.editors.instances && Object.prototype.hasOwnProperty.call(window.parent.Joomla.editors.instances, editor)) {
window.parent.Joomla.editors.instances[editor].replaceSelection(`{loadmoduleid ${modid}}`);
}
if (window.parent.Joomla.Modal) {
window.parent.Joomla.Modal.getCurrent().close();
}
});
});
// Assign listener for click event (for position insertion)
document.querySelectorAll('.js-position-insert').forEach(element => {
element.addEventListener('click', event => {
event.preventDefault();
const position = event.target.getAttribute('data-position');
const editor = event.target.getAttribute('data-editor');
// Use the API
if (window.Joomla && window.Joomla.editors && Joomla.editors.instances && Object.prototype.hasOwnProperty.call(window.parent.Joomla.editors.instances, editor)) {
window.parent.Joomla.editors.instances[editor].replaceSelection(`{loadposition ${position}}`);
}
if (window.parent.Joomla.Modal) {
window.parent.Joomla.Modal.getCurrent().close();
}
});
});
})();

View File

@ -0,0 +1,4 @@
/**
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/window.parent.JoomlaExpectingPostMessage||(document.querySelectorAll(".js-module-insert").forEach(e=>{e.addEventListener("click",o=>{o.preventDefault();const a=o.target.getAttribute("data-module"),t=o.target.getAttribute("data-editor");window.parent.Joomla&&window.parent.Joomla.editors&&window.parent.Joomla.editors.instances&&Object.prototype.hasOwnProperty.call(window.parent.Joomla.editors.instances,t)&&window.parent.Joomla.editors.instances[t].replaceSelection(`{loadmoduleid ${a}}`),window.parent.Joomla.Modal&&window.parent.Joomla.Modal.getCurrent().close()})}),document.querySelectorAll(".js-position-insert").forEach(e=>{e.addEventListener("click",o=>{o.preventDefault();const a=o.target.getAttribute("data-position"),t=o.target.getAttribute("data-editor");window.Joomla&&window.Joomla.editors&&Joomla.editors.instances&&Object.prototype.hasOwnProperty.call(window.parent.Joomla.editors.instances,t)&&window.parent.Joomla.editors.instances[t].replaceSelection(`{loadposition ${a}}`),window.parent.Joomla.Modal&&window.parent.Joomla.Modal.getCurrent().close()})}));

Binary file not shown.

View File

@ -0,0 +1,31 @@
/**
* @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
(document => {
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('#new-modules-list a.select-link').forEach(elem => {
elem.addEventListener('click', ({
currentTarget,
target
}) => {
let targetElem = currentTarget;
// There is some bug with events in iframe where currentTarget is "null"
// => prevent this here by bubble up
if (!targetElem) {
targetElem = target;
if (targetElem && !targetElem.classList.contains('select-link')) {
targetElem = targetElem.parentNode;
}
}
const functionName = targetElem.getAttribute('data-function');
if (functionName && typeof window.parent[functionName] === 'function') {
window.parent[functionName](targetElem);
}
});
});
});
})(document);

View File

@ -0,0 +1,4 @@
/**
* @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/(n=>{n.addEventListener("DOMContentLoaded",()=>{n.querySelectorAll("#new-modules-list a.select-link").forEach(i=>{i.addEventListener("click",({currentTarget:a,target:o})=>{let e=a;e||(e=o,e&&!e.classList.contains("select-link")&&(e=e.parentNode));const t=e.getAttribute("data-function");t&&typeof window.parent[t]=="function"&&window.parent[t](e)})})})})(document);

Binary file not shown.