Projet

Général

Profil

Paste
Télécharger (4,42 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / themes / rubik / js / rubik.js @ ecb492a9

1
/**
2
 * Implementation of Drupal behavior.
3
 */
4
(function($) {
5
Drupal.behaviors.rubik = {};
6
Drupal.behaviors.rubik.attach = function(context, settings) {
7
  // If there are both main column and side column buttons, only show the main
8
  // column buttons if the user scrolls past the ones to the side.
9
  $('div.form:has(div.column-main div.form-actions):not(.rubik-processed)', context).each(function() {
10
    var form = $(this);
11
    var offset = $('div.column-side div.form-actions', form).height() + $('div.column-side div.form-actions', form).offset().top;
12
    $(window).scroll(function() {
13
      if ($(this).scrollTop() > offset) {
14
        $('div.column-main .column-wrapper > div.form-actions#edit-actions', form).show();
15
      }
16
      else {
17
        $('div.column-main .column-wrapper > div.form-actions#edit-actions', form).hide();
18
      }
19
    });
20
    form.addClass('rubik-processed');
21
  });
22

    
23
  $('a.toggler:not(.rubik-processed)', context).each(function() {
24
    var id = $(this).attr('href').split('#')[1];
25
    // Target exists, add click handler.
26
    if ($('#' + id).size() > 0) {
27
      $(this).click(function() {
28
        var toggleable = $('#' + id);
29
        toggleable.toggle();
30
        $(this).toggleClass('toggler-active');
31
        return false;
32
      });
33
    }
34
    // Target does not exist, remove click handler.
35
    else {
36
      $(this).addClass('toggler-disabled');
37
      $(this).click(function() { return false; });
38
    }
39
    // Mark as processed.
40
    $(this).addClass('rubik-processed');
41
  });
42

    
43
    // If there's no active secondary tab, make the first one show.
44
  var activeli = $('.primary-tabs li.active .secondary-tabs li.active');
45
  if (activeli.length === 0) {
46
    $('.primary-tabs li.active .secondary-tabs li:first-child a').css('display', 'block');
47
  }
48
  
49
  $('.secondary-tabs li a, .secondary-tabs', context).bind('focus blur', function(){
50
    $(this).parents('.secondary-tabs').toggleClass('focused');
51
  });
52

    
53
  // Sticky sidebar functionality.
54
  var disableSticky = (settings.rubik !== undefined) ? settings.rubik.disable_sticky : false;
55
  if ($('#content .column-side .column-wrapper').length !== 0 ) {
56

    
57
    // Move fields to sidebar if it exists.
58
    $('.rubik_sidebar_field', context).once('rubik', function() {
59
      $('.column-side .column-wrapper').append($(this));
60
    });
61

    
62
    // Check if the sidebar should be made sticky.
63
    if (!disableSticky) {
64
      var rubikColumn = $('#content .column-side .column-wrapper', context);
65
      if (rubikColumn && rubikColumn.offset()) {
66
        var rubikStickySidebar = rubikColumn.offset().top;
67
        $(window).scroll(function() {
68
          if ($(window).scrollTop() > rubikStickySidebar) {
69
            rubikColumn.each(function() {
70
              $(this).addClass("fixed");
71
              $(this).width($(this).parent().width());
72
            });
73
          }
74
          else {
75
            rubikColumn.each(function() {
76
              $(this).removeClass("fixed");
77
              $(this).width($(this).parent().width());
78
            });
79
          }
80
        });
81
      }
82
    }
83

    
84
  }
85
  
86
  // Cache the primary tabs.
87
  var $primaryTabsWrap = $('.primary-tabs');
88
  if ($primaryTabsWrap.length) {
89
    var $primaryTabs = $primaryTabsWrap.find('> li');
90
    // Trigger adjusting function upon first page load.
91
    adjustPrimaryTabs();
92
    // Trigger adjusting function upon any screen resizing.
93
    $(window).resize(function() {
94
      adjustPrimaryTabs();
95
    });
96
  }
97

    
98
  function adjustPrimaryTabs() {
99
    // Get the position of whole element.
100
    var parentPosition = $primaryTabs.offset().top;
101
    // Complicated count.
102
    var count = [];
103
    var rowNumber = 1;
104
    // Remove remainings of other classes we attached.
105
    $primaryTabs.removeClass('last-row-link');
106
    $primaryTabs.removeClass('first-row-link');
107
    // Loop through and compare the position of each tab.
108
    $primaryTabs.each(function(index) {
109
      var $this = $(this);
110
      // New row.
111
      if (count[rowNumber] != $this.offset().top) {
112
        // Increase the count for this row.
113
        rowNumber++;
114
        count[rowNumber] = $this.offset().top;
115
        // Add "first" class to this element.
116
        $this.addClass('first-row-link');
117
        // Add "last" class to the previous element, if there is one.
118
        if ($this.prev('li').length) {
119
          $this.prev('li').addClass('last-row-link');
120
        }
121
      }
122
      // Add "last" class if this is the last element.
123
      if (index === ($primaryTabs.length - 1)) {
124
        $this.addClass('last-row-link');
125
      }
126
    });
127
  }
128

    
129
};
130
})(jQuery);