stag-collapsible-card.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. (function() {
  2. function init() {
  3. $('.card[stag-collapsible-card]:not([stag-collapsible-card-initialized])').each(function() {
  4. let header = $(this).find('>.card-header').first();
  5. if(header.length) {
  6. let html = header.html();
  7. let newHeader = $('<div class="d-flex align-items-center"></div>');
  8. newHeader.append(html);
  9. let collapseTrigger = $('<a href="#" class="stag-collapse-trigger ml-auto" />');
  10. collapseTrigger.append('<i class="fa fa-chevron-up if-not-collapsed"/>');
  11. collapseTrigger.append('<i class="fa fa-chevron-down if-collapsed"/>');
  12. newHeader.append(collapseTrigger);
  13. header
  14. .empty()
  15. .append(newHeader);
  16. }
  17. if(!!$(this).attr('stag-collapsible-card')) {
  18. let state = localStorage['collapseState_' + $(this).attr('stag-collapsible-card')];
  19. if(state === 'collapsed') {
  20. $(this).attr('collapsed', 1);
  21. }
  22. else if(state === 'not-collapsed') {
  23. $(this).removeAttr('collapsed');
  24. }
  25. }
  26. $(this).attr('stag-collapsible-card-initialized', 1);
  27. });
  28. $(document)
  29. .off('click.stag-collapse-toggle', '.card[stag-collapsible-card][stag-collapsible-card-initialized] .stag-collapse-trigger')
  30. .on('click.stag-collapse-toggle', '.card[stag-collapsible-card][stag-collapsible-card-initialized] .stag-collapse-trigger', function() {
  31. let card = $(this).closest('.card');
  32. if(card.is('[collapsed]')) {
  33. card.removeAttr('collapsed');
  34. if(!!card.attr('stag-collapsible-card')) {
  35. localStorage['collapseState_' + card.attr('stag-collapsible-card')] = 'not-collapsed';
  36. }
  37. }
  38. else {
  39. card.attr('collapsed', 1);
  40. if(!!card.attr('stag-collapsible-card')) {
  41. localStorage['collapseState_' + card.attr('stag-collapsible-card')] = 'collapsed';
  42. }
  43. }
  44. return false;
  45. });
  46. }
  47. addMCInitializer('stag-collapsible-card', init);
  48. }).call(window);