Subversion Repositories wimsdev

Rev

Rev 8588 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 8588 Rev 18309
Line 7... Line 7...
7
 
7
 
8
/*
8
/*
9
 * Initialise all trees identified by <ul class="tree">
9
 * Initialise all trees identified by <ul class="tree">
10
 */
10
 */
11
 
11
 
12
/*
12
/**
13
 * Usefull function for popup window displaying
13
 * Usefull function for popup window displaying
-
 
14
 * @param {*} mylink
-
 
15
 * @param {*} windowname
-
 
16
 * @returns
14
 */
17
 */
15
function popup(mylink, windowname){
18
function popup(mylink, windowname){
16
  if (! window.focus)return true;
19
  if (! window.focus)return true;
17
  var href;
20
  var href;
18
  if (typeof(mylink) == 'string')
21
  if (typeof(mylink) == 'string')
Line 21... Line 24...
21
    href=mylink.href;
24
    href=mylink.href;
22
  window.open(href, windowname, 'width=800,height=500,scrollbars=yes');
25
  window.open(href, windowname, 'width=800,height=500,scrollbars=yes');
23
  return false;
26
  return false;
24
}
27
}
25
 
28
 
-
 
29
/**
-
 
30
 * autoInit_trees
-
 
31
 */
26
function autoInit_trees() {
32
function autoInit_trees() {
-
 
33
  //console.log("autoInit_trees");
27
        var candidates = document.getElementsByTagName('ul');
34
  var candidates = document.getElementsByTagName('ul');
28
        for(var i=0;i<candidates.length;i++) {
35
  for(var i=0;i<candidates.length;i++) {
29
                if(candidates[i].className && candidates[i].className.indexOf('tree') != -1) {
36
    if(candidates[i].className && candidates[i].className.indexOf('tree') != -1) {
30
                        initTree(candidates[i]);
37
      initTree(candidates[i]);
31
                        candidates[i].className = candidates[i].className.replace(/ ?unformatted ?/, ' ');
38
      candidates[i].className = candidates[i].className.replace(/ ?unformatted ?/, ' ');
32
                }
39
    }
33
        }
40
  }
34
}
41
}
35
 
42
 
36
/*
43
/**
37
 * Initialise a tree node, converting all its LIs appropriately
44
 * Initialise a tree node, converting all its LIs appropriately
-
 
45
 * @param {*} el
-
 
46
 * @returns
38
 */
47
 */
