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

« back to all changes in this revision

Viewing changes to dist/mediawiki-extensions-base/usr/share/mediawiki-extensions/base/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
    } );