Subversion Repositories Applications.referentiel

Compare Revisions

Ignore whitespace Rev 57 → Rev 58

/trunk/interfaces/squelettes/js/jquery.chromatable.js
New file
0,0 → 1,146
/*
* File: chromatable.js
* Version: 1.3.0
* CVS: $Id$
* Description: Make a "sticky" header at the top of the table, so it stays put while the table scrolls
* Author: Zachary Siswick
* Created: Thursday 19 November 2009 8:53pm
* Language: Javascript
*
*/
(function($){
$.chromatable = {
// Default options
defaults: {
//specify a pixel dimension, auto, or 100%
width: "900px",
height: "300px",
scrolling: "yes"
}
};
$.fn.chromatable = function(options){
// Extend default options
var options = $.extend({}, $.chromatable.defaults, options);
 
return this.each(function(){
// Add jQuery methods to the element
var $this = $(this);
var $uniqueID = $(this).attr("ID") + ("wrapper");
//Add dimentsions from user or default parameters to the DOM elements
$(this).css('width', options.width).addClass("_scrolling");
$(this).wrap('<div class="scrolling_outer"><div id="'+$uniqueID+'" class="scrolling_inner"></div></div>');
$(".scrolling_outer").css({'position':'relative'});
$("#"+$uniqueID).css({'overflow-x':'hidden', 'overflow-y':'auto','padding-right':'17px'});
$("#"+$uniqueID).css('height', options.height);
$("#"+$uniqueID).css('width', options.width);
// clone an exact copy of the scrolling table and add to DOM before the original table
// replace old class with new to differentiate between the two
$(this).before($(this).clone().attr("id", "").addClass("_thead").css(
{'width' : 'auto',
'display' : 'block',
'position':'absolute',
'border':'none',
'border-bottom':'1px solid #CCC',
'top':'0'
}));
// remove all children within the cloned table after the thead element
$('._thead').children('tbody').remove();
$(this).each(function( $this ){
// if the width is auto, we need to remove padding-right on scrolling container
if (options.width == "100%" || options.width == "auto") {
$("#"+$uniqueID).css({'padding-right':'0px'});
}
if (options.scrolling == "no") {
$("#"+$uniqueID).before('<a href="#" class="expander" style="width:100%;">Expand table</a>');
$("#"+$uniqueID).css({'padding-right':'0px'});
$(".expander").each(
function(int){
$(this).attr("ID", int);
$( this ).bind ("click",function(){
$("#"+$uniqueID).css({'height':'auto'});
$("#"+$uniqueID+" ._thead").remove();
$(this).remove();
});
});
 
 
//this is dependant on the jQuery resizable UI plugin
$("#"+$uniqueID).resizable({ handles: 's' }).css("overflow-y", "hidden");
}
});
// Get a relative reference to the "sticky header"
$curr = $this.prev();
// Copy the cell widths across from the original table
$("thead:eq(0)>tr th",this).each( function (i) {
$("thead:eq(0)>tr th:eq("+i+")", $curr).width( $(this).width());
});
 
//check to see if the width is set to auto, if not, we don't need to call the resizer function
if (options.width == "100%" || "auto"){
// call the resizer function whenever the table width has been adjusted
$(window).resize(function(){
resizer($this);
});
}
});
};
// private function to temporarily hide the header when the browser is resized
function resizer($this) {
// Need a relative reference to the "sticky header"
$curr = $this.prev();
$("thead:eq(0)>tr th", $this).each( function (i) {
$("thead:eq(0)>tr th:eq("+i+")", $curr).width( $(this).width());
});
 
};
})(jQuery);