Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@
<?php endif; ?>
<?php endforeach; ?>
</ul>
<joomla-alert id="noresultsfound" type="warning" style="display:none"><?php echo Text::_('JGLOBAL_NO_MATCHING_RESULTS'); ?></joomla-alert>
<joomla-alert id="noresultsfound" type="warning" class="hidden"><?php echo Text::_('JGLOBAL_NO_MATCHING_RESULTS'); ?></joomla-alert>
<div class="hidden" id="treeselectmenu">
<div class="nav-hover treeselect-menu">
<div class="dropdown">
Expand All @@ -132,14 +132,14 @@
<span class="visually-hidden"><?php echo Text::sprintf('JGLOBAL_TOGGLE_DROPDOWN'); ?></span>
</button>
<div class="dropdown-menu">
<h1 class="dropdown-header"><?php echo Text::_('COM_MODULES_SUBITEMS'); ?></h1>
<div class="dropdown-header"><?php echo Text::_('COM_MODULES_SUBITEMS'); ?></div>
<div class="dropdown-divider"></div>
<a class="dropdown-item checkall" href="javascript://"><span class="icon-check-square" aria-hidden="true"></span> <?php echo Text::_('JSELECT'); ?></a>
<a class="dropdown-item uncheckall" href="javascript://"><span class="icon-square" aria-hidden="true"></span> <?php echo Text::_('COM_MODULES_DESELECT'); ?></a>
<a class="dropdown-item checkall"><span class="icon-check-square" aria-hidden="true"></span> <?php echo Text::_('JSELECT'); ?></a>
<a class="dropdown-item uncheckall"><span class="icon-square" aria-hidden="true"></span> <?php echo Text::_('COM_MODULES_DESELECT'); ?></a>
<div class="treeselect-menu-expand">
<div class="dropdown-divider"></div>
<a class="dropdown-item expandall" href="javascript://"><span class="icon-plus" aria-hidden="true"></span> <?php echo Text::_('COM_MODULES_EXPAND'); ?></a>
<a class="dropdown-item collapseall" href="javascript://"><span class="icon-minus" aria-hidden="true"></span> <?php echo Text::_('COM_MODULES_COLLAPSE'); ?></a>
<a class="dropdown-item expandall"><span class="icon-plus" aria-hidden="true"></span> <?php echo Text::_('COM_MODULES_EXPAND'); ?></a>
<a class="dropdown-item collapseall"><span class="icon-minus" aria-hidden="true"></span> <?php echo Text::_('COM_MODULES_COLLAPSE'); ?></a>
</div>
</div>
</div>
Expand Down
11 changes: 0 additions & 11 deletions build/media_source/legacy/joomla.asset.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,6 @@
"jquery"
],
"uri": "legacy/jquery-noconflict.min.js"
},
{
"name": "joomla.treeselectmenu",
"type": "script",
"dependencies": [
"jquery"
],
"uri": "legacy/treeselectmenu.min.js",
"attributes": {
"defer": true
}
}
]
}
125 changes: 0 additions & 125 deletions build/media_source/legacy/js/treeselectmenu.es5.js

This file was deleted.

