Files
IPB/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_cell_select.js
T
2025-12-19 00:26:08 -08:00

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" );
};