311 lines
6.5 KiB
JavaScript
311 lines
6.5 KiB
JavaScript
//------------------------------------------------------------------------------
|
|
// IPS JS: Cell select
|
|
// (c) 2005 Invision Power Services, Inc.
|
|
// http://www.invisionpower.com
|
|
// Matt Mecham (29/11/05)
|
|
//------------------------------------------------------------------------------
|
|
|
|
var _cell_select;
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Initiate object
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function cell_select()
|
|
{
|
|
/**
|
|
* CSS: Table cell row OFF
|
|
*
|
|
* @var INT
|
|
*/
|
|
this.css_row_off = 'tablerow1';
|
|
|
|
/**
|
|
* CSS: Table cell row ON
|
|
*
|
|
* @var string
|
|
*/
|
|
this.css_row_on = 'tablerow2selected';
|
|
|
|
/**
|
|
* String: TR row ID part
|
|
*
|
|
* @var string
|
|
*/
|
|
this.row_tr_id = 'arow';
|
|
|
|
/**
|
|
* String: Checkbox ID part
|
|
*
|
|
* @var string
|
|
*/
|
|
this.row_checkbox_id = 'acid';
|
|
|
|
/**
|
|
* String: ID name of toggle all box
|
|
*
|
|
* @var string
|
|
*/
|
|
this.toggle_all_name = 'cellselect-cball';
|
|
|
|
/**
|
|
* String: ID of toggle all box
|
|
*
|
|
* @var object
|
|
*/
|
|
this.toggle_all_id = '';
|
|
|
|
/**
|
|
* String: Flag to see if we have a toggle all box
|
|
*
|
|
* @var object
|
|
*/
|
|
this.toggle_all_flag = 0;
|
|
|
|
/**
|
|
* Array: Selected IDs array
|
|
*
|
|
* @var array
|
|
*/
|
|
this.selected_ids = new Array();
|
|
|
|
/**
|
|
* Array: Total possible cbs
|
|
*
|
|
* @var array
|
|
*/
|
|
this.total_ids = 0;
|
|
|
|
/**
|
|
* Store CSS rows for the original row
|
|
*/
|
|
this.store_css_row = new Array();
|
|
};
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Initiate object
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
cell_select.prototype.init = function()
|
|
{
|
|
//----------------------------------
|
|
// Check for toggle all box
|
|
//----------------------------------
|
|
|
|
try
|
|
{
|
|
this.toggle_all_id = document.getElementById( this.toggle_all_name );
|
|
this.toggle_all_flag = 1;
|
|
this.toggle_all_id.checked = false;
|
|
}
|
|
catch(error)
|
|
{
|
|
this.toggle_all_flag = 0;
|
|
}
|
|
|
|
//----------------------------------
|
|
// Check checked boxes
|
|
//----------------------------------
|
|
|
|
var checkboxes = document.getElementsByTagName('INPUT');
|
|
|
|
_cell_select = this;
|
|
|
|
//----------------------------------
|
|
// Sort through and grab links
|
|
//----------------------------------
|
|
|
|
for ( var i = 0 ; i < checkboxes.length ; i++ )
|
|
{
|
|
try
|
|
{
|
|
if ( ! checkboxes[i].id )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if ( checkboxes[i].getAttribute('type') != 'checkbox' )
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
catch(error)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var cbid = checkboxes[i].id;
|
|
var cbname = cbid.replace( /^(.*)-(\d+)$/, "$1" );
|
|
var cbnum = this.get_id_from_text( checkboxes[i].id );
|
|
|
|
//----------------------------------
|
|
// Work with it?
|
|
//----------------------------------
|
|
|
|
if ( cbname == this.row_checkbox_id )
|
|
{
|
|
if ( checkboxes[i].getAttribute('checked') || checkboxes[i].checked )
|
|
{
|
|
this.row_change_color( cbnum );
|
|
this.selected_ids[ cbnum ] = 1;
|
|
this.total_ids++;
|
|
}
|
|
else
|
|
{
|
|
this.selected_ids[ cbnum ] = 0;
|
|
this.total_ids++;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Toggle all row has been clicked
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
cell_select.prototype.row_toggle_all = function()
|
|
{
|
|
//----------------------------------
|
|
// Using a toggle all?
|
|
//----------------------------------
|
|
|
|
if ( ! this.toggle_all_flag )
|
|
{
|
|
return;
|
|
}
|
|
|
|
//----------------------------------
|
|
// Grab initial state
|
|
//----------------------------------
|
|
|
|
var checkstate = this.toggle_all_id.checked;
|
|
|
|
//----------------------------------
|
|
// Spread the love
|
|
//----------------------------------
|
|
|
|
var checkboxes = document.getElementsByTagName('INPUT');
|
|
|
|
//----------------------------------
|
|
// Sort through and grab links
|
|
//----------------------------------
|
|
|
|
for ( var i = 0 ; i < checkboxes.length ; i++ )
|
|
{
|
|
try
|
|
{
|
|
if ( ! checkboxes[i].id )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if ( checkboxes[i].getAttribute('type') != 'checkbox' )
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
catch(error)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var cbid = checkboxes[i].id;
|
|
var cbname = cbid.replace( /^(.*)-(\d+)$/, "$1" );
|
|
var cbnum = this.get_id_from_text( checkboxes[i].id );
|
|
|
|
//----------------------------------
|
|
// Work with it?
|
|
//----------------------------------
|
|
|
|
if ( cbname == this.row_checkbox_id )
|
|
{
|
|
checkboxes[i].checked = checkstate;
|
|
this.selected_ids[ cbnum ] = checkstate ? 0 : 1;
|
|
this.row_change_color( cbnum );
|
|
this.selected_ids[ cbnum ] = checkstate ? 1 : 0;
|
|
}
|
|
}
|
|
};
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// A row has been clicked
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
cell_select.prototype.row_clicked = function( row_id )
|
|
{
|
|
//----------------------------------
|
|
// Change color
|
|
//----------------------------------
|
|
|
|
this.row_change_color( row_id );
|
|
|
|
//----------------------------------
|
|
// Reset flag
|
|
//----------------------------------
|
|
|
|
this.selected_ids[ row_id ] = ( this.selected_ids[ row_id ] ) ? 0 : 1;
|
|
|
|
//----------------------------------
|
|
// Test toggle all box
|
|
//----------------------------------
|
|
|
|
if ( this.toggle_all_flag )
|
|
{
|
|
var c = 0;
|
|
|
|
for( var i in this.selected_ids )
|
|
{
|
|
if ( this.selected_ids[i] )
|
|
{
|
|
c++;
|
|
}
|
|
}
|
|
|
|
//----------------------------------
|
|
// Number of 'on' not equal to total?
|
|
//----------------------------------
|
|
|
|
if ( c != this.total_ids )
|
|
{
|
|
this.toggle_all_id.checked = false;
|
|
}
|
|
else
|
|
{
|
|
this.toggle_all_id.checked = true;
|
|
}
|
|
}
|
|
};
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Change color
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
cell_select.prototype.row_change_color = function( row_id )
|
|
{
|
|
//----------------------------------
|
|
// Get Row TDs...
|
|
//----------------------------------
|
|
|
|
var tds = document.getElementById( this.row_tr_id + '-' + row_id ).getElementsByTagName('TD');
|
|
|
|
//----------------------------------
|
|
// Sort through and grab links
|
|
//----------------------------------
|
|
|
|
var _cell = ( this.store_css_row[ row_id ] ) ? this.store_css_row[ row_id ] : this.css_row_off;
|
|
|
|
for ( var i = 0 ; i < tds.length ; i++ )
|
|
{
|
|
tds[i].className = ( this.selected_ids[ row_id ] ) ? _cell : this.css_row_on;
|
|
}
|
|
};
|
|
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Grab ID from string
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
cell_select.prototype.get_id_from_text = function( id )
|
|
{
|
|
return id.replace( /.*(?:\-|_)(\d+)/, "$1" );
|
|
}; |