Skip to content
Snippets Groups Projects
Commit a9807917 authored by Frank Naegler's avatar Frank Naegler Committed by Andreas Fernandez
Browse files

[BUGFIX] Refactoring of CardLayout.js

This patch refactors the CardLayput.js to prevent some trouble with
the navigation icons in the doc header.

Resolves: #82151
Releases: master
Change-Id: I6739de816b458a7b8c85c519d46664831dfa070c
Reviewed-on: https://review.typo3.org/53762


Tested-by: default avatarTYPO3com <no-reply@typo3.com>
Reviewed-by: default avatarMona Muzaffar <mona.muzaffar@gmx.de>
Tested-by: default avatarMona Muzaffar <mona.muzaffar@gmx.de>
Reviewed-by: default avatarAndreas Fernandez <typo3@scripting-base.de>
Tested-by: default avatarAndreas Fernandez <typo3@scripting-base.de>
parent 962d2809
Branches
Tags
No related merge requests found
...@@ -17,78 +17,163 @@ ...@@ -17,78 +17,163 @@
define(['jquery', 'bootstrap'], function ($) { define(['jquery', 'bootstrap'], function ($) {
'use strict'; 'use strict';
return { /**
initialize: function() { *
// Card expand / collapse handling * @type {{transitionInProgress: boolean}}
$(document).on('click', '.gridder-list', function(e) { */
e.preventDefault(); var CardLayout = {
var $element = $(this); transitionInProgress: false
var $contentContainer = $element.next(); };
if (!$element.hasClass('selectedItem')) {
// Find possible current open one and close it
$('.gridder-list').removeClass('selectedItem');
$('.gridder-content.gridder-show').slideUp(function() {
$(this).removeClass('gridder-show');
});
// Open clicked one in parallel
$element.addClass('selectedItem');
$contentContainer.addClass('gridder-show').slideDown();
} else {
// Collapse this currently open grid
$contentContainer.slideUp(function() {
$contentContainer.removeClass('gridder-show');
});
$element.removeClass('selectedItem');
}
});
// Close current and open previous card /**
$(document).on('click', '.gridder-nav-prev', function() { * Initialize the CardLayout, bind events
var $currentOpenContent = $('.gridder-content.gridder-show'); */
if ($currentOpenContent.length > 0) { CardLayout.initialize = function() {
var $currentOpenCard = $currentOpenContent.prev(); $(document).on('click', '.gridder-list', function(e) {
var $previousCardContent = $currentOpenCard.prev(); e.preventDefault();
var $previousCard = $previousCardContent.prev(); var $element = $(this);
if ($previousCard.length > 0) { if (!$element.hasClass('selectedItem')) {
$currentOpenCard.removeClass('selectedItem'); CardLayout.openCard($element);
$currentOpenContent.slideUp(function() { } else {
$(this).removeClass('gridder-show'); CardLayout.closeCard($element);
}); }
$previousCard.addClass('selectedItem'); });
$previousCardContent.addClass('gridder-show').slideDown();
} // Close current and open previous card
} $(document).on('click', '.gridder-nav-prev', function(e) {
}); e.preventDefault();
CardLayout.openPrevCard();
});
// Close current and open next card
$(document).on('click', '.gridder-nav-next', function(e) {
e.preventDefault();
CardLayout.openNextCard();
});
// Close current open card
$(document).on('click', '.gridder-close', function(e) {
e.preventDefault();
CardLayout.closeCurrentCard();
});
CardLayout.checkNavigationButtons();
};
/**
* Find and return the current open card
*
* @returns {jQuery}
*/
CardLayout.getCurrentOpenCard = function() {
return $('.gridder-content.gridder-show').prev();
};
/**
* Find and close the current open card
*/
CardLayout.closeCurrentCard = function() {
CardLayout.closeCard(CardLayout.getCurrentOpenCard());
CardLayout.checkNavigationButtons();
};
/**
* Open the given card and call the callback function
*
* @param {jQuery} $element
* @param {function} callback
* @returns {boolean}
*/
CardLayout.openCard = function($element, callback) {
if (CardLayout.transitionInProgress) {
return false;
}
CardLayout.transitionInProgress = true;
$('.gridder-list').removeClass('selectedItem');
$('.gridder-content.gridder-show').slideUp(function() {
$(this).removeClass('gridder-show');
});
$element.addClass('selectedItem');
$element.next().addClass('gridder-show').slideDown(function() {
CardLayout.transitionInProgress = false;
if (typeof callback === 'function') {
callback();
}
CardLayout.checkNavigationButtons();
});
};
// Close current and open next card /**
$(document).on('click', '.gridder-nav-next', function() { * Close the given card and call the callback function
var $currentOpenContent = $('.gridder-content.gridder-show'); *
if ($currentOpenContent.length > 0) { * @param {jQuery} $element
var $currentOpenCard = $currentOpenContent.prev(); * @param {function} callback
var $nextCard = $currentOpenContent.next(); * @returns {boolean}
var $nextCardContent = $nextCard.next(); */
if ($nextCardContent.length > 0) { CardLayout.closeCard = function($element, callback) {
$currentOpenCard.removeClass('selectedItem'); if (CardLayout.transitionInProgress) {
$currentOpenContent.slideUp(function() { return false;
$(this).removeClass('gridder-show'); }
}); CardLayout.transitionInProgress = true;
$nextCard.addClass('selectedItem'); var $contentContainer = $element.next();
$nextCardContent.addClass('gridder-show').slideDown(); $element.removeClass('selectedItem');
} $contentContainer.slideUp(function() {
} $contentContainer.removeClass('gridder-show');
CardLayout.transitionInProgress = false;
if (typeof callback === 'function') {
callback();
}
CardLayout.checkNavigationButtons();
});
};
/**
* Find the next card and open it, if it exists
*/
CardLayout.openNextCard = function() {
var $currentOpenCard = CardLayout.getCurrentOpenCard();
var $nextCard = $currentOpenCard.next().next();
if ($nextCard.length) {
CardLayout.closeCard($currentOpenCard, function() {
CardLayout.openCard($nextCard);
}); });
}
};
// Close current open card /**
$(document).on('click', '.gridder-close', function() { * Find the previous card and open it, if it exists
var $currentOpenContent = $('.gridder-content.gridder-show'); */
if ($currentOpenContent.length > 0) { CardLayout.openPrevCard = function() {
var $currentOpenCard = $currentOpenContent.prev(); var $currentOpenCard = CardLayout.getCurrentOpenCard();
$currentOpenCard.removeClass('selectedItem'); var $nextCard = $currentOpenCard.prev().prev();
$currentOpenContent.slideUp(function() { if ($nextCard.length) {
$(this).removeClass('gridder-show'); CardLayout.closeCard($currentOpenCard, function() {
}); CardLayout.openCard($nextCard);
}
}); });
} }
}; };
/**
* Check the navigation icons and enable/disable the buttons
*/
CardLayout.checkNavigationButtons = function() {
var $currentOpenCard = CardLayout.getCurrentOpenCard();
if ($currentOpenCard.length === 0) {
$('.gridder-close').addClass('disabled');
} else {
$('.gridder-close').removeClass('disabled');
}
if ($currentOpenCard.prev().prev().length === 0) {
$('.gridder-nav-prev').addClass('disabled')
} else {
$('.gridder-nav-prev').removeClass('disabled')
}
if ($currentOpenCard.next().next().length === 0) {
$('.gridder-nav-next').addClass('disabled')
} else {
$('.gridder-nav-next').removeClass('disabled')
}
};
return CardLayout;
}); });
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment