Projet

Général

Profil

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

root / drupal7 / sites / all / modules / advanced_forum / js / advanced_forum.js @ 13c3c9b4

1
(function ($) {
2
  Drupal.advanced_forum = Drupal.advanced_forum || {};
3

    
4
  Drupal.behaviors.advanced_forum = {
5
    attach: function(context) {
6
      // Retrieve the collapsed status from a stored cookie.
7
      // cookie format is: page1=1,2,3/page2=1,4,5/page3=5,6,1...
8
      var cookie = $.cookie('Drupal.advanced_forum.collapsed');
9
      var pages = cookie ? cookie.split('/') : [];
10
      // Create associative array where key=page path and value=comma-separated list of collapsed forum ids
11
      Drupal.advanced_forum.collapsed_page = [];
12
      if (pages) {
13
        for (var i = 0; i < pages.length; i++) {
14
          var tmp = pages[i].split('=');
15
          Drupal.advanced_forum.collapsed_page[tmp[0]] = tmp[1].split(',');
16
        }
17
      }
18

    
19
      // Get data for current page
20
      Drupal.advanced_forum.collapsed_current = Drupal.advanced_forum.collapsed_page[encodeURIComponent(window.location.pathname)];
21

    
22
      if (!Drupal.advanced_forum.collapsed_current) {
23
        Drupal.advanced_forum.collapsed_current = [];
24
        // For intial load default collapsed state settings needs to checked in init function.
25
        Drupal.advanced_forum.initial_load = 1;
26
      }
27
      else {
28
        Drupal.advanced_forum.initial_load = 0;
29
      }
30

    
31
      var handleElement = $('.forum-collapsible', context);
32

    
33
      // Set initial collapsed state
34
      handleElement.once('forum-collapsible', Drupal.advanced_forum.init);
35

    
36
      handleElement.addClass('clickable').click(function(event) {
37
        event.preventDefault();
38

    
39
        // Get forum id
40
        var id = $(this).attr('id').split('-')[2];
41
        if ( $(this).hasClass('container-collapsed')) {
42
          Drupal.advanced_forum.expand(id, Drupal.settings.advanced_forum.effect);
43
          // Reset collapsed status
44
          Drupal.advanced_forum.collapsed_current.splice($.inArray(id, Drupal.advanced_forum.collapsed_current),1);
45
        }
46
        else {
47
          Drupal.advanced_forum.collapse(id, Drupal.settings.advanced_forum.effect);
48
          // Set collapsed status
49
          Drupal.advanced_forum.collapsed_current.push(id);
50
        }
51

    
52
        // Put status back
53
        Drupal.advanced_forum.collapsed_page[encodeURIComponent(window.location.pathname)] = Drupal.advanced_forum.collapsed_current;
54

    
55
        // Build cookie string
56
        cookie = '';
57
        for (var x in Drupal.advanced_forum.collapsed_page) {
58
          cookie += '/' + x + '=' + Drupal.advanced_forum.collapsed_page[x];
59
        }
60
        // Save new cookie
61
        $.cookie(
62
          'Drupal.advanced_forum.collapsed',
63
          cookie.substr(1),
64
          {
65
            path: '/',
66
            // The cookie should "never" expire.
67
            expires: 36500
68
          }
69
          );
70
      });
71
    }
72
  };
73

    
74
  /**
75
   * Initialize and set collapsible status.
76
   * Initial collapsing/expanding effect is set to 'toggle' to avoid flickers.
77
   */
78
  Drupal.advanced_forum.init = function() {
79
    // get forum id
80
    var id = $(this).attr('id').split('-')[2];
81

    
82
    // On initial load, deal with default collapsed state of containers.
83
    if(Drupal.advanced_forum.initial_load) {
84
      var list = 0;
85
      for(list in Drupal.settings.advanced_forum.default_collapsed_list) {
86
        if (id == list) {
87
          Drupal.advanced_forum.collapse(id, 'toggle');
88
          break;
89
        }
90
      }
91
    }
92
    else {
93
      // Check if item is collapsed
94
      if ($.inArray(id, Drupal.advanced_forum.collapsed_current) > -1) {
95
        $(this)
96
        .addClass('container-collapsed')
97
        .parent().addClass('container-collapsed');
98
        Drupal.advanced_forum.collapse(id, 'toggle');
99
      }
100
      else {
101
        $(this)
102
        .removeClass('container-collapsed')
103
        .parent().removeClass('container-collapsed');
104
        Drupal.advanced_forum.expand(id, 'toggle');
105
      }
106
    }
107

    
108
  };
109

    
110
  Drupal.advanced_forum.collapse = function(id, effect) {
111
    switch(effect) {
112
      case 'fade':
113
        $('#forum-table-' + id).fadeOut('fast');
114
        break;
115
      case 'slide':
116
        $('#forum-table-' + id).slideUp('fast');
117
        break;
118
      default:
119
        $('#forum-table-' + id).hide();
120
    }
121
    $('#forum-collapsible-' + id)
122
    .addClass('container-collapsed')
123
    .parent().addClass('container-collapsed');
124
  };
125

    
126
  Drupal.advanced_forum.expand = function(id, effect) {
127
    switch(effect) {
128
      case 'fade':
129
        $('#forum-table-' + id).fadeIn('fast');
130
        break;
131
      case 'slide':
132
        $('#forum-table-' + id).slideDown('fast');
133
        break;
134
      default:
135
        $('#forum-table-' + id).show();
136
    }
137
    $('#forum-collapsible-' + id)
138
    .removeClass('container-collapsed')
139
    .parent().removeClass('container-collapsed');
140
  };
141

    
142
})(jQuery);