Tue, 04 Oct 2022 19:25:07 +0200
fix over-optimization of strstr
1. it's actually less performant to frequently read bytes
from an array instead of using the native word length
2. the SBO buffer should be local and not static to allow
multi-threading usage
390 | 1 | function toggleVisibility(linkObj) |
2 | { | |
3 | var base = $(linkObj).attr('id'); | |
4 | var summary = $('#'+base+'-summary'); | |
5 | var content = $('#'+base+'-content'); | |
6 | var trigger = $('#'+base+'-trigger'); | |
7 | var src=$(trigger).attr('src'); | |
8 | if (content.is(':visible')===true) { | |
9 | content.hide(); | |
10 | summary.show(); | |
11 | $(linkObj).addClass('closed').removeClass('opened'); | |
12 | $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); | |
13 | } else { | |
14 | content.show(); | |
15 | summary.hide(); | |
16 | $(linkObj).removeClass('closed').addClass('opened'); | |
17 | $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); | |
18 | } | |
19 | return false; | |
20 | } | |
21 | ||
22 | function updateStripes() | |
23 | { | |
24 | $('table.directory tr'). | |
25 | removeClass('even').filter(':visible:even').addClass('even'); | |
26 | } | |
27 | ||
28 | function toggleLevel(level) | |
29 | { | |
30 | $('table.directory tr').each(function() { | |
31 | var l = this.id.split('_').length-1; | |
32 | var i = $('#img'+this.id.substring(3)); | |
33 | var a = $('#arr'+this.id.substring(3)); | |
34 | if (l<level+1) { | |
35 | i.removeClass('iconfopen iconfclosed').addClass('iconfopen'); | |
36 | a.html('▼'); | |
37 | $(this).show(); | |
38 | } else if (l==level+1) { | |
39 | i.removeClass('iconfclosed iconfopen').addClass('iconfclosed'); | |
40 | a.html('►'); | |
41 | $(this).show(); | |
42 | } else { | |
43 | $(this).hide(); | |
44 | } | |
45 | }); | |
46 | updateStripes(); | |
47 | } | |
48 | ||
49 | function toggleFolder(id) | |
50 | { | |
51 | // the clicked row | |
52 | var currentRow = $('#row_'+id); | |
53 | ||
54 | // all rows after the clicked row | |
55 | var rows = currentRow.nextAll("tr"); | |
56 | ||
57 | var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub | |
58 | ||
59 | // only match elements AFTER this one (can't hide elements before) | |
60 | var childRows = rows.filter(function() { return this.id.match(re); }); | |
61 | ||
62 | // first row is visible we are HIDING | |
63 | if (childRows.filter(':first').is(':visible')===true) { | |
64 | // replace down arrow by right arrow for current row | |
65 | var currentRowSpans = currentRow.find("span"); | |
66 | currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed"); | |
67 | currentRowSpans.filter(".arrow").html('►'); | |
68 | rows.filter("[id^=row_"+id+"]").hide(); // hide all children | |
69 | } else { // we are SHOWING | |
70 | // replace right arrow by down arrow for current row | |
71 | var currentRowSpans = currentRow.find("span"); | |
72 | currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen"); | |
73 | currentRowSpans.filter(".arrow").html('▼'); | |
74 | // replace down arrows by right arrows for child rows | |
75 | var childRowsSpans = childRows.find("span"); | |
76 | childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed"); | |
77 | childRowsSpans.filter(".arrow").html('►'); | |
78 | childRows.show(); //show all children | |
79 | } | |
80 | updateStripes(); | |
81 | } | |
82 | ||
83 | ||
84 | function toggleInherit(id) | |
85 | { | |
86 | var rows = $('tr.inherit.'+id); | |
87 | var img = $('tr.inherit_header.'+id+' img'); | |
88 | var src = $(img).attr('src'); | |
89 | if (rows.filter(':first').is(':visible')===true) { | |
90 | rows.css('display','none'); | |
91 | $(img).attr('src',src.substring(0,src.length-8)+'closed.png'); | |
92 | } else { | |
93 | rows.css('display','table-row'); // using show() causes jump in firefox | |
94 | $(img).attr('src',src.substring(0,src.length-10)+'open.png'); | |
95 | } | |
96 | } | |
97 |