1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
function inittable(){
/* GET THE STYLE SHEET */
var styleSheet;
for(var i = 0 ; i < document.styleSheets.length; i++) {
if(document.styleSheets[i].href.indexOf('init-sizable-column-style') != -1) {
styleSheet = document.styleSheets[i];
break;
}
}
var cssRulesTable;
if(navigator.appName=='Microsoft Internet Explorer') {
cssRulesTable = styleSheet.rules;
} else {
cssRulesTable = styleSheet.cssRules;
}
/* CREATE A RULES HASH MAP AS [CSS_CLASS_NAME : WIDTH_PROPERTY_VALUE]*/
var rules = new Object();
for(i = 0 ; i < cssRulesTable.length; i++) {
if(navigator.appName=='Microsoft Internet Explorer') {
rules[cssRulesTable[i].selectorText] = cssRulesTable[i].style.getAttribute("width");
} else {
rules[cssRulesTable[i].selectorText] = cssRulesTable[i].style.getPropertyValue("width");
}
}
$('.init-sizable-table').each(function(index) {
var columnWidths = [];
var headercells = $(this).find('thead:first th div.ui-dt-c');
var bodycells=$(this).find("td");
var totalwidth = $(this).width();
/* First loop associate each column with it's defined width + do sums for calculation */
var percentSum = 0;
var pxSum = 0;
var notClassedCount = 0;
var paddingRightSum = 0;
var paddingLeftSum = 0;
var borderWidthSum = 0;
for(var b = 0; b < headercells.length; b++){
paddingRightSum += parseInt(headercells.eq(b).css("paddingRight"));
paddingLeftSum += parseInt(headercells.eq(b).css("paddingLeft"));
borderWidthSum += parseInt(headercells.eq(b).parent().css("borderRightWidth"));
columnWidths[b] = "";
var cellClasses = headercells.eq(b).parent().attr('class').split(" ");
var classed = false;
for(i = 0 ; i < cellClasses.length; i++) {
if(rules[cellClasses[i]]) {
columnWidths[b] = rules[cellClasses[i]];
if(rules[cellClasses[i]].indexOf("%") != -1) {
percentSum += parseInt(rules[cellClasses[i]].replace("%",""));
} else if (rules[cellClasses[i]].indexOf("px") != -1) {
pxSum += parseInt(rules[cellClasses[i]].replace("px",""));
}
classed = true;
break;
}
}
if(!classed) notClassedCount++;
}
/* calculate percent value for not classed and the px value of a percent*/
var notClassedPercent = 100 / notClassedCount ;
var percentInPixels = (totalwidth - pxSum - (paddingRightSum + paddingLeftSum + borderWidthSum + 5)) / (percentSum + (notClassedPercent * notClassedCount));
// calculate width in pixel for each column and set the headers.
for(b = 0; b < headercells.length; b++){
if(columnWidths[b].indexOf("px") != -1) {
columnWidths[b] = Math.round(parseInt(columnWidths[b].replace("px","")));
} else if (columnWidths[b].indexOf("%") != -1) {
columnWidths[b] = Math.round(parseInt(columnWidths[b].replace("%","")) * percentInPixels);
} else {
columnWidths[b] = Math.round(notClassedPercent * percentInPixels);
}
headercells.eq(b).width(columnWidths[b]);
headercells.eq(b).parent().width('');
var k = headercells.eq(b).parent();
var n = columnWidths[b];
var request={source:this.id,process:this.id,params:[{name:this.id+"_updateBody",value:true}
,{name:this.id+"_colResize",value:true}
,{name:this.id+"_columnId",value:k.attr("id")}
,{name:this.id+"_width",value:n}
,{name:this.id+"_height",value:k.height()}
]};
PrimeFaces.ab(request);
}
for(b = 0; b<bodycells.length; b++) {
var a = bodycells.eq(b);
a.width('').children("div.ui-dt-c").width(columnWidths[a.index()]);
}
});
};
window.onload = inittable; |
Partager