123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- /*
- 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('tr td:first-child input[type=checkbox]:first', jQuery(this));
- var inputRadio = jQuery('tr td:first-child 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.is(":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]);
- }
- });
- };
|