forked from free-jqgrid/jqGrid
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgrid.tbltogrid.js
106 lines (100 loc) · 3.19 KB
/
grid.tbltogrid.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
Transform a table to a jqGrid.
Peter Romianowski <[email protected]>
If the first column of the table contains checkboxes or
radiobuttons then the jqGrid is made selectable.
*/
/*jslint browser: true, plusplus: true, white: true */
/*global jQuery */
// Addition - selector can be a class or id
(function ($) {
"use strict";
window.tableToGrid = function (selector, options) {
$(selector).each(function () {
var self = this, $self = $(this), w, inputCheckbox, inputRadio, selectMultiple, selectSingle, selectable, a, id,
colModel = [], colNames = [], data = [], rowIds = [], rowChecked = [];
if (self.grid) {
return;//Adedd by Tony Tomov
}
// This is a small "hack" to make the width of the jqGrid 100%
$self.width("99%");
w = $self.width();
// Text whether we have single or multi select
inputCheckbox = $("tr td:first-child input[type=checkbox]:first", $self);
inputRadio = $("tr td:first-child input[type=radio]:first", $self);
selectMultiple = inputCheckbox.length > 0;
selectSingle = !selectMultiple && inputRadio.length > 0;
selectable = selectMultiple || selectSingle;
//var inputName = inputCheckbox.attr("name") || inputRadio.attr("name");
// Build up the columnModel and the data
$("th", $self).each(function () {
if (colModel.length === 0 && selectable) {
colModel.push({
name: "__selection__",
index: "__selection__",
width: 0,
hidden: true
});
colNames.push("__selection__");
} else {
colModel.push({
name: $(this).attr("id") || $.trim($.jgrid.stripHtml($(this).html())).split(" ").join("_"),
index: $(this).attr("id") || $.trim($.jgrid.stripHtml($(this).html())).split(" ").join("_"),
width: $(this).width() || 150
});
colNames.push($(this).html());
}
});
$("tbody > tr", $self).each(function () {
var row = {}, rowPos = 0;
$("td", $(this)).each(function () {
if (rowPos === 0 && selectable) {
var input = $("input", $(this)), 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] = $(this).html();
}
rowPos++;
});
if (rowPos > 0) {
data.push(row);
}
});
// Clear the original HTML table
$self.empty();
$self.jqGrid($.extend({
datatype: "local",
width: w,
colNames: colNames,
colModel: colModel,
multiselect: selectMultiple
//inputName: inputName,
//inputValueCol: imputName != null ? "__selection__" : null
}, options || {}));
// Add data
for (a = 0; a < data.length; a++) {
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 = $.jgrid.randId();
}
$self.jqGrid("addRowData", id, data[a]);
}
// Set the selection
for (a = 0; a < rowChecked.length; a++) {
$self.jqGrid("setSelection", rowChecked[a]);
}
});
};
}(jQuery));