dynamic_position.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. (function($) {
  2. Drupal.behaviors.moduleFilterDynamicPosition = {
  3. attach: function(context) {
  4. var $window = $(window);
  5. $('#module-filter-wrapper', context).once('dynamic-position', function() {
  6. // Move the submit button just below the tabs.
  7. $('#module-filter-tabs').append($('#module-filter-submit'));
  8. var positionSubmit = function() {
  9. var $tabs = $('#module-filter-tabs');
  10. var $submit = $('#module-filter-submit', $tabs);
  11. // Vertical movement.
  12. var bottom = $tabs.offset().top + $tabs.outerHeight();
  13. if ($submit.hasClass('fixed-bottom')) {
  14. bottom += $submit.height();
  15. }
  16. if (bottom >= $window.height() + $window.scrollTop()) {
  17. $submit.addClass('fixed fixed-bottom');
  18. $tabs.css('padding-bottom', $submit.height());
  19. }
  20. else {
  21. $submit.removeClass('fixed fixed-bottom');
  22. $tabs.css('padding-bottom', 0);
  23. }
  24. // Horizontal movement.
  25. if ($submit.hasClass('fixed-bottom') || $submit.hasClass('fixed-top')) {
  26. var left = $tabs.offset().left - $window.scrollLeft();
  27. if (left != $submit.offset().left - $window.scrollLeft()) {
  28. $submit.css('left', left);
  29. }
  30. }
  31. };
  32. // Control the positioning.
  33. $window.scroll(positionSubmit);
  34. $window.resize(positionSubmit);
  35. var moduleFilter = $('input[name="module_filter[name]"]').data('moduleFilter');
  36. moduleFilter.element.bind('moduleFilter:adjustHeight', positionSubmit);
  37. moduleFilter.adjustHeight();
  38. });
  39. }
  40. };
  41. })(jQuery);