root / snf-cyclades-app / synnefo / helpdesk / static / js / jquery.tablesorter.js @ bed40567
History | View | Annotate | Download (38.9 kB)
1 | bed40567 | Kostas Papadimitriou | /*
|
---|---|---|---|
2 | bed40567 | Kostas Papadimitriou | *
|
3 | bed40567 | Kostas Papadimitriou | * TableSorter 2.0 - Client-side table sorting with ease!
|
4 | bed40567 | Kostas Papadimitriou | * Version 2.0.5b
|
5 | bed40567 | Kostas Papadimitriou | * @requires jQuery v1.2.3
|
6 | bed40567 | Kostas Papadimitriou | *
|
7 | bed40567 | Kostas Papadimitriou | * Copyright (c) 2007 Christian Bach
|
8 | bed40567 | Kostas Papadimitriou | * Examples and docs at: http://tablesorter.com
|
9 | bed40567 | Kostas Papadimitriou | * Dual licensed under the MIT and GPL licenses:
|
10 | bed40567 | Kostas Papadimitriou | * http://www.opensource.org/licenses/mit-license.php
|
11 | bed40567 | Kostas Papadimitriou | * http://www.gnu.org/licenses/gpl.html
|
12 | bed40567 | Kostas Papadimitriou | *
|
13 | bed40567 | Kostas Papadimitriou | */
|
14 | bed40567 | Kostas Papadimitriou | /**
|
15 | bed40567 | Kostas Papadimitriou | *
|
16 | bed40567 | Kostas Papadimitriou | * @description Create a sortable table with multi-column sorting capabilitys
|
17 | bed40567 | Kostas Papadimitriou | *
|
18 | bed40567 | Kostas Papadimitriou | * @example $('table').tablesorter();
|
19 | bed40567 | Kostas Papadimitriou | * @desc Create a simple tablesorter interface.
|
20 | bed40567 | Kostas Papadimitriou | *
|
21 | bed40567 | Kostas Papadimitriou | * @example $('table').tablesorter({ sortList:[[0,0],[1,0]] });
|
22 | bed40567 | Kostas Papadimitriou | * @desc Create a tablesorter interface and sort on the first and secound column column headers.
|
23 | bed40567 | Kostas Papadimitriou | *
|
24 | bed40567 | Kostas Papadimitriou | * @example $('table').tablesorter({ headers: { 0: { sorter: false}, 1: {sorter: false} } });
|
25 | bed40567 | Kostas Papadimitriou | *
|
26 | bed40567 | Kostas Papadimitriou | * @desc Create a tablesorter interface and disableing the first and second column headers.
|
27 | bed40567 | Kostas Papadimitriou | *
|
28 | bed40567 | Kostas Papadimitriou | *
|
29 | bed40567 | Kostas Papadimitriou | * @example $('table').tablesorter({ headers: { 0: {sorter:"integer"}, 1: {sorter:"currency"} } });
|
30 | bed40567 | Kostas Papadimitriou | *
|
31 | bed40567 | Kostas Papadimitriou | * @desc Create a tablesorter interface and set a column parser for the first
|
32 | bed40567 | Kostas Papadimitriou | * and second column.
|
33 | bed40567 | Kostas Papadimitriou | *
|
34 | bed40567 | Kostas Papadimitriou | *
|
35 | bed40567 | Kostas Papadimitriou | * @param Object
|
36 | bed40567 | Kostas Papadimitriou | * settings An object literal containing key/value pairs to provide
|
37 | bed40567 | Kostas Papadimitriou | * optional settings.
|
38 | bed40567 | Kostas Papadimitriou | *
|
39 | bed40567 | Kostas Papadimitriou | *
|
40 | bed40567 | Kostas Papadimitriou | * @option String cssHeader (optional) A string of the class name to be appended
|
41 | bed40567 | Kostas Papadimitriou | * to sortable tr elements in the thead of the table. Default value:
|
42 | bed40567 | Kostas Papadimitriou | * "header"
|
43 | bed40567 | Kostas Papadimitriou | *
|
44 | bed40567 | Kostas Papadimitriou | * @option String cssAsc (optional) A string of the class name to be appended to
|
45 | bed40567 | Kostas Papadimitriou | * sortable tr elements in the thead on a ascending sort. Default value:
|
46 | bed40567 | Kostas Papadimitriou | * "headerSortUp"
|
47 | bed40567 | Kostas Papadimitriou | *
|
48 | bed40567 | Kostas Papadimitriou | * @option String cssDesc (optional) A string of the class name to be appended
|
49 | bed40567 | Kostas Papadimitriou | * to sortable tr elements in the thead on a descending sort. Default
|
50 | bed40567 | Kostas Papadimitriou | * value: "headerSortDown"
|
51 | bed40567 | Kostas Papadimitriou | *
|
52 | bed40567 | Kostas Papadimitriou | * @option String sortInitialOrder (optional) A string of the inital sorting
|
53 | bed40567 | Kostas Papadimitriou | * order can be asc or desc. Default value: "asc"
|
54 | bed40567 | Kostas Papadimitriou | *
|
55 | bed40567 | Kostas Papadimitriou | * @option String sortMultisortKey (optional) A string of the multi-column sort
|
56 | bed40567 | Kostas Papadimitriou | * key. Default value: "shiftKey"
|
57 | bed40567 | Kostas Papadimitriou | *
|
58 | bed40567 | Kostas Papadimitriou | * @option String textExtraction (optional) A string of the text-extraction
|
59 | bed40567 | Kostas Papadimitriou | * method to use. For complex html structures inside td cell set this
|
60 | bed40567 | Kostas Papadimitriou | * option to "complex", on large tables the complex option can be slow.
|
61 | bed40567 | Kostas Papadimitriou | * Default value: "simple"
|
62 | bed40567 | Kostas Papadimitriou | *
|
63 | bed40567 | Kostas Papadimitriou | * @option Object headers (optional) An array containing the forces sorting
|
64 | bed40567 | Kostas Papadimitriou | * rules. This option let's you specify a default sorting rule. Default
|
65 | bed40567 | Kostas Papadimitriou | * value: null
|
66 | bed40567 | Kostas Papadimitriou | *
|
67 | bed40567 | Kostas Papadimitriou | * @option Array sortList (optional) An array containing the forces sorting
|
68 | bed40567 | Kostas Papadimitriou | * rules. This option let's you specify a default sorting rule. Default
|
69 | bed40567 | Kostas Papadimitriou | * value: null
|
70 | bed40567 | Kostas Papadimitriou | *
|
71 | bed40567 | Kostas Papadimitriou | * @option Array sortForce (optional) An array containing forced sorting rules.
|
72 | bed40567 | Kostas Papadimitriou | * This option let's you specify a default sorting rule, which is
|
73 | bed40567 | Kostas Papadimitriou | * prepended to user-selected rules. Default value: null
|
74 | bed40567 | Kostas Papadimitriou | *
|
75 | bed40567 | Kostas Papadimitriou | * @option Boolean sortLocaleCompare (optional) Boolean flag indicating whatever
|
76 | bed40567 | Kostas Papadimitriou | * to use String.localeCampare method or not. Default set to true.
|
77 | bed40567 | Kostas Papadimitriou | *
|
78 | bed40567 | Kostas Papadimitriou | *
|
79 | bed40567 | Kostas Papadimitriou | * @option Array sortAppend (optional) An array containing forced sorting rules.
|
80 | bed40567 | Kostas Papadimitriou | * This option let's you specify a default sorting rule, which is
|
81 | bed40567 | Kostas Papadimitriou | * appended to user-selected rules. Default value: null
|
82 | bed40567 | Kostas Papadimitriou | *
|
83 | bed40567 | Kostas Papadimitriou | * @option Boolean widthFixed (optional) Boolean flag indicating if tablesorter
|
84 | bed40567 | Kostas Papadimitriou | * should apply fixed widths to the table columns. This is usefull when
|
85 | bed40567 | Kostas Papadimitriou | * using the pager companion plugin. This options requires the dimension
|
86 | bed40567 | Kostas Papadimitriou | * jquery plugin. Default value: false
|
87 | bed40567 | Kostas Papadimitriou | *
|
88 | bed40567 | Kostas Papadimitriou | * @option Boolean cancelSelection (optional) Boolean flag indicating if
|
89 | bed40567 | Kostas Papadimitriou | * tablesorter should cancel selection of the table headers text.
|
90 | bed40567 | Kostas Papadimitriou | * Default value: true
|
91 | bed40567 | Kostas Papadimitriou | *
|
92 | bed40567 | Kostas Papadimitriou | * @option Boolean debug (optional) Boolean flag indicating if tablesorter
|
93 | bed40567 | Kostas Papadimitriou | * should display debuging information usefull for development.
|
94 | bed40567 | Kostas Papadimitriou | *
|
95 | bed40567 | Kostas Papadimitriou | * @type jQuery
|
96 | bed40567 | Kostas Papadimitriou | *
|
97 | bed40567 | Kostas Papadimitriou | * @name tablesorter
|
98 | bed40567 | Kostas Papadimitriou | *
|
99 | bed40567 | Kostas Papadimitriou | * @cat Plugins/Tablesorter
|
100 | bed40567 | Kostas Papadimitriou | *
|
101 | bed40567 | Kostas Papadimitriou | * @author Christian Bach/christian.bach@polyester.se
|
102 | bed40567 | Kostas Papadimitriou | */
|
103 | bed40567 | Kostas Papadimitriou | |
104 | bed40567 | Kostas Papadimitriou | (function ($) { |
105 | bed40567 | Kostas Papadimitriou | $.extend({
|
106 | bed40567 | Kostas Papadimitriou | tablesorter: new |
107 | bed40567 | Kostas Papadimitriou | function () {
|
108 | bed40567 | Kostas Papadimitriou | |
109 | bed40567 | Kostas Papadimitriou | var parsers = [],
|
110 | bed40567 | Kostas Papadimitriou | widgets = []; |
111 | bed40567 | Kostas Papadimitriou | |
112 | bed40567 | Kostas Papadimitriou | this.defaults = {
|
113 | bed40567 | Kostas Papadimitriou | cssHeader: "header", |
114 | bed40567 | Kostas Papadimitriou | cssAsc: "headerSortUp", |
115 | bed40567 | Kostas Papadimitriou | cssDesc: "headerSortDown", |
116 | bed40567 | Kostas Papadimitriou | cssChildRow: "expand-child", |
117 | bed40567 | Kostas Papadimitriou | sortInitialOrder: "asc", |
118 | bed40567 | Kostas Papadimitriou | sortMultiSortKey: "shiftKey", |
119 | bed40567 | Kostas Papadimitriou | sortForce: null, |
120 | bed40567 | Kostas Papadimitriou | sortAppend: null, |
121 | bed40567 | Kostas Papadimitriou | sortLocaleCompare: true, |
122 | bed40567 | Kostas Papadimitriou | textExtraction: "simple", |
123 | bed40567 | Kostas Papadimitriou | parsers: {}, widgets: [], |
124 | bed40567 | Kostas Papadimitriou | widgetZebra: {
|
125 | bed40567 | Kostas Papadimitriou | css: ["even", "odd"] |
126 | bed40567 | Kostas Papadimitriou | }, headers: {}, widthFixed: false, |
127 | bed40567 | Kostas Papadimitriou | cancelSelection: true, |
128 | bed40567 | Kostas Papadimitriou | sortList: [],
|
129 | bed40567 | Kostas Papadimitriou | headerList: [],
|
130 | bed40567 | Kostas Papadimitriou | dateFormat: "us", |
131 | bed40567 | Kostas Papadimitriou | decimal: '/\.|\,/g', |
132 | bed40567 | Kostas Papadimitriou | onRenderHeader: null, |
133 | bed40567 | Kostas Papadimitriou | selectorHeaders: 'thead th', |
134 | bed40567 | Kostas Papadimitriou | debug: false |
135 | bed40567 | Kostas Papadimitriou | }; |
136 | bed40567 | Kostas Papadimitriou | |
137 | bed40567 | Kostas Papadimitriou | /* debuging utils */
|
138 | bed40567 | Kostas Papadimitriou | |
139 | bed40567 | Kostas Papadimitriou | function benchmark(s, d) { |
140 | bed40567 | Kostas Papadimitriou | log(s + "," + (new Date().getTime() - d.getTime()) + "ms"); |
141 | bed40567 | Kostas Papadimitriou | } |
142 | bed40567 | Kostas Papadimitriou | |
143 | bed40567 | Kostas Papadimitriou | this.benchmark = benchmark;
|
144 | bed40567 | Kostas Papadimitriou | |
145 | bed40567 | Kostas Papadimitriou | function log(s) { |
146 | bed40567 | Kostas Papadimitriou | if (typeof console != "undefined" && typeof console.debug != "undefined") { |
147 | bed40567 | Kostas Papadimitriou | console.log(s); |
148 | bed40567 | Kostas Papadimitriou | } else {
|
149 | bed40567 | Kostas Papadimitriou | alert(s); |
150 | bed40567 | Kostas Papadimitriou | } |
151 | bed40567 | Kostas Papadimitriou | } |
152 | bed40567 | Kostas Papadimitriou | |
153 | bed40567 | Kostas Papadimitriou | /* parsers utils */
|
154 | bed40567 | Kostas Papadimitriou | |
155 | bed40567 | Kostas Papadimitriou | function buildParserCache(table, $headers) { |
156 | bed40567 | Kostas Papadimitriou | |
157 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
158 | bed40567 | Kostas Papadimitriou | var parsersDebug = ""; |
159 | bed40567 | Kostas Papadimitriou | } |
160 | bed40567 | Kostas Papadimitriou | |
161 | bed40567 | Kostas Papadimitriou | if (table.tBodies.length == 0) return; // In the case of empty tables |
162 | bed40567 | Kostas Papadimitriou | var rows = table.tBodies[0].rows; |
163 | bed40567 | Kostas Papadimitriou | |
164 | bed40567 | Kostas Papadimitriou | if (rows[0]) { |
165 | bed40567 | Kostas Papadimitriou | |
166 | bed40567 | Kostas Papadimitriou | var list = [],
|
167 | bed40567 | Kostas Papadimitriou | cells = rows[0].cells,
|
168 | bed40567 | Kostas Papadimitriou | l = cells.length; |
169 | bed40567 | Kostas Papadimitriou | |
170 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < l; i++) { |
171 | bed40567 | Kostas Papadimitriou | |
172 | bed40567 | Kostas Papadimitriou | var p = false; |
173 | bed40567 | Kostas Papadimitriou | |
174 | bed40567 | Kostas Papadimitriou | if ($.metadata && ($($headers[i]).metadata() && $($headers[i]).metadata().sorter)) { |
175 | bed40567 | Kostas Papadimitriou | |
176 | bed40567 | Kostas Papadimitriou | p = getParserById($($headers[i]).metadata().sorter); |
177 | bed40567 | Kostas Papadimitriou | |
178 | bed40567 | Kostas Papadimitriou | } else if ((table.config.headers[i] && table.config.headers[i].sorter)) { |
179 | bed40567 | Kostas Papadimitriou | |
180 | bed40567 | Kostas Papadimitriou | p = getParserById(table.config.headers[i].sorter); |
181 | bed40567 | Kostas Papadimitriou | } |
182 | bed40567 | Kostas Papadimitriou | if (!p) {
|
183 | bed40567 | Kostas Papadimitriou | |
184 | bed40567 | Kostas Papadimitriou | p = detectParserForColumn(table, rows, -1, i);
|
185 | bed40567 | Kostas Papadimitriou | } |
186 | bed40567 | Kostas Papadimitriou | |
187 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
188 | bed40567 | Kostas Papadimitriou | parsersDebug += "column:" + i + " parser:" + p.id + "\n"; |
189 | bed40567 | Kostas Papadimitriou | } |
190 | bed40567 | Kostas Papadimitriou | |
191 | bed40567 | Kostas Papadimitriou | list.push(p); |
192 | bed40567 | Kostas Papadimitriou | } |
193 | bed40567 | Kostas Papadimitriou | } |
194 | bed40567 | Kostas Papadimitriou | |
195 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
196 | bed40567 | Kostas Papadimitriou | log(parsersDebug); |
197 | bed40567 | Kostas Papadimitriou | } |
198 | bed40567 | Kostas Papadimitriou | |
199 | bed40567 | Kostas Papadimitriou | return list;
|
200 | bed40567 | Kostas Papadimitriou | }; |
201 | bed40567 | Kostas Papadimitriou | |
202 | bed40567 | Kostas Papadimitriou | function detectParserForColumn(table, rows, rowIndex, cellIndex) { |
203 | bed40567 | Kostas Papadimitriou | var l = parsers.length,
|
204 | bed40567 | Kostas Papadimitriou | node = false,
|
205 | bed40567 | Kostas Papadimitriou | nodeValue = false,
|
206 | bed40567 | Kostas Papadimitriou | keepLooking = true;
|
207 | bed40567 | Kostas Papadimitriou | while (nodeValue == '' && keepLooking) { |
208 | bed40567 | Kostas Papadimitriou | rowIndex++; |
209 | bed40567 | Kostas Papadimitriou | if (rows[rowIndex]) {
|
210 | bed40567 | Kostas Papadimitriou | node = getNodeFromRowAndCellIndex(rows, rowIndex, cellIndex); |
211 | bed40567 | Kostas Papadimitriou | nodeValue = trimAndGetNodeText(table.config, node); |
212 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
213 | bed40567 | Kostas Papadimitriou | log('Checking if value was empty on row:' + rowIndex);
|
214 | bed40567 | Kostas Papadimitriou | } |
215 | bed40567 | Kostas Papadimitriou | } else {
|
216 | bed40567 | Kostas Papadimitriou | keepLooking = false;
|
217 | bed40567 | Kostas Papadimitriou | } |
218 | bed40567 | Kostas Papadimitriou | } |
219 | bed40567 | Kostas Papadimitriou | for (var i = 1; i < l; i++) { |
220 | bed40567 | Kostas Papadimitriou | if (parsers[i].is(nodeValue, table, node)) {
|
221 | bed40567 | Kostas Papadimitriou | return parsers[i];
|
222 | bed40567 | Kostas Papadimitriou | } |
223 | bed40567 | Kostas Papadimitriou | } |
224 | bed40567 | Kostas Papadimitriou | // 0 is always the generic parser (text)
|
225 | bed40567 | Kostas Papadimitriou | return parsers[0]; |
226 | bed40567 | Kostas Papadimitriou | } |
227 | bed40567 | Kostas Papadimitriou | |
228 | bed40567 | Kostas Papadimitriou | function getNodeFromRowAndCellIndex(rows, rowIndex, cellIndex) { |
229 | bed40567 | Kostas Papadimitriou | return rows[rowIndex].cells[cellIndex];
|
230 | bed40567 | Kostas Papadimitriou | } |
231 | bed40567 | Kostas Papadimitriou | |
232 | bed40567 | Kostas Papadimitriou | function trimAndGetNodeText(config, node) { |
233 | bed40567 | Kostas Papadimitriou | return $.trim(getElementText(config, node)); |
234 | bed40567 | Kostas Papadimitriou | } |
235 | bed40567 | Kostas Papadimitriou | |
236 | bed40567 | Kostas Papadimitriou | function getParserById(name) { |
237 | bed40567 | Kostas Papadimitriou | var l = parsers.length;
|
238 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < l; i++) { |
239 | bed40567 | Kostas Papadimitriou | if (parsers[i].id.toLowerCase() == name.toLowerCase()) {
|
240 | bed40567 | Kostas Papadimitriou | return parsers[i];
|
241 | bed40567 | Kostas Papadimitriou | } |
242 | bed40567 | Kostas Papadimitriou | } |
243 | bed40567 | Kostas Papadimitriou | return false; |
244 | bed40567 | Kostas Papadimitriou | } |
245 | bed40567 | Kostas Papadimitriou | |
246 | bed40567 | Kostas Papadimitriou | /* utils */
|
247 | bed40567 | Kostas Papadimitriou | |
248 | bed40567 | Kostas Papadimitriou | function buildCache(table) { |
249 | bed40567 | Kostas Papadimitriou | |
250 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
251 | bed40567 | Kostas Papadimitriou | var cacheTime = new Date(); |
252 | bed40567 | Kostas Papadimitriou | } |
253 | bed40567 | Kostas Papadimitriou | |
254 | bed40567 | Kostas Papadimitriou | var totalRows = (table.tBodies[0] && table.tBodies[0].rows.length) || 0, |
255 | bed40567 | Kostas Papadimitriou | totalCells = (table.tBodies[0].rows[0] && table.tBodies[0].rows[0].cells.length) || 0, |
256 | bed40567 | Kostas Papadimitriou | parsers = table.config.parsers, |
257 | bed40567 | Kostas Papadimitriou | cache = { |
258 | bed40567 | Kostas Papadimitriou | row: [],
|
259 | bed40567 | Kostas Papadimitriou | normalized: []
|
260 | bed40567 | Kostas Papadimitriou | }; |
261 | bed40567 | Kostas Papadimitriou | |
262 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < totalRows; ++i) { |
263 | bed40567 | Kostas Papadimitriou | |
264 | bed40567 | Kostas Papadimitriou | /** Add the table data to main data array */
|
265 | bed40567 | Kostas Papadimitriou | var c = $(table.tBodies[0].rows[i]), |
266 | bed40567 | Kostas Papadimitriou | cols = []; |
267 | bed40567 | Kostas Papadimitriou | |
268 | bed40567 | Kostas Papadimitriou | // if this is a child row, add it to the last row's children and
|
269 | bed40567 | Kostas Papadimitriou | // continue to the next row
|
270 | bed40567 | Kostas Papadimitriou | if (c.hasClass(table.config.cssChildRow)) {
|
271 | bed40567 | Kostas Papadimitriou | cache.row[cache.row.length - 1] = cache.row[cache.row.length - 1].add(c); |
272 | bed40567 | Kostas Papadimitriou | // go to the next for loop
|
273 | bed40567 | Kostas Papadimitriou | continue;
|
274 | bed40567 | Kostas Papadimitriou | } |
275 | bed40567 | Kostas Papadimitriou | |
276 | bed40567 | Kostas Papadimitriou | cache.row.push(c); |
277 | bed40567 | Kostas Papadimitriou | |
278 | bed40567 | Kostas Papadimitriou | for (var j = 0; j < totalCells; ++j) { |
279 | bed40567 | Kostas Papadimitriou | cols.push(parsers[j].format(getElementText(table.config, c[0].cells[j]), table, c[0].cells[j])); |
280 | bed40567 | Kostas Papadimitriou | } |
281 | bed40567 | Kostas Papadimitriou | |
282 | bed40567 | Kostas Papadimitriou | cols.push(cache.normalized.length); // add position for rowCache
|
283 | bed40567 | Kostas Papadimitriou | cache.normalized.push(cols); |
284 | bed40567 | Kostas Papadimitriou | cols = null;
|
285 | bed40567 | Kostas Papadimitriou | }; |
286 | bed40567 | Kostas Papadimitriou | |
287 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
288 | bed40567 | Kostas Papadimitriou | benchmark("Building cache for " + totalRows + " rows:", cacheTime); |
289 | bed40567 | Kostas Papadimitriou | } |
290 | bed40567 | Kostas Papadimitriou | |
291 | bed40567 | Kostas Papadimitriou | return cache;
|
292 | bed40567 | Kostas Papadimitriou | }; |
293 | bed40567 | Kostas Papadimitriou | |
294 | bed40567 | Kostas Papadimitriou | function getElementText(config, node) { |
295 | bed40567 | Kostas Papadimitriou | |
296 | bed40567 | Kostas Papadimitriou | var text = ""; |
297 | bed40567 | Kostas Papadimitriou | |
298 | bed40567 | Kostas Papadimitriou | if (!node) return ""; |
299 | bed40567 | Kostas Papadimitriou | |
300 | bed40567 | Kostas Papadimitriou | if (!config.supportsTextContent) config.supportsTextContent = node.textContent || false; |
301 | bed40567 | Kostas Papadimitriou | |
302 | bed40567 | Kostas Papadimitriou | if (config.textExtraction == "simple") { |
303 | bed40567 | Kostas Papadimitriou | if (config.supportsTextContent) {
|
304 | bed40567 | Kostas Papadimitriou | text = node.textContent; |
305 | bed40567 | Kostas Papadimitriou | } else {
|
306 | bed40567 | Kostas Papadimitriou | if (node.childNodes[0] && node.childNodes[0].hasChildNodes()) { |
307 | bed40567 | Kostas Papadimitriou | text = node.childNodes[0].innerHTML;
|
308 | bed40567 | Kostas Papadimitriou | } else {
|
309 | bed40567 | Kostas Papadimitriou | text = node.innerHTML; |
310 | bed40567 | Kostas Papadimitriou | } |
311 | bed40567 | Kostas Papadimitriou | } |
312 | bed40567 | Kostas Papadimitriou | } else {
|
313 | bed40567 | Kostas Papadimitriou | if (typeof(config.textExtraction) == "function") { |
314 | bed40567 | Kostas Papadimitriou | text = config.textExtraction(node); |
315 | bed40567 | Kostas Papadimitriou | } else {
|
316 | bed40567 | Kostas Papadimitriou | text = $(node).text();
|
317 | bed40567 | Kostas Papadimitriou | } |
318 | bed40567 | Kostas Papadimitriou | } |
319 | bed40567 | Kostas Papadimitriou | return text;
|
320 | bed40567 | Kostas Papadimitriou | } |
321 | bed40567 | Kostas Papadimitriou | |
322 | bed40567 | Kostas Papadimitriou | function appendToTable(table, cache) { |
323 | bed40567 | Kostas Papadimitriou | |
324 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
325 | bed40567 | Kostas Papadimitriou | var appendTime = new Date() |
326 | bed40567 | Kostas Papadimitriou | } |
327 | bed40567 | Kostas Papadimitriou | |
328 | bed40567 | Kostas Papadimitriou | var c = cache,
|
329 | bed40567 | Kostas Papadimitriou | r = c.row, |
330 | bed40567 | Kostas Papadimitriou | n = c.normalized, |
331 | bed40567 | Kostas Papadimitriou | totalRows = n.length, |
332 | bed40567 | Kostas Papadimitriou | checkCell = (n[0].length - 1), |
333 | bed40567 | Kostas Papadimitriou | tableBody = $(table.tBodies[0]), |
334 | bed40567 | Kostas Papadimitriou | rows = []; |
335 | bed40567 | Kostas Papadimitriou | |
336 | bed40567 | Kostas Papadimitriou | |
337 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < totalRows; i++) { |
338 | bed40567 | Kostas Papadimitriou | var pos = n[i][checkCell];
|
339 | bed40567 | Kostas Papadimitriou | |
340 | bed40567 | Kostas Papadimitriou | rows.push(r[pos]); |
341 | bed40567 | Kostas Papadimitriou | |
342 | bed40567 | Kostas Papadimitriou | if (!table.config.appender) {
|
343 | bed40567 | Kostas Papadimitriou | |
344 | bed40567 | Kostas Papadimitriou | //var o = ;
|
345 | bed40567 | Kostas Papadimitriou | var l = r[pos].length;
|
346 | bed40567 | Kostas Papadimitriou | for (var j = 0; j < l; j++) { |
347 | bed40567 | Kostas Papadimitriou | tableBody[0].appendChild(r[pos][j]);
|
348 | bed40567 | Kostas Papadimitriou | } |
349 | bed40567 | Kostas Papadimitriou | |
350 | bed40567 | Kostas Papadimitriou | //
|
351 | bed40567 | Kostas Papadimitriou | } |
352 | bed40567 | Kostas Papadimitriou | } |
353 | bed40567 | Kostas Papadimitriou | |
354 | bed40567 | Kostas Papadimitriou | |
355 | bed40567 | Kostas Papadimitriou | |
356 | bed40567 | Kostas Papadimitriou | if (table.config.appender) {
|
357 | bed40567 | Kostas Papadimitriou | |
358 | bed40567 | Kostas Papadimitriou | table.config.appender(table, rows); |
359 | bed40567 | Kostas Papadimitriou | } |
360 | bed40567 | Kostas Papadimitriou | |
361 | bed40567 | Kostas Papadimitriou | rows = null;
|
362 | bed40567 | Kostas Papadimitriou | |
363 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
364 | bed40567 | Kostas Papadimitriou | benchmark("Rebuilt table:", appendTime);
|
365 | bed40567 | Kostas Papadimitriou | } |
366 | bed40567 | Kostas Papadimitriou | |
367 | bed40567 | Kostas Papadimitriou | // apply table widgets
|
368 | bed40567 | Kostas Papadimitriou | applyWidget(table); |
369 | bed40567 | Kostas Papadimitriou | |
370 | bed40567 | Kostas Papadimitriou | // trigger sortend
|
371 | bed40567 | Kostas Papadimitriou | setTimeout(function () {
|
372 | bed40567 | Kostas Papadimitriou | $(table).trigger("sortEnd"); |
373 | bed40567 | Kostas Papadimitriou | }, 0);
|
374 | bed40567 | Kostas Papadimitriou | |
375 | bed40567 | Kostas Papadimitriou | }; |
376 | bed40567 | Kostas Papadimitriou | |
377 | bed40567 | Kostas Papadimitriou | function buildHeaders(table) { |
378 | bed40567 | Kostas Papadimitriou | |
379 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
380 | bed40567 | Kostas Papadimitriou | var time = new Date(); |
381 | bed40567 | Kostas Papadimitriou | } |
382 | bed40567 | Kostas Papadimitriou | |
383 | bed40567 | Kostas Papadimitriou | var meta = ($.metadata) ? true : false; |
384 | bed40567 | Kostas Papadimitriou | |
385 | bed40567 | Kostas Papadimitriou | var header_index = computeTableHeaderCellIndexes(table);
|
386 | bed40567 | Kostas Papadimitriou | |
387 | bed40567 | Kostas Papadimitriou | $tableHeaders = $(table.config.selectorHeaders, table).each(function (index) { |
388 | bed40567 | Kostas Papadimitriou | |
389 | bed40567 | Kostas Papadimitriou | this.column = header_index[this.parentNode.rowIndex + "-" + this.cellIndex]; |
390 | bed40567 | Kostas Papadimitriou | // this.column = index;
|
391 | bed40567 | Kostas Papadimitriou | this.order = formatSortingOrder(table.config.sortInitialOrder);
|
392 | bed40567 | Kostas Papadimitriou | |
393 | bed40567 | Kostas Papadimitriou | |
394 | bed40567 | Kostas Papadimitriou | this.count = this.order; |
395 | bed40567 | Kostas Papadimitriou | |
396 | bed40567 | Kostas Papadimitriou | if (checkHeaderMetadata(this) || checkHeaderOptions(table, index)) this.sortDisabled = true; |
397 | bed40567 | Kostas Papadimitriou | if (checkHeaderOptionsSortingLocked(table, index)) this.order = this.lockedOrder = checkHeaderOptionsSortingLocked(table, index); |
398 | bed40567 | Kostas Papadimitriou | |
399 | bed40567 | Kostas Papadimitriou | if (!this.sortDisabled) { |
400 | bed40567 | Kostas Papadimitriou | var $th = $(this).addClass(table.config.cssHeader); |
401 | bed40567 | Kostas Papadimitriou | if (table.config.onRenderHeader) table.config.onRenderHeader.apply($th); |
402 | bed40567 | Kostas Papadimitriou | } |
403 | bed40567 | Kostas Papadimitriou | |
404 | bed40567 | Kostas Papadimitriou | // add cell to headerList
|
405 | bed40567 | Kostas Papadimitriou | table.config.headerList[index] = this;
|
406 | bed40567 | Kostas Papadimitriou | }); |
407 | bed40567 | Kostas Papadimitriou | |
408 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
409 | bed40567 | Kostas Papadimitriou | benchmark("Built headers:", time);
|
410 | bed40567 | Kostas Papadimitriou | log($tableHeaders);
|
411 | bed40567 | Kostas Papadimitriou | } |
412 | bed40567 | Kostas Papadimitriou | |
413 | bed40567 | Kostas Papadimitriou | return $tableHeaders; |
414 | bed40567 | Kostas Papadimitriou | |
415 | bed40567 | Kostas Papadimitriou | }; |
416 | bed40567 | Kostas Papadimitriou | |
417 | bed40567 | Kostas Papadimitriou | // from:
|
418 | bed40567 | Kostas Papadimitriou | // http://www.javascripttoolbox.com/lib/table/examples.php
|
419 | bed40567 | Kostas Papadimitriou | // http://www.javascripttoolbox.com/temp/table_cellindex.html
|
420 | bed40567 | Kostas Papadimitriou | |
421 | bed40567 | Kostas Papadimitriou | |
422 | bed40567 | Kostas Papadimitriou | function computeTableHeaderCellIndexes(t) { |
423 | bed40567 | Kostas Papadimitriou | var matrix = [];
|
424 | bed40567 | Kostas Papadimitriou | var lookup = {};
|
425 | bed40567 | Kostas Papadimitriou | var thead = t.getElementsByTagName('THEAD')[0]; |
426 | bed40567 | Kostas Papadimitriou | var trs = thead.getElementsByTagName('TR'); |
427 | bed40567 | Kostas Papadimitriou | |
428 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < trs.length; i++) { |
429 | bed40567 | Kostas Papadimitriou | var cells = trs[i].cells;
|
430 | bed40567 | Kostas Papadimitriou | for (var j = 0; j < cells.length; j++) { |
431 | bed40567 | Kostas Papadimitriou | var c = cells[j];
|
432 | bed40567 | Kostas Papadimitriou | |
433 | bed40567 | Kostas Papadimitriou | var rowIndex = c.parentNode.rowIndex;
|
434 | bed40567 | Kostas Papadimitriou | var cellId = rowIndex + "-" + c.cellIndex; |
435 | bed40567 | Kostas Papadimitriou | var rowSpan = c.rowSpan || 1; |
436 | bed40567 | Kostas Papadimitriou | var colSpan = c.colSpan || 1 |
437 | bed40567 | Kostas Papadimitriou | var firstAvailCol;
|
438 | bed40567 | Kostas Papadimitriou | if (typeof(matrix[rowIndex]) == "undefined") { |
439 | bed40567 | Kostas Papadimitriou | matrix[rowIndex] = []; |
440 | bed40567 | Kostas Papadimitriou | } |
441 | bed40567 | Kostas Papadimitriou | // Find first available column in the first row
|
442 | bed40567 | Kostas Papadimitriou | for (var k = 0; k < matrix[rowIndex].length + 1; k++) { |
443 | bed40567 | Kostas Papadimitriou | if (typeof(matrix[rowIndex][k]) == "undefined") { |
444 | bed40567 | Kostas Papadimitriou | firstAvailCol = k; |
445 | bed40567 | Kostas Papadimitriou | break;
|
446 | bed40567 | Kostas Papadimitriou | } |
447 | bed40567 | Kostas Papadimitriou | } |
448 | bed40567 | Kostas Papadimitriou | lookup[cellId] = firstAvailCol; |
449 | bed40567 | Kostas Papadimitriou | for (var k = rowIndex; k < rowIndex + rowSpan; k++) { |
450 | bed40567 | Kostas Papadimitriou | if (typeof(matrix[k]) == "undefined") { |
451 | bed40567 | Kostas Papadimitriou | matrix[k] = []; |
452 | bed40567 | Kostas Papadimitriou | } |
453 | bed40567 | Kostas Papadimitriou | var matrixrow = matrix[k];
|
454 | bed40567 | Kostas Papadimitriou | for (var l = firstAvailCol; l < firstAvailCol + colSpan; l++) { |
455 | bed40567 | Kostas Papadimitriou | matrixrow[l] = "x";
|
456 | bed40567 | Kostas Papadimitriou | } |
457 | bed40567 | Kostas Papadimitriou | } |
458 | bed40567 | Kostas Papadimitriou | } |
459 | bed40567 | Kostas Papadimitriou | } |
460 | bed40567 | Kostas Papadimitriou | return lookup;
|
461 | bed40567 | Kostas Papadimitriou | } |
462 | bed40567 | Kostas Papadimitriou | |
463 | bed40567 | Kostas Papadimitriou | function checkCellColSpan(table, rows, row) { |
464 | bed40567 | Kostas Papadimitriou | var arr = [],
|
465 | bed40567 | Kostas Papadimitriou | r = table.tHead.rows, |
466 | bed40567 | Kostas Papadimitriou | c = r[row].cells; |
467 | bed40567 | Kostas Papadimitriou | |
468 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < c.length; i++) { |
469 | bed40567 | Kostas Papadimitriou | var cell = c[i];
|
470 | bed40567 | Kostas Papadimitriou | |
471 | bed40567 | Kostas Papadimitriou | if (cell.colSpan > 1) { |
472 | bed40567 | Kostas Papadimitriou | arr = arr.concat(checkCellColSpan(table, headerArr, row++)); |
473 | bed40567 | Kostas Papadimitriou | } else {
|
474 | bed40567 | Kostas Papadimitriou | if (table.tHead.length == 1 || (cell.rowSpan > 1 || !r[row + 1])) { |
475 | bed40567 | Kostas Papadimitriou | arr.push(cell); |
476 | bed40567 | Kostas Papadimitriou | } |
477 | bed40567 | Kostas Papadimitriou | // headerArr[row] = (i+row);
|
478 | bed40567 | Kostas Papadimitriou | } |
479 | bed40567 | Kostas Papadimitriou | } |
480 | bed40567 | Kostas Papadimitriou | return arr;
|
481 | bed40567 | Kostas Papadimitriou | }; |
482 | bed40567 | Kostas Papadimitriou | |
483 | bed40567 | Kostas Papadimitriou | function checkHeaderMetadata(cell) { |
484 | bed40567 | Kostas Papadimitriou | if (($.metadata) && ($(cell).metadata().sorter === false)) { |
485 | bed40567 | Kostas Papadimitriou | return true; |
486 | bed40567 | Kostas Papadimitriou | }; |
487 | bed40567 | Kostas Papadimitriou | return false; |
488 | bed40567 | Kostas Papadimitriou | } |
489 | bed40567 | Kostas Papadimitriou | |
490 | bed40567 | Kostas Papadimitriou | function checkHeaderOptions(table, i) { |
491 | bed40567 | Kostas Papadimitriou | if ((table.config.headers[i]) && (table.config.headers[i].sorter === false)) { |
492 | bed40567 | Kostas Papadimitriou | return true; |
493 | bed40567 | Kostas Papadimitriou | }; |
494 | bed40567 | Kostas Papadimitriou | return false; |
495 | bed40567 | Kostas Papadimitriou | } |
496 | bed40567 | Kostas Papadimitriou | |
497 | bed40567 | Kostas Papadimitriou | function checkHeaderOptionsSortingLocked(table, i) { |
498 | bed40567 | Kostas Papadimitriou | if ((table.config.headers[i]) && (table.config.headers[i].lockedOrder)) return table.config.headers[i].lockedOrder; |
499 | bed40567 | Kostas Papadimitriou | return false; |
500 | bed40567 | Kostas Papadimitriou | } |
501 | bed40567 | Kostas Papadimitriou | |
502 | bed40567 | Kostas Papadimitriou | function applyWidget(table) { |
503 | bed40567 | Kostas Papadimitriou | var c = table.config.widgets;
|
504 | bed40567 | Kostas Papadimitriou | var l = c.length;
|
505 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < l; i++) { |
506 | bed40567 | Kostas Papadimitriou | |
507 | bed40567 | Kostas Papadimitriou | getWidgetById(c[i]).format(table); |
508 | bed40567 | Kostas Papadimitriou | } |
509 | bed40567 | Kostas Papadimitriou | |
510 | bed40567 | Kostas Papadimitriou | } |
511 | bed40567 | Kostas Papadimitriou | |
512 | bed40567 | Kostas Papadimitriou | function getWidgetById(name) { |
513 | bed40567 | Kostas Papadimitriou | var l = widgets.length;
|
514 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < l; i++) { |
515 | bed40567 | Kostas Papadimitriou | if (widgets[i].id.toLowerCase() == name.toLowerCase()) {
|
516 | bed40567 | Kostas Papadimitriou | return widgets[i];
|
517 | bed40567 | Kostas Papadimitriou | } |
518 | bed40567 | Kostas Papadimitriou | } |
519 | bed40567 | Kostas Papadimitriou | }; |
520 | bed40567 | Kostas Papadimitriou | |
521 | bed40567 | Kostas Papadimitriou | function formatSortingOrder(v) { |
522 | bed40567 | Kostas Papadimitriou | if (typeof(v) != "Number") { |
523 | bed40567 | Kostas Papadimitriou | return (v.toLowerCase() == "desc") ? 1 : 0; |
524 | bed40567 | Kostas Papadimitriou | } else {
|
525 | bed40567 | Kostas Papadimitriou | return (v == 1) ? 1 : 0; |
526 | bed40567 | Kostas Papadimitriou | } |
527 | bed40567 | Kostas Papadimitriou | } |
528 | bed40567 | Kostas Papadimitriou | |
529 | bed40567 | Kostas Papadimitriou | function isValueInArray(v, a) { |
530 | bed40567 | Kostas Papadimitriou | var l = a.length;
|
531 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < l; i++) { |
532 | bed40567 | Kostas Papadimitriou | if (a[i][0] == v) { |
533 | bed40567 | Kostas Papadimitriou | return true; |
534 | bed40567 | Kostas Papadimitriou | } |
535 | bed40567 | Kostas Papadimitriou | } |
536 | bed40567 | Kostas Papadimitriou | return false; |
537 | bed40567 | Kostas Papadimitriou | } |
538 | bed40567 | Kostas Papadimitriou | |
539 | bed40567 | Kostas Papadimitriou | function setHeadersCss(table, $headers, list, css) { |
540 | bed40567 | Kostas Papadimitriou | // remove all header information
|
541 | bed40567 | Kostas Papadimitriou | $headers.removeClass(css[0]).removeClass(css[1]); |
542 | bed40567 | Kostas Papadimitriou | |
543 | bed40567 | Kostas Papadimitriou | var h = [];
|
544 | bed40567 | Kostas Papadimitriou | $headers.each(function (offset) { |
545 | bed40567 | Kostas Papadimitriou | if (!this.sortDisabled) { |
546 | bed40567 | Kostas Papadimitriou | h[this.column] = $(this); |
547 | bed40567 | Kostas Papadimitriou | } |
548 | bed40567 | Kostas Papadimitriou | }); |
549 | bed40567 | Kostas Papadimitriou | |
550 | bed40567 | Kostas Papadimitriou | var l = list.length;
|
551 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < l; i++) { |
552 | bed40567 | Kostas Papadimitriou | h[list[i][0]].addClass(css[list[i][1]]); |
553 | bed40567 | Kostas Papadimitriou | } |
554 | bed40567 | Kostas Papadimitriou | } |
555 | bed40567 | Kostas Papadimitriou | |
556 | bed40567 | Kostas Papadimitriou | function fixColumnWidth(table, $headers) { |
557 | bed40567 | Kostas Papadimitriou | var c = table.config;
|
558 | bed40567 | Kostas Papadimitriou | if (c.widthFixed) {
|
559 | bed40567 | Kostas Papadimitriou | var colgroup = $('<colgroup>'); |
560 | bed40567 | Kostas Papadimitriou | $("tr:first td", table.tBodies[0]).each(function () { |
561 | bed40567 | Kostas Papadimitriou | colgroup.append($('<col>').css('width', $(this).width())); |
562 | bed40567 | Kostas Papadimitriou | }); |
563 | bed40567 | Kostas Papadimitriou | $(table).prepend(colgroup);
|
564 | bed40567 | Kostas Papadimitriou | }; |
565 | bed40567 | Kostas Papadimitriou | } |
566 | bed40567 | Kostas Papadimitriou | |
567 | bed40567 | Kostas Papadimitriou | function updateHeaderSortCount(table, sortList) { |
568 | bed40567 | Kostas Papadimitriou | var c = table.config,
|
569 | bed40567 | Kostas Papadimitriou | l = sortList.length; |
570 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < l; i++) { |
571 | bed40567 | Kostas Papadimitriou | var s = sortList[i],
|
572 | bed40567 | Kostas Papadimitriou | o = c.headerList[s[0]];
|
573 | bed40567 | Kostas Papadimitriou | o.count = s[1];
|
574 | bed40567 | Kostas Papadimitriou | o.count++; |
575 | bed40567 | Kostas Papadimitriou | } |
576 | bed40567 | Kostas Papadimitriou | } |
577 | bed40567 | Kostas Papadimitriou | |
578 | bed40567 | Kostas Papadimitriou | /* sorting methods */
|
579 | bed40567 | Kostas Papadimitriou | |
580 | bed40567 | Kostas Papadimitriou | function multisort(table, sortList, cache) { |
581 | bed40567 | Kostas Papadimitriou | |
582 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
583 | bed40567 | Kostas Papadimitriou | var sortTime = new Date(); |
584 | bed40567 | Kostas Papadimitriou | } |
585 | bed40567 | Kostas Papadimitriou | |
586 | bed40567 | Kostas Papadimitriou | var dynamicExp = "var sortWrapper = function(a,b) {", |
587 | bed40567 | Kostas Papadimitriou | l = sortList.length; |
588 | bed40567 | Kostas Papadimitriou | |
589 | bed40567 | Kostas Papadimitriou | // TODO: inline functions.
|
590 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < l; i++) { |
591 | bed40567 | Kostas Papadimitriou | |
592 | bed40567 | Kostas Papadimitriou | var c = sortList[i][0]; |
593 | bed40567 | Kostas Papadimitriou | var order = sortList[i][1]; |
594 | bed40567 | Kostas Papadimitriou | // var s = (getCachedSortType(table.config.parsers,c) == "text") ?
|
595 | bed40567 | Kostas Papadimitriou | // ((order == 0) ? "sortText" : "sortTextDesc") : ((order == 0) ?
|
596 | bed40567 | Kostas Papadimitriou | // "sortNumeric" : "sortNumericDesc");
|
597 | bed40567 | Kostas Papadimitriou | // var s = (table.config.parsers[c].type == "text") ? ((order == 0)
|
598 | bed40567 | Kostas Papadimitriou | // ? makeSortText(c) : makeSortTextDesc(c)) : ((order == 0) ?
|
599 | bed40567 | Kostas Papadimitriou | // makeSortNumeric(c) : makeSortNumericDesc(c));
|
600 | bed40567 | Kostas Papadimitriou | var s = (table.config.parsers[c].type == "text") ? ((order == 0) ? makeSortFunction("text", "asc", c) : makeSortFunction("text", "desc", c)) : ((order == 0) ? makeSortFunction("numeric", "asc", c) : makeSortFunction("numeric", "desc", c)); |
601 | bed40567 | Kostas Papadimitriou | var e = "e" + i; |
602 | bed40567 | Kostas Papadimitriou | |
603 | bed40567 | Kostas Papadimitriou | dynamicExp += "var " + e + " = " + s; // + "(a[" + c + "],b[" + c |
604 | bed40567 | Kostas Papadimitriou | // + "]); ";
|
605 | bed40567 | Kostas Papadimitriou | dynamicExp += "if(" + e + ") { return " + e + "; } "; |
606 | bed40567 | Kostas Papadimitriou | dynamicExp += "else { ";
|
607 | bed40567 | Kostas Papadimitriou | |
608 | bed40567 | Kostas Papadimitriou | } |
609 | bed40567 | Kostas Papadimitriou | |
610 | bed40567 | Kostas Papadimitriou | // if value is the same keep orignal order
|
611 | bed40567 | Kostas Papadimitriou | var orgOrderCol = cache.normalized[0].length - 1; |
612 | bed40567 | Kostas Papadimitriou | dynamicExp += "return a[" + orgOrderCol + "]-b[" + orgOrderCol + "];"; |
613 | bed40567 | Kostas Papadimitriou | |
614 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < l; i++) { |
615 | bed40567 | Kostas Papadimitriou | dynamicExp += "}; ";
|
616 | bed40567 | Kostas Papadimitriou | } |
617 | bed40567 | Kostas Papadimitriou | |
618 | bed40567 | Kostas Papadimitriou | dynamicExp += "return 0; ";
|
619 | bed40567 | Kostas Papadimitriou | dynamicExp += "}; ";
|
620 | bed40567 | Kostas Papadimitriou | |
621 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
622 | bed40567 | Kostas Papadimitriou | benchmark("Evaling expression:" + dynamicExp, new Date()); |
623 | bed40567 | Kostas Papadimitriou | } |
624 | bed40567 | Kostas Papadimitriou | |
625 | bed40567 | Kostas Papadimitriou | eval(dynamicExp); |
626 | bed40567 | Kostas Papadimitriou | |
627 | bed40567 | Kostas Papadimitriou | cache.normalized.sort(sortWrapper); |
628 | bed40567 | Kostas Papadimitriou | |
629 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
630 | bed40567 | Kostas Papadimitriou | benchmark("Sorting on " + sortList.toString() + " and dir " + order + " time:", sortTime); |
631 | bed40567 | Kostas Papadimitriou | } |
632 | bed40567 | Kostas Papadimitriou | |
633 | bed40567 | Kostas Papadimitriou | return cache;
|
634 | bed40567 | Kostas Papadimitriou | }; |
635 | bed40567 | Kostas Papadimitriou | |
636 | bed40567 | Kostas Papadimitriou | function makeSortFunction(type, direction, index) { |
637 | bed40567 | Kostas Papadimitriou | var a = "a[" + index + "]", |
638 | bed40567 | Kostas Papadimitriou | b = "b[" + index + "]"; |
639 | bed40567 | Kostas Papadimitriou | if (type == 'text' && direction == 'asc') { |
640 | bed40567 | Kostas Papadimitriou | return "(" + a + " == " + b + " ? 0 : (" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : (" + a + " < " + b + ") ? -1 : 1 )));"; |
641 | bed40567 | Kostas Papadimitriou | } else if (type == 'text' && direction == 'desc') { |
642 | bed40567 | Kostas Papadimitriou | return "(" + a + " == " + b + " ? 0 : (" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : (" + b + " < " + a + ") ? -1 : 1 )));"; |
643 | bed40567 | Kostas Papadimitriou | } else if (type == 'numeric' && direction == 'asc') { |
644 | bed40567 | Kostas Papadimitriou | return "(" + a + " === null && " + b + " === null) ? 0 :(" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : " + a + " - " + b + "));"; |
645 | bed40567 | Kostas Papadimitriou | } else if (type == 'numeric' && direction == 'desc') { |
646 | bed40567 | Kostas Papadimitriou | return "(" + a + " === null && " + b + " === null) ? 0 :(" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : " + b + " - " + a + "));"; |
647 | bed40567 | Kostas Papadimitriou | } |
648 | bed40567 | Kostas Papadimitriou | }; |
649 | bed40567 | Kostas Papadimitriou | |
650 | bed40567 | Kostas Papadimitriou | function makeSortText(i) { |
651 | bed40567 | Kostas Papadimitriou | return "((a[" + i + "] < b[" + i + "]) ? -1 : ((a[" + i + "] > b[" + i + "]) ? 1 : 0));"; |
652 | bed40567 | Kostas Papadimitriou | }; |
653 | bed40567 | Kostas Papadimitriou | |
654 | bed40567 | Kostas Papadimitriou | function makeSortTextDesc(i) { |
655 | bed40567 | Kostas Papadimitriou | return "((b[" + i + "] < a[" + i + "]) ? -1 : ((b[" + i + "] > a[" + i + "]) ? 1 : 0));"; |
656 | bed40567 | Kostas Papadimitriou | }; |
657 | bed40567 | Kostas Papadimitriou | |
658 | bed40567 | Kostas Papadimitriou | function makeSortNumeric(i) { |
659 | bed40567 | Kostas Papadimitriou | return "a[" + i + "]-b[" + i + "];"; |
660 | bed40567 | Kostas Papadimitriou | }; |
661 | bed40567 | Kostas Papadimitriou | |
662 | bed40567 | Kostas Papadimitriou | function makeSortNumericDesc(i) { |
663 | bed40567 | Kostas Papadimitriou | return "b[" + i + "]-a[" + i + "];"; |
664 | bed40567 | Kostas Papadimitriou | }; |
665 | bed40567 | Kostas Papadimitriou | |
666 | bed40567 | Kostas Papadimitriou | function sortText(a, b) { |
667 | bed40567 | Kostas Papadimitriou | if (table.config.sortLocaleCompare) return a.localeCompare(b); |
668 | bed40567 | Kostas Papadimitriou | return ((a < b) ? -1 : ((a > b) ? 1 : 0)); |
669 | bed40567 | Kostas Papadimitriou | }; |
670 | bed40567 | Kostas Papadimitriou | |
671 | bed40567 | Kostas Papadimitriou | function sortTextDesc(a, b) { |
672 | bed40567 | Kostas Papadimitriou | if (table.config.sortLocaleCompare) return b.localeCompare(a); |
673 | bed40567 | Kostas Papadimitriou | return ((b < a) ? -1 : ((b > a) ? 1 : 0)); |
674 | bed40567 | Kostas Papadimitriou | }; |
675 | bed40567 | Kostas Papadimitriou | |
676 | bed40567 | Kostas Papadimitriou | function sortNumeric(a, b) { |
677 | bed40567 | Kostas Papadimitriou | return a - b;
|
678 | bed40567 | Kostas Papadimitriou | }; |
679 | bed40567 | Kostas Papadimitriou | |
680 | bed40567 | Kostas Papadimitriou | function sortNumericDesc(a, b) { |
681 | bed40567 | Kostas Papadimitriou | return b - a;
|
682 | bed40567 | Kostas Papadimitriou | }; |
683 | bed40567 | Kostas Papadimitriou | |
684 | bed40567 | Kostas Papadimitriou | function getCachedSortType(parsers, i) { |
685 | bed40567 | Kostas Papadimitriou | return parsers[i].type;
|
686 | bed40567 | Kostas Papadimitriou | }; /* public methods */
|
687 | bed40567 | Kostas Papadimitriou | this.construct = function (settings) { |
688 | bed40567 | Kostas Papadimitriou | return this.each(function () { |
689 | bed40567 | Kostas Papadimitriou | // if no thead or tbody quit.
|
690 | bed40567 | Kostas Papadimitriou | if (!this.tHead || !this.tBodies) return; |
691 | bed40567 | Kostas Papadimitriou | // declare
|
692 | bed40567 | Kostas Papadimitriou | var $this, $document, $headers, cache, config, shiftDown = 0, |
693 | bed40567 | Kostas Papadimitriou | sortOrder; |
694 | bed40567 | Kostas Papadimitriou | // new blank config object
|
695 | bed40567 | Kostas Papadimitriou | this.config = {};
|
696 | bed40567 | Kostas Papadimitriou | // merge and extend.
|
697 | bed40567 | Kostas Papadimitriou | config = $.extend(this.config, $.tablesorter.defaults, settings); |
698 | bed40567 | Kostas Papadimitriou | // store common expression for speed
|
699 | bed40567 | Kostas Papadimitriou | $this = $(this); |
700 | bed40567 | Kostas Papadimitriou | // save the settings where they read
|
701 | bed40567 | Kostas Papadimitriou | $.data(this, "tablesorter", config); |
702 | bed40567 | Kostas Papadimitriou | // build headers
|
703 | bed40567 | Kostas Papadimitriou | $headers = buildHeaders(this); |
704 | bed40567 | Kostas Papadimitriou | // try to auto detect column type, and store in tables config
|
705 | bed40567 | Kostas Papadimitriou | this.config.parsers = buildParserCache(this, $headers); |
706 | bed40567 | Kostas Papadimitriou | // build the cache for the tbody cells
|
707 | bed40567 | Kostas Papadimitriou | cache = buildCache(this);
|
708 | bed40567 | Kostas Papadimitriou | // get the css class names, could be done else where.
|
709 | bed40567 | Kostas Papadimitriou | var sortCSS = [config.cssDesc, config.cssAsc];
|
710 | bed40567 | Kostas Papadimitriou | // fixate columns if the users supplies the fixedWidth option
|
711 | bed40567 | Kostas Papadimitriou | fixColumnWidth(this);
|
712 | bed40567 | Kostas Papadimitriou | // apply event handling to headers
|
713 | bed40567 | Kostas Papadimitriou | // this is to big, perhaps break it out?
|
714 | bed40567 | Kostas Papadimitriou | $headers.click(
|
715 | bed40567 | Kostas Papadimitriou | |
716 | bed40567 | Kostas Papadimitriou | function (e) {
|
717 | bed40567 | Kostas Papadimitriou | var totalRows = ($this[0].tBodies[0] && $this[0].tBodies[0].rows.length) || 0; |
718 | bed40567 | Kostas Papadimitriou | if (!this.sortDisabled && totalRows > 0) { |
719 | bed40567 | Kostas Papadimitriou | // Only call sortStart if sorting is
|
720 | bed40567 | Kostas Papadimitriou | // enabled.
|
721 | bed40567 | Kostas Papadimitriou | $this.trigger("sortStart"); |
722 | bed40567 | Kostas Papadimitriou | // store exp, for speed
|
723 | bed40567 | Kostas Papadimitriou | var $cell = $(this); |
724 | bed40567 | Kostas Papadimitriou | // get current column index
|
725 | bed40567 | Kostas Papadimitriou | var i = this.column; |
726 | bed40567 | Kostas Papadimitriou | // get current column sort order
|
727 | bed40567 | Kostas Papadimitriou | this.order = this.count++ % 2; |
728 | bed40567 | Kostas Papadimitriou | // always sort on the locked order.
|
729 | bed40567 | Kostas Papadimitriou | if(this.lockedOrder) this.order = this.lockedOrder; |
730 | bed40567 | Kostas Papadimitriou | |
731 | bed40567 | Kostas Papadimitriou | // user only whants to sort on one
|
732 | bed40567 | Kostas Papadimitriou | // column
|
733 | bed40567 | Kostas Papadimitriou | if (!e[config.sortMultiSortKey]) {
|
734 | bed40567 | Kostas Papadimitriou | // flush the sort list
|
735 | bed40567 | Kostas Papadimitriou | config.sortList = []; |
736 | bed40567 | Kostas Papadimitriou | if (config.sortForce != null) { |
737 | bed40567 | Kostas Papadimitriou | var a = config.sortForce;
|
738 | bed40567 | Kostas Papadimitriou | for (var j = 0; j < a.length; j++) { |
739 | bed40567 | Kostas Papadimitriou | if (a[j][0] != i) { |
740 | bed40567 | Kostas Papadimitriou | config.sortList.push(a[j]); |
741 | bed40567 | Kostas Papadimitriou | } |
742 | bed40567 | Kostas Papadimitriou | } |
743 | bed40567 | Kostas Papadimitriou | } |
744 | bed40567 | Kostas Papadimitriou | // add column to sort list
|
745 | bed40567 | Kostas Papadimitriou | config.sortList.push([i, this.order]);
|
746 | bed40567 | Kostas Papadimitriou | // multi column sorting
|
747 | bed40567 | Kostas Papadimitriou | } else {
|
748 | bed40567 | Kostas Papadimitriou | // the user has clicked on an all
|
749 | bed40567 | Kostas Papadimitriou | // ready sortet column.
|
750 | bed40567 | Kostas Papadimitriou | if (isValueInArray(i, config.sortList)) {
|
751 | bed40567 | Kostas Papadimitriou | // revers the sorting direction
|
752 | bed40567 | Kostas Papadimitriou | // for all tables.
|
753 | bed40567 | Kostas Papadimitriou | for (var j = 0; j < config.sortList.length; j++) { |
754 | bed40567 | Kostas Papadimitriou | var s = config.sortList[j],
|
755 | bed40567 | Kostas Papadimitriou | o = config.headerList[s[0]];
|
756 | bed40567 | Kostas Papadimitriou | if (s[0] == i) { |
757 | bed40567 | Kostas Papadimitriou | o.count = s[1];
|
758 | bed40567 | Kostas Papadimitriou | o.count++; |
759 | bed40567 | Kostas Papadimitriou | s[1] = o.count % 2; |
760 | bed40567 | Kostas Papadimitriou | } |
761 | bed40567 | Kostas Papadimitriou | } |
762 | bed40567 | Kostas Papadimitriou | } else {
|
763 | bed40567 | Kostas Papadimitriou | // add column to sort list array
|
764 | bed40567 | Kostas Papadimitriou | config.sortList.push([i, this.order]);
|
765 | bed40567 | Kostas Papadimitriou | } |
766 | bed40567 | Kostas Papadimitriou | }; |
767 | bed40567 | Kostas Papadimitriou | setTimeout(function () {
|
768 | bed40567 | Kostas Papadimitriou | // set css for headers
|
769 | bed40567 | Kostas Papadimitriou | setHeadersCss($this[0], $headers, config.sortList, sortCSS); |
770 | bed40567 | Kostas Papadimitriou | appendToTable( |
771 | bed40567 | Kostas Papadimitriou | $this[0], multisort( |
772 | bed40567 | Kostas Papadimitriou | $this[0], config.sortList, cache) |
773 | bed40567 | Kostas Papadimitriou | ); |
774 | bed40567 | Kostas Papadimitriou | }, 1);
|
775 | bed40567 | Kostas Papadimitriou | // stop normal event by returning false
|
776 | bed40567 | Kostas Papadimitriou | return false; |
777 | bed40567 | Kostas Papadimitriou | } |
778 | bed40567 | Kostas Papadimitriou | // cancel selection
|
779 | bed40567 | Kostas Papadimitriou | }).mousedown(function () {
|
780 | bed40567 | Kostas Papadimitriou | if (config.cancelSelection) {
|
781 | bed40567 | Kostas Papadimitriou | this.onselectstart = function () { |
782 | bed40567 | Kostas Papadimitriou | return false |
783 | bed40567 | Kostas Papadimitriou | }; |
784 | bed40567 | Kostas Papadimitriou | return false; |
785 | bed40567 | Kostas Papadimitriou | } |
786 | bed40567 | Kostas Papadimitriou | }); |
787 | bed40567 | Kostas Papadimitriou | // apply easy methods that trigger binded events
|
788 | bed40567 | Kostas Papadimitriou | $this.bind("update", function () { |
789 | bed40567 | Kostas Papadimitriou | var me = this; |
790 | bed40567 | Kostas Papadimitriou | setTimeout(function () {
|
791 | bed40567 | Kostas Papadimitriou | // rebuild parsers.
|
792 | bed40567 | Kostas Papadimitriou | me.config.parsers = buildParserCache( |
793 | bed40567 | Kostas Papadimitriou | me, $headers);
|
794 | bed40567 | Kostas Papadimitriou | // rebuild the cache map
|
795 | bed40567 | Kostas Papadimitriou | cache = buildCache(me); |
796 | bed40567 | Kostas Papadimitriou | }, 1);
|
797 | bed40567 | Kostas Papadimitriou | }).bind("updateCell", function (e, cell) { |
798 | bed40567 | Kostas Papadimitriou | var config = this.config; |
799 | bed40567 | Kostas Papadimitriou | // get position from the dom.
|
800 | bed40567 | Kostas Papadimitriou | var pos = [(cell.parentNode.rowIndex - 1), cell.cellIndex]; |
801 | bed40567 | Kostas Papadimitriou | // update cache
|
802 | bed40567 | Kostas Papadimitriou | cache.normalized[pos[0]][pos[1]] = config.parsers[pos[1]].format( |
803 | bed40567 | Kostas Papadimitriou | getElementText(config, cell), cell); |
804 | bed40567 | Kostas Papadimitriou | }).bind("sorton", function (e, list) { |
805 | bed40567 | Kostas Papadimitriou | $(this).trigger("sortStart"); |
806 | bed40567 | Kostas Papadimitriou | config.sortList = list; |
807 | bed40567 | Kostas Papadimitriou | // update and store the sortlist
|
808 | bed40567 | Kostas Papadimitriou | var sortList = config.sortList;
|
809 | bed40567 | Kostas Papadimitriou | // update header count index
|
810 | bed40567 | Kostas Papadimitriou | updateHeaderSortCount(this, sortList);
|
811 | bed40567 | Kostas Papadimitriou | // set css for headers
|
812 | bed40567 | Kostas Papadimitriou | setHeadersCss(this, $headers, sortList, sortCSS); |
813 | bed40567 | Kostas Papadimitriou | // sort the table and append it to the dom
|
814 | bed40567 | Kostas Papadimitriou | appendToTable(this, multisort(this, sortList, cache)); |
815 | bed40567 | Kostas Papadimitriou | }).bind("appendCache", function () { |
816 | bed40567 | Kostas Papadimitriou | appendToTable(this, cache);
|
817 | bed40567 | Kostas Papadimitriou | }).bind("applyWidgetId", function (e, id) { |
818 | bed40567 | Kostas Papadimitriou | getWidgetById(id).format(this);
|
819 | bed40567 | Kostas Papadimitriou | }).bind("applyWidgets", function () { |
820 | bed40567 | Kostas Papadimitriou | // apply widgets
|
821 | bed40567 | Kostas Papadimitriou | applyWidget(this);
|
822 | bed40567 | Kostas Papadimitriou | }); |
823 | bed40567 | Kostas Papadimitriou | if ($.metadata && ($(this).metadata() && $(this).metadata().sortlist)) { |
824 | bed40567 | Kostas Papadimitriou | config.sortList = $(this).metadata().sortlist; |
825 | bed40567 | Kostas Papadimitriou | } |
826 | bed40567 | Kostas Papadimitriou | // if user has supplied a sort list to constructor.
|
827 | bed40567 | Kostas Papadimitriou | if (config.sortList.length > 0) { |
828 | bed40567 | Kostas Papadimitriou | $this.trigger("sorton", [config.sortList]); |
829 | bed40567 | Kostas Papadimitriou | } |
830 | bed40567 | Kostas Papadimitriou | // apply widgets
|
831 | bed40567 | Kostas Papadimitriou | applyWidget(this);
|
832 | bed40567 | Kostas Papadimitriou | }); |
833 | bed40567 | Kostas Papadimitriou | }; |
834 | bed40567 | Kostas Papadimitriou | this.addParser = function (parser) { |
835 | bed40567 | Kostas Papadimitriou | var l = parsers.length,
|
836 | bed40567 | Kostas Papadimitriou | a = true;
|
837 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < l; i++) { |
838 | bed40567 | Kostas Papadimitriou | if (parsers[i].id.toLowerCase() == parser.id.toLowerCase()) {
|
839 | bed40567 | Kostas Papadimitriou | a = false;
|
840 | bed40567 | Kostas Papadimitriou | } |
841 | bed40567 | Kostas Papadimitriou | } |
842 | bed40567 | Kostas Papadimitriou | if (a) {
|
843 | bed40567 | Kostas Papadimitriou | parsers.push(parser); |
844 | bed40567 | Kostas Papadimitriou | }; |
845 | bed40567 | Kostas Papadimitriou | }; |
846 | bed40567 | Kostas Papadimitriou | this.addWidget = function (widget) { |
847 | bed40567 | Kostas Papadimitriou | widgets.push(widget); |
848 | bed40567 | Kostas Papadimitriou | }; |
849 | bed40567 | Kostas Papadimitriou | this.formatFloat = function (s) { |
850 | bed40567 | Kostas Papadimitriou | var i = parseFloat(s);
|
851 | bed40567 | Kostas Papadimitriou | return (isNaN(i)) ? 0 : i; |
852 | bed40567 | Kostas Papadimitriou | }; |
853 | bed40567 | Kostas Papadimitriou | this.formatInt = function (s) { |
854 | bed40567 | Kostas Papadimitriou | var i = parseInt(s);
|
855 | bed40567 | Kostas Papadimitriou | return (isNaN(i)) ? 0 : i; |
856 | bed40567 | Kostas Papadimitriou | }; |
857 | bed40567 | Kostas Papadimitriou | this.isDigit = function (s, config) { |
858 | bed40567 | Kostas Papadimitriou | // replace all an wanted chars and match.
|
859 | bed40567 | Kostas Papadimitriou | return /^[-+]?\d*$/.test($.trim(s.replace(/[,.']/g, ''))); |
860 | bed40567 | Kostas Papadimitriou | }; |
861 | bed40567 | Kostas Papadimitriou | this.clearTableBody = function (table) { |
862 | bed40567 | Kostas Papadimitriou | if ($.browser.msie) { |
863 | bed40567 | Kostas Papadimitriou | function empty() { |
864 | bed40567 | Kostas Papadimitriou | while (this.firstChild) |
865 | bed40567 | Kostas Papadimitriou | this.removeChild(this.firstChild); |
866 | bed40567 | Kostas Papadimitriou | } |
867 | bed40567 | Kostas Papadimitriou | empty.apply(table.tBodies[0]);
|
868 | bed40567 | Kostas Papadimitriou | } else {
|
869 | bed40567 | Kostas Papadimitriou | table.tBodies[0].innerHTML = ""; |
870 | bed40567 | Kostas Papadimitriou | } |
871 | bed40567 | Kostas Papadimitriou | }; |
872 | bed40567 | Kostas Papadimitriou | } |
873 | bed40567 | Kostas Papadimitriou | }); |
874 | bed40567 | Kostas Papadimitriou | |
875 | bed40567 | Kostas Papadimitriou | // extend plugin scope
|
876 | bed40567 | Kostas Papadimitriou | $.fn.extend({
|
877 | bed40567 | Kostas Papadimitriou | tablesorter: $.tablesorter.construct |
878 | bed40567 | Kostas Papadimitriou | }); |
879 | bed40567 | Kostas Papadimitriou | |
880 | bed40567 | Kostas Papadimitriou | // make shortcut
|
881 | bed40567 | Kostas Papadimitriou | var ts = $.tablesorter; |
882 | bed40567 | Kostas Papadimitriou | |
883 | bed40567 | Kostas Papadimitriou | // add default parsers
|
884 | bed40567 | Kostas Papadimitriou | ts.addParser({ |
885 | bed40567 | Kostas Papadimitriou | id: "text", |
886 | bed40567 | Kostas Papadimitriou | is: function (s) { |
887 | bed40567 | Kostas Papadimitriou | return true; |
888 | bed40567 | Kostas Papadimitriou | }, format: function (s) { |
889 | bed40567 | Kostas Papadimitriou | return $.trim(s.toLocaleLowerCase()); |
890 | bed40567 | Kostas Papadimitriou | }, type: "text" |
891 | bed40567 | Kostas Papadimitriou | }); |
892 | bed40567 | Kostas Papadimitriou | |
893 | bed40567 | Kostas Papadimitriou | ts.addParser({ |
894 | bed40567 | Kostas Papadimitriou | id: "digit", |
895 | bed40567 | Kostas Papadimitriou | is: function (s, table) { |
896 | bed40567 | Kostas Papadimitriou | var c = table.config;
|
897 | bed40567 | Kostas Papadimitriou | return $.tablesorter.isDigit(s, c); |
898 | bed40567 | Kostas Papadimitriou | }, format: function (s) { |
899 | bed40567 | Kostas Papadimitriou | return $.tablesorter.formatFloat(s); |
900 | bed40567 | Kostas Papadimitriou | }, type: "numeric" |
901 | bed40567 | Kostas Papadimitriou | }); |
902 | bed40567 | Kostas Papadimitriou | |
903 | bed40567 | Kostas Papadimitriou | ts.addParser({ |
904 | bed40567 | Kostas Papadimitriou | id: "currency", |
905 | bed40567 | Kostas Papadimitriou | is: function (s) { |
906 | bed40567 | Kostas Papadimitriou | return /^[£$€?.]/.test(s); |
907 | bed40567 | Kostas Papadimitriou | }, format: function (s) { |
908 | bed40567 | Kostas Papadimitriou | return $.tablesorter.formatFloat(s.replace(new RegExp(/[£$€]/g), "")); |
909 | bed40567 | Kostas Papadimitriou | }, type: "numeric" |
910 | bed40567 | Kostas Papadimitriou | }); |
911 | bed40567 | Kostas Papadimitriou | |
912 | bed40567 | Kostas Papadimitriou | ts.addParser({ |
913 | bed40567 | Kostas Papadimitriou | id: "ipAddress", |
914 | bed40567 | Kostas Papadimitriou | is: function (s) { |
915 | bed40567 | Kostas Papadimitriou | return /^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s); |
916 | bed40567 | Kostas Papadimitriou | }, format: function (s) { |
917 | bed40567 | Kostas Papadimitriou | var a = s.split("."), |
918 | bed40567 | Kostas Papadimitriou | r = "",
|
919 | bed40567 | Kostas Papadimitriou | l = a.length; |
920 | bed40567 | Kostas Papadimitriou | for (var i = 0; i < l; i++) { |
921 | bed40567 | Kostas Papadimitriou | var item = a[i];
|
922 | bed40567 | Kostas Papadimitriou | if (item.length == 2) { |
923 | bed40567 | Kostas Papadimitriou | r += "0" + item;
|
924 | bed40567 | Kostas Papadimitriou | } else {
|
925 | bed40567 | Kostas Papadimitriou | r += item; |
926 | bed40567 | Kostas Papadimitriou | } |
927 | bed40567 | Kostas Papadimitriou | } |
928 | bed40567 | Kostas Papadimitriou | return $.tablesorter.formatFloat(r); |
929 | bed40567 | Kostas Papadimitriou | }, type: "numeric" |
930 | bed40567 | Kostas Papadimitriou | }); |
931 | bed40567 | Kostas Papadimitriou | |
932 | bed40567 | Kostas Papadimitriou | ts.addParser({ |
933 | bed40567 | Kostas Papadimitriou | id: "url", |
934 | bed40567 | Kostas Papadimitriou | is: function (s) { |
935 | bed40567 | Kostas Papadimitriou | return /^(https?|ftp|file):\/\/$/.test(s); |
936 | bed40567 | Kostas Papadimitriou | }, format: function (s) { |
937 | bed40567 | Kostas Papadimitriou | return jQuery.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//), '')); |
938 | bed40567 | Kostas Papadimitriou | }, type: "text" |
939 | bed40567 | Kostas Papadimitriou | }); |
940 | bed40567 | Kostas Papadimitriou | |
941 | bed40567 | Kostas Papadimitriou | ts.addParser({ |
942 | bed40567 | Kostas Papadimitriou | id: "isoDate", |
943 | bed40567 | Kostas Papadimitriou | is: function (s) { |
944 | bed40567 | Kostas Papadimitriou | return /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(s); |
945 | bed40567 | Kostas Papadimitriou | }, format: function (s) { |
946 | bed40567 | Kostas Papadimitriou | return $.tablesorter.formatFloat((s != "") ? new Date(s.replace( |
947 | bed40567 | Kostas Papadimitriou | new RegExp(/-/g), "/")).getTime() : "0"); |
948 | bed40567 | Kostas Papadimitriou | }, type: "numeric" |
949 | bed40567 | Kostas Papadimitriou | }); |
950 | bed40567 | Kostas Papadimitriou | |
951 | bed40567 | Kostas Papadimitriou | ts.addParser({ |
952 | bed40567 | Kostas Papadimitriou | id: "percent", |
953 | bed40567 | Kostas Papadimitriou | is: function (s) { |
954 | bed40567 | Kostas Papadimitriou | return /\%$/.test($.trim(s)); |
955 | bed40567 | Kostas Papadimitriou | }, format: function (s) { |
956 | bed40567 | Kostas Papadimitriou | return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g), "")); |
957 | bed40567 | Kostas Papadimitriou | }, type: "numeric" |
958 | bed40567 | Kostas Papadimitriou | }); |
959 | bed40567 | Kostas Papadimitriou | |
960 | bed40567 | Kostas Papadimitriou | ts.addParser({ |
961 | bed40567 | Kostas Papadimitriou | id: "usLongDate", |
962 | bed40567 | Kostas Papadimitriou | is: function (s) { |
963 | bed40567 | Kostas Papadimitriou | return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/)); |
964 | bed40567 | Kostas Papadimitriou | }, format: function (s) { |
965 | bed40567 | Kostas Papadimitriou | return $.tablesorter.formatFloat(new Date(s).getTime()); |
966 | bed40567 | Kostas Papadimitriou | }, type: "numeric" |
967 | bed40567 | Kostas Papadimitriou | }); |
968 | bed40567 | Kostas Papadimitriou | |
969 | bed40567 | Kostas Papadimitriou | ts.addParser({ |
970 | bed40567 | Kostas Papadimitriou | id: "shortDate", |
971 | bed40567 | Kostas Papadimitriou | is: function (s) { |
972 | bed40567 | Kostas Papadimitriou | return /\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s); |
973 | bed40567 | Kostas Papadimitriou | }, format: function (s, table) { |
974 | bed40567 | Kostas Papadimitriou | var c = table.config;
|
975 | bed40567 | Kostas Papadimitriou | s = s.replace(/\-/g, "/"); |
976 | bed40567 | Kostas Papadimitriou | if (c.dateFormat == "us") { |
977 | bed40567 | Kostas Papadimitriou | // reformat the string in ISO format
|
978 | bed40567 | Kostas Papadimitriou | s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$1/$2"); |
979 | bed40567 | Kostas Papadimitriou | } else if (c.dateFormat == "uk") { |
980 | bed40567 | Kostas Papadimitriou | // reformat the string in ISO format
|
981 | bed40567 | Kostas Papadimitriou | s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$2/$1"); |
982 | bed40567 | Kostas Papadimitriou | } else if (c.dateFormat == "dd/mm/yy" || c.dateFormat == "dd-mm-yy") { |
983 | bed40567 | Kostas Papadimitriou | s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/, "$1/$2/$3"); |
984 | bed40567 | Kostas Papadimitriou | } |
985 | bed40567 | Kostas Papadimitriou | return $.tablesorter.formatFloat(new Date(s).getTime()); |
986 | bed40567 | Kostas Papadimitriou | }, type: "numeric" |
987 | bed40567 | Kostas Papadimitriou | }); |
988 | bed40567 | Kostas Papadimitriou | ts.addParser({ |
989 | bed40567 | Kostas Papadimitriou | id: "time", |
990 | bed40567 | Kostas Papadimitriou | is: function (s) { |
991 | bed40567 | Kostas Papadimitriou | return /^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s); |
992 | bed40567 | Kostas Papadimitriou | }, format: function (s) { |
993 | bed40567 | Kostas Papadimitriou | return $.tablesorter.formatFloat(new Date("2000/01/01 " + s).getTime()); |
994 | bed40567 | Kostas Papadimitriou | }, type: "numeric" |
995 | bed40567 | Kostas Papadimitriou | }); |
996 | bed40567 | Kostas Papadimitriou | ts.addParser({ |
997 | bed40567 | Kostas Papadimitriou | id: "metadata", |
998 | bed40567 | Kostas Papadimitriou | is: function (s) { |
999 | bed40567 | Kostas Papadimitriou | return false; |
1000 | bed40567 | Kostas Papadimitriou | }, format: function (s, table, cell) { |
1001 | bed40567 | Kostas Papadimitriou | var c = table.config,
|
1002 | bed40567 | Kostas Papadimitriou | p = (!c.parserMetadataName) ? 'sortValue' : c.parserMetadataName;
|
1003 | bed40567 | Kostas Papadimitriou | return $(cell).metadata()[p]; |
1004 | bed40567 | Kostas Papadimitriou | }, type: "numeric" |
1005 | bed40567 | Kostas Papadimitriou | }); |
1006 | bed40567 | Kostas Papadimitriou | // add default widgets
|
1007 | bed40567 | Kostas Papadimitriou | ts.addWidget({ |
1008 | bed40567 | Kostas Papadimitriou | id: "zebra", |
1009 | bed40567 | Kostas Papadimitriou | format: function (table) { |
1010 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
1011 | bed40567 | Kostas Papadimitriou | var time = new Date(); |
1012 | bed40567 | Kostas Papadimitriou | } |
1013 | bed40567 | Kostas Papadimitriou | var $tr, row = -1, |
1014 | bed40567 | Kostas Papadimitriou | odd; |
1015 | bed40567 | Kostas Papadimitriou | // loop through the visible rows
|
1016 | bed40567 | Kostas Papadimitriou | $("tr:visible", table.tBodies[0]).each(function (i) { |
1017 | bed40567 | Kostas Papadimitriou | $tr = $(this); |
1018 | bed40567 | Kostas Papadimitriou | // style children rows the same way the parent
|
1019 | bed40567 | Kostas Papadimitriou | // row was styled
|
1020 | bed40567 | Kostas Papadimitriou | if (!$tr.hasClass(table.config.cssChildRow)) row++; |
1021 | bed40567 | Kostas Papadimitriou | odd = (row % 2 == 0); |
1022 | bed40567 | Kostas Papadimitriou | $tr.removeClass(
|
1023 | bed40567 | Kostas Papadimitriou | table.config.widgetZebra.css[odd ? 0 : 1]).addClass( |
1024 | bed40567 | Kostas Papadimitriou | table.config.widgetZebra.css[odd ? 1 : 0]) |
1025 | bed40567 | Kostas Papadimitriou | }); |
1026 | bed40567 | Kostas Papadimitriou | if (table.config.debug) {
|
1027 | bed40567 | Kostas Papadimitriou | $.tablesorter.benchmark("Applying Zebra widget", time); |
1028 | bed40567 | Kostas Papadimitriou | } |
1029 | bed40567 | Kostas Papadimitriou | } |
1030 | bed40567 | Kostas Papadimitriou | }); |
1031 | bed40567 | Kostas Papadimitriou | })(jQuery); |