Skip to content
This repository was archived by the owner on Sep 10, 2021. It is now read-only.

Commit 3487c43

Browse files
author
Charles Marion
committed
ENH: browser behavior
1 parent d88e05c commit 3487c43

File tree

1 file changed

+102
-43
lines changed

1 file changed

+102
-43
lines changed

core/public/js/layout/jquery.treeTable.js

Lines changed: 102 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
this.style.display = "none"; // Performance! $(this).hide() is slow...
3535
}
3636
});
37-
initializeAjax($(this),true);
37+
initializeAjax($(this),true,false);
3838
});
3939
initEvent();
4040

@@ -63,7 +63,7 @@
6363

6464
var tree= new Array();
6565

66-
function initializeAjax(node,first)
66+
function initializeAjax(node,first,expandNode)
6767
{
6868
if(node==undefined)
6969
{
@@ -93,16 +93,14 @@
9393
arrayElement=jQuery.parseJSON(data);
9494
$.each(arrayElement, function(index, value) {
9595
tree[index]=value;
96-
});
97-
children.each(function()
98-
{
99-
if($(this).attr('ajax')!=undefined)
100-
{
101-
// $(this).removeAttr('ajax');
102-
// $(this).attr('proccessing',false);
103-
// $(this).find('td:first img.tableLoading').hide();
104-
}
105-
});
96+
});
97+
98+
if(expandNode != false)
99+
{
100+
expandNode.expand();
101+
getElementsSize();
102+
}
103+
106104
initEvent();
107105
});
108106
}
@@ -132,12 +130,7 @@
132130

133131
// Recursively show all node's children in a tree
134132
$.fn.expand = function() {
135-
if($(this).attr('ajax')!=undefined&&$(this).attr('proccessing')==undefined)
136-
{
137-
initializeAjax(parentOf($(this)),false);
138-
return $(this).expand();
139-
}
140-
else if ($(this).attr('ajax')!=undefined&&tree[$(this).attr('ajax')]!=undefined)
133+
if ($(this).attr('ajax')!=undefined&&tree[$(this).attr('ajax')]!=undefined)
141134
{
142135
createElementsAjax($(this),tree[$(this).attr('ajax')],true);
143136
$(this).removeAttr('ajax');
@@ -146,6 +139,11 @@
146139
initEvent();
147140
initialize($(this));
148141
}
142+
else if($(this).attr('ajax')!=undefined&&tree[$(this).attr('ajax')]==undefined)
143+
{
144+
initializeAjax(parentOf($(this)),false,$(this));
145+
return
146+
}
149147

150148
if($(this).attr('proccessing')=='true')
151149
{
@@ -155,11 +153,18 @@
155153
var id = $(this).attr('id');
156154

157155
$(this).removeClass("collapsed").addClass("expanded");
158-
$('tr[id*="'+id+'"]').show();
159-
$('tr[id*="'+id+'"]').each(function() {
160-
initialize($(this));
161-
});
162-
initializeAjax($(this),false);
156+
childrenOf($(this)).each(function() {
157+
initialize($(this));
158+
159+
if($(this).is(".expanded.parent")) {
160+
$(this).expand();
161+
}
162+
163+
// this.style.display = "table-row"; // Unfortunately this is not possible with IE :-(
164+
$(this).show();
165+
});
166+
167+
initializeAjax($(this),false,false);
163168
colorLines(true);
164169
return this;
165170
};
@@ -305,46 +310,93 @@
305310
});
306311
}
307312

313+
308314

