107 lines
3.0 KiB
JavaScript
107 lines
3.0 KiB
JavaScript
/*
|
|
Transform a table to a jqGrid.
|
|
Peter Romianowski <peter.romianowski@optivo.de>
|
|
If the first column of the table contains checkboxes or
|
|
radiobuttons then the jqGrid is made selectable.
|
|
*/
|
|
// Addition - selector can be a class or id
|
|
function tableToGrid(selector, options) {
|
|
jQuery(selector).each(function() {
|
|
if(this.grid) {return;} //Adedd from Tony Tomov
|
|
// This is a small "hack" to make the width of the jqGrid 100%
|
|
jQuery(this).width("99%");
|
|
var w = jQuery(this).width();
|
|
|
|
// Text whether we have single or multi select
|
|
var inputCheckbox = jQuery('input[type=checkbox]:first', jQuery(this));
|
|
var inputRadio = jQuery('input[type=radio]:first', jQuery(this));
|
|
var selectMultiple = inputCheckbox.length > 0;
|
|
var selectSingle = !selectMultiple && inputRadio.length > 0;
|
|
var selectable = selectMultiple || selectSingle;
|
|
//var inputName = inputCheckbox.attr("name") || inputRadio.attr("name");
|
|
|
|
// Build up the columnModel and the data
|
|
var colModel = [];
|
|
var colNames = [];
|
|
jQuery('th', jQuery(this)).each(function() {
|
|
if (colModel.length === 0 && selectable) {
|
|
colModel.push({
|
|
name: '__selection__',
|
|
index: '__selection__',
|
|
width: 0,
|
|
hidden: true
|
|
});
|
|
colNames.push('__selection__');
|
|
} else {
|
|
colModel.push({
|
|
name: jQuery(this).attr("id") || jQuery.trim(jQuery.jgrid.stripHtml(jQuery(this).html())).split(' ').join('_'),
|
|
index: jQuery(this).attr("id") || jQuery.trim(jQuery.jgrid.stripHtml(jQuery(this).html())).split(' ').join('_'),
|
|
width: jQuery(this).width() || 150
|
|
});
|
|
colNames.push(jQuery(this).html());
|
|
}
|
|
});
|
|
var data = [];
|
|
var rowIds = [];
|
|
var rowChecked = [];
|
|
jQuery('tbody > tr', jQuery(this)).each(function() {
|
|
var row = {};
|
|
var rowPos = 0;
|
|
jQuery('td', jQuery(this)).each(function() {
|
|
if (rowPos === 0 && selectable) {
|
|
var input = jQuery('input', jQuery(this));
|
|
var rowId = input.attr("value");
|
|
rowIds.push(rowId || data.length);
|
|
if (input.attr("checked")) {
|
|
rowChecked.push(rowId);
|
|
}
|
|
row[colModel[rowPos].name] = input.attr("value");
|
|
} else {
|
|
row[colModel[rowPos].name] = jQuery(this).html();
|
|
}
|
|
rowPos++;
|
|
});
|
|
if(rowPos >0) { data.push(row); }
|
|
});
|
|
|
|
// Clear the original HTML table
|
|
jQuery(this).empty();
|
|
|
|
// Mark it as jqGrid
|
|
jQuery(this).addClass("scroll");
|
|
|
|
jQuery(this).jqGrid(jQuery.extend({
|
|
datatype: "local",
|
|
width: w,
|
|
colNames: colNames,
|
|
colModel: colModel,
|
|
multiselect: selectMultiple
|
|
//inputName: inputName,
|
|
//inputValueCol: imputName != null ? "__selection__" : null
|
|
}, options || {}));
|
|
|
|
// Add data
|
|
var a;
|
|
for (a = 0; a < data.length; a++) {
|
|
var id = null;
|
|
if (rowIds.length > 0) {
|
|
id = rowIds[a];
|
|
if (id && id.replace) {
|
|
// We have to do this since the value of a checkbox
|
|
// or radio button can be anything
|
|
id = encodeURIComponent(id).replace(/[.\-%]/g, "_");
|
|
}
|
|
}
|
|
if (id === null) {
|
|
id = a + 1;
|
|
}
|
|
jQuery(this).jqGrid("addRowData",id, data[a]);
|
|
}
|
|
|
|
// Set the selection
|
|
for (a = 0; a < rowChecked.length; a++) {
|
|
jQuery(this).jqGrid("setSelection",rowChecked[a]);
|
|
}
|
|
});
|
|
};
|