// PatternFly pf-list (function ($) { 'use strict'; $.fn.pfList = function () { function init (list) { // Ensure the state of the expansion elements is consistent list.find('[data-list=expansion], .list-pf-item, .list-pf-expansion').each(function (index, element) { var $expansion = $(element), $collapse = $expansion.find('.collapse').first(), expanded = $collapse.hasClass('in'); updateChevron($expansion, expanded); if ($expansion.hasClass('list-pf-item')) { updateActive($expansion, expanded); } }); list.find('.list-pf-container').each(function (index, element) { var $element = $(element); // The toggle element is the element with the data-list=toggle attribute // or the entire .list-pf-container as a fallback var $toggles = $element.find('[data-list=toggle]'); $toggles.length || ($toggles = $element); $toggles.on('keydown', function (event) { if (event.keyCode === 13 || event.keyCode === 32) { toggleCollapse(this); event.stopPropagation(); event.preventDefault(); } }); $toggles.on('click', function (event) { toggleCollapse(this); event.stopPropagation(); event.preventDefault(); }); }); } function toggleCollapse (toggle) { var $toggle, $expansion, $collapse, expanded, $listItem; $toggle = $(toggle); // Find the parent expansion of the toggle $expansion = $toggle.parentsUntil('.list-pf', '[data-list=expansion]').first(); $expansion.length || ($expansion = $toggle.closest('.list-pf-item, .list-pf-expansion')); // toggle the "in" class of its first .collapse child $collapse = $expansion.find('.collapse').first(); $collapse.toggleClass('in'); // update the state of the expansion element updateChevron($expansion, $collapse.hasClass('in')); $listItem = $expansion.closest('.list-pf-item'); updateActive($listItem, $listItem.find('.collapse').first().hasClass('in')); } function updateActive ($listItem, expanded) { // Find the closest .list-pf-item of the expansion, and set its "active" class if (expanded) { $listItem.addClass('active'); } else { $listItem.removeClass('active'); } } function updateChevron ($expansion, expanded) { var $chevron = $expansion.find('.list-pf-chevron .fa').first(); if (expanded) { $chevron.removeClass('fa-angle-right'); $chevron.addClass('fa-angle-down'); } else { $chevron.addClass('fa-angle-right'); $chevron.removeClass('fa-angle-down'); } } init(this); return this; }; }(jQuery));