39
function initTree(el) {
48
function initTree(el) {
-
 
49
  //console.log("initTree");
40
        var i,j;
50
  var i,j;
41
        var spanA, spanB, spanC;
51
  var spanA, spanB, spanC;
42
        var startingPoint, stoppingPoint, childUL;
52
  var startingPoint, stoppingPoint, childUL;
43
       
53
 
44
        // Find all LIs to process
54
  // Find all LIs to process
45
        for(i=0;i<el.childNodes.length;i++) {
55
  for(i=0;i<el.childNodes.length;i++) {
46
                if(el.childNodes[i].tagName && el.childNodes[i].tagName.toLowerCase() == 'li') {
56
    if(el.childNodes[i].tagName && el.childNodes[i].tagName.toLowerCase() == 'li') {
47
                        var li = el.childNodes[i];
57
      var li = el.childNodes[i];
48
 
58
 
49
                        // Create our extra spans
59
      // Create our extra spans
50
                        spanA = document.createElement('span');
60
      spanA = document.createElement('span');
51
                        spanB = document.createElement('span');
61
      spanB = document.createElement('span');
52
                        spanC = document.createElement('span');
62
      spanC = document.createElement('span');
53
                        spanA.appendChild(spanB);
63
      spanA.appendChild(spanB);
54
                        spanB.appendChild(spanC);
64
      spanB.appendChild(spanC);
55
                        spanA.className = 'a ' + li.className.replace('closed','spanClosed');
65
      spanA.className = 'a ' + li.className.replace('closed','spanClosed');
56
                        spanA.onMouseOver = function() {}
66
      spanA.onMouseOver = function() {}
57
                        spanB.className = 'b';
67
      spanB.className = 'b';
58
                        spanB.onclick = treeToggle;
68
      spanB.onclick = treeToggle;
59
                        spanC.className = 'c';
69
      spanC.className = 'c';
60
                       
-
 
61
                       
70
 
62
                        // Find the UL within the LI, if it exists
71
      // Find the UL within the LI, if it exists
63
                        stoppingPoint = li.childNodes.length;
72
      stoppingPoint = li.childNodes.length;
64
                        startingPoint = 0;
73
      startingPoint = 0;
65
                        childUL = null;
74
      childUL = null;
66
                        for(j=0;j<li.childNodes.length;j++) {
75
      for(j=0;j<li.childNodes.length;j++) {
67
                                if(li.childNodes[j].tagName && li.childNodes[j].tagName.toLowerCase() == 'div') {
76
        if(li.childNodes[j].tagName && li.childNodes[j].tagName.toLowerCase() == 'div') {
68
                                        startingPoint = j + 1;
77
          startingPoint = j + 1;
69
                                        continue;
78
          continue;
70
                                }
79
        }
71
 
80
 
72
                                if(li.childNodes[j].tagName && li.childNodes[j].tagName.toLowerCase() == 'ul') {
81
        if(li.childNodes[j].tagName && li.childNodes[j].tagName.toLowerCase() == 'ul') {
73
                                        childUL = li.childNodes[j];
82
          childUL = li.childNodes[j];
74
                                        stoppingPoint = j;
83
          stoppingPoint = j;
75
                                        break;                                 
84
          break;
76
                                }
85
        }
77
                        }
86
      }
78
                               
87
 
79
                        // Move all the nodes up until that point into spanC
88
      // Move all the nodes up until that point into spanC
80
                        for(j=startingPoint;j<stoppingPoint;j++) {
89
      for(j=startingPoint;j<stoppingPoint;j++) {
81
                                spanC.appendChild(li.childNodes[startingPoint]);
90
        spanC.appendChild(li.childNodes[startingPoint]);
82
                        }
91
      }
83
                       
92
 
84
                        // Insert the outermost extra span into the tree
93
      // Insert the outermost extra span into the tree
-
 
94
      if(li.childNodes.length > startingPoint) {
85
                        if(li.childNodes.length > startingPoint) li.insertBefore(spanA, li.childNodes[startingPoint]);
95
        li.insertBefore(spanA, li.childNodes[startingPoint]);
-
 
96
      } else {
86
                        else li.appendChild(spanA);
97
        li.appendChild(spanA);
-
 
98
      }
87
                       
99
 
88
                        // Process the children
100
      // Process the children
89
                        if(childUL != null) {
101
      if(childUL != null) {
90
                                if(initTree(childUL)) {
102
        if(initTree(childUL)) {
91
                                        addClass(li, 'children', 'closed');
103
          li.classList.add('children');
92
                                        addClass(spanA, 'children', 'spanClosed');
104
          spanA.classList.add('children');
93
                                }
105
        }
94
                        }
106
      }
95
                }
107
    }
96
        }
108
  }
97
       
109
 
98
        if(li) {
110
  if(li) {
99
                // li and spanA will still be set to the last item
111
    // li and spanA will still be set to the last item
100
 
-
 
101
                addClass(li, 'last', 'closed');
112
    li.classList.add('last');
102
                addClass(spanA, 'last', 'spanClosed');
113
    spanA.classList.add('last');
103
                return true;
114
    return true;
104
        } else {
115
  } else {
105
                return false;
116
    return false;
106
        }
117
  }
107
               
-
 
108
}
118
}
109
 
119
 
110
 
120
/**
-
 
121
 * +/- toggle the tree
111
/*
122
 *
112
 * +/- toggle the tree, where el is the <span class="b"> node
123
 * @param {*} el the <span class="b"> node
113
 * force, will force it to "open" or "close"
124
 * @param {*} force will force it to "open" or "close"
114
 */
125
 */