8 changes: 8 additions & 0 deletions build/media_source/system/joomla.asset.json
Original file line number Diff line number Diff line change
Expand Up @@ -670,6 +670,14 @@
"attributes": {
"type": "module"
}
},
{
"name": "joomla.treeselectmenu",
"type": "script",
"uri": "system/treeselectmenu.min.js",
"attributes": {
"type": "module"
}
}
]
}
140 changes: 140 additions & 0 deletions build/media_source/system/js/treeselectmenu.es6.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
/**
* @copyright (C) 2012 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/

const treeselectmenu = document.getElementById('treeselectmenu').innerHTML;
const direction = (document.dir !== undefined) ? document.dir : document.getElementsByTagName('html')[0].getAttribute('dir');

document.querySelectorAll('.treeselect li').forEach((li) => {
// Add icons
const icon = document.createElement('span');
icon.classList.add('icon-');
li.prepend(icon);

if (li.querySelector('ul.treeselect-sub')) {
// Add classes to Expand/Collapse icons
li.querySelector('span.icon-').classList.add('treeselect-toggle', 'icon-chevron-down');

// Append drop down menu in nodes
li.querySelector('div.treeselect-item label').insertAdjacentHTML('afterend', treeselectmenu);

const sub = li.querySelector('ul.treeselect-sub');
if (!sub.querySelector('ul.treeselect-sub')) {
li.querySelector('div.treeselect-menu-expand').remove();
}
}
});

// Takes care of the Expand/Collapse of a node
document.querySelectorAll('span.treeselect-toggle').forEach((toggle) => {
toggle.addEventListener('click', ({ target }) => {
const chevron = direction === 'rtl' ? 'icon-chevron-left' : 'icon-chevron-right';

// Take care of parent UL
const { parentNode } = target;
if (parentNode.querySelector('ul.treeselect-sub').classList.contains('hidden')) {
target.classList.remove(chevron);
target.classList.add('icon-chevron-down');
parentNode.querySelectorAll('ul.treeselect-sub').forEach((item) => item.classList.remove('hidden'));
parentNode.querySelectorAll('ul.treeselect-sub i.treeselect-toggle').forEach((item) => {
item.classList.add('icon-chevron-down');
item.classList.remove(chevron);
});
} else {
target.classList.add(chevron);
target.classList.remove('icon-chevron-down');

parentNode.querySelectorAll('ul.treeselect-sub').forEach((item) => item.classList.add('hidden'));
parentNode.querySelectorAll('ul.treeselect-sub i.treeselect-toggle').forEach((item) => {
item.classList.remove('icon-chevron-down');
item.classList.add(chevron);
});
}
});
});

// Takes care of the filtering
document.getElementById('treeselectfilter').addEventListener('keyup', ({ target }) => {
const noResults = document.getElementById('noresultsfound');
const text = target.value.toLowerCase();
let hidden = 0;

noResults.classList.add('hidden');

const listItems = document.querySelectorAll('.treeselect li');
listItems.forEach((item) => {
if (item.innerText.toLowerCase().includes(text)) {
item.classList.remove('d-none');
} else {
item.classList.add('d-none');
hidden += 1;
}
});

if (hidden === listItems.length) {
noResults.classList.remove('hidden');
}
});

// Checks all checkboxes the tree
document.getElementById('treeCheckAll').addEventListener('click', () => {
document.querySelectorAll('.treeselect input').forEach((input) => input.setAttribute('checked', 'checked'));
});

// Unchecks all checkboxes the tree
document.getElementById('treeUncheckAll').addEventListener('click', () => {
document.querySelectorAll('.treeselect input').forEach((input) => input.removeAttribute('checked'));
});

// Expands all subtrees
document.getElementById('treeExpandAll').addEventListener('click', () => {
document.querySelectorAll('ul.treeselect ul.treeselect-sub').forEach((input) => input.classList.remove('hidden'));
document.querySelectorAll('ul.treeselect span.treeselect-toggle').forEach((item) => {
item.classList.remove('icon-chevron-right');
item.classList.add('icon-chevron-down');
});
});

// Collapses all subtrees
document.getElementById('treeCollapseAll').addEventListener('click', () => {
document.querySelectorAll('ul.treeselect ul.treeselect-sub').forEach((input) => input.classList.add('hidden'));
document.querySelectorAll('ul.treeselect span.treeselect-toggle').forEach((item) => {
item.classList.remove('icon-chevron-down');
item.classList.add('icon-chevron-right');
});
});

// Take care of children check/uncheck all
document.querySelectorAll('a.checkall').forEach((item) => {
item.addEventListener('click', ({ target }) => {
target.closest('li').querySelectorAll('ul.treeselect-sub input').forEach((input) => input.setAttribute('checked', 'checked'));
});
});
document.querySelectorAll('a.uncheckall').forEach((item) => {
item.addEventListener('click', ({ target }) => {
target.closest('li').querySelectorAll('ul.treeselect-sub input').forEach((input) => input.removeAttribute('checked'));
});
});

// Take care of children toggle all
document.querySelectorAll('a.expandall').forEach((item) => {
item.addEventListener('click', ({ target }) => {
const parent = target.closest('ul');
parent.querySelectorAll('ul.treeselect-sub').forEach((input) => input.classList.remove('hidden'));
parent.querySelectorAll('ul.treeselect-sub .treeselect-toggle').forEach((toggle) => {
toggle.classList.remove('icon-chevron-right');
toggle.classList.add('icon-chevron-down');
});
});
});
document.querySelectorAll('a.collapseall').forEach((item) => {
item.addEventListener('click', ({ target }) => {
const parent = target.closest('ul');
parent.querySelectorAll('ul.treeselect-sub').forEach((input) => input.classList.add('hidden'));
parent.querySelectorAll('ul.treeselect-sub .treeselect-toggle').forEach((toggle) => {
toggle.classList.remove('icon-chevron-down');
toggle.classList.add('icon-chevron-right');
});
});
});