~ubuntu-branches/ubuntu/saucy/mediawiki-extensions/saucy

« back to all changes in this revision

Viewing changes to http/CategoryTree/CategoryTree.js

  • Committer: Bazaar Package Importer
  • Author(s): Romain Beauxis
  • Date: 2010-05-04 15:13:35 UTC
  • mfrom: (0.1.1 experimental)
  • Revision ID: james.westby@ubuntu.com-20100504151335-54qeucg3ec108q28
Tags: 2.2
* Added Replaces:/Conflicts: to allow a proper upgrade.
Closes: #580066
* Fixed package descriptions.
Closes: #579667
* Patched mediawiki-extensions-fckeditor to make it work with
  php 5.3. The fix may not be perfect but at least it work.
  Not closing the bug (#579822) for now..

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * JavaScript functions for the CategoryTree extension, an AJAX based gadget
3
 
 * to display the category structure of a wiki
4
 
 *
5
 
 * @package MediaWiki
6
 
 * @subpackage Extensions
7
 
 * @author Daniel Kinzler, brightbyte.de
8
 
 * @copyright © 2006 Daniel Kinzler
9
 
 * @licence GNU General Public Licence 2.0 or later
10
 
 *
11
 
 * NOTE: if you change this, increment $wgCategoryTreeVersion 
12
 
 *       in CategoryTree.php to avoid users getting stale copies from cache.
13
 
*/
14
 
 
15
 
// Default messages if new code loaded with old cached page
16
 
var categoryTreeErrorMsg = "Problem loading data.";
17
 
var categoryTreeRetryMsg = "Please wait a moment and try again.";
18
 
 
19
 
    function categoryTreeNextDiv(e) {
20
 
      var n= e.nextSibling;
21
 
      while ( n && ( n.nodeType != 1 || n.nodeName != 'DIV') ) {
22
 
          //alert('nodeType: ' + n.nodeType + '; nodeName: ' + n.nodeName);
23
 
          n= n.nextSibling;
24
 
      }
25
 
 
26
 
      return n;
27
 
    }
28
 
 
29
 
    function categoryTreeExpandNode(cat, options, lnk) {
30
 
      var div= categoryTreeNextDiv( lnk.parentNode.parentNode );
31
 
 
32
 
      div.style.display= 'block';
33
 
      lnk.innerHTML= categoryTreeCollapseBulletMsg;
34
 
      lnk.title= categoryTreeCollapseMsg;
35
 
      lnk.onclick= function() { categoryTreeCollapseNode(cat, options, lnk) }
36
 
 
37
 
      if (!lnk.className.match(/(^| )CategoryTreeLoaded($| )/)) {
38
 
        categoryTreeLoadNode(cat, options, lnk, div);
39
 
      }
40
 
    }
41
 
 
42
 
    function categoryTreeCollapseNode(cat, options, lnk) {
43
 
      var div= categoryTreeNextDiv( lnk.parentNode.parentNode );
44
 
 
45
 
      div.style.display= 'none';
46
 
      lnk.innerHTML= categoryTreeExpandBulletMsg;
47
 
      lnk.title= categoryTreeExpandMsg;
48
 
      lnk.onclick= function() { categoryTreeExpandNode(cat, options, lnk) }
49
 
    }
50
 
 
51
 
    function categoryTreeLoadNode(cat, options, lnk, div) {
52
 
      div.style.display= 'block';
53
 
      lnk.className= 'CategoryTreeLoaded';
54
 
      lnk.innerHTML= categoryTreeCollapseBulletMsg;
55
 
      lnk.title= categoryTreeCollapseMsg;
56
 
      lnk.onclick= function() { categoryTreeCollapseNode(cat, options, lnk) }
57
 
 
58
 
      categoryTreeLoadChildren(cat, options, div)
59
 
    }
60
 
 
61
 
        // FIXME Why can't this just use uneval()?
62
 
    function categoryTreeEncodeValue(value) {
63
 
          switch (typeof value) {
64
 
              case 'function': 
65
 
                  throw new Error("categoryTreeEncodeValue encountered a function");
66
 
                  break;
67
 
 
68
 
              case 'string': 
69
 
                  s = '"' + value.replace(/([\\"'])/g, "\\$1") + '"';
70
 
                  break;
71
 
 
72
 
              case 'number':
73
 
              case 'boolean':
74
 
              case 'null':
75
 
                  s = String(value);
76
 
                  break;
77
 
 
78
 
              case 'object':
79
 
                  if ( !value ) {
80
 
                      s = 'null';
81
 
                  }
82
 
                  else if (typeof value.length === 'number' && !(value.propertyIsEnumerable('length'))) {
83
 
                      s = '';
84
 
                      for (i = 0; i<value.length; i++) {
85
 
                          v = value[i];
86
 
                          if ( s!='' ) s += ', ';
87
 
                          s += categoryTreeEncodeValue( v );
88
 
                      }
89
 
                      s = '[' + s + ']';
90
 
                  }
91
 
                  else {
92
 
                      s = '';
93
 
                      for (k in value) {
94
 
                          v = value[k];
95
 
                          if ( s!='' ) s += ', ';
96
 
                          s += categoryTreeEncodeValue( k );
97
 
                          s += ': ';
98
 
                          s += categoryTreeEncodeValue( v );
99
 
                      }
100
 
                      s = '{' + s + '}';
101
 
                  }
102
 
                  break;
103
 
              default:
104
 
                  throw new Error("categoryTreeEncodeValue encountered strange variable type " + (typeof value));
105
 
          }
106
 
 
107
 
      return s;
108
 
    }
109
 
 
110
 
    function categoryTreeLoadChildren(cat, options, div) {
111
 
      div.innerHTML= '<i class="CategoryTreeNotice">' + categoryTreeLoadingMsg + '</i>';
112
 
 
113
 
      if ( typeof options == "string" ) { //hack for backward compatibility
114
 
          options = { mode : options };
115
 
      }
116
 
 
117
 
      function f( request ) {
118
 
          if (request.status != 200) {
119
 
              div.innerHTML = '<i class="CategoryTreeNotice">' + categoryTreeErrorMsg + ' </i>';
120
 
              var retryLink = document.createElement('a');
121
 
              retryLink.innerHTML = categoryTreeRetryMsg;
122
 
              retryLink.onclick = function() {
123
 
                  categoryTreeLoadChildren(cat, options, div, enc);
124
 
              }
125
 
              div.appendChild(retryLink);
126
 
              return;
127
 
          }
128
 
 
129
 
          result= request.responseText;
130
 
          result= result.replace(/^\s+|\s+$/, '');
131
 
 
132
 
          if ( result == '' ) {
133
 
                    result= '<i class="CategoryTreeNotice">';
134
 
 
135
 
                    if ( options.mode == 0 ) result= categoryTreeNoSubcategoriesMsg;
136
 
                    else if ( options.mode == 10 ) result= categoryTreeNoPagesMsg;
137
 
                    else if ( options.mode == 100 ) result= categoryTreeNoParentCategoriesMsg;
138
 
                    else result= categoryTreeNothingFoundMsg;
139
 
 
140
 
                    result+= '</i>';
141
 
          }
142
 
 
143
 
          result = result.replace(/##LOAD##/g, categoryTreeExpandMsg);
144
 
          div.innerHTML= result;
145
 
      }
146
 
 
147
 
      var opt = categoryTreeEncodeValue(options);
148
 
      sajax_do_call( "efCategoryTreeAjaxWrapper", [cat, opt, 'json'] , f );
149
 
    }
150
 
    
151
 
    // Re-show the CategoryTreeToggles.
152
 
    addOnloadHook( function() {
153
 
        var toggles = getElementsByClassName( document, 'span', 'CategoryTreeToggle' );
154
 
        
155
 
        for( var i = 0; i<toggles.length; ++i ) {
156
 
                toggles[i].style.display = 'inline';
157
 
        }
158
 
    } );