309-
function createElementsAjax(node,elements,first)
315+
function createElementsAjax(node,elementsRaw,first)
310316
{
317+
var lastElement;
311318
if(typeof customElements == 'function')
312319
{
313-
html=customElements(node,elements,first);
320+
html=customElements(node,elementsRaw,first);
314321
node.after(html)
315322
}
316323
else
317324
{
325+
var html='';
318326
var i = 1;
319327
var id=node.attr('id');
320-
elements['folders'] = jQuery.makeArray(elements['folders']).reverse();
321-
elements['items'] = jQuery.makeArray(elements['items']).reverse();
328+
elements = elementsRaw;
329+
elements['folders'] = jQuery.makeArray(elementsRaw['folders']);
330+
elements['items'] = jQuery.makeArray(elementsRaw['items']);
322331
// var padding=parseInt(node.find('td:first').css('padding-left').slice(0,-2));
323-
324-
$.each(elements['items'], function(index, value) {
325-
var html='';
326-
html+= "<tr id='"+id+"-"+i+"' class='child-of-"+id+"' type='item' policy='"+value['policy']+"' element='"+value['item_id']+"'>";
327-
html+= " <td><span class='file'>"+sliceFileName(value['name'],40)+"</span></td>";
328-
html+= " <td>"+value['size']+"</td>";
329-
html+= " <td>"+value['creation']+"</td>";
330-
html+= " <td><input type='checkbox' class='treeCheckbox' type='item' element='"+value['item_id']+"'/></td>";
331-
html+= "</tr>";
332+
333+
var j = 1;
334+
335+
336+
$.each(elements['folders'], function(index, value) {
337+
if(j > 70)
338+
{
339+
return;
340+
}
332341
i++;
333-
node.after(html)
334-
});
335-
336-
$.each(elements['folders'], function(index, value) {
337-
var html='';
342+
if($('#'+id+"-"+i).length > 0)
343+
{
344+
return;
345+
}
338346
html+= "<tr id='"+id+"-"+i+"' deletable='"+value['deletable']+"' class='parent child-of-"+id+"' ajax='"+value['folder_id']+"'type='folder' policy='"+value['policy']+"' element='"+value['folder_id']+"'>";
339347
html+= " <td><span class='folder'>"+sliceFileName(value['name'],40)+"</span></td>";
340348
html+= " <td>"+'<img class="folderLoading" element="'+value['folder_id']+'" alt="" src="'+json.global.coreWebroot+'/public/images/icons/loading.gif"/>'+"</td>";
341349
html+= " <td>"+value['creation']+"</td>";
342350
html+= " <td><input type='checkbox' class='treeCheckbox' type='folder' element='"+value['folder_id']+"'/></td>";
343351
html+= "</tr>";
352+
lastElement = id+"-"+i;
353+
j++;
354+
});
355+
356+
357+
$.each(elements['items'], function(index, value) {
344358
i++;
345-
node.after(html)
359+
if(j > 70)
360+
{
361+
return;
362+
}
363+
if($('#'+id+"-"+i).length > 0)
364+
{
365+
return;
366+
}
367+
html+= "<tr id='"+id+"-"+i+"' class='child-of-"+id+"' type='item' policy='"+value['policy']+"' element='"+value['item_id']+"'>";
368+
html+= " <td><span class='file'>"+sliceFileName(value['name'],40)+"</span></td>";
369+
html+= " <td>"+value['size']+"</td>";
370+
html+= " <td>"+value['creation']+"</td>";
371+
html+= " <td><input type='checkbox' class='treeCheckbox' type='item' element='"+value['item_id']+"'/></td>";
372+
html+= "</tr>";
373+
j++;
374+
lastElement = id+"-"+i;
346375
});
376+
377+
if(j > 70)
378+
{
379+
html+="<tr id='"+id+"-10000000' element='"+id+"'><td colspan = 1 align=right><a class='treeBrowserShowMore'>Show more</a></td><td></td><td></td><td></td></tr>";
380+
}
381+
if(elementsRaw['last'] != undefined)
382+
{
383+
$('#'+elementsRaw['last']).after(html);
384+
}
385+
else
386+
{
387+
node.after(html);
388+
}
347389
}
390+
391+
$('a.treeBrowserShowMore').click(function()
392+
{
393+
elementsRaw['last'] = lastElement;
394+
createElementsAjax($('tr#'+$(this).parents('tr').attr('element')),elementsRaw,false);
395+
initEvent();
396+
initialize($(this).parents('tr'));
397+
$(this).parents('tr').remove();
398+
}
399+
);
348400

349401
var cell = $(node.children("td")[options.treeColumn]);
350402
var padding = getPaddingLeft(cell) + options.indent;
@@ -440,8 +492,14 @@
440492
function getElementsSize()
441493
{
442494
var elements='';
495+
var i = 0;
443496
$('img.folderLoading').each(function()
444-
{
497+
{
498+
i++;
499+
if(i > 10)
500+
{
501+
return ;
502+
}
445503
if($(this).attr('process')==undefined)
446504
{
447505
elements+=$(this).attr('element')+'-';
@@ -459,6 +517,7 @@
459517
img.parents('tr').find('td:first span:last').append('<span style="padding-left:0px;" class="elementCount">'+' ('+value.count+')'+'</span>');
460518
img.remove();
461519
});
520+
getElementsSize();
462521
});
463522
}
464523

0 commit comments

Comments
 (0)