115
function treeToggle(el, force) {
126
function treeToggle(el, force) {
-
 
127
  //console.log("treeToggle");
116
        el = this;
128
  el = this;
117
        while(el != null && (!el.tagName || el.tagName.toLowerCase() != "li")) el = el.parentNode;
129
  while(el != null && (!el.tagName || el.tagName.toLowerCase() != "li")) el = el.parentNode;
118
       
130
 
119
        // Get UL within the LI
131
  // Get UL within the LI
120
        var childSet = findChildWithTag(el, 'ul');
132
  var childSet = findChildWithTag(el, 'ul');
121
        var topSpan = findChildWithTag(el, 'span');
133
  var topSpan = findChildWithTag(el, 'span');
122
 
134
 
123
        if( force != null ){
135
  if( force != null ){
124
               
-
 
125
                if( force == "open"){
136
    if( force == "open"){
126
                        treeOpen( topSpan, el )
137
      treeOpen( topSpan, el )
127
                }
-
 
128
                else if( force == "close" ){
138
    } else if( force == "close" ){
129
                        treeClose( topSpan, el )
139
      treeClose( topSpan, el )
130
                }
140
    }
131
               
-
 
132
        }
-
 
133
       
-
 
134
        else if( childSet != null) {
141
  } else if( childSet != null) {
135
                // Is open, close it
142
    // Is open, close it
136
                if(!el.className.match(/(^| )closed($| )/)) {          
143
    if(!el.className.match(/(^| )closed($| )/)) {
137
                        treeClose( topSpan, el )
144
      treeClose( topSpan, el )
138
                // Is closed, open it
145
    // Is closed, open it
139
                } else {                       
146
    } else {
140
                        treeOpen( topSpan, el )
147
      treeOpen( topSpan, el )
141
                }
148
    }
142
        }
149
  }
143
}
150
}
144
 
151
 
-
 
152
/**
-
 
153
 * treeOpen
-
 
154
 * @param {*} a
-
 
155
 * @param {*} b
145
 
156
 */
146
function treeOpen(a, b ){
157
function treeOpen(a, b ){
-
 
158
  //console.log("treeOpen");
147
        removeClass(a,'spanClosed');
159
  a.classList.remove('spanClosed');
148
        removeClass(b,'closed');
160
  b.classList.remove('closed');
149
}
161
}
150
 
162
 
151
/*
163
/**
152
 * [Jquery] treeToggleAll : Open/close all tree inside "elem"
164
 *  * [Jquery] treeToggleAll : Open/close all tree inside "elem"
153
 * elem can be a css id (#ident) or a css class (.classname)
165
 * elem can be a css id (#ident) or a css class (.classname)
154
 * added by obado
166
 * added by obado
-
 
167
 * @param {*} elem
155
 */
168
 */
156
function treeToggleAll( elem ){
169
function treeToggleAll( elem ){
-
 
170
  //console.log("treeToggleAll");
157
        $(elem+" .children").toggleClass("closed");
171
  //$(elem+" .children").toggleClass("closed");
-
 
172
  if ($(elem).hasClass("all_open")){
-
 
173
    $(elem+" .children").addClass("closed");
-
 
174
    $(elem).removeClass("all_open");
-
 
175
  }
-
 
176
  else{
-
 
177
    $(elem+" .children").removeClass("closed");
-
 
178
    $(elem).addClass("all_open");
-
 
179
  }
158
}
180
}
159
       
181
 
-
 
182
/**
-
 
183
 * treeClose
-
 
184
 * @param {*} a
-
 
185
 * @param {*} b
160
       
186
 */
161
function treeClose(a, b ){
187
function treeClose(a, b ){
-
 
188
  //console.log("treeClose");
162
        addClass(a,'spanClosed');
189
  a.classList.add('spanClosed');
163
        addClass(b,'closed');
190
  b.classList.add('closed');
164
}
191
}
165
 
192
 
166
/*
193
/**
167
 * Find the a child of el of type tag
194
 * Find the a child of el of type tag
-
 
195
 * @param {*} el
-
 
196
 * @param {*} tag
-
 
197
 * @returns
168
 */
198
 */
169
function findChildWithTag(el, tag) {
199
function findChildWithTag(el, tag) {
-
 
200
  //console.log("findChildWithTag");
170
        for(var i=0;i<el.childNodes.length;i++) {
201
  for(var i=0;i<el.childNodes.length;i++) {
171
                if(el.childNodes[i].tagName != null && el.childNodes[i].tagName.toLowerCase() == tag) return el.childNodes[i];
202
    if(el.childNodes[i].tagName != null && el.childNodes[i].tagName.toLowerCase() == tag) return el.childNodes[i];
172
        }
203
  }
173
        return null;
204
  return null;
174
}
205
}
175
 
206
 
176
/*
207
/**
177
 * Functions to add and remove class names
208
 * Functions to add and remove class names
178
 * Mac IE hates unnecessary spaces
209
 * Mac IE hates unnecessary spaces
-
 
210
 * @param {*} el
-
 
211
 * @param {*} cls
-
 
212
 * @param {*} forceBefore
179
 */
213
 */
180
function addClass(el, cls, forceBefore) {
214
function addClass(el, cls, forceBefore) {
-
 
215
  //console.log(`addClass ${cls}`);
181
        if(forceBefore != null && el.className.match(new RegExp('(^| )' + forceBefore))) {
216
  if(forceBefore != null && el.className.match(new RegExp('(^| )' + forceBefore))) {
182
                el.className = el.className.replace(new RegExp("( |^)" + forceBefore), '$1' + cls + ' ' + forceBefore);
217
    el.className = el.className.replace(new RegExp("( |^)" + forceBefore), '$1' + cls + ' ' + forceBefore);
183
 
218
 
184
        } else if(!el.className.match(new RegExp('(^| )' + cls + '($| )'))) {
219
  } else if(!el.className.match(new RegExp('(^| )' + cls + '($| )'))) {
185
                el.className += ' ' + cls;
220
    el.className += ' ' + cls;
186
                el.className = el.className.replace(/(^ +)|( +$)/g, '');
221
    el.className = el.className.replace(/(^ +)|( +$)/g, '');
187
        }
222
  }
188
}
223
}
-
 
224
 
-
 
225
/**
-
 
226
 * removeClass
-
 
227
 * @param {*} el
-
 
228
 * @param {*} cls
-
 
229
 */
189
function removeClass(el, cls) {
230
function removeClass(el, cls) {
-
 
231
  //console.log("removeClass");
190
        var old = el.className;
232
  var old = el.className;
191
        var newCls = ' ' + el.className + ' ';
233
  var newCls = ' ' + el.className + ' ';
192
        newCls = newCls.replace(new RegExp(' (' + cls + ' +)+','g'), ' ');
234
  newCls = newCls.replace(new RegExp(' (' + cls + ' +)+','g'), ' ');
193
        el.className = newCls.replace(/(^ +)|( +$)/g, '');
235
  el.className = newCls.replace(/(^ +)|( +$)/g, '');
194
}
236
}
195
 
237
 
196
/*
238
/*
197
 * Handlers for automated loading
239
 * Handlers for automated loading
198
 */
240
 */
199
 _LOADERS = Array();
241
_LOADERS = Array();
200
 
242
 
-
 
243
/**
-
 
244
 * callAllLoaders
-
 
245
 */
201
function callAllLoaders() {
246
function callAllLoaders() {
202
        var i, loaderFunc;
247
  var i, loaderFunc;
203
        for(i=0;i<_LOADERS.length;i++) {
248
  for(i=0;i<_LOADERS.length;i++) {
204
                loaderFunc = _LOADERS[i];
249
    loaderFunc = _LOADERS[i];
205
                if(loaderFunc != callAllLoaders) loaderFunc();
250
    if(loaderFunc != callAllLoaders) loaderFunc();
206
        }
251
  }
207
}
252
}
208
 
253
 
-
 
254
/**
-
 
255
 * appendLoader
-
 
256
 * @param {*} loaderFunc
-
 
257
 */
209
function appendLoader(loaderFunc) {
258
function appendLoader(loaderFunc) {
210
        if(window.onload && window.onload != callAllLoaders)
259
  if(window.onload && window.onload != callAllLoaders)
211
                _LOADERS[_LOADERS.length] = window.onload;
260
    _LOADERS[_LOADERS.length] = window.onload;
212
 
261
 
213
        window.onload = callAllLoaders;
262
  window.onload = callAllLoaders;
214
 
263
 
215
        _LOADERS[_LOADERS.length] = loaderFunc;
264
  _LOADERS[_LOADERS.length] = loaderFunc;
216
}
265
}
217
 
266
 
218
appendLoader(autoInit_trees);
267
appendLoader(autoInit_trees);