0
|
1 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
|
2 |
<html lang="en">
|
|
3 |
<head>
|
3
|
4 |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
0
|
5 |
<title>ConE generation report</title>
|
|
6 |
<style type="text/css">
|
|
7 |
body {
|
|
8 |
font-family: Nokia Standard Multiscript, Tahoma, Verdana, Arial;
|
|
9 |
font-size: 0.8em;
|
|
10 |
color: #0055B7;
|
|
11 |
}
|
|
12 |
|
|
13 |
.red{
|
|
14 |
color: Red;
|
|
15 |
}
|
|
16 |
|
|
17 |
h1 {
|
|
18 |
padding: 30px 0 0 0;
|
|
19 |
margin: 0;
|
|
20 |
text-align: left;
|
|
21 |
}
|
|
22 |
|
|
23 |
#date {
|
|
24 |
text-align: center;
|
|
25 |
}
|
|
26 |
|
|
27 |
hr {
|
|
28 |
height: 1px;
|
|
29 |
background-color: cccccc;
|
|
30 |
color: #cccccc;
|
|
31 |
}
|
|
32 |
|
|
33 |
h2 h3 {
|
|
34 |
padding: 10px 0 10px 0;
|
|
35 |
margin: 0;
|
|
36 |
}
|
|
37 |
|
|
38 |
table.report {
|
|
39 |
width: 100%;
|
|
40 |
border: 1px solid #e0dfe3;
|
|
41 |
border-collapse: collapse;
|
|
42 |
color: #333333;
|
|
43 |
}
|
|
44 |
|
|
45 |
table.report th {
|
|
46 |
text-align: left;
|
|
47 |
padding: 5px;
|
|
48 |
background-color: #f9fafd;
|
|
49 |
color: #595a5f;
|
|
50 |
border-bottom: 1px #999999 solid;
|
|
51 |
}
|
|
52 |
|
|
53 |
table.report th.featureName {
|
|
54 |
background-color: #f2f2f3;
|
|
55 |
font: #595a5f Tahoma, Verdana, Arial bold;
|
|
56 |
font-size: 1.1em;
|
|
57 |
border-top: 3px #9d9da1;
|
|
58 |
border-top-style: double;
|
|
59 |
border-bottom: 3px #9d9da1;
|
|
60 |
border-bottom-style: double;
|
|
61 |
}
|
|
62 |
|
|
63 |
table.report th.header {
|
|
64 |
background-color: #f9fafd;
|
|
65 |
font: #595a5f Tahoma, Verdana, Arial bold;
|
|
66 |
font-size: 0.8em;
|
|
67 |
border-top: 1px #9d9da1;
|
|
68 |
border-bottom: 1px #9d9da1;
|
|
69 |
}
|
|
70 |
|
|
71 |
table.report td {
|
|
72 |
word-wrap: break-word;
|
|
73 |
border: 1px #EBEBEB;
|
|
74 |
padding: 5px;
|
|
75 |
border-style: solid;
|
|
76 |
vertical-align: top;
|
|
77 |
font: Tahoma, Verdana, Arial;
|
|
78 |
_font-size: 0.8em;
|
|
79 |
}
|
|
80 |
|
|
81 |
table.summary {
|
|
82 |
border: 1px solid #e0dfe3;
|
|
83 |
border-collapse: collapse;
|
|
84 |
color: #333333;
|
|
85 |
}
|
|
86 |
|
|
87 |
table.summary th {
|
|
88 |
text-align: left;
|
|
89 |
padding: 5px;
|
|
90 |
background-color: #f9fafd;
|
|
91 |
color: #595a5f;
|
|
92 |
border-bottom: 1px #999999 solid;
|
|
93 |
}
|
|
94 |
|
|
95 |
table.summary th.featureName {
|
|
96 |
background-color: #f2f2f3;
|
|
97 |
font: #595a5f Tahoma, Verdana, Arial bold;
|
|
98 |
font-size: 1.1em;
|
|
99 |
border-top: 3px #9d9da1;
|
|
100 |
border-top-style: double;
|
|
101 |
border-bottom: 3px #9d9da1;
|
|
102 |
border-bottom-style: double;
|
|
103 |
}
|
|
104 |
|
|
105 |
table.summary td {
|
|
106 |
word-wrap: break-word;
|
|
107 |
border: 1px #EBEBEB;
|
|
108 |
padding: 5px;
|
|
109 |
border-style: solid;
|
|
110 |
vertical-align: top;
|
|
111 |
font: Tahoma, Verdana, Arial;
|
|
112 |
_font-size: 0.8em;
|
|
113 |
}
|
3
|
114 |
div.popup {
|
|
115 |
background-color: #f9fafd;
|
|
116 |
font: #595a5f Tahoma, Verdana, Arial bold;
|
|
117 |
font-size: 0.8em;
|
|
118 |
border-top: 1px #9d9da1;
|
|
119 |
border-bottom: 1px #9d9da1;
|
|
120 |
}
|
|
121 |
div.floater {
|
|
122 |
text-align: left;
|
|
123 |
width: 50%;
|
|
124 |
float: left;
|
|
125 |
}
|
|
126 |
div.floater-right {
|
|
127 |
text-align: right;
|
|
128 |
width: 50%;
|
|
129 |
float: right;
|
|
130 |
}
|
|
131 |
table.log {
|
|
132 |
word-wrap: break-word;
|
|
133 |
border: 1px #EBEBEB;
|
|
134 |
padding: 5px;
|
|
135 |
border-style: solid;
|
|
136 |
vertical-align: top;
|
|
137 |
font: #595a5f Tahoma, Verdana, Arial;
|
|
138 |
font-size: 0.8em;
|
|
139 |
}
|
0
|
140 |
.currentValue {
|
|
141 |
background-color: #e8f2fe;
|
|
142 |
}
|
|
143 |
</style>
|
3
|
144 |
<script language="javascript" type="text/javascript">
|
|
145 |
//<![CDATA[
|
|
146 |
/*------------------------------------------------------------------------
|
|
147 |
- HTML Table Filter Generator v1.9.6
|
|
148 |
- By Max Guglielmi (tablefilter.free.fr)
|
|
149 |
- Licensed under the MIT License
|
|
150 |
--------------------------------------------------------------------------
|
|
151 |
Copyright (c) 2009 Max Guglielmi
|
|
152 |
|
|
153 |
Permission is hereby granted, free of charge, to any person obtaining
|
|
154 |
a copy of this software and associated documentation files (the
|
|
155 |
"Software"), to deal in the Software without restriction, including
|
|
156 |
without limitation the rights to use, copy, modify, merge, publish,
|
|
157 |
distribute, sublicense, and/or sell copies of the Software, and to
|
|
158 |
permit persons to whom the Software is furnished to do so, subject to
|
|
159 |
the following conditions:
|
|
160 |
|
|
161 |
The above copyright notice and this permission notice shall be included
|
|
162 |
in all copies or substantial portions of the Software.
|
|
163 |
|
|
164 |
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
165 |
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
166 |
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
167 |
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
168 |
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
169 |
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
170 |
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
171 |
--------------------------------------------------------------------------
|
|
172 |
- Special credit to:
|
|
173 |
Cedric Wartel, cnx.claude@free.fr, Florent Hirchy, Váry Péter,
|
|
174 |
Anthony Maes, Nuovella Williams, Fuggerbit, Venkata Seshagiri Rao
|
|
175 |
Raya for active contribution and inspiration
|
|
176 |
------------------------------------------------------------------------*/
|
|
177 |
|
|
178 |
function setFilterGrid(id)
|
|
179 |
/*====================================================
|
|
180 |
- Sets filters grid bar
|
|
181 |
- Calls TF Constructor and generates grid bar
|
|
182 |
- Params:
|
|
183 |
- id: table id (string)
|
|
184 |
- refRow (optional): row index (number)
|
|
185 |
- config (optional): configuration
|
|
186 |
object (literal object)
|
|
187 |
=====================================================*/
|
|
188 |
{
|
|
189 |
if( arguments.length==0 ) return;
|
|
190 |
eval( 'tf_'+id+' = new TF(arguments[0],arguments[1],arguments[2])' );
|
|
191 |
eval( 'tf_'+id+'.AddGrid();' );
|
|
192 |
}
|
|
193 |
|
|
194 |
/*===BEGIN removable section===========================
|
|
195 |
- Unobtrusive grid bar generation using
|
|
196 |
'filterable' class
|
|
197 |
- If you don't use it you can remove safely this
|
|
198 |
section
|
|
199 |
/*=====================================================*/
|
|
200 |
tf_addEvent(window, 'load', initFilterGrid);
|
|
201 |
|
|
202 |
function initFilterGrid()
|
|
203 |
{
|
|
204 |
if (!document.getElementsByTagName) return;
|
|
205 |
var tbls = tf_Tag(document,'table'), config;
|
|
206 |
for (var i=0; i<tbls.length; i++)
|
|
207 |
{
|
|
208 |
var cTbl = tbls[i], cTblId = cTbl.getAttribute('id');
|
|
209 |
if( tf_hasClass(cTbl,'filterable') && cTblId )
|
|
210 |
{
|
|
211 |
if( tf_isObj(cTblId+'_config') )
|
|
212 |
config = eval(cTblId+'_config');
|
|
213 |
else
|
|
214 |
config = undefined;
|
|
215 |
setFilterGrid( cTblId,config );
|
|
216 |
}
|
|
217 |
}// for i
|
|
218 |
}
|
|
219 |
/*===END removable section===========================*/
|
|
220 |
|
|
221 |
var TF = function( id )
|
|
222 |
/*====================================================
|
|
223 |
- TF object constructor
|
|
224 |
- Params:
|
|
225 |
- id: table id (string)
|
|
226 |
- refRow (optional): row index (number)
|
|
227 |
- config (optional): configuration
|
|
228 |
object (literal object)
|
|
229 |
=====================================================*/
|
|
230 |
{
|
|
231 |
if( arguments.length==0 ) return;
|
|
232 |
|
|
233 |
this.id = id;
|
|
234 |
this.tbl = tf_Id(id);
|
|
235 |
this.startRow = undefined;
|
|
236 |
this.refRow = null;
|
|
237 |
this.headersRow = null;
|
|
238 |
this.fObj = null;
|
|
239 |
this.nbFilterableRows = null;
|
|
240 |
this.nbRows = null;
|
|
241 |
this.nbCells = null;
|
|
242 |
this.hasGrid = false;
|
|
243 |
|
|
244 |
if(this.tbl != null && this.tbl.nodeName.tf_LCase() == 'table' && this.GetRowsNb())
|
|
245 |
{
|
|
246 |
if(arguments.length>1)
|
|
247 |
{
|
|
248 |
for(var i=0; i<arguments.length; i++)
|
|
249 |
{
|
|
250 |
var argtype = typeof arguments[i];
|
|
251 |
|
|
252 |
switch(argtype.tf_LCase())
|
|
253 |
{
|
|
254 |
case 'number':
|
|
255 |
this.startRow = arguments[i];
|
|
256 |
break;
|
|
257 |
case 'object':
|
|
258 |
this.fObj = arguments[i];
|
|
259 |
break;
|
|
260 |
}//switch
|
|
261 |
}//for
|
|
262 |
}//if
|
|
263 |
|
|
264 |
var f = this.fObj;
|
|
265 |
|
|
266 |
/*** filter types ***/
|
|
267 |
this.fltTypeInp = 'input';
|
|
268 |
this.fltTypeSlc = 'select';
|
|
269 |
this.fltTypeMulti = 'multiple';
|
|
270 |
this.fltTypeCheckList = 'checklist';
|
|
271 |
this.fltTypeNone = 'none';
|
|
272 |
|
|
273 |
/*** filters' grid properties ***/
|
|
274 |
this.fltGrid = f!=undefined && f.grid==false ? false : true; //enables/disables filter grid
|
|
275 |
|
|
276 |
/*** Grid layout ***/
|
|
277 |
this.gridLayout = f!=undefined && f.grid_layout ? true : false; //enables/disables grid layout (fixed headers)
|
|
278 |
this.gridWidth = f!=undefined && f.grid_width!=undefined ? f.grid_width : null; //defines grid width
|
|
279 |
this.gridHeight = f!=undefined && f.grid_height!=undefined ? f.grid_height : null; //defines grid height
|
|
280 |
this.gridMainContCssClass = f!=undefined && f.grid_cont_css_class!=undefined //defines css class for main container
|
|
281 |
? f.grid_cont_css_class : 'grd_Cont';
|
|
282 |
this.gridContCssClass = f!=undefined && f.grid_tbl_cont_css_class!=undefined //defines css class for div containing table
|
|
283 |
? f.grid_tbl_cont_css_class : 'grd_tblCont';
|
|
284 |
this.gridHeadContCssClass = f!=undefined && f.grid_tblHead_cont_css_class!=undefined //defines css class for div containing headers' table
|
|
285 |
? f.grid_tblHead_cont_css_class : 'grd_headTblCont';
|
|
286 |
this.gridInfDivCssClass = f!=undefined && f.grid_inf_grid_css_class!=undefined //defines css class for div containing rows counter, paging etc.
|
|
287 |
? f.grid_inf_grid_css_class : 'grd_inf';
|
|
288 |
this.gridHeadRowIndex = f!=undefined && f.grid_headers_row_index!=undefined //defines which row contains column headers
|
|
289 |
? f.grid_headers_row_index : 0;
|
|
290 |
this.gridHeadRows = f!=undefined && f.grid_headers_rows!=undefined //array of headers row indexes to be placed in header table
|
|
291 |
? f.grid_headers_rows : [0];
|
|
292 |
this.gridEnableFilters = f!=undefined && f.grid_enable_default_filters!=undefined
|
|
293 |
? f.grid_enable_default_filters : true; //generate filters in table headers
|
|
294 |
this.gridDefaultColWidth = f!=undefined && f.grid_default_col_width!=undefined
|
|
295 |
? f.grid_default_col_width : '100px'; //default col width
|
|
296 |
this.gridEnableColResizer = f!=undefined && f.grid_enable_cols_resizer!=undefined
|
|
297 |
? f.grid_enable_cols_resizer : true; //enables/disables columns resizer
|
|
298 |
this.hasGridWidthsRow = false; //flag indicating if the grid has an additional row for column widths (IE<=7)
|
|
299 |
this.gridColElms = [];
|
|
300 |
this.sourceTblHtml = this.tbl.outerHTML; //original table html
|
|
301 |
/*** ***/
|
|
302 |
|
|
303 |
this.filtersRowIndex = f!=undefined && f.filters_row_index!=undefined //defines in which row filters grid bar is generated
|
|
304 |
? f.filters_row_index>1 ? 1 : f.filters_row_index : 0;
|
|
305 |
this.fltCellTag = f!=undefined && f.filters_cell_tag!=undefined //defines tag of the cells containing filters (td/th)
|
|
306 |
? (f.filters_cell_tag!='th' ? 'td' : 'th') : 'td';
|
|
307 |
this.fltIds = []; //stores filters ids
|
|
308 |
this.searchArgs = null; //stores filters values
|
|
309 |
this.tblData = []; //stores table data
|
|
310 |
this.validRowsIndex = null; //stores valid rows indexes (rows visible upon filtering)
|
|
311 |
this.fltGridEl = null; //stores filters row element
|
|
312 |
this.isFirstLoad = true; //is first load boolean
|
|
313 |
this.infDiv = null; //container div for paging elements, reset btn etc.
|
|
314 |
this.lDiv = null; //div for rows counter
|
|
315 |
this.rDiv = null; //div for reset button and results per page select
|
|
316 |
this.mDiv = null; //div for paging elements
|
|
317 |
this.contDiv = null; //table container div for fixed headers (IE only)
|
|
318 |
this.infDivCssClass = f!=undefined && f.inf_div_css_class!=undefined //defines css class for div containing
|
|
319 |
? f.inf_div_css_class : 'inf'; //paging elements, rows counter etc.
|
|
320 |
this.lDivCssClass = f!=undefined && f.left_div_css_class!=undefined //defines css class for left div
|
|
321 |
? f.left_div_css_class : 'ldiv';
|
|
322 |
this.rDivCssClass = f!=undefined && f.right_div_css_class!=undefined //defines css class for right div
|
|
323 |
? f.right_div_css_class : 'rdiv';
|
|
324 |
this.mDivCssClass = f!=undefined && f.middle_div_css_class!=undefined //defines css class for mid div
|
|
325 |
? f.middle_div_css_class : 'mdiv';
|
|
326 |
this.contDivCssClass = f!=undefined && f.content_div_css_class!=undefined
|
|
327 |
? f.content_div_css_class : 'cont'; //table container div css class
|
|
328 |
|
|
329 |
/*** filters' grid appearance ***/
|
|
330 |
this.fltsRowCssClass = f!=undefined && f.flts_row_css_class!=undefined //defines css class for filters row
|
|
331 |
? f.flts_row_css_class : 'fltrow';
|
|
332 |
this.alternateBgs = f!=undefined && f.alternate_rows ? true : false; //enables/disbles rows alternating bg colors
|
|
333 |
this.hasColWidth = f!=undefined && f.col_width ? true : false; //defines widths of columns
|
|
334 |
this.colWidth = f!=undefined && this.hasColWidth ? f.col_width : null;
|
|
335 |
this.fixedHeaders = f!=undefined && f.fixed_headers ? true : false; //enables/disables fixed headers
|
|
336 |
this.tBodyH = f!=undefined && f.tbody_height ? f.tbody_height : 200; //tbody height if fixed headers enabled
|
|
337 |
this.fltCssClass = f!=undefined && f.flt_css_class!=undefined //defines css class for filters
|
|
338 |
? f.flt_css_class : 'flt';
|
|
339 |
this.fltMultiCssClass = f!=undefined && f.flt_multi_css_class!=undefined //defines css class for multiple selects filters
|
|
340 |
? f.flt_multi_css_class : 'flt_multi';
|
|
341 |
this.fltSmallCssClass = f!=undefined && f.flt_small_css_class!=undefined //defines css class for filters
|
|
342 |
? f.flt_small_css_class : 'flt_s';
|
|
343 |
this.singleFltCssClass = f!=undefined && f.single_flt_css_class!=undefined //defines css class for single-filter
|
|
344 |
? f.single_flt_css_class : 'single_flt';
|
|
345 |
this.isStartBgAlternate = true;
|
|
346 |
this.rowBgEvenCssClass = f!=undefined && f.even_row_css_class!=undefined //defines css class for even rows
|
|
347 |
? f.even_row_css_class :'even';
|
|
348 |
this.rowBgOddCssClass = f!=undefined && f.odd_row_css_class!=undefined //defines css class for odd rows
|
|
349 |
? f.odd_row_css_class :'odd';
|
|
350 |
|
|
351 |
/*** filters' grid behaviours ***/
|
|
352 |
this.enterKey = f!=undefined && f.enter_key==false ? false : true; //enables/disables enter key
|
|
353 |
this.isModFilterFn = f!=undefined && f.mod_filter_fn ? true : false; //enables/disables alternative fn call
|
|
354 |
this.modFilterFn = this.isModFilterFn ? f.mod_filter_fn : null;// used by tf_DetectKey fn
|
|
355 |
this.onBeforeFilter = f!=undefined && tf_isFn(f.on_before_filter) //calls function before filtering starts
|
|
356 |
? f.on_before_filter : null;
|
|
357 |
this.onAfterFilter = f!=undefined && tf_isFn(f.on_after_filter) //calls function after filtering
|
|
358 |
? f.on_after_filter : null;
|
|
359 |
this.matchCase = f!=undefined && f.match_case ? true : false; //enables/disables case sensitivity
|
|
360 |
this.exactMatch = f!=undefined && f.exact_match ? true : false; //enables/disbles exact match for search
|
|
361 |
this.refreshFilters = f!=undefined && f.refresh_filters ? true : false; //refreshes drop-down lists upon validation
|
|
362 |
this.activeFlt = null; //stores active filter element
|
|
363 |
this.activeFilterId = null; //id of active filter
|
|
364 |
this.hasColOperation = f!=undefined && f.col_operation ? true : false; //enables/disbles column operation(sum,mean)
|
|
365 |
this.colOperation = null;
|
|
366 |
this.hasVisibleRows = f!=undefined && f.rows_always_visible ? true : false; //enables always visible rows
|
|
367 |
this.visibleRows = this.hasVisibleRows ? f.rows_always_visible : [];//array containing always visible rows
|
|
368 |
this.searchType = f!=undefined && f.search_type!=undefined //defines search type: include or exclude
|
|
369 |
? f.search_type : 'include';
|
|
370 |
this.isExternalFlt = f!=undefined && f.external_flt_grid ? true : false; //enables/disables external filters generation
|
|
371 |
this.externalFltTgtIds = f!=undefined && f.external_flt_grid_ids!=undefined //array containing ids of external elements containing filters
|
|
372 |
? f.external_flt_grid_ids : null;
|
|
373 |
this.externalFltEls = []; //stores filters elements if isExternalFlt is true
|
|
374 |
this.execDelay = f!=undefined && f.exec_delay ? parseInt(f.exec_delay) : 100; //delays filtering process if loader true
|
|
375 |
this.status = f!=undefined && f.status ? true : false; //enables/disables status messages
|
|
376 |
this.onFiltersLoaded = f!=undefined && tf_isFn(f.on_filters_loaded) //calls function when filters grid loaded
|
|
377 |
? f.on_filters_loaded : null;
|
|
378 |
this.singleSearchFlt = f!=undefined && f.single_search_filter ? true : false; //enables/disables single filter search
|
|
379 |
this.onRowValidated = f!=undefined && tf_isFn(f.on_row_validated) //calls function after row is validated
|
|
380 |
? f.on_row_validated : null;
|
|
381 |
this.customCellDataCols = f!=undefined && f.custom_cell_data_cols ? f.custom_cell_data_cols : []; //array defining columns for customCellData event
|
|
382 |
this.customCellData = f!=undefined && tf_isFn(f.custom_cell_data) //calls custom function for retrieving cell data
|
|
383 |
? f.custom_cell_data : null;
|
|
384 |
|
|
385 |
/*** selects customisation and behaviours ***/
|
|
386 |
this.displayAllText = f!=undefined && f.display_all_text!=undefined ? f.display_all_text : ''; //defines 1st option text
|
|
387 |
this.onSlcChange = f!=undefined && f.on_change==false ? false : true; //enables/disables onChange event on combo-box
|
|
388 |
this.sortSlc = f!=undefined && f.sort_select==false ? false : true; //enables/disables select options sorting
|
|
389 |
this.isSortNumAsc = f!=undefined && f.sort_num_asc ? true : false; //enables/disables ascending numeric options sorting
|
|
390 |
this.sortNumAsc = this.isSortNumAsc ? f.sort_num_asc : null;
|
|
391 |
this.isSortNumDesc = f!=undefined && f.sort_num_desc ? true : false; //enables/disables descending numeric options sorting
|
|
392 |
this.sortNumDesc = this.isSortNumDesc ? f.sort_num_desc : null;
|
|
393 |
this.slcFillingMethod = f!=undefined && f.slc_filling_method!=undefined //sets select filling method: 'innerHTML' or
|
|
394 |
? f.slc_filling_method : 'createElement'; //'createElement'
|
|
395 |
this.fillSlcOnDemand = f!=undefined && f.fill_slc_on_demand ? true : false; //enabled selects are populated on demand
|
|
396 |
this.activateSlcTooltip = f!=undefined && f.activate_slc_tooltip!=undefined //IE only, tooltip text appearing on select
|
|
397 |
? f.activate_slc_tooltip : 'Click to activate'; // before it is populated
|
|
398 |
this.multipleSlcTooltip = f!=undefined && f.multiple_slc_tooltip!=undefined //tooltip text appearing on multiple select
|
|
399 |
? f.multiple_slc_tooltip : 'Use Ctrl key for multiple selections';
|
|
400 |
this.hasCustomSlcOptions = f!=undefined && f.custom_slc_options &&
|
|
401 |
(typeof f.custom_slc_options).tf_LCase() == 'object'
|
|
402 |
? true : false;
|
|
403 |
this.customSlcOptions = f!=undefined && f.custom_slc_options!=undefined
|
|
404 |
? f.custom_slc_options : null;
|
|
405 |
this.onBeforeOperation = f!=undefined && tf_isFn(f.on_before_operation) //calls function before col operation
|
|
406 |
? f.on_before_operation : null;
|
|
407 |
this.onAfterOperation = f!=undefined && tf_isFn(f.on_after_operation) //calls function after col operation
|
|
408 |
? f.on_after_operation : null;
|
|
409 |
|
|
410 |
/*** checklist customisation and behaviours ***/
|
|
411 |
this.checkListDiv = []; //checklist container div
|
|
412 |
this.checkListDivCssClass = f!=undefined && f.div_checklist_css_class!=undefined
|
|
413 |
? f.div_checklist_css_class : 'div_checklist'; //defines css class for div containing checklist filter
|
|
414 |
this.checkListCssClass = f!=undefined && f.checklist_css_class!=undefined //defines css class for checklist filters
|
|
415 |
? f.checklist_css_class : 'flt_checklist';
|
|
416 |
this.checkListItemCssClass = f!=undefined && f.checklist_item_css_class!=undefined //defines css class for checklist item (li)
|
|
417 |
? f.checklist_item_css_class : 'flt_checklist_item';
|
|
418 |
this.checkListSlcItemCssClass = f!=undefined && f.checklist_selected_item_css_class!=undefined //defines css class for selected checklist item (li)
|
|
419 |
? f.checklist_selected_item_css_class : 'flt_checklist_slc_item';
|
|
420 |
this.activateCheckListTxt = f!=undefined && f.activate_checklist_text!=undefined //Load on demand text
|
|
421 |
? f.activate_checklist_text : 'Click to load data';
|
|
422 |
|
|
423 |
/*** Filter operators ***/
|
|
424 |
this.orOperator = f!=undefined && f.or_operator!=undefined ? f.or_operator : '||';
|
|
425 |
this.anOperator = f!=undefined && f.and_operator!=undefined ? f.and_operator : '&&';
|
|
426 |
this.grOperator = f!=undefined && f.greater_operator!=undefined ? f.greater_operator : '>';
|
|
427 |
this.lwOperator = f!=undefined && f.lower_operator!=undefined ? f.lower_operator : '<';
|
|
428 |
this.leOperator = f!=undefined && f.lower_equal_operator!=undefined ? f.lower_equal_operator : '<=';
|
|
429 |
this.geOperator = f!=undefined && f.greater_equal_operator!=undefined ? f.greater_equal_operator : '>=';
|
|
430 |
this.dfOperator = f!=undefined && f.different_operator!=undefined ? f.different_operator : '!';
|
|
431 |
this.lkOperator = f!=undefined && f.like_operator!=undefined ? f.like_operator : '*';
|
|
432 |
this.eqOperator = f!=undefined && f.equal_operator!=undefined ? f.equal_operator : '=';
|
|
433 |
this.stOperator = f!=undefined && f.start_with_operator!=undefined ? f.start_with_operator : '{';
|
|
434 |
this.enOperator = f!=undefined && f.end_with_operator!=undefined ? f.end_with_operator : '}';
|
|
435 |
this.curExp = f!=undefined && f.cur_exp!=undefined ? f.cur_exp : '^[¥£€$]';
|
|
436 |
this.separator = f!=undefined && f.separator!=undefined ? f.separator : ',';
|
|
437 |
|
|
438 |
/*** rows counter ***/
|
|
439 |
this.rowsCounter = f!=undefined && f.rows_counter ? true : false; //show/hides rows counter
|
|
440 |
this.rowsCounterTgtId = f!=undefined && f.rows_counter_target_id!=undefined //id of custom container element
|
|
441 |
? f.rows_counter_target_id : null;
|
|
442 |
this.rowsCounterDiv = null; //element containing tot nb rows
|
|
443 |
this.rowsCounterSpan = null; //element containing tot nb rows label
|
|
444 |
this.rowsCounterText = f!=undefined && f.rows_counter_text!=undefined
|
|
445 |
? f.rows_counter_text : 'Rows: '; //defines rows counter text
|
|
446 |
this.totRowsCssClass = f!=undefined && f.tot_rows_css_class!=undefined //defines css class rows counter
|
|
447 |
? f.tot_rows_css_class : 'tot';
|
|
448 |
|
|
449 |
/*** status bar ***/
|
|
450 |
this.statusBar = f!=undefined && f.status_bar ? true : false; //show/hides status bar
|
|
451 |
this.statusBarTgtId = f!=undefined && f.status_bar_target_id!=undefined //id of custom container element
|
|
452 |
? f.status_bar_target_id : null;
|
|
453 |
this.statusBarDiv = null; //element containing status bar label
|
|
454 |
this.statusBarSpan = null; //status bar
|
|
455 |
this.statusBarSpanText = null; //status bar label
|
|
456 |
this.statusBarText = f!=undefined && f.status_bar_text!=undefined
|
|
457 |
? f.status_bar_text : ''; //defines status bar text
|
|
458 |
this.statusBarCssClass = f!=undefined && f.status_bar_css_class!=undefined //defines css class status bar
|
|
459 |
? f.status_bar_css_class : 'status';
|
|
460 |
this.statusBarCloseDelay = 250; //delay for status bar clearing
|
|
461 |
|
|
462 |
/*** loader ***/
|
|
463 |
this.loader = f!=undefined && f.loader ? true : false; //enables/disables loader
|
|
464 |
this.loaderTgtId = f!=undefined && f.loader_target_id!=undefined //id of container element
|
|
465 |
? f.loader_target_id : null;
|
|
466 |
this.loaderDiv = null; //div containing loader
|
|
467 |
this.loaderText = f!=undefined && f.loader_text!=undefined ? f.loader_text : 'Loading...'; //defines loader text
|
|
468 |
this.loaderHtml = f!=undefined && f.loader_html!=undefined ? f.loader_html : null; //defines loader innerHtml
|
|
469 |
this.loaderCssClass = f!=undefined && f.loader_css_class!=undefined //defines css class for loader div
|
|
470 |
? f.loader_css_class : 'loader';
|
|
471 |
this.loaderCloseDelay = 200; //delay for hiding loader
|
|
472 |
this.onShowLoader = f!=undefined && tf_isFn(f.on_show_loader) //calls function before loader is displayed
|
|
473 |
? f.on_show_loader : null;
|
|
474 |
this.onHideLoader = f!=undefined && tf_isFn(f.on_hide_loader) //calls function after loader is closed
|
|
475 |
? f.on_hide_loader : null;
|
|
476 |
|
|
477 |
/*** validation - reset buttons/links ***/
|
|
478 |
this.displayBtn = f!=undefined && f.btn ? true : false; //show/hides filter's validation button
|
|
479 |
this.btnText = f!=undefined && f.btn_text!=undefined ? f.btn_text : 'go'; //defines validation button text
|
|
480 |
this.btnCssClass = f!=undefined && f.btn_css_class!=undefined //defines css class for validation button
|
|
481 |
? f.btn_css_class : 'btnflt';
|
|
482 |
this.btnReset = f!=undefined && f.btn_reset ? true : false; //show/hides reset link
|
|
483 |
this.btnResetTgtId = f!=undefined && f.btn_reset_target_id!=undefined //id of container element
|
|
484 |
? f.btn_reset_target_id : null;
|
|
485 |
this.btnResetEl = null; //reset button element
|
|
486 |
this.btnResetText = f!=undefined && f.btn_reset_text!=undefined ? f.btn_reset_text : 'Reset'; //defines reset text
|
|
487 |
this.btnResetHtml = f!=undefined && f.btn_reset_html!=undefined ? f.btn_reset_html : null; //defines reset button innerHtml
|
|
488 |
this.btnResetCssClass = f!=undefined && f.btn_reset_css_class!=undefined //defines css class for reset button
|
|
489 |
? f.btn_reset_css_class :'reset';
|
|
490 |
|
|
491 |
/*** paging ***/
|
|
492 |
this.paging = f!=undefined && f.paging ? true : false; //enables/disables table paging
|
|
493 |
this.pagingTgtId = f!=undefined && f.paging_target_id!=undefined //id of container element
|
|
494 |
? f.paging_target_id : null;
|
|
495 |
this.pagingLength = f!=undefined && f.paging_length!=undefined ? f.paging_length : 10; //defines table paging length
|
|
496 |
this.hasResultsPerPage = f!=undefined && f.results_per_page ? true : false; //enables/disables results per page drop-down
|
|
497 |
this.resultsPerPageTgtId = f!=undefined && f.results_per_page_target_id!=undefined //id of container element
|
|
498 |
? f.results_per_page_target_id : null;
|
|
499 |
this.resultsPerPage = null; //stores results per page text and values
|
|
500 |
this.pagingSlc = null; //stores paging select element
|
|
501 |
this.isPagingRemoved = false; //indicates if paging elements were previously removed
|
|
502 |
this.pgSlcCssClass = f!=undefined && f.paging_slc_css_class!=undefined
|
|
503 |
? f.paging_slc_css_class :'pgSlc'; //css class for paging select element
|
|
504 |
this.pgInpCssClass = f!=undefined && f.paging_inp_css_class!=undefined
|
|
505 |
? f.paging_inp_css_class :'pgNbInp'; //css class for paging input element
|
|
506 |
this.resultsPerPageSlc = null; //results per page select element
|
|
507 |
this.resultsSlcCssClass = f!=undefined && f.results_slc_css_class!=undefined
|
|
508 |
? f.results_slc_css_class :'rspg'; //defines css class for results per page select
|
|
509 |
this.resultsSpanCssClass = f!=undefined && f.results_span_css_class!=undefined
|
|
510 |
? f.results_span_css_class :'rspgSpan'; //css class for label preceding results per page select
|
|
511 |
this.nbVisibleRows = 0; //nb visible rows
|
|
512 |
this.nbHiddenRows = 0; //nb hidden rows
|
|
513 |
this.startPagingRow = 0; //1st row index of current page
|
|
514 |
this.nbPages = 0; //total nb of pages
|
|
515 |
this.currentPageNb = 1; //current page nb
|
|
516 |
this.btnNextPageText = f!=undefined && f.btn_next_page_text!=undefined
|
|
517 |
? f.btn_next_page_text : '>'; //defines next page button text
|
|
518 |
this.btnPrevPageText = f!=undefined && f.btn_prev_page_text!=undefined
|
|
519 |
? f.btn_prev_page_text : '<'; //defines previous page button text
|
|
520 |
this.btnLastPageText = f!=undefined && f.btn_last_page_text!=undefined
|
|
521 |
? f.btn_last_page_text : '>|'; //defines last page button text
|
|
522 |
this.btnFirstPageText = f!=undefined && f.btn_first_page_text!=undefined
|
|
523 |
? f.btn_first_page_text : '|<' ; //defines first page button text
|
|
524 |
this.btnNextPageHtml = f!=undefined && f.btn_next_page_html!=undefined
|
|
525 |
? f.btn_next_page_html : null; //defines next page button html
|
|
526 |
this.btnPrevPageHtml = f!=undefined && f.btn_prev_page_html!=undefined
|
|
527 |
? f.btn_prev_page_html : null; //defines previous page button html
|
|
528 |
this.btnFirstPageHtml = f!=undefined && f.btn_first_page_html!=undefined
|
|
529 |
? f.btn_first_page_html : null; //defines last page button html
|
|
530 |
this.btnLastPageHtml = f!=undefined && f.btn_last_page_html!=undefined
|
|
531 |
? f.btn_last_page_html : null; //defines previous page button html
|
|
532 |
this.btnPageCssClass = f!=undefined && f.paging_btn_css_class!=undefined
|
|
533 |
? f.paging_btn_css_class :'pgInp'; //css class for paging buttons (previous,next,etc.)
|
|
534 |
this.nbPgSpanCssClass = f!=undefined && f.nb_pages_css_class!=undefined
|
|
535 |
? f.nb_pages_css_class :'nbpg'; //css class for span containing tot nb of pages
|
|
536 |
this.hasPagingBtns = f!=undefined && f.paging_btns==false ? false : true; //enables/disables paging buttons
|
|
537 |
this.pagingBtnEvents = null; //stores paging buttons events
|
|
538 |
this.pageSelectorType = f!=undefined && f.page_selector_type!=undefined
|
|
539 |
? f.page_selector_type : this.fltTypeSlc; //defines previous page button html
|
|
540 |
|
|
541 |
/*** webfx sort adapter ***/
|
|
542 |
this.sort = f!=undefined && f.sort ? true : false; //enables/disables default table sorting
|
|
543 |
this.isSortEnabled = false; //indicates if sort is set (used in tfAdapter.sortabletable.js)
|
|
544 |
this.sorted = false; //indicates if tables was sorted
|
|
545 |
this.sortConfig = f!=undefined && f.sort_config!=undefined
|
|
546 |
? f.sort_config : {};
|
|
547 |
this.sortConfig.name = f!=undefined && f.sort_config!=undefined && f.sort_config.name
|
|
548 |
? f.sort_config.name : 'sortabletable';
|
|
549 |
this.sortConfig.src = f!=undefined && f.sort_config!=undefined && f.sort_config.src
|
|
550 |
? f.sort_config.src : 'sortabletable.js';
|
|
551 |
this.sortConfig.adapterSrc =f!=undefined && f.sort_config!=undefined && f.sort_config.adapter_src
|
|
552 |
? f.sort_config.adapter_src : 'tfAdapter.sortabletable.js';
|
|
553 |
this.sortConfig.initialize =f!=undefined && f.sort_config!=undefined && f.sort_config.initialize
|
|
554 |
? f.sort_config.initialize
|
|
555 |
: function(o){ if(o.SetSortTable) o.SetSortTable(); };
|
|
556 |
this.sortConfig.sortTypes = f!=undefined && f.sort_config!=undefined && f.sort_config.sort_types
|
|
557 |
? f.sort_config.sort_types : [];
|
|
558 |
this.sortConfig.sortCol = f!=undefined && f.sort_config!=undefined && f.sort_config.sort_col!=undefined
|
|
559 |
? f.sort_config.sort_col : null;
|
|
560 |
this.sortConfig.asyncSort = f!=undefined && f.sort_config!=undefined && f.sort_config.async_sort
|
|
561 |
? true : false;
|
|
562 |
this.sortConfig.triggerIds =f!=undefined && f.sort_config!=undefined && f.sort_config.sort_trigger_ids
|
|
563 |
? f.sort_config.sort_trigger_ids : [];
|
|
564 |
|
|
565 |
/*** onkeyup event ***/
|
|
566 |
this.onKeyUp = f!=undefined && f.on_keyup ? true : false; //enables/disables onkeyup event, table is filtered when user stops typing
|
|
567 |
this.onKeyUpDelay = f!=undefined && f.on_keyup_delay!=undefined ? f.on_keyup_delay : 900; //onkeyup delay timer (msecs)
|
|
568 |
this.isUserTyping = null; //typing indicator
|
|
569 |
this.onKeyUpTimer = undefined;
|
|
570 |
|
|
571 |
/*** keyword highlighting ***/
|
|
572 |
this.highlightKeywords = f!=undefined && f.highlight_keywords ? true : false; //enables/disables keyword highlighting
|
|
573 |
this.highlightCssClass = f!=undefined && f.highlight_css_class!=undefined //defines css class for highlighting
|
|
574 |
? f.highlight_css_class : 'keyword';
|
|
575 |
|
|
576 |
/*** data types ***/
|
|
577 |
this.defaultDateType = f!=undefined && f.default_date_type!=undefined //defines default date type (european DMY)
|
|
578 |
? f.default_date_type : 'DMY';
|
|
579 |
this.thousandsSeparator = f!=undefined && f.thousands_separator!=undefined //defines default thousands separator
|
|
580 |
? f.thousands_separator : ','; //US = ',' EU = '.'
|
|
581 |
this.decimalSeparator = f!=undefined && f.decimal_separator!=undefined //defines default decimal separator
|
|
582 |
? f.decimal_separator : '.'; //US & javascript = '.' EU = ','
|
|
583 |
this.hasColNbFormat = f!=undefined && f.col_number_format ? true : false; //enables number format per column
|
|
584 |
this.colNbFormat = f!=undefined && this.hasColNbFormat ? f.col_number_format : null; //array containing columns nb formats
|
|
585 |
this.hasColDateType = f!=undefined && f.col_date_type ? true : false; //enables date type per column
|
|
586 |
this.colDateType = f!=undefined && this.hasColDateType ? f.col_date_type : null; //array containing columns date type
|
|
587 |
|
|
588 |
/*** status messages ***/
|
|
589 |
this.msgFilter = f!=undefined && f.msg_filter!=undefined //filtering
|
|
590 |
? f.msg_filter : 'Filtering data...';
|
|
591 |
this.msgPopulate = f!=undefined && f.msg_populate!=undefined //populating drop-downs
|
|
592 |
? f.msg_populate : 'Populating filter...';
|
|
593 |
this.msgPopulateCheckList = f!=undefined && f.msg_populate_checklist!=undefined //populating drop-downs
|
|
594 |
? f.msg_populate_checklist : 'Populating list...';
|
|
595 |
this.msgChangePage = f!=undefined && f.msg_change_page!=undefined //changing paging page
|
|
596 |
? f.msg_change_page : 'Collecting paging data...';
|
|
597 |
this.msgClear = f!=undefined && f.msg_clear!=undefined //clearing filters
|
|
598 |
? f.msg_clear : 'Clearing filters...';
|
|
599 |
this.msgChangeResults = f!=undefined && f.msg_change_results!=undefined //changing nb results/page
|
|
600 |
? f.msg_change_results : 'Changing results per page...';
|
|
601 |
this.msgResetValues = f!=undefined && f.msg_reset_grid_values!=undefined //re-setting grid values
|
|
602 |
? f.msg_reset_grid_values : 'Re-setting filters values...';
|
|
603 |
this.msgResetPage = f!=undefined && f.msg_reset_page!=undefined //re-setting page
|
|
604 |
? f.msg_reset_page : 'Re-setting page...';
|
|
605 |
this.msgResetPageLength = f!=undefined && f.msg_reset_page_length!=undefined //re-setting page length
|
|
606 |
? f.msg_reset_page_length : 'Re-setting page length...';
|
|
607 |
this.msgSort = f!=undefined && f.msg_sort!=undefined //table sorting
|
|
608 |
? f.msg_sort : 'Sorting data...';
|
|
609 |
this.msgLoadExtensions = f!=undefined && f.msg_load_extensions!=undefined //table sorting
|
|
610 |
? f.msg_load_extensions : 'Loading extensions...';
|
|
611 |
|
|
612 |
/*** ids prefixes ***/
|
|
613 |
this.prfxFlt = 'flt'; //filters (inputs - selects)
|
|
614 |
this.prfxValButton = 'btn'; //validation button
|
|
615 |
this.prfxInfDiv = 'inf_'; //container div for paging elements, rows counter etc.
|
|
616 |
this.prfxLDiv = 'ldiv_'; //left div
|
|
617 |
this.prfxRDiv = 'rdiv_'; //right div
|
|
618 |
this.prfxMDiv = 'mdiv_'; //middle div
|
|
619 |
this.prfxContentDiv = 'cont_'; //table container if fixed headers enabled
|
|
620 |
this.prfxCheckListDiv = 'chkdiv_'; //checklist filter container div
|
|
621 |
this.prfxSlcPages = 'slcPages_'; //pages select
|
|
622 |
this.prfxSlcResults = 'slcResults_'; //results per page select
|
|
623 |
this.prfxSlcResultsTxt = 'slcResultsTxt_'; //label preciding results per page select
|
|
624 |
this.prfxBtnNextSpan = 'btnNextSpan_'; //span containing next page button
|
|
625 |
this.prfxBtnPrevSpan = 'btnPrevSpan_'; //span containing previous page button
|
|
626 |
this.prfxBtnLastSpan = 'btnLastSpan_'; //span containing last page button
|
|
627 |
this.prfxBtnFirstSpan = 'btnFirstSpan_'; //span containing first page button
|
|
628 |
this.prfxBtnNext = 'btnNext_'; //next button
|
|
629 |
this.prfxBtnPrev = 'btnPrev_'; //previous button
|
|
630 |
this.prfxBtnLast = 'btnLast_'; //last button
|
|
631 |
this.prfxBtnFirst = 'btnFirst_'; //first button
|
|
632 |
this.prfxPgSpan = 'pgspan_'; //span for tot nb pages
|
|
633 |
this.prfxPgBeforeSpan = 'pgbeforespan_'; //span preceding pages select (contains 'Page')
|
|
634 |
this.prfxPgAfterSpan = 'pgafterspan_'; //span following pages select (contains ' of ')
|
|
635 |
this.prfxCounter = 'counter_'; //rows counter div
|
|
636 |
this.prfxTotRows = 'totrows_span_'; //nb displayed rows label
|
|
637 |
this.prfxTotRowsTxt = 'totRowsTextSpan_'; //label preceding nb rows label
|
|
638 |
this.prfxResetSpan = 'resetspan_'; //span containing reset button
|
|
639 |
this.prfxLoader = 'load_'; //loader div
|
|
640 |
this.prfxStatus = 'status_'; //status bar div
|
|
641 |
this.prfxStatusSpan = 'statusSpan_'; //status bar label
|
|
642 |
this.prfxStatusTxt = 'statusText_';//text preceding status bar label
|
|
643 |
this.prfxCookieFltsValues = 'tf_flts_'; //filter values cookie
|
|
644 |
this.prfxCookiePageNb = 'tf_pgnb_'; //page nb cookie
|
|
645 |
this.prfxCookiePageLen = 'tf_pglen_'; //page length cookie
|
|
646 |
this.prfxMainTblCont = 'gridCont_'; //div containing grid elements if grid_layout true
|
|
647 |
this.prfxTblCont = 'tblCont_'; //div containing table if grid_layout true
|
|
648 |
this.prfxHeadTblCont = 'tblHeadCont_'; //div containing headers table if grid_layout true
|
|
649 |
this.prfxHeadTbl = 'tblHead_'; //headers' table if grid_layout true
|
|
650 |
this.prfxGridFltTd = '_td_'; //id of td containing the filter if grid_layout true
|
|
651 |
this.prfxGridTh = 'tblHeadTh_'; //id of th containing column header if grid_layout true
|
|
652 |
|
|
653 |
/*** cookies ***/
|
|
654 |
this.hasStoredValues = false;
|
|
655 |
this.rememberGridValues = f!=undefined && f.remember_grid_values ? true : false; //remembers filters values on page load
|
|
656 |
this.fltsValuesCookie = this.prfxCookieFltsValues + this.id; //cookie storing filter values
|
|
657 |
this.rememberPageNb = this.paging && f!=undefined && f.remember_page_number
|
|
658 |
? true : false; //remembers page nb on page load
|
|
659 |
this.pgNbCookie = this.prfxCookiePageNb + this.id; //cookie storing page nb
|
|
660 |
this.rememberPageLen = this.paging && f!=undefined && f.remember_page_length
|
|
661 |
? true : false; //remembers page length on page load
|
|
662 |
this.pgLenCookie = this.prfxCookiePageLen + this.id; //cookie storing page length
|
|
663 |
this.cookieDuration = f!=undefined && f.set_cookie_duration
|
|
664 |
? parseInt(f.set_cookie_duration) :100000; //cookie duration
|
|
665 |
|
|
666 |
/*** extensions ***/
|
|
667 |
this.hasExtensions = f!=undefined && f.extensions ? true : false; //imports external script
|
|
668 |
this.extensions = (this.hasExtensions) ? f.extensions : null;
|
|
669 |
|
|
670 |
/***(deprecated: backward compatibility) ***/
|
|
671 |
this.hasBindScript = f!=undefined && f.bind_script ? true : false; //imports external script
|
|
672 |
this.bindScript = (this.hasBindScript) ? f.bind_script : null;
|
|
673 |
|
|
674 |
/*** TF events ***/
|
|
675 |
var o = this;
|
|
676 |
this.Evt = {
|
|
677 |
name: {
|
|
678 |
filter: 'Filter',
|
|
679 |
populateselect: 'Populate',
|
|
680 |
populatechecklist: 'PopulateCheckList',
|
|
681 |
changepage: 'ChangePage',
|
|
682 |
clear: 'Clear',
|
|
683 |
changeresultsperpage: 'ChangeResults',
|
|
684 |
resetvalues: 'ResetValues',
|
|
685 |
resetpage: 'ResetPage',
|
|
686 |
resetpagelength: 'ResetPageLength',
|
|
687 |
sort: 'Sort',
|
|
688 |
loadextensions: 'LoadExtensions'
|
|
689 |
},
|
|
690 |
_DetectKey: function(e)
|
|
691 |
/*====================================================
|
|
692 |
- common fn that detects return key for a given
|
|
693 |
element (onkeypress for inputs)
|
|
694 |
=====================================================*/
|
|
695 |
{
|
|
696 |
if(!o.enterKey) return;
|
|
697 |
var evt=(e)?e:(window.event)?window.event:null;
|
|
698 |
if(evt)
|
|
699 |
{
|
|
700 |
var key=(evt.charCode)?evt.charCode:
|
|
701 |
((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0));
|
|
702 |
if(key=='13')
|
|
703 |
{
|
|
704 |
o.Filter();
|
|
705 |
} else {
|
|
706 |
o.isUserTyping = true;
|
|
707 |
window.clearInterval(o.onKeyUpTimer);
|
|
708 |
o.onKeyUpTimer = undefined;
|
|
709 |
}
|
|
710 |
}//if evt
|
|
711 |
},
|
|
712 |
_OnKeyUp: function(e)
|
|
713 |
/*====================================================
|
|
714 |
- onkeyup event for text filters
|
|
715 |
(onKeyUp property)
|
|
716 |
=====================================================*/
|
|
717 |
{
|
|
718 |
if(!o.onKeyUp) return;
|
|
719 |
var evt=(e)?e:(window.event)?window.event:null;
|
|
720 |
var key=(evt.charCode)?evt.charCode:
|
|
721 |
((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0));
|
|
722 |
o.isUserTyping = false;
|
|
723 |
|
|
724 |
if( key!=13 && key!=9 && key!=27 && key!=38 && key!=40 )
|
|
725 |
{
|
|
726 |
function filter()
|
|
727 |
{
|
|
728 |
window.clearInterval(o.onKeyUpTimer);
|
|
729 |
o.onKeyUpTimer = undefined;
|
|
730 |
if( !o.isUserTyping )
|
|
731 |
{
|
|
732 |
o.Filter();
|
|
733 |
o.isUserTyping = null;
|
|
734 |
}
|
|
735 |
}
|
|
736 |
if(o.onKeyUpTimer==undefined)
|
|
737 |
o.onKeyUpTimer = window.setInterval( filter, o.onKeyUpDelay );
|
|
738 |
} else {
|
|
739 |
window.clearInterval(o.onKeyUpTimer);
|
|
740 |
o.onKeyUpTimer = undefined;
|
|
741 |
}
|
|
742 |
},
|
|
743 |
_OnKeyDown: function(e)
|
|
744 |
/*====================================================
|
|
745 |
- onkeydown event for input filters
|
|
746 |
(onKeyUp property)
|
|
747 |
=====================================================*/
|
|
748 |
{
|
|
749 |
if(!o.onKeyUp) return;
|
|
750 |
o.isUserTyping = true;
|
|
751 |
},
|
|
752 |
_OnInpBlur: function(e)
|
|
753 |
/*====================================================
|
|
754 |
- onblur event for input filters (onKeyUp property)
|
|
755 |
=====================================================*/
|
|
756 |
{
|
|
757 |
if(!o.onKeyUp) return;
|
|
758 |
o.isUserTyping = false;
|
|
759 |
window.clearInterval(o.onKeyUpTimer);
|
|
760 |
},
|
|
761 |
_OnInpFocus: function()
|
|
762 |
/*====================================================
|
|
763 |
- onfocus event for input filters
|
|
764 |
=====================================================*/
|
|
765 |
{
|
|
766 |
o.activeFilterId=this.getAttribute('id');
|
|
767 |
o.activeFlt = tf_Id(o.activeFilterId);
|
|
768 |
},
|
|
769 |
_OnSlcFocus: function()
|
|
770 |
/*====================================================
|
|
771 |
- onfocus event for select filters
|
|
772 |
=====================================================*/
|
|
773 |
{
|
|
774 |
o.activeFilterId = this.getAttribute('id');
|
|
775 |
o.activeFlt = tf_Id(o.activeFilterId);
|
|
776 |
if(o.fillSlcOnDemand && this.getAttribute('filled') == '0')
|
|
777 |
{// select is populated when element has focus
|
|
778 |
var ct = this.getAttribute('ct');
|
|
779 |
o.PopulateSelect(ct);
|
|
780 |
if(!tf_isIE) this.setAttribute('filled','1');
|
|
781 |
}
|
|
782 |
},
|
|
783 |
_OnSlcChange: function()
|
|
784 |
/*====================================================
|
|
785 |
- onchange event for select filters
|
|
786 |
=====================================================*/
|
|
787 |
{
|
|
788 |
if(o.onSlcChange) o.Filter();
|
|
789 |
},
|
|
790 |
_OnSlcBlur: function()
|
|
791 |
/*====================================================
|
|
792 |
- onblur event for select filters
|
|
793 |
=====================================================*/
|
|
794 |
{
|
|
795 |
},
|
|
796 |
_OnCheckListClick: function()
|
|
797 |
/*====================================================
|
|
798 |
- onclick event for checklist filters
|
|
799 |
=====================================================*/
|
|
800 |
{
|
|
801 |
if(o.fillSlcOnDemand && this.getAttribute('filled') == '0')
|
|
802 |
{
|
|
803 |
var ct = this.getAttribute('ct');
|
|
804 |
o.PopulateCheckList(ct);
|
|
805 |
o.checkListDiv[ct].onclick = null;
|
|
806 |
o.checkListDiv[ct].title = '';
|
|
807 |
}
|
|
808 |
},
|
|
809 |
_OnCheckListFocus: function()
|
|
810 |
/*====================================================
|
|
811 |
- onclick event for checklist filter container
|
|
812 |
=====================================================*/
|
|
813 |
{
|
|
814 |
o.activeFilterId = this.firstChild.getAttribute('id');
|
|
815 |
o.activeFlt = tf_Id(o.activeFilterId);
|
|
816 |
},
|
|
817 |
_OnBtnClick: function()
|
|
818 |
/*====================================================
|
|
819 |
- onclick event for validation button
|
|
820 |
(btn property)
|
|
821 |
=====================================================*/
|
|
822 |
{
|
|
823 |
o.Filter();
|
|
824 |
},
|
|
825 |
_OnSlcPagesChange: function()
|
|
826 |
/*====================================================
|
|
827 |
- onchange event for paging select
|
|
828 |
=====================================================*/
|
|
829 |
{
|
|
830 |
if(o.Evt._Paging._OnSlcPagesChangeEvt)
|
|
831 |
o.Evt._Paging._OnSlcPagesChangeEvt();
|
|
832 |
o.ChangePage();
|
|
833 |
this.blur();
|
|
834 |
//ie only: blur is not enough...
|
|
835 |
if(this.parentNode && tf_isIE)
|
|
836 |
this.parentNode.focus();
|
|
837 |
},
|
|
838 |
_OnSlcPagesChangeEvt: null, //used by sort adapter
|
|
839 |
_OnSlcResultsChange: function()
|
|
840 |
/*====================================================
|
|
841 |
- onchange event for results per page select
|
|
842 |
=====================================================*/
|
|
843 |
{
|
|
844 |
o.ChangeResultsPerPage();
|
|
845 |
this.blur();
|
|
846 |
//ie only: blur is not enough...
|
|
847 |
if(this.parentNode && tf_isIE)
|
|
848 |
this.parentNode.focus();
|
|
849 |
},
|
|
850 |
_Paging: {// paging buttons events
|
|
851 |
slcIndex: function(){
|
|
852 |
return (o.pageSelectorType==o.fltTypeSlc)
|
|
853 |
? o.pagingSlc.options.selectedIndex
|
|
854 |
: parseInt(o.pagingSlc.value)-1;
|
|
855 |
},
|
|
856 |
nbOpts: function(){
|
|
857 |
return (o.pageSelectorType==o.fltTypeSlc)
|
|
858 |
? parseInt(o.pagingSlc.options.length)-1
|
|
859 |
: (o.nbPages-1);
|
|
860 |
},
|
|
861 |
next: function(){
|
|
862 |
if(o.Evt._Paging.nextEvt) o.Evt._Paging.nextEvt();
|
|
863 |
var nextIndex = (o.Evt._Paging.slcIndex()<o.Evt._Paging.nbOpts())
|
|
864 |
? o.Evt._Paging.slcIndex()+1 : 0;
|
|
865 |
o.ChangePage(nextIndex);
|
|
866 |
},
|
|
867 |
nextEvt: null, //used by sort adapter
|
|
868 |
prev: function(){
|
|
869 |
if(o.Evt._Paging.prevEvt) o.Evt._Paging.prevEvt();
|
|
870 |
var prevIndex = o.Evt._Paging.slcIndex()>0
|
|
871 |
? o.Evt._Paging.slcIndex()-1 : o.Evt._Paging.nbOpts();
|
|
872 |
o.ChangePage(prevIndex);
|
|
873 |
},
|
|
874 |
prevEvt: null, //used by sort adapter
|
|
875 |
last: function(){
|
|
876 |
if(o.Evt._Paging.lastEvt) o.Evt._Paging.lastEvt();
|
|
877 |
o.ChangePage(o.Evt._Paging.nbOpts());
|
|
878 |
},
|
|
879 |
lastEvt: null, //used by sort adapter
|
|
880 |
first: function(){
|
|
881 |
if(o.Evt._Paging.firstEvt) o.Evt._Paging.firstEvt();
|
|
882 |
o.ChangePage(0);
|
|
883 |
},
|
|
884 |
firstEvt: null, //used by sort adapter
|
|
885 |
_detectKey: function(e)
|
|
886 |
{
|
|
887 |
var evt=(e)?e:(window.event)?window.event:null;
|
|
888 |
if(evt)
|
|
889 |
{
|
|
890 |
var key=(evt.charCode)?evt.charCode:
|
|
891 |
((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0));
|
|
892 |
if(key=='13'){
|
|
893 |
if(o.sorted){ o.Filter(); o.ChangePage(o.Evt._Paging.slcIndex()); }
|
|
894 |
else o.ChangePage();
|
|
895 |
this.blur();
|
|
896 |
}
|
|
897 |
}//if evt
|
|
898 |
}
|
|
899 |
},
|
|
900 |
_EnableSlc: function()
|
|
901 |
/*====================================================
|
|
902 |
- onclick event slc parent node (enables filters)
|
|
903 |
IE only
|
|
904 |
=====================================================*/
|
|
905 |
{
|
|
906 |
this.firstChild.disabled = false;
|
|
907 |
this.firstChild.focus();
|
|
908 |
this.onclick = null;
|
|
909 |
},
|
|
910 |
_Clear: function()
|
|
911 |
/*====================================================
|
|
912 |
- clears filters
|
|
913 |
=====================================================*/
|
|
914 |
{
|
|
915 |
o.ClearFilters();
|
|
916 |
},
|
|
917 |
_EnableSort: function()
|
|
918 |
/*====================================================
|
|
919 |
- enables table sorting
|
|
920 |
=====================================================*/
|
|
921 |
{
|
|
922 |
if(tf_isImported(o.sortConfig.adapterSrc))
|
|
923 |
o.sortConfig.initialize.call(null,o);
|
|
924 |
else
|
|
925 |
o.IncludeFile(
|
|
926 |
o.sortConfig.name+'_adapter',
|
|
927 |
o.sortConfig.adapterSrc,
|
|
928 |
function(){ o.sortConfig.initialize.call(null,o); }
|
|
929 |
);
|
|
930 |
}
|
|
931 |
};
|
|
932 |
|
|
933 |
/*** TF extensions ***/
|
|
934 |
this.Ext = {
|
|
935 |
list: {},
|
|
936 |
add: function(extName, extDesc, extPath, extCallBack)
|
|
937 |
{
|
|
938 |
var file = extPath.split('/')[extPath.split('/').length-1];
|
|
939 |
var re = new RegExp(file);
|
|
940 |
var path = extPath.replace(re,'');
|
|
941 |
o.Ext.list[extName] = {
|
|
942 |
name: extName,
|
|
943 |
description: extDesc,
|
|
944 |
file: file,
|
|
945 |
path: path,
|
|
946 |
callback: extCallBack
|
|
947 |
};
|
|
948 |
}
|
|
949 |
};
|
|
950 |
|
|
951 |
}//if tbl!=null
|
|
952 |
}
|
|
953 |
|
|
954 |
TF.prototype = {
|
|
955 |
|
|
956 |
AddGrid: function()
|
|
957 |
/*====================================================
|
|
958 |
- adds row with filtering grid bar and sets grid
|
|
959 |
behaviours and layout
|
|
960 |
=====================================================*/
|
|
961 |
{
|
|
962 |
if(this.hasGrid) return;
|
|
963 |
this.refRow = this.startRow==undefined ? 2 : (this.startRow+1);
|
|
964 |
if(this.gridLayout) this.refRow = this.startRow==undefined ? 0 : this.startRow;
|
|
965 |
this.headersRow = (this.filtersRowIndex==0) ? 1 : 0;
|
|
966 |
try{ this.nbCells = this.GetCellsNb(this.refRow) }
|
|
967 |
catch(e){ this.nbCells = this.GetCellsNb(0) }
|
|
968 |
|
|
969 |
var f = this.fObj==undefined ? {} : this.fObj;
|
|
970 |
var n = (this.singleSearchFlt) ? 1 : this.nbCells, inpclass;
|
|
971 |
|
|
972 |
if(this.gridLayout)
|
|
973 |
{
|
|
974 |
this.isExternalFlt = true;
|
|
975 |
this.SetGridLayout();
|
|
976 |
//Once grid generated 1st filterable row is 0 again
|
|
977 |
this.refRow = (tf_isIE || tf_isIE7) ? (this.refRow+1) : 0;
|
|
978 |
}
|
|
979 |
|
|
980 |
if(this.loader) this.SetLoader();
|
|
981 |
|
|
982 |
if(this.hasResultsPerPage)
|
|
983 |
{
|
|
984 |
this.resultsPerPage = f['results_per_page']!=undefined
|
|
985 |
? f['results_per_page'] : this.resultsPerPage;
|
|
986 |
if(this.resultsPerPage.length<2)
|
|
987 |
this.hasResultsPerPage = false;
|
|
988 |
else
|
|
989 |
this.pagingLength = this.resultsPerPage[1][0];
|
|
990 |
}
|
|
991 |
|
|
992 |
if(!this.fltGrid)
|
|
993 |
{//filters grid is not genetared
|
|
994 |
this.refRow = (this.refRow-1);
|
|
995 |
if(this.gridLayout) this.refRow = 0;
|
|
996 |
this.nbFilterableRows = this.GetRowsNb();
|
|
997 |
this.nbVisibleRows = this.nbFilterableRows;
|
|
998 |
this.nbRows = this.nbFilterableRows;
|
|
999 |
} else {
|
|
1000 |
if(this.isFirstLoad)
|
|
1001 |
{
|
|
1002 |
if(!this.gridLayout){
|
|
1003 |
var fltrow;
|
|
1004 |
var thead = tf_Tag(this.tbl,'thead');
|
|
1005 |
if( thead.length>0 )
|
|
1006 |
fltrow = thead[0].insertRow(this.filtersRowIndex);
|
|
1007 |
else
|
|
1008 |
fltrow = this.tbl.insertRow(this.filtersRowIndex);
|
|
1009 |
|
|
1010 |
if(this.fixedHeaders) this.SetFixedHeaders();
|
|
1011 |
|
|
1012 |
fltrow.className = this.fltsRowCssClass;
|
|
1013 |
//Disable for grid_layout
|
|
1014 |
if( this.isExternalFlt && !this.gridLayout ) fltrow.style.display = 'none';
|
|
1015 |
}
|
|
1016 |
|
|
1017 |
this.nbFilterableRows = this.GetRowsNb();
|
|
1018 |
this.nbVisibleRows = this.nbFilterableRows;
|
|
1019 |
this.nbRows = this.tbl.rows.length;
|
|
1020 |
|
|
1021 |
for(var i=0; i<n; i++)// this loop adds filters
|
|
1022 |
{
|
|
1023 |
var fltcell = tf_CreateElm(this.fltCellTag);
|
|
1024 |
if(this.singleSearchFlt) fltcell.colSpan = this.nbCells;
|
|
1025 |
if(!this.gridLayout) fltrow.appendChild( fltcell );
|
|
1026 |
inpclass = (i==n-1 && this.displayBtn) ? this.fltSmallCssClass : this.fltCssClass;
|
|
1027 |
|
|
1028 |
if( this['col'+i]==undefined )
|
|
1029 |
this['col'+i] = (f['col_'+i]==undefined)
|
|
1030 |
? this.fltTypeInp : f['col_'+i].tf_LCase();
|
|
1031 |
|
|
1032 |
if(this.singleSearchFlt)
|
|
1033 |
{//only 1 input for single search
|
|
1034 |
this['col'+i] = this.fltTypeInp;
|
|
1035 |
inpclass = this.singleFltCssClass;
|
|
1036 |
}
|
|
1037 |
|
|
1038 |
if(this['col'+i]==this.fltTypeSlc || this['col'+i]==this.fltTypeMulti)
|
|
1039 |
{//selects
|
|
1040 |
var slc = tf_CreateElm( this.fltTypeSlc,
|
|
1041 |
['id',this.prfxFlt+i+'_'+this.id],
|
|
1042 |
['ct',i],['filled','0'] );
|
|
1043 |
if(this['col'+i]==this.fltTypeMulti)
|
|
1044 |
{
|
|
1045 |
slc.multiple = this.fltTypeMulti;
|
|
1046 |
slc.title = this.multipleSlcTooltip;
|
|
1047 |
}
|
|
1048 |
slc.className = (this['col'+i].tf_LCase()==this.fltTypeSlc)
|
|
1049 |
? inpclass : this.fltMultiCssClass;// for ie<=6
|
|
1050 |
|
|
1051 |
if( this.isExternalFlt && this.externalFltTgtIds && tf_Id(this.externalFltTgtIds[i]) )
|
|
1052 |
{//filter is appended in desired element
|
|
1053 |
tf_Id( this.externalFltTgtIds[i] ).appendChild(slc);
|
|
1054 |
this.externalFltEls.push(slc);
|
|
1055 |
} else {
|
|
1056 |
fltcell.appendChild(slc);
|
|
1057 |
}
|
|
1058 |
|
|
1059 |
this.fltIds.push(this.prfxFlt+i+'_'+this.id);
|
|
1060 |
|
|
1061 |
if(!this.fillSlcOnDemand) this.PopulateSelect(i);
|
|
1062 |
|
|
1063 |
slc.onkeypress = this.Evt._DetectKey;
|
|
1064 |
slc.onchange = this.Evt._OnSlcChange;
|
|
1065 |
slc.onfocus = this.Evt._OnSlcFocus;
|
|
1066 |
slc.onblur = this.Evt._OnSlcBlur;
|
|
1067 |
|
|
1068 |
if(this.fillSlcOnDemand)
|
|
1069 |
{//1st option is created here since PopulateSelect isn't invoked
|
|
1070 |
var opt0 = tf_CreateOpt(this.displayAllText,'');
|
|
1071 |
slc.appendChild( opt0 );
|
|
1072 |
}
|
|
1073 |
|
|
1074 |
/* Code below for IE: it prevents select options to
|
|
1075 |
slide out before select it-self is populated.
|
|
1076 |
This is an unexpeted behavior for users since at
|
|
1077 |
1st click options are empty. Work around:
|
|
1078 |
select is disabled and by clicking on element
|
|
1079 |
(parent td), users enable drop-down and select is
|
|
1080 |
populated at same time. */
|
|
1081 |
if( this.fillSlcOnDemand && tf_isIE)
|
|
1082 |
{
|
|
1083 |
slc.disabled = true;
|
|
1084 |
slc.title = this.activateSlcTooltip;
|
|
1085 |
slc.parentNode.onclick = this.Evt._EnableSlc;
|
|
1086 |
if( this['col'+i]==this.fltTypeMulti)
|
|
1087 |
this.__deferMultipleSelection(slc,0);
|
|
1088 |
}
|
|
1089 |
}
|
|
1090 |
|
|
1091 |
else if( this['col'+i]==this.fltTypeCheckList )
|
|
1092 |
{// checklist
|
|
1093 |
var divCont = tf_CreateElm('div',
|
|
1094 |
['id',this.prfxCheckListDiv+i+'_'+this.id],
|
|
1095 |
['ct',i],['filled','0'] );
|
|
1096 |
divCont.className = this.checkListDivCssClass;
|
|
1097 |
|
|
1098 |
if( this.isExternalFlt && this.externalFltTgtIds
|
|
1099 |
&& tf_Id(this.externalFltTgtIds[i]) )
|
|
1100 |
{//filter is appended in desired element
|
|
1101 |
tf_Id( this.externalFltTgtIds[i] ).appendChild(divCont);
|
|
1102 |
this.externalFltEls.push(divCont);
|
|
1103 |
} else {
|
|
1104 |
fltcell.appendChild(divCont);
|
|
1105 |
}
|
|
1106 |
|
|
1107 |
this.checkListDiv[i] = divCont;
|
|
1108 |
this.fltIds.push(this.prfxFlt+i+'_'+this.id);
|
|
1109 |
if(!this.fillSlcOnDemand) this.PopulateCheckList(i);
|
|
1110 |
|
|
1111 |
divCont.onclick = this.Evt._OnCheckListFocus;
|
|
1112 |
|
|
1113 |
if(this.fillSlcOnDemand)
|
|
1114 |
{
|
|
1115 |
divCont.onclick = this.Evt._OnCheckListClick;
|
|
1116 |
divCont.appendChild(tf_CreateText(this.activateCheckListTxt));
|
|
1117 |
}
|
|
1118 |
}
|
|
1119 |
|
|
1120 |
else
|
|
1121 |
{
|
|
1122 |
var inptype;
|
|
1123 |
(this['col'+i]==this.fltTypeInp) ? inptype='text' : inptype='hidden';//show/hide input
|
|
1124 |
var inp = tf_CreateElm( this.fltTypeInp,['id',this.prfxFlt+i+'_'+this.id],['type',inptype],['ct',i] );
|
|
1125 |
inp.className = inpclass;// for ie<=6
|
|
1126 |
inp.onfocus = this.Evt._OnInpFocus;
|
|
1127 |
|
|
1128 |
if( this.isExternalFlt && this.externalFltTgtIds && tf_Id(this.externalFltTgtIds[i]) )
|
|
1129 |
{//filter is appended in desired element
|
|
1130 |
tf_Id( this.externalFltTgtIds[i] ).appendChild(inp);
|
|
1131 |
this.externalFltEls.push(inp);
|
|
1132 |
} else {
|
|
1133 |
fltcell.appendChild(inp);
|
|
1134 |
}
|
|
1135 |
|
|
1136 |
this.fltIds.push(this.prfxFlt+i+'_'+this.id);
|
|
1137 |
|
|
1138 |
inp.onkeypress = this.Evt._DetectKey;
|
|
1139 |
inp.onkeydown = this.Evt._OnKeyDown;
|
|
1140 |
inp.onkeyup = this.Evt._OnKeyUp;
|
|
1141 |
inp.onblur = this.Evt._OnInpBlur;
|
|
1142 |
|
|
1143 |
if(this.rememberGridValues)
|
|
1144 |
{
|
|
1145 |
var flts = tf_ReadCookie(this.fltsValuesCookie); //reads the cookie
|
|
1146 |
var reg = new RegExp(',','g');
|
|
1147 |
var flts_values = flts.split(reg); //creates an array with filters' values
|
|
1148 |
if (flts_values[i]!=' ')
|
|
1149 |
this.SetFilterValue(i,flts_values[i],false);
|
|
1150 |
}
|
|
1151 |
}
|
|
1152 |
|
|
1153 |
if(i==n-1 && this.displayBtn)// this adds validation button
|
|
1154 |
{
|
|
1155 |
var btn = tf_CreateElm( this.fltTypeInp,['id',this.prfxValButton+i+'_'+this.id],
|
|
1156 |
['type','button'], ['value',this.btnText] );
|
|
1157 |
btn.className = this.btnCssClass;
|
|
1158 |
|
|
1159 |
if( this.isExternalFlt && this.externalFltTgtIds && tf_Id(this.externalFltTgtIds[i]) )
|
|
1160 |
//filter is appended in desired element
|
|
1161 |
tf_Id( this.externalFltTgtIds[i] ).appendChild(btn);
|
|
1162 |
else
|
|
1163 |
fltcell.appendChild(btn);
|
|
1164 |
|
|
1165 |
btn.onclick = this.Evt._OnBtnClick;
|
|
1166 |
}//if
|
|
1167 |
|
|
1168 |
}// for i
|
|
1169 |
|
|
1170 |
} else {
|
|
1171 |
this.__resetGrid();
|
|
1172 |
}//if isFirstLoad
|
|
1173 |
}//if this.fltGrid
|
|
1174 |
|
|
1175 |
/* Filter behaviours */
|
|
1176 |
if(this.rowsCounter) this.SetRowsCounter();
|
|
1177 |
if(this.statusBar) this.SetStatusBar();
|
|
1178 |
if(this.fixedHeaders && !this.isFirstLoad) this.SetFixedHeaders();
|
|
1179 |
if(this.paging) this.SetPaging();
|
|
1180 |
if(this.hasResultsPerPage && this.paging) this.SetResultsPerPage();
|
|
1181 |
if(this.btnReset) this.SetResetBtn();
|
|
1182 |
|
|
1183 |
if(this.hasColWidth && !this.gridLayout) this.SetColWidths();
|
|
1184 |
|
|
1185 |
if( this.alternateBgs && this.isStartBgAlternate )
|
|
1186 |
this.SetAlternateRows(); //1st time only if no paging and rememberGridValues
|
|
1187 |
|
|
1188 |
if(this.hasColOperation && this.fltGrid)
|
|
1189 |
{
|
|
1190 |
this.colOperation = f.col_operation;
|
|
1191 |
this.SetColOperation();
|
|
1192 |
}
|
|
1193 |
|
|
1194 |
if(this.sort) this.SetSort();
|
|
1195 |
|
|
1196 |
/* Deprecated Loads external script */
|
|
1197 |
if(this.hasBindScript)
|
|
1198 |
{
|
|
1199 |
if(this.bindScript['src']!=undefined)
|
|
1200 |
{
|
|
1201 |
var scriptPath = this.bindScript['src'];
|
|
1202 |
var scriptName = (this.bindScript['name']!=undefined)
|
|
1203 |
? this.bindScript['name'] : '';
|
|
1204 |
this.IncludeFile(scriptName,scriptPath,this.bindScript['target_fn']);
|
|
1205 |
}
|
|
1206 |
}//if bindScript
|
|
1207 |
/* */
|
|
1208 |
|
|
1209 |
this.isFirstLoad = false;
|
|
1210 |
this.hasGrid = true;
|
|
1211 |
|
|
1212 |
if( this.rememberGridValues ||
|
|
1213 |
this.rememberPageLen ||
|
|
1214 |
this.rememberPageNb )
|
|
1215 |
this.ResetValues();
|
|
1216 |
|
|
1217 |
this.ShowLoader('none');
|
|
1218 |
|
|
1219 |
if(this.onFiltersLoaded)
|
|
1220 |
this.onFiltersLoaded.call(null,this);
|
|
1221 |
|
|
1222 |
/* Loads extensions */
|
|
1223 |
this.LoadExtensions();
|
|
1224 |
/* */
|
|
1225 |
},// AddGrid
|
|
1226 |
|
|
1227 |
EvtManager: function( evt,s )
|
|
1228 |
/*====================================================
|
|
1229 |
- TF events manager
|
|
1230 |
- Params:
|
|
1231 |
- event name (string)
|
|
1232 |
- config object (optional literal object)
|
|
1233 |
=====================================================*/
|
|
1234 |
{
|
|
1235 |
var o = this;
|
|
1236 |
var slcIndex = (s!=undefined && s.slcIndex!=undefined) ? s.slcIndex : null;
|
|
1237 |
var slcExternal = (s!=undefined && s.slcExternal!=undefined) ? s.slcExternal : false;
|
|
1238 |
var slcId = (s!=undefined && s.slcId!=undefined) ? s.slcId : null;
|
|
1239 |
var pgIndex = (s!=undefined && s.pgIndex!=undefined) ? s.pgIndex : null;
|
|
1240 |
function efx(){
|
|
1241 |
if(evt!=undefined)
|
|
1242 |
switch( evt )
|
|
1243 |
{
|
|
1244 |
case o.Evt.name.filter:
|
|
1245 |
(o.isModFilterFn)
|
|
1246 |
? o.modFilterFn.call(null,o)
|
|
1247 |
: o._Filter();
|
|
1248 |
break;
|
|
1249 |
case o.Evt.name.populateselect:
|
|
1250 |
(o.refreshFilters)
|
|
1251 |
? o._PopulateSelect(slcIndex,true)
|
|
1252 |
: o._PopulateSelect(slcIndex,false,slcExternal,slcId);
|
|
1253 |
break;
|
|
1254 |
case o.Evt.name.populatechecklist:
|
|
1255 |
o._PopulateCheckList(slcIndex,slcExternal,slcId);
|
|
1256 |
break;
|
|
1257 |
case o.Evt.name.changepage:
|
|
1258 |
o._ChangePage(pgIndex);
|
|
1259 |
break;
|
|
1260 |
case o.Evt.name.clear:
|
|
1261 |
o._ClearFilters();
|
|
1262 |
o._Filter();
|
|
1263 |
break;
|
|
1264 |
case o.Evt.name.changeresultsperpage:
|
|
1265 |
o._ChangeResultsPerPage();
|
|
1266 |
break;
|
|
1267 |
case o.Evt.name.resetvalues:
|
|
1268 |
o._ResetValues();
|
|
1269 |
o._Filter();
|
|
1270 |
break;
|
|
1271 |
case o.Evt.name.resetpage:
|
|
1272 |
o._ResetPage(o.pgNbCookie);
|
|
1273 |
break;
|
|
1274 |
case o.Evt.name.resetpagelength:
|
|
1275 |
o._ResetPageLength(o.pgLenCookie);
|
|
1276 |
break;
|
|
1277 |
case o.Evt.name.sort:
|
|
1278 |
void(0);
|
|
1279 |
break;
|
|
1280 |
case o.Evt.name.loadextensions:
|
|
1281 |
o._LoadExtensions();
|
|
1282 |
break;
|
|
1283 |
default: //to be used by extensions events when needed
|
|
1284 |
o['_'+evt].call(null,o,s);
|
|
1285 |
break;
|
|
1286 |
}
|
|
1287 |
o.StatusMsg('');
|
|
1288 |
o.ShowLoader('none');
|
|
1289 |
}
|
|
1290 |
|
|
1291 |
if(this.loader || this.status || this.statusBar)
|
|
1292 |
{
|
|
1293 |
this.ShowLoader('');
|
|
1294 |
this.StatusMsg(o['msg'+evt]);
|
|
1295 |
window.setTimeout(efx,this.execDelay);
|
|
1296 |
} else efx();
|
|
1297 |
},
|
|
1298 |
|
|
1299 |
LoadExtensions: function()
|
|
1300 |
{
|
|
1301 |
this.EvtManager(this.Evt.name.loadextensions);
|
|
1302 |
},
|
|
1303 |
|
|
1304 |
_LoadExtensions: function()
|
|
1305 |
/*====================================================
|
|
1306 |
- loads TF extensions
|
|
1307 |
=====================================================*/
|
|
1308 |
{
|
|
1309 |
if(!this.hasExtensions) return;
|
|
1310 |
if((typeof this.extensions.name).tf_LCase() == 'object' &&
|
|
1311 |
(typeof this.extensions.src).tf_LCase() == 'object')
|
|
1312 |
{
|
|
1313 |
var ext = this.extensions;
|
|
1314 |
for(var e=0; e<ext.name.length; e++)
|
|
1315 |
{
|
|
1316 |
var extPath = ext.src[e];
|
|
1317 |
var extName = ext.name[e];
|
|
1318 |
var extInit = (ext.initialize && ext.initialize[e]) ? ext.initialize[e] : null;
|
|
1319 |
var extDesc = (ext.description && ext.description[e] ) ? ext.description[e] : null;
|
|
1320 |
|
|
1321 |
//Registers extension
|
|
1322 |
this.Ext.add(extName, extDesc, extPath, extInit);
|
|
1323 |
|
|
1324 |
if(tf_isImported(extPath) && extInit)
|
|
1325 |
{
|
|
1326 |
try{ extInit.call(null,this); }
|
|
1327 |
catch(e){
|
|
1328 |
var o = this;
|
|
1329 |
function fn(){extInit.call(null,o);}
|
|
1330 |
if(!tf_isIE) tf_addEvent(window,'load',fn);
|
|
1331 |
else{
|
|
1332 |
function testReady(){
|
|
1333 |
if (document.readyState == "complete")
|
|
1334 |
{
|
|
1335 |
fn(); clearInterval(s);
|
|
1336 |
}
|
|
1337 |
}
|
|
1338 |
var s = setInterval(testReady,10);
|
|
1339 |
}
|
|
1340 |
}
|
|
1341 |
}
|
|
1342 |
else
|
|
1343 |
this.IncludeFile(extName,extPath,extInit);
|
|
1344 |
}
|
|
1345 |
}
|
|
1346 |
},
|
|
1347 |
|
|
1348 |
RemoveGrid: function()
|
|
1349 |
/*====================================================
|
|
1350 |
- removes a filter grid
|
|
1351 |
=====================================================*/
|
|
1352 |
{
|
|
1353 |
if( this.fltGrid && this.hasGrid )
|
|
1354 |
{
|
|
1355 |
var row = this.tbl.rows;
|
|
1356 |
|
|
1357 |
this.RemovePaging();
|
|
1358 |
this.RemoveStatusBar();
|
|
1359 |
this.RemoveRowsCounter();
|
|
1360 |
this.RemoveResetBtn();
|
|
1361 |
this.RemoveResultsPerPage();
|
|
1362 |
this.RemoveExternalFlts();
|
|
1363 |
this.RemoveFixedHeaders();
|
|
1364 |
this.RemoveTopDiv();
|
|
1365 |
this.UnhighlightAll();
|
|
1366 |
this.RemoveSort();
|
|
1367 |
this.RemoveLoader();
|
|
1368 |
|
|
1369 |
for(var j=this.refRow; j<this.nbRows; j++)
|
|
1370 |
{//this loop shows all rows and removes validRow attribute
|
|
1371 |
row[j].style.display = '';
|
|
1372 |
try
|
|
1373 |
{
|
|
1374 |
if( row[j].hasAttribute('validRow') )
|
|
1375 |
row[j].removeAttribute('validRow');
|
|
1376 |
} //ie<=6 doesn't support hasAttribute method
|
|
1377 |
catch(e){
|
|
1378 |
for( var x = 0; x < row[j].attributes.length; x++ )
|
|
1379 |
{
|
|
1380 |
if( row[j].attributes[x].nodeName.tf_LCase()=='validrow' )
|
|
1381 |
row[j].removeAttribute('validRow');
|
|
1382 |
}//for x
|
|
1383 |
}//catch(e)
|
|
1384 |
|
|
1385 |
//removes alterning colors
|
|
1386 |
this.RemoveRowBg(j);
|
|
1387 |
|
|
1388 |
}//for j
|
|
1389 |
|
|
1390 |
if(this.fltGrid && !this.gridLayout)
|
|
1391 |
{
|
|
1392 |
this.fltGridEl = row[this.filtersRowIndex];
|
|
1393 |
this.tbl.deleteRow(this.filtersRowIndex);
|
|
1394 |
}
|
|
1395 |
this.activeFlt = null;
|
|
1396 |
this.isStartBgAlternate = true;
|
|
1397 |
this.hasGrid = false;
|
|
1398 |
this.RemoveGridLayout();
|
|
1399 |
|
|
1400 |
}//if this.fltGrid
|
|
1401 |
},
|
|
1402 |
|
|
1403 |
SetGridLayout: function()
|
|
1404 |
/*====================================================
|
|
1405 |
- generates a grid with fixed headers
|
|
1406 |
=====================================================*/
|
|
1407 |
{
|
|
1408 |
if(!this.gridLayout) return;
|
|
1409 |
if(!this.hasColWidth){// in case column widths are not set default width 100px
|
|
1410 |
this.colWidth = [];
|
|
1411 |
for(var k=0; k<this.nbCells; k++){
|
|
1412 |
var colW, cell = this.tbl.rows[this.gridHeadRowIndex].cells[k];
|
|
1413 |
if(cell.width!='') colW = cell.width;
|
|
1414 |
else if(cell.style.width!='') colW = parseInt(cell.style.width);
|
|
1415 |
else colW = this.gridDefaultColWidth;
|
|
1416 |
this.colWidth[k] = colW;
|
|
1417 |
}
|
|
1418 |
this.hasColWidth = true;
|
|
1419 |
}
|
|
1420 |
this.SetColWidths(this.gridHeadRowIndex);
|
|
1421 |
|
|
1422 |
var tblW;//initial table width
|
|
1423 |
if(this.tbl.width!='') tblW = this.tbl.width;
|
|
1424 |
else if(this.tbl.style.width!='') tblW = parseInt(this.tbl.style.width);
|
|
1425 |
else tblW = this.tbl.clientWidth;
|
|
1426 |
|
|
1427 |
//Main container: it will contain all the elements
|
|
1428 |
this.tblMainCont = tf_CreateElm('div',['id', this.prfxMainTblCont + this.id]);
|
|
1429 |
this.tblMainCont.className = this.gridMainContCssClass;
|
|
1430 |
if(this.gridWidth) this.tblMainCont.style.width = this.gridWidth;
|
|
1431 |
this.tbl.parentNode.insertBefore(this.tblMainCont, this.tbl);
|
|
1432 |
|
|
1433 |
//Table container: div wrapping content table
|
|
1434 |
this.tblCont = tf_CreateElm('div',['id', this.prfxTblCont + this.id]);
|
|
1435 |
this.tblCont.className = this.gridContCssClass;
|
|
1436 |
if(this.gridWidth) this.tblCont.style.width = this.gridWidth;
|
|
1437 |
if(this.gridHeight) this.tblCont.style.height = this.gridHeight;
|
|
1438 |
this.tbl.parentNode.insertBefore(this.tblCont, this.tbl);
|
|
1439 |
var t = this.tbl.parentNode.removeChild(this.tbl);
|
|
1440 |
this.tblCont.appendChild(t);
|
|
1441 |
|
|
1442 |
//In case table width is expressed in %
|
|
1443 |
if(this.tbl.style.width == '')
|
|
1444 |
this.tbl.style.width = (this.__containsStr('%',tblW)
|
|
1445 |
? this.tbl.clientWidth : tblW) + 'px';
|
|
1446 |
|
|
1447 |
var d = this.tblCont.parentNode.removeChild(this.tblCont);
|
|
1448 |
this.tblMainCont.appendChild(d);
|
|
1449 |
|
|
1450 |
//Headers table container: div wrapping headers table
|
|
1451 |
this.headTblCont = tf_CreateElm('div',['id', this.prfxHeadTblCont + this.id]);
|
|
1452 |
this.headTblCont.className = this.gridHeadContCssClass;
|
|
1453 |
if(this.gridWidth) this.headTblCont.style.width = this.gridWidth;
|
|
1454 |
|
|
1455 |
//Headers table
|
|
1456 |
this.headTbl = tf_CreateElm('table',['id', this.prfxHeadTbl + this.id]);
|
|
1457 |
var tH = tf_CreateElm('tHead'); //IE<7 needs it
|
|
1458 |
|
|
1459 |
//1st row should be headers row, ids are added if not set
|
|
1460 |
//Those ids are used by the sort feature
|
|
1461 |
var hRow = this.tbl.rows[this.gridHeadRowIndex];
|
|
1462 |
var sortTriggers = [];
|
|
1463 |
for(var n=0; n<this.nbCells; n++){
|
|
1464 |
var cell = hRow.cells[n];
|
|
1465 |
var thId = cell.getAttribute('id');
|
|
1466 |
if(!thId || thId==''){
|
|
1467 |
thId = this.prfxGridTh+n+'_'+this.id
|
|
1468 |
cell.setAttribute('id', thId);
|
|
1469 |
}
|
|
1470 |
sortTriggers.push(thId);
|
|
1471 |
}
|
|
1472 |
|
|
1473 |
//Filters row is created
|
|
1474 |
var filtersRow = tf_CreateElm('tr');
|
|
1475 |
if(this.gridEnableFilters && this.fltGrid){
|
|
1476 |
this.externalFltTgtIds = [];
|
|
1477 |
for(var j=0; j<this.nbCells; j++)
|
|
1478 |
{
|
|
1479 |
var fltTdId = this.prfxFlt+j+ this.prfxGridFltTd +this.id;
|
|
1480 |
var c = tf_CreateElm(this.fltCellTag, ['id', fltTdId]);
|
|
1481 |
filtersRow.appendChild(c);
|
|
1482 |
this.externalFltTgtIds[j] = fltTdId;
|
|
1483 |
}
|
|
1484 |
}
|
|
1485 |
//Headers row are moved from content table to headers table
|
|
1486 |
for(var i=0; i<this.gridHeadRows.length; i++)
|
|
1487 |
{
|
|
1488 |
var headRow = this.tbl.rows[this.gridHeadRows[0]];
|
|
1489 |
tH.appendChild(headRow);
|
|
1490 |
}
|
|
1491 |
this.headTbl.appendChild(tH);
|
|
1492 |
if(this.filtersRowIndex == 0) tH.insertBefore(filtersRow,hRow);
|
|
1493 |
if(this.filtersRowIndex == 1) tH.appendChild(filtersRow);
|
|
1494 |
|
|
1495 |
this.headTblCont.appendChild(this.headTbl);
|
|
1496 |
this.tblCont.parentNode.insertBefore(this.headTblCont, this.tblCont);
|
|
1497 |
|
|
1498 |
//THead needs to be removed in content table for sort feature
|
|
1499 |
var thead = tf_Tag(this.tbl,'thead');
|
|
1500 |
if( thead.length>0 ) this.tbl.removeChild(thead[0]);
|
|
1501 |
|
|
1502 |
//Headers table style
|
|
1503 |
this.headTbl.style.width = this.tbl.style.width;
|
|
1504 |
this.headTbl.style.tableLayout = 'fixed';
|
|
1505 |
this.tbl.style.tableLayout = 'fixed';
|
|
1506 |
this.headTbl.cellPadding = this.tbl.cellPadding;
|
|
1507 |
this.headTbl.cellSpacing = this.tbl.cellSpacing;
|
|
1508 |
|
|
1509 |
//Headers container width
|
|
1510 |
this.headTblCont.style.width = this.tblCont.clientWidth+'px';
|
|
1511 |
|
|
1512 |
//content table without headers needs col widths to be reset
|
|
1513 |
this.SetColWidths();
|
|
1514 |
|
|
1515 |
this.tbl.style.width = '';
|
|
1516 |
if(tf_isIE || tf_isIE7) this.headTbl.style.width = '';
|
|
1517 |
|
|
1518 |
//scroll synchronisation
|
|
1519 |
var o = this; //TF object
|
|
1520 |
this.tblCont.onscroll = function(){
|
|
1521 |
o.headTblCont.scrollLeft = this.scrollLeft;
|
|
1522 |
var _o = this; //this = scroll element
|
|
1523 |
//New pointerX calc taking into account scrollLeft
|
|
1524 |
if(!o.isPointerXOverwritten){
|
|
1525 |
try{
|
|
1526 |
TF.Evt.pointerX = function(e)
|
|
1527 |
{
|
|
1528 |
e = e || window.event;
|
|
1529 |
var scrollLeft = tf_StandardBody().scrollLeft + _o.scrollLeft;
|
|
1530 |
return (e.pageX + _o.scrollLeft) || (e.clientX + scrollLeft);
|
|
1531 |
}
|
|
1532 |
o.isPointerXOverwritten = true;
|
|
1533 |
} catch(ee) {
|
|
1534 |
o.isPointerXOverwritten = false;
|
|
1535 |
}
|
|
1536 |
}
|
|
1537 |
}
|
|
1538 |
|
|
1539 |
/*** Default behaviours activation ***/
|
|
1540 |
var f = this.fObj==undefined ? {} : this.fObj;
|
|
1541 |
|
|
1542 |
//Sort is enabled if not specified in config object
|
|
1543 |
if(f.sort != false){
|
|
1544 |
this.sort = true;
|
|
1545 |
this.sortConfig.asyncSort = true;
|
|
1546 |
this.sortConfig.triggerIds = sortTriggers;
|
|
1547 |
}
|
|
1548 |
|
|
1549 |
if(this.gridEnableColResizer){
|
|
1550 |
if(!this.hasExtensions){
|
|
1551 |
this.extensions = {
|
|
1552 |
name:['ColumnsResizer'],
|
|
1553 |
src:['TFExt_ColsResizer/TFExt_ColsResizer.js'],
|
|
1554 |
description:['Columns Resizing'],
|
|
1555 |
initialize:[function(o){o.SetColsResizer('ColumnsResizer');}]
|
|
1556 |
}
|
|
1557 |
this.hasExtensions = true;
|
|
1558 |
} else {
|
|
1559 |
if(!this.__containsStr('colsresizer',this.extensions.src.toString().tf_LCase())){
|
|
1560 |
this.extensions.name.push('ColumnsResizer');
|
|
1561 |
this.extensions.src.push('TFExt_ColsResizer/TFExt_ColsResizer.js');
|
|
1562 |
this.extensions.description.push('Columns Resizing');
|
|
1563 |
this.extensions.initialize.push(function(o){o.SetColsResizer('ColumnsResizer');});
|
|
1564 |
}
|
|
1565 |
}
|
|
1566 |
}
|
|
1567 |
|
|
1568 |
//Default columns resizer properties for grid layout
|
|
1569 |
f.col_resizer_cols_headers_table = this.headTbl.getAttribute('id');
|
|
1570 |
f.col_resizer_cols_headers_index = this.gridHeadRowIndex;
|
|
1571 |
f.col_resizer_width_adjustment = 0;
|
|
1572 |
f.col_enable_text_ellipsis = false;
|
|
1573 |
|
|
1574 |
//Cols generation for all browsers excepted IE<=7
|
|
1575 |
o.tblHasColTag = (tf_Tag(o.tbl,'col').length > 0) ? true : false;
|
|
1576 |
if(!tf_isIE && !tf_isIE7){
|
|
1577 |
//Col elements are enough to keep column widths after sorting and filtering
|
|
1578 |
function createColTags(o)
|
|
1579 |
{
|
|
1580 |
if(!o) return;
|
|
1581 |
for(var k=(o.nbCells-1); k>=0; k--)
|
|
1582 |
{
|
|
1583 |
var col = tf_CreateElm( 'col', ['id', o.id+'_col_'+k]);
|
|
1584 |
o.tbl.firstChild.parentNode.insertBefore(col,o.tbl.firstChild);
|
|
1585 |
col.style.width = o.colWidth[k];
|
|
1586 |
o.gridColElms[k] = col;
|
|
1587 |
}
|
|
1588 |
o.tblHasColTag = true;
|
|
1589 |
}
|
|
1590 |
if(!o.tblHasColTag) createColTags(o);
|
|
1591 |
else{
|
|
1592 |
var cols = tf_Tag(o.tbl,'col');
|
|
1593 |
for(var i=0; i<o.nbCells; i++){
|
|
1594 |
cols[i].setAttribute('id', o.id+'_col_'+i);
|
|
1595 |
cols[i].style.width = o.colWidth[i];
|
|
1596 |
o.gridColElms.push(cols[i]);
|
|
1597 |
}
|
|
1598 |
}
|
|
1599 |
}
|
|
1600 |
|
|
1601 |
//IE <= 7 needs an additional row for widths as col element width is not enough...
|
|
1602 |
if(tf_isIE || tf_isIE7){
|
|
1603 |
var tbody = tf_Tag(o.tbl,'tbody'), r;
|
|
1604 |
if( tbody.length>0 ) r = tbody[0].insertRow(0);
|
|
1605 |
else r = o.tbl.insertRow(0);
|
|
1606 |
r.style.height = '0px';
|
|
1607 |
for(var i=0; i<o.nbCells; i++){
|
|
1608 |
var col = tf_CreateElm('td', ['id', o.id+'_col_'+i]);
|
|
1609 |
col.style.width = o.colWidth[i];
|
|
1610 |
o.tbl.rows[1].cells[i].style.width = '';
|
|
1611 |
r.appendChild(col);
|
|
1612 |
o.gridColElms.push(col);
|
|
1613 |
}
|
|
1614 |
this.hasGridWidthsRow = true;
|
|
1615 |
//Data table row with widths expressed
|
|
1616 |
o.leadColWidthsRow = o.tbl.rows[0];
|
|
1617 |
o.leadColWidthsRow.setAttribute('validRow','false');
|
|
1618 |
|
|
1619 |
var beforeSortFn = tf_isFn(f.on_before_sort) ? f.on_before_sort : null;
|
|
1620 |
f.on_before_sort = function(o,colIndex){
|
|
1621 |
o.leadColWidthsRow.setAttribute('validRow','false');
|
|
1622 |
if(beforeSortFn!=null) beforeSortFn.call(null,o,colIndex);
|
|
1623 |
}
|
|
1624 |
|
|
1625 |
var afterSortFn = tf_isFn(f.on_after_sort) ? f.on_after_sort : null;
|
|
1626 |
f.on_after_sort = function(o,colIndex){
|
|
1627 |
if(o.leadColWidthsRow.rowIndex != 0){
|
|
1628 |
var r = o.leadColWidthsRow;
|
|
1629 |
if( tbody.length>0 )
|
|
1630 |
tbody[0].moveRow(o.leadColWidthsRow.rowIndex, 0);
|
|
1631 |
else o.tbl.moveRow(o.leadColWidthsRow.rowIndex, 0);
|
|
1632 |
}
|
|
1633 |
if(afterSortFn!=null) afterSortFn.call(null,o,colIndex);
|
|
1634 |
}
|
|
1635 |
}
|
|
1636 |
|
|
1637 |
var afterColResizedFn = tf_isFn(f.on_after_col_resized) ? f.on_after_col_resized : null;
|
|
1638 |
f.on_after_col_resized = function(o,colIndex){
|
|
1639 |
if(colIndex==undefined) return;
|
|
1640 |
var w = o.crWColsRow.cells[colIndex].style.width;
|
|
1641 |
var col = o.gridColElms[colIndex];
|
|
1642 |
col.style.width = w;
|
|
1643 |
|
|
1644 |
var thCW = o.crWColsRow.cells[colIndex].clientWidth;
|
|
1645 |
var tdCW = o.crWRowDataTbl.cells[colIndex].clientWidth;
|
|
1646 |
|
|
1647 |
if(tf_isIE || tf_isIE7)
|
|
1648 |
o.tbl.style.width = o.headTbl.clientWidth+'px';
|
|
1649 |
|
|
1650 |
if(thCW != tdCW && !tf_isIE && !tf_isIE7)
|
|
1651 |
o.headTbl.style.width = o.tbl.clientWidth+'px';
|
|
1652 |
|
|
1653 |
if(afterColResizedFn!=null) afterColResizedFn.call(null,o,colIndex);
|
|
1654 |
}
|
|
1655 |
|
|
1656 |
if(this.tbl.clientWidth != this.headTbl.clientWidth)
|
|
1657 |
this.tbl.style.width = this.headTbl.clientWidth+'px';
|
|
1658 |
},
|
|
1659 |
|
|
1660 |
RemoveGridLayout: function()
|
|
1661 |
{
|
|
1662 |
if(!this.gridLayout) return;
|
|
1663 |
var t = this.tbl.parentNode.removeChild(this.tbl);
|
|
1664 |
this.tblMainCont.parentNode.insertBefore(t, this.tblMainCont);
|
|
1665 |
this.tblMainCont.parentNode.removeChild( this.tblMainCont );
|
|
1666 |
this.tblMainCont = null;
|
|
1667 |
this.headTblCont = null;
|
|
1668 |
this.headTbl = null;
|
|
1669 |
this.tblCont = null;
|
|
1670 |
//TO DO: alternative solution for Firefox
|
|
1671 |
this.tbl.outerHTML = this.sourceTblHtml;
|
|
1672 |
this.tbl = tf_Id(this.id);
|
|
1673 |
this.isFirstLoad = true;
|
|
1674 |
this.activeFlt = null;
|
|
1675 |
this.isStartBgAlternate = true;
|
|
1676 |
this.hasGrid = false;
|
|
1677 |
},
|
|
1678 |
|
|
1679 |
SetTopDiv: function()
|
|
1680 |
/*====================================================
|
|
1681 |
- Generates div above table where paging,
|
|
1682 |
reset button, rows counter label etc. are placed
|
|
1683 |
=====================================================*/
|
|
1684 |
{
|
|
1685 |
if( this.infDiv!=null ) return;
|
|
1686 |
|
|
1687 |
/*** container div ***/
|
|
1688 |
var infdiv = tf_CreateElm( 'div',['id',this.prfxInfDiv+this.id] );
|
|
1689 |
infdiv.className = this.infDivCssClass;// setAttribute method doesn't seem to work on ie<=6
|
|
1690 |
if(this.fixedHeaders && this.contDiv)
|
|
1691 |
this.contDiv.parentNode.insertBefore(infdiv, this.contDiv);
|
|
1692 |
else if(this.gridLayout){
|
|
1693 |
this.tblMainCont.appendChild(infdiv);
|
|
1694 |
infdiv.className = this.gridInfDivCssClass;
|
|
1695 |
}
|
|
1696 |
else
|
|
1697 |
this.tbl.parentNode.insertBefore(infdiv, this.tbl);
|
|
1698 |
this.infDiv = tf_Id( this.prfxInfDiv+this.id );
|
|
1699 |
|
|
1700 |
/*** left div containing rows # displayer ***/
|
|
1701 |
var ldiv = tf_CreateElm( 'div',['id',this.prfxLDiv+this.id] );
|
|
1702 |
ldiv.className = this.lDivCssClass;/*'ldiv'*/;
|
|
1703 |
infdiv.appendChild(ldiv);
|
|
1704 |
this.lDiv = tf_Id( this.prfxLDiv+this.id );
|
|
1705 |
|
|
1706 |
/*** right div containing reset button
|
|
1707 |
+ nb results per page select ***/
|
|
1708 |
var rdiv = tf_CreateElm( 'div',['id',this.prfxRDiv+this.id] );
|
|
1709 |
rdiv.className = this.rDivCssClass/*'rdiv'*/;
|
|
1710 |
infdiv.appendChild(rdiv);
|
|
1711 |
this.rDiv = tf_Id( this.prfxRDiv+this.id );
|
|
1712 |
|
|
1713 |
/*** mid div containing paging elements ***/
|
|
1714 |
var mdiv = tf_CreateElm( 'div',['id',this.prfxMDiv+this.id] );
|
|
1715 |
mdiv.className = this.mDivCssClass/*'mdiv'*/;
|
|
1716 |
infdiv.appendChild(mdiv);
|
|
1717 |
this.mDiv = tf_Id( this.prfxMDiv+this.id );
|
|
1718 |
},
|
|
1719 |
|
|
1720 |
RemoveTopDiv: function()
|
|
1721 |
/*====================================================
|
|
1722 |
- Removes div above table where paging,
|
|
1723 |
reset button, rows counter label etc. are placed
|
|
1724 |
=====================================================*/
|
|
1725 |
{
|
|
1726 |
if( this.infDiv==null ) return;
|
|
1727 |
this.infDiv.parentNode.removeChild( this.infDiv );
|
|
1728 |
this.infDiv = null;
|
|
1729 |
},
|
|
1730 |
|
|
1731 |
SetFixedHeaders: function()
|
|
1732 |
/*====================================================
|
|
1733 |
- CSS solution making headers fixed
|
|
1734 |
=====================================================*/
|
|
1735 |
{
|
|
1736 |
if((!this.hasGrid && !this.isFirstLoad) || !this.fixedHeaders) return;
|
|
1737 |
if(this.contDiv) return;
|
|
1738 |
var thead = tf_Tag(this.tbl,'thead');
|
|
1739 |
if( thead.length==0 ) return;
|
|
1740 |
var tbody = tf_Tag(this.tbl,'tbody');
|
|
1741 |
if( tbody[0].clientHeight!=0 )
|
|
1742 |
{//firefox returns tbody height
|
|
1743 |
//previous values
|
|
1744 |
this.prevTBodyH = tbody[0].clientHeight;
|
|
1745 |
this.prevTBodyOverflow = tbody[0].style.overflow;
|
|
1746 |
this.prevTBodyOverflowX = tbody[0].style.overflowX;
|
|
1747 |
|
|
1748 |
tbody[0].style.height = this.tBodyH+'px';
|
|
1749 |
tbody[0].style.overflow = 'auto';
|
|
1750 |
tbody[0].style.overflowX = 'hidden';
|
|
1751 |
} else { //IE returns 0
|
|
1752 |
// cont div is added to emulate fixed headers behaviour
|
|
1753 |
var contDiv = tf_CreateElm( 'div',['id',this.prfxContentDiv+this.id] );
|
|
1754 |
contDiv.className = this.contDivCssClass;
|
|
1755 |
this.tbl.parentNode.insertBefore(contDiv, this.tbl);
|
|
1756 |
contDiv.appendChild(this.tbl);
|
|
1757 |
this.contDiv = tf_Id(this.prfxContentDiv+this.id);
|
|
1758 |
//prevents headers moving during window scroll (IE)
|
|
1759 |
this.contDiv.style.position = 'relative';
|
|
1760 |
|
|
1761 |
var theadH = 0;
|
|
1762 |
var theadTr = tf_Tag(thead[0],'tr');
|
|
1763 |
for(var i=0; i<theadTr.length; i++)
|
|
1764 |
{//css below emulates fixed headers on IE<=6
|
|
1765 |
theadTr[i].style.cssText += 'position:relative; ' +
|
|
1766 |
'top:expression(offsetParent.scrollTop);';
|
|
1767 |
theadH += parseInt(theadTr[i].clientHeight);
|
|
1768 |
}
|
|
1769 |
|
|
1770 |
this.contDiv.style.height = (this.tBodyH+theadH)+'px';
|
|
1771 |
|
|
1772 |
var tfoot = tf_Tag(this.tbl,'tfoot');
|
|
1773 |
if( tfoot.length==0 ) return;
|
|
1774 |
|
|
1775 |
var tfootTr = tf_Tag(tfoot[0],'tr');
|
|
1776 |
|
|
1777 |
for(var j=0; j<tfootTr.length; j++)//css below emulates fixed footer on IE<=6
|
|
1778 |
tfootTr[j].style.cssText += 'position:relative; overflow-x: hidden; ' +
|
|
1779 |
'top: expression(parentNode.parentNode.offsetHeight >= ' +
|
|
1780 |
'offsetParent.offsetHeight ? 0 - parentNode.parentNode.offsetHeight + '+
|
|
1781 |
'offsetParent.offsetHeight + offsetParent.scrollTop : 0);';
|
|
1782 |
}
|
|
1783 |
},
|
|
1784 |
|
|
1785 |
RemoveFixedHeaders: function()
|
|
1786 |
/*====================================================
|
|
1787 |
- Removes fixed headers
|
|
1788 |
=====================================================*/
|
|
1789 |
{
|
|
1790 |
if(!this.hasGrid || !this.fixedHeaders ) return;
|
|
1791 |
if( this.contDiv )//IE additional div
|
|
1792 |
{
|
|
1793 |
this.contDiv.parentNode.insertBefore(this.tbl, this.contDiv);
|
|
1794 |
this.contDiv.parentNode.removeChild( this.contDiv );
|
|
1795 |
this.contDiv = null;
|
|
1796 |
var thead = tf_Tag(this.tbl,'thead');
|
|
1797 |
if( thead.length==0 ) return;
|
|
1798 |
var theadTr = tf_Tag(thead[0],'tr');
|
|
1799 |
if( theadTr.length==0 ) return;
|
|
1800 |
for(var i=0; i<theadTr.length; i++)
|
|
1801 |
theadTr[i].style.cssText = '';
|
|
1802 |
var tfoot = tf_Tag(this.tbl,'tfoot');
|
|
1803 |
if( tfoot.length==0 ) return;
|
|
1804 |
var tfootTr = tf_Tag(tfoot[0],'tr');
|
|
1805 |
for(var j=0; j<tfootTr.length; j++)
|
|
1806 |
{
|
|
1807 |
tfootTr[j].style.position = 'relative';
|
|
1808 |
tfootTr[j].style.top = '';
|
|
1809 |
tfootTr[j].style.overeflowX = '';
|
|
1810 |
}
|
|
1811 |
} else {
|
|
1812 |
var tbody = tf_Tag(this.tbl,'tbody');
|
|
1813 |
if( tbody.length==0 ) return;
|
|
1814 |
tbody[0].style.height = this.prevTBodyH+'px';
|
|
1815 |
tbody[0].style.overflow = this.prevTBodyOverflow;
|
|
1816 |
tbody[0].style.overflowX = this.prevTBodyOverflowX;
|
|
1817 |
}
|
|
1818 |
},
|
|
1819 |
|
|
1820 |
SetPaging: function()
|
|
1821 |
/*====================================================
|
|
1822 |
- Generates paging elements:
|
|
1823 |
- pages drop-down list
|
|
1824 |
- previous, next, first, last buttons
|
|
1825 |
=====================================================*/
|
|
1826 |
{
|
|
1827 |
if(!this.hasGrid && !this.isFirstLoad) return;
|
|
1828 |
if(!this.paging || (!this.isPagingRemoved && !this.isFirstLoad)) return;
|
|
1829 |
var start_row = this.refRow;
|
|
1830 |
var nrows = this.nbRows;
|
|
1831 |
this.nbPages = Math.ceil( (nrows-start_row)/this.pagingLength );//calculates page nb
|
|
1832 |
|
|
1833 |
// Paging drop-down list selector
|
|
1834 |
if(this.pageSelectorType == this.fltTypeSlc)
|
|
1835 |
{
|
|
1836 |
var slcPages = tf_CreateElm( this.fltTypeSlc, ['id',this.prfxSlcPages+this.id] );
|
|
1837 |
slcPages.className = this.pgSlcCssClass;
|
|
1838 |
slcPages.onchange = this.Evt._OnSlcPagesChange;
|
|
1839 |
}
|
|
1840 |
// Paging input selector
|
|
1841 |
if(this.pageSelectorType == this.fltTypeInp)
|
|
1842 |
{
|
|
1843 |
var slcPages = tf_CreateElm(
|
|
1844 |
this.fltTypeInp,
|
|
1845 |
['id',this.prfxSlcPages+this.id],
|
|
1846 |
['value',this.currentPageNb]
|
|
1847 |
);
|
|
1848 |
slcPages.className = this.pgInpCssClass;
|
|
1849 |
slcPages.onkeypress = this.Evt._Paging._detectKey;
|
|
1850 |
}
|
|
1851 |
|
|
1852 |
var btnNextSpan, btnPrevSpan, btnLastSpan, btnFirstSpan;// btns containers
|
|
1853 |
btnNextSpan = tf_CreateElm('span',['id',this.prfxBtnNextSpan+this.id]);
|
|
1854 |
btnPrevSpan = tf_CreateElm('span',['id',this.prfxBtnPrevSpan+this.id]);
|
|
1855 |
btnLastSpan = tf_CreateElm('span',['id',this.prfxBtnLastSpan+this.id]);
|
|
1856 |
btnFirstSpan = tf_CreateElm('span',['id',this.prfxBtnFirstSpan+this.id]);
|
|
1857 |
|
|
1858 |
if(this.hasPagingBtns)
|
|
1859 |
{
|
|
1860 |
if(this.btnNextPageHtml==null)
|
|
1861 |
{// Next button
|
|
1862 |
var btn_next = tf_CreateElm( this.fltTypeInp,['id',this.prfxBtnNext+this.id],
|
|
1863 |
['type','button'],['value',this.btnNextPageText],['title','Next'] );
|
|
1864 |
btn_next.className = this.btnPageCssClass;
|
|
1865 |
btn_next.onclick = this.Evt._Paging.next;
|
|
1866 |
btnNextSpan.appendChild(btn_next);
|
|
1867 |
} else {
|
|
1868 |
btnNextSpan.innerHTML = this.btnNextPageHtml;
|
|
1869 |
btnNextSpan.onclick = this.Evt._Paging.next;
|
|
1870 |
}
|
|
1871 |
|
|
1872 |
if(this.btnPrevPageHtml==null)
|
|
1873 |
{// Previous button
|
|
1874 |
var btn_prev = tf_CreateElm( this.fltTypeInp,['id',this.prfxBtnPrev+this.id],
|
|
1875 |
['type','button'],['value',this.btnPrevPageText],['title','Previous'] );
|
|
1876 |
btn_prev.className = this.btnPageCssClass;
|
|
1877 |
btn_prev.onclick = this.Evt._Paging.prev;
|
|
1878 |
btnPrevSpan.appendChild(btn_prev);
|
|
1879 |
} else {
|
|
1880 |
btnPrevSpan.innerHTML = this.btnPrevPageHtml;
|
|
1881 |
btnPrevSpan.onclick = this.Evt._Paging.prev;
|
|
1882 |
}
|
|
1883 |
|
|
1884 |
if(this.btnLastPageHtml==null)
|
|
1885 |
{// Last button
|
|
1886 |
var btn_last = tf_CreateElm( this.fltTypeInp,['id',this.prfxBtnLast+this.id],
|
|
1887 |
['type','button'],['value',this.btnLastPageText],['title','Last'] );
|
|
1888 |
btn_last.className = this.btnPageCssClass;
|
|
1889 |
btn_last.onclick = this.Evt._Paging.last;
|
|
1890 |
btnLastSpan.appendChild(btn_last);
|
|
1891 |
} else {
|
|
1892 |
btnLastSpan.innerHTML = this.btnLastPageHtml;
|
|
1893 |
btnLastSpan.onclick = this.Evt._Paging.last;
|
|
1894 |
}
|
|
1895 |
|
|
1896 |
if(this.btnFirstPageHtml==null)
|
|
1897 |
{// First button
|
|
1898 |
var btn_first = tf_CreateElm( this.fltTypeInp,['id',this.prfxBtnFirst+this.id],
|
|
1899 |
['type','button'],['value',this.btnFirstPageText],['title','First'] );
|
|
1900 |
btn_first.className = this.btnPageCssClass;
|
|
1901 |
btn_first.onclick = this.Evt._Paging.first;
|
|
1902 |
btnFirstSpan.appendChild(btn_first);
|
|
1903 |
} else {
|
|
1904 |
btnFirstSpan.innerHTML = this.btnFirstPageHtml;
|
|
1905 |
btnFirstSpan.onclick = this.Evt._Paging.first;
|
|
1906 |
}
|
|
1907 |
}//if this.hasPagingBtns
|
|
1908 |
|
|
1909 |
// paging elements (buttons+drop-down list) are added to defined element
|
|
1910 |
if(this.pagingTgtId==null) this.SetTopDiv();
|
|
1911 |
var targetEl = ( this.pagingTgtId==null ) ? this.mDiv : tf_Id( this.pagingTgtId );
|
|
1912 |
|
|
1913 |
/*** if paging previously removed this prevents IE memory leak with removeChild
|
|
1914 |
used in RemovePaging method. For more info refer to
|
|
1915 |
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2840253&SiteID=1 ***/
|
|
1916 |
if ( targetEl.innerHTML!='' ) targetEl.innerHTML = '';
|
|
1917 |
/*** ***/
|
|
1918 |
|
|
1919 |
targetEl.appendChild(btnPrevSpan);
|
|
1920 |
targetEl.appendChild(btnFirstSpan);
|
|
1921 |
|
|
1922 |
var pgBeforeSpan = tf_CreateElm( 'span',['id',this.prfxPgBeforeSpan+this.id] );
|
|
1923 |
pgBeforeSpan.appendChild( tf_CreateText(' Page ') );
|
|
1924 |
pgBeforeSpan.className = this.nbPgSpanCssClass;
|
|
1925 |
targetEl.appendChild(pgBeforeSpan);
|
|
1926 |
targetEl.appendChild(slcPages);
|
|
1927 |
var pgAfterSpan = tf_CreateElm( 'span',['id',this.prfxPgAfterSpan+this.id] );
|
|
1928 |
pgAfterSpan.appendChild( tf_CreateText(' of ') );
|
|
1929 |
pgAfterSpan.className = this.nbPgSpanCssClass;
|
|
1930 |
targetEl.appendChild(pgAfterSpan)
|
|
1931 |
var pgspan = tf_CreateElm( 'span',['id',this.prfxPgSpan+this.id] );
|
|
1932 |
pgspan.className = this.nbPgSpanCssClass;
|
|
1933 |
pgspan.appendChild( tf_CreateText(' '+this.nbPages+' ') );
|
|
1934 |
targetEl.appendChild(pgspan);
|
|
1935 |
targetEl.appendChild(btnLastSpan);
|
|
1936 |
targetEl.appendChild(btnNextSpan);
|
|
1937 |
|
|
1938 |
this.pagingSlc = tf_Id(this.prfxSlcPages+this.id); //to be easily re-used
|
|
1939 |
|
|
1940 |
// if this.rememberGridValues==true this.SetPagingInfo() is called
|
|
1941 |
// in ResetGridValues() method
|
|
1942 |
if( !this.rememberGridValues || this.isPagingRemoved )
|
|
1943 |
this.SetPagingInfo();
|
|
1944 |
if( !this.fltGrid )
|
|
1945 |
{
|
|
1946 |
this.ValidateAllRows();
|
|
1947 |
this.SetPagingInfo(this.validRowsIndex);
|
|
1948 |
}
|
|
1949 |
|
|
1950 |
this.pagingBtnEvents = this.Evt._Paging;
|
|
1951 |
this.isPagingRemoved = false;
|
|
1952 |
},
|
|
1953 |
|
|
1954 |
RemovePaging: function()
|
|
1955 |
/*====================================================
|
|
1956 |
- Removes paging elements
|
|
1957 |
=====================================================*/
|
|
1958 |
{
|
|
1959 |
if(!this.hasGrid) return;
|
|
1960 |
if( this.pagingSlc==null ) return;
|
|
1961 |
var btnNextSpan, btnPrevSpan, btnLastSpan, btnFirstSpan;// btns containers
|
|
1962 |
var pgBeforeSpan, pgAfterSpan, pgspan;
|
|
1963 |
btnNextSpan = tf_Id(this.prfxBtnNextSpan+this.id);
|
|
1964 |
btnPrevSpan = tf_Id(this.prfxBtnPrevSpan+this.id);
|
|
1965 |
btnLastSpan = tf_Id(this.prfxBtnLastSpan+this.id);
|
|
1966 |
btnFirstSpan = tf_Id(this.prfxBtnFirstSpan+this.id);
|
|
1967 |
pgBeforeSpan = tf_Id(this.prfxPgBeforeSpan+this.id);//span containing 'Page' text
|
|
1968 |
pgAfterSpan = tf_Id(this.prfxPgAfterSpan+this.id);//span containing 'of' text
|
|
1969 |
pgspan = tf_Id(this.prfxPgSpan+this.id);//span containing nb of pages
|
|
1970 |
|
|
1971 |
this.pagingSlc.parentNode.removeChild(this.pagingSlc);
|
|
1972 |
|
|
1973 |
if( btnNextSpan!=null )
|
|
1974 |
btnNextSpan.parentNode.removeChild( btnNextSpan );
|
|
1975 |
|
|
1976 |
if( btnPrevSpan!=null )
|
|
1977 |
btnPrevSpan.parentNode.removeChild( btnPrevSpan );
|
|
1978 |
|
|
1979 |
if( btnLastSpan!=null )
|
|
1980 |
btnLastSpan.parentNode.removeChild( btnLastSpan );
|
|
1981 |
|
|
1982 |
if( btnFirstSpan!=null )
|
|
1983 |
btnFirstSpan.parentNode.removeChild( btnFirstSpan );
|
|
1984 |
|
|
1985 |
if( pgBeforeSpan!=null )
|
|
1986 |
pgBeforeSpan.parentNode.removeChild( pgBeforeSpan );
|
|
1987 |
|
|
1988 |
if( pgAfterSpan!=null )
|
|
1989 |
pgAfterSpan.parentNode.removeChild( pgAfterSpan );
|
|
1990 |
|
|
1991 |
if( pgspan!=null )
|
|
1992 |
pgspan.parentNode.removeChild( pgspan );
|
|
1993 |
|
|
1994 |
this.pagingBtnEvents = null;
|
|
1995 |
this.pagingSlc = null;
|
|
1996 |
this.isPagingRemoved = true;
|
|
1997 |
},
|
|
1998 |
|
|
1999 |
SetRowsCounter: function()
|
|
2000 |
/*====================================================
|
|
2001 |
- Generates rows counter label
|
|
2002 |
=====================================================*/
|
|
2003 |
{
|
|
2004 |
if(!this.hasGrid && !this.isFirstLoad) return;
|
|
2005 |
if( this.rowsCounterSpan!=null ) return;
|
|
2006 |
var countDiv = tf_CreateElm( 'div',['id',this.prfxCounter+this.id] ); //rows counter container
|
|
2007 |
countDiv.className = this.totRowsCssClass;
|
|
2008 |
var countSpan = tf_CreateElm( 'span',['id',this.prfxTotRows+this.id] ); //rows counter label
|
|
2009 |
var countText = tf_CreateElm( 'span',['id',this.prfxTotRowsTxt+this.id] );
|
|
2010 |
countText.appendChild( tf_CreateText(this.rowsCounterText) );
|
|
2011 |
|
|
2012 |
// counter is added to defined element
|
|
2013 |
if(this.rowsCounterTgtId==null) this.SetTopDiv();
|
|
2014 |
var targetEl = ( this.rowsCounterTgtId==null ) ? this.lDiv : tf_Id( this.rowsCounterTgtId );
|
|
2015 |
|
|
2016 |
//IE only: clears all for sure
|
|
2017 |
if(this.rowsCounterDiv && tf_isIE)
|
|
2018 |
this.rowsCounterDiv.outerHTML = '';
|
|
2019 |
|
|
2020 |
if( this.rowsCounterTgtId==null )
|
|
2021 |
{//default container: 'lDiv'
|
|
2022 |
countDiv.appendChild(countText);
|
|
2023 |
countDiv.appendChild(countSpan);
|
|
2024 |
targetEl.appendChild(countDiv);
|
|
2025 |
}
|
|
2026 |
else
|
|
2027 |
{// custom container, no need to append statusDiv
|
|
2028 |
targetEl.appendChild(countText);
|
|
2029 |
targetEl.appendChild(countSpan);
|
|
2030 |
}
|
|
2031 |
this.rowsCounterDiv = tf_Id( this.prfxCounter+this.id );
|
|
2032 |
this.rowsCounterSpan = tf_Id( this.prfxTotRows+this.id );
|
|
2033 |
|
|
2034 |
this.RefreshNbRows();
|
|
2035 |
},
|
|
2036 |
|
|
2037 |
RemoveRowsCounter: function()
|
|
2038 |
/*====================================================
|
|
2039 |
- Removes rows counter label
|
|
2040 |
=====================================================*/
|
|
2041 |
{
|
|
2042 |
if(!this.hasGrid) return;
|
|
2043 |
if( this.rowsCounterSpan==null ) return;
|
|
2044 |
|
|
2045 |
if(this.rowsCounterTgtId==null && this.rowsCounterDiv)
|
|
2046 |
{
|
|
2047 |
//IE only: clears all for sure
|
|
2048 |
if(tf_isIE) this.rowsCounterDiv.outerHTML = '';
|
|
2049 |
else
|
|
2050 |
this.rowsCounterDiv.parentNode.removeChild(
|
|
2051 |
this.rowsCounterDiv
|
|
2052 |
);
|
|
2053 |
} else {
|
|
2054 |
tf_Id( this.rowsCounterTgtId ).innerHTML = '';
|
|
2055 |
}
|
|
2056 |
this.rowsCounterSpan = null;
|
|
2057 |
this.rowsCounterDiv = null;
|
|
2058 |
},
|
|
2059 |
|
|
2060 |
SetStatusBar: function()
|
|
2061 |
/*====================================================
|
|
2062 |
- Generates status bar label
|
|
2063 |
=====================================================*/
|
|
2064 |
{
|
|
2065 |
if(!this.hasGrid && !this.isFirstLoad) return;
|
|
2066 |
var statusDiv = tf_CreateElm( 'div',['id',this.prfxStatus+this.id] ); //status bar container
|
|
2067 |
statusDiv.className = this.statusBarCssClass;
|
|
2068 |
var statusSpan = tf_CreateElm( 'span',['id',this.prfxStatusSpan+this.id] ); //status bar label
|
|
2069 |
var statusSpanText = tf_CreateElm( 'span',['id',this.prfxStatusTxt+this.id] );//preceding text
|
|
2070 |
statusSpanText.appendChild( tf_CreateText(this.statusBarText) );
|
|
2071 |
|
|
2072 |
// target element container
|
|
2073 |
if(this.statusBarTgtId==null) this.SetTopDiv();
|
|
2074 |
var targetEl = ( this.statusBarTgtId==null ) ? this.lDiv : tf_Id( this.statusBarTgtId );
|
|
2075 |
|
|
2076 |
if(this.statusBarDiv && tf_isIE)
|
|
2077 |
this.statusBarDiv.outerHTML = '';
|
|
2078 |
|
|
2079 |
if( this.statusBarTgtId==null )
|
|
2080 |
{//default container: 'lDiv'
|
|
2081 |
statusDiv.appendChild(statusSpanText);
|
|
2082 |
statusDiv.appendChild(statusSpan);
|
|
2083 |
targetEl.appendChild(statusDiv);
|
|
2084 |
}
|
|
2085 |
else
|
|
2086 |
{// custom container, no need to append statusDiv
|
|
2087 |
targetEl.appendChild(statusSpanText);
|
|
2088 |
targetEl.appendChild(statusSpan);
|
|
2089 |
}
|
|
2090 |
|
|
2091 |
this.statusBarDiv = tf_Id( this.prfxStatus+this.id );
|
|
2092 |
this.statusBarSpan = tf_Id( this.prfxStatusSpan+this.id );
|
|
2093 |
this.statusBarSpanText = tf_Id( this.prfxStatusTxt+this.id );
|
|
2094 |
},
|
|
2095 |
|
|
2096 |
RemoveStatusBar: function()
|
|
2097 |
/*====================================================
|
|
2098 |
- Removes status bar div
|
|
2099 |
=====================================================*/
|
|
2100 |
{
|
|
2101 |
if(!this.hasGrid) return;
|
|
2102 |
if(this.statusBarDiv)
|
|
2103 |
{
|
|
2104 |
this.statusBarDiv.innerHTML = '';
|
|
2105 |
this.statusBarDiv.parentNode.removeChild(
|
|
2106 |
this.statusBarDiv
|
|
2107 |
);
|
|
2108 |
this.statusBarSpan = null;
|
|
2109 |
this.statusBarSpanText = null;
|
|
2110 |
this.statusBarDiv = null;
|
|
2111 |
}
|
|
2112 |
},
|
|
2113 |
|
|
2114 |
SetResultsPerPage: function()
|
|
2115 |
/*====================================================
|
|
2116 |
- Generates results per page select + label
|
|
2117 |
=====================================================*/
|
|
2118 |
{
|
|
2119 |
if(!this.hasGrid && !this.isFirstLoad) return;
|
|
2120 |
if( this.resultsPerPageSlc!=null || this.resultsPerPage==null ) return;
|
|
2121 |
var slcR = tf_CreateElm( this.fltTypeSlc,['id',this.prfxSlcResults+this.id] );
|
|
2122 |
slcR.className = this.resultsSlcCssClass;
|
|
2123 |
var slcRText = this.resultsPerPage[0], slcROpts = this.resultsPerPage[1];
|
|
2124 |
var slcRSpan = tf_CreateElm( 'span',['id',this.prfxSlcResultsTxt+this.id] );
|
|
2125 |
slcRSpan.className = this.resultsSpanCssClass;
|
|
2126 |
|
|
2127 |
// results per page select is added to defined element
|
|
2128 |
if(this.resultsPerPageTgtId==null) this.SetTopDiv();
|
|
2129 |
var targetEl = ( this.resultsPerPageTgtId==null ) ? this.rDiv : tf_Id( this.resultsPerPageTgtId );
|
|
2130 |
slcRSpan.appendChild(tf_CreateText(slcRText));
|
|
2131 |
targetEl.appendChild(slcRSpan);
|
|
2132 |
targetEl.appendChild(slcR);
|
|
2133 |
|
|
2134 |
this.resultsPerPageSlc = tf_Id(this.prfxSlcResults+this.id);
|
|
2135 |
|
|
2136 |
for(var r=0; r<slcROpts.length; r++)
|
|
2137 |
{
|
|
2138 |
var currOpt = new Option(slcROpts[r],slcROpts[r],false,false);
|
|
2139 |
this.resultsPerPageSlc.options[r] = currOpt;
|
|
2140 |
}
|
|
2141 |
slcR.onchange = this.Evt._OnSlcResultsChange;
|
|
2142 |
},
|
|
2143 |
|
|
2144 |
RemoveResultsPerPage: function()
|
|
2145 |
/*====================================================
|
|
2146 |
- Removes results per page select + label
|
|
2147 |
=====================================================*/
|
|
2148 |
{
|
|
2149 |
if(!this.hasGrid) return;
|
|
2150 |
if( this.resultsPerPageSlc==null || this.resultsPerPage==null ) return;
|
|
2151 |
var slcR, slcRSpan;
|
|
2152 |
slcR = this.resultsPerPageSlc;
|
|
2153 |
slcRSpan = tf_Id( this.prfxSlcResultsTxt+this.id );
|
|
2154 |
if( slcR!=null )
|
|
2155 |
slcR.parentNode.removeChild( slcR );
|
|
2156 |
if( slcRSpan!=null )
|
|
2157 |
slcRSpan.parentNode.removeChild( slcRSpan );
|
|
2158 |
this.resultsPerPageSlc = null;
|
|
2159 |
},
|
|
2160 |
|
|
2161 |
SetResetBtn: function()
|
|
2162 |
/*====================================================
|
|
2163 |
- Generates reset button
|
|
2164 |
=====================================================*/
|
|
2165 |
{
|
|
2166 |
if(!this.hasGrid && !this.isFirstLoad) return;
|
|
2167 |
if( this.btnResetEl!=null ) return;
|
|
2168 |
var resetspan = tf_CreateElm('span',['id',this.prfxResetSpan+this.id]);
|
|
2169 |
|
|
2170 |
// reset button is added to defined element
|
|
2171 |
if(this.btnResetTgtId==null) this.SetTopDiv();
|
|
2172 |
var targetEl = ( this.btnResetTgtId==null ) ? this.rDiv : tf_Id( this.btnResetTgtId );
|
|
2173 |
targetEl.appendChild(resetspan);
|
|
2174 |
|
|
2175 |
if(this.btnResetHtml==null)
|
|
2176 |
{
|
|
2177 |
var fltreset = tf_CreateElm( 'a', ['href','javascript:void(0);'] );
|
|
2178 |
fltreset.className = this.btnResetCssClass;
|
|
2179 |
fltreset.appendChild(tf_CreateText(this.btnResetText));
|
|
2180 |
resetspan.appendChild(fltreset);
|
|
2181 |
fltreset.onclick = this.Evt._Clear;
|
|
2182 |
} else {
|
|
2183 |
resetspan.innerHTML = this.btnResetHtml;
|
|
2184 |
var resetEl = resetspan.firstChild;
|
|
2185 |
resetEl.onclick = this.Evt._Clear;
|
|
2186 |
}
|
|
2187 |
this.btnResetEl = tf_Id(this.prfxResetSpan+this.id).firstChild;
|
|
2188 |
},
|
|
2189 |
|
|
2190 |
RemoveResetBtn: function()
|
|
2191 |
/*====================================================
|
|
2192 |
- Removes reset button
|
|
2193 |
=====================================================*/
|
|
2194 |
{
|
|
2195 |
if(!this.hasGrid) return;
|
|
2196 |
if( this.btnResetEl==null ) return;
|
|
2197 |
var resetspan = tf_Id(this.prfxResetSpan+this.id);
|
|
2198 |
if( resetspan!=null )
|
|
2199 |
resetspan.parentNode.removeChild( resetspan );
|
|
2200 |
this.btnResetEl = null;
|
|
2201 |
},
|
|
2202 |
|
|
2203 |
RemoveExternalFlts: function()
|
|
2204 |
/*====================================================
|
|
2205 |
- removes external filters
|
|
2206 |
=====================================================*/
|
|
2207 |
{
|
|
2208 |
if( !this.isExternalFlt && !this.externalFltTgtIds ) return;
|
|
2209 |
for(var ct=0; ct<this.externalFltTgtIds.length; ct++ )
|
|
2210 |
if( tf_Id(this.externalFltTgtIds[ct]) )
|
|
2211 |
tf_Id(this.externalFltTgtIds[ct]).innerHTML = '';
|
|
2212 |
},
|
|
2213 |
|
|
2214 |
SetSort: function()
|
|
2215 |
/*====================================================
|
|
2216 |
- Sets sorting feature by loading
|
|
2217 |
WebFX Sortable Table 1.12 by Erik Arvidsson
|
|
2218 |
and TF adapter by Max Guglielmi
|
|
2219 |
=====================================================*/
|
|
2220 |
{
|
|
2221 |
if(tf_isImported(this.sortConfig.src))
|
|
2222 |
this.Evt._EnableSort();
|
|
2223 |
else
|
|
2224 |
this.IncludeFile(
|
|
2225 |
this.sortConfig.name,
|
|
2226 |
this.sortConfig.src,
|
|
2227 |
this.Evt._EnableSort
|
|
2228 |
);
|
|
2229 |
},
|
|
2230 |
|
|
2231 |
RemoveSort: function()
|
|
2232 |
/*====================================================
|
|
2233 |
- removes sorting feature
|
|
2234 |
=====================================================*/
|
|
2235 |
{
|
|
2236 |
if(!this.sort) return;
|
|
2237 |
this.sort = false;
|
|
2238 |
},
|
|
2239 |
|
|
2240 |
PopulateSelect: function(colIndex,isExternal,extSlcId)
|
|
2241 |
{
|
|
2242 |
this.EvtManager(
|
|
2243 |
this.Evt.name.populateselect,
|
|
2244 |
{ slcIndex:colIndex, slcExternal:isExternal, slcId:extSlcId }
|
|
2245 |
);
|
|
2246 |
},
|
|
2247 |
_PopulateSelect: function(colIndex,isRefreshed,isExternal,extSlcId)
|
|
2248 |
/*====================================================
|
|
2249 |
- populates drop-down filters
|
|
2250 |
=====================================================*/
|
|
2251 |
{
|
|
2252 |
isExternal = (isExternal==undefined) ? false : isExternal;
|
|
2253 |
var slcId = this.fltIds[colIndex];
|
|
2254 |
if( tf_Id(slcId)==null && !isExternal ) return;
|
|
2255 |
if( tf_Id(extSlcId)==null && isExternal ) return;
|
|
2256 |
var slc = (!isExternal) ? tf_Id(slcId) : tf_Id(extSlcId);
|
|
2257 |
var o = this, row = this.tbl.rows;
|
|
2258 |
var fillMethod = this.slcFillingMethod.tf_LCase();
|
|
2259 |
var optArray = [], slcInnerHtml = '', opt0;
|
|
2260 |
var isCustomSlc = (this.hasCustomSlcOptions //custom select test
|
|
2261 |
&& this.customSlcOptions.cols.tf_Has(colIndex));
|
|
2262 |
var optTxt = []; //custom selects text
|
|
2263 |
var activeFlt;
|
|
2264 |
if(isRefreshed && this.activeFilterId){
|
|
2265 |
activeFlt = this.activeFilterId.split('_')[0];
|
|
2266 |
activeFlt = activeFlt.split(this.prfxFlt)[1];
|
|
2267 |
}
|
|
2268 |
|
|
2269 |
/*** remember grid values ***/
|
|
2270 |
var flts_values = [], fltArr = [];
|
|
2271 |
if(this.rememberGridValues)
|
|
2272 |
{
|
|
2273 |
flts_values = tf_CookieValueArray(this.fltsValuesCookie);
|
|
2274 |
fltArr = (flts_values[colIndex]!=undefined)
|
|
2275 |
? flts_values[colIndex].split(' '+this.orOperator+' ')
|
|
2276 |
: flts_values[colIndex] = [];
|
|
2277 |
}
|
|
2278 |
|
|
2279 |
for(var k=this.refRow; k<this.nbRows; k++)
|
|
2280 |
{
|
|
2281 |
// always visible rows don't need to appear on selects as always valid
|
|
2282 |
if( this.hasVisibleRows && this.visibleRows.tf_Has(k) && !this.paging )
|
|
2283 |
continue;
|
|
2284 |
|
|
2285 |
var cell = tf_Tag(row[k],'td');
|
|
2286 |
var nchilds = cell.length;
|
|
2287 |
|
|
2288 |
if(nchilds == this.nbCells && !isCustomSlc)
|
|
2289 |
{// checks if row has exact cell #
|
|
2290 |
for(var j=0; j<nchilds; j++)// this loop retrieves cell data
|
|
2291 |
{
|
|
2292 |
if((colIndex==j && !isRefreshed) ||
|
|
2293 |
(colIndex==j && isRefreshed && ((row[k].style.display == '' && !this.paging) ||
|
|
2294 |
( this.paging && (!this.validRowsIndex || (this.validRowsIndex && this.validRowsIndex.tf_Has(k)))
|
|
2295 |
&& ((activeFlt==undefined || activeFlt==colIndex) || (activeFlt!=colIndex && this.validRowsIndex.tf_Has(k) ))) )))
|
|
2296 |
{
|
|
2297 |
var cell_data = this.GetCellData(j, cell[j]);
|
|
2298 |
var cell_string = cell_data.tf_MatchCase(this.matchCase);//Váry Péter's patch
|
|
2299 |
// checks if celldata is already in array
|
|
2300 |
var isMatched = false;
|
|
2301 |
isMatched = optArray.tf_Has(cell_string,this.matchCase);
|
|
2302 |
|
|
2303 |
if(!isMatched)
|
|
2304 |
optArray.push(cell_data);
|
|
2305 |
}//if colIndex==j
|
|
2306 |
}//for j
|
|
2307 |
}//if
|
|
2308 |
}//for k
|
|
2309 |
|
|
2310 |
//Retrieves custom values
|
|
2311 |
if(isCustomSlc)
|
|
2312 |
{
|
|
2313 |
var customValues = this.__getCustomValues(colIndex);
|
|
2314 |
optArray = customValues[0];
|
|
2315 |
optTxt = customValues[1];
|
|
2316 |
}
|
|
2317 |
|
|
2318 |
if(this.sortSlc && !isCustomSlc)
|
|
2319 |
optArray.sort(this.matchCase ? null : tf_IgnoreCaseSort);
|
|
2320 |
|
|
2321 |
if(this.sortNumAsc && this.sortNumAsc.tf_Has(colIndex))
|
|
2322 |
{//asc sort
|
|
2323 |
try{
|
|
2324 |
optArray.sort( tf_NumSortAsc );
|
|
2325 |
if(isCustomSlc) optTxt.sort( tf_NumSortAsc );
|
|
2326 |
} catch(e) {
|
|
2327 |
optArray.sort();
|
|
2328 |
if(isCustomSlc) optTxt.sort();
|
|
2329 |
}//in case there are alphanumeric values
|
|
2330 |
}
|
|
2331 |
if(this.sortNumDesc && this.sortNumDesc.tf_Has(colIndex))
|
|
2332 |
{//desc sort
|
|
2333 |
try{
|
|
2334 |
optArray.sort( tf_NumSortDesc );
|
|
2335 |
if(isCustomSlc) optTxt.sort( tf_NumSortDesc );
|
|
2336 |
} catch(e) {
|
|
2337 |
optArray.sort();
|
|
2338 |
if(isCustomSlc) optTxt.sort();
|
|
2339 |
}//in case there are alphanumeric values
|
|
2340 |
}
|
|
2341 |
|
|
2342 |
AddOpts();//populates drop-down
|
|
2343 |
|
|
2344 |
function AddOpt0()
|
|
2345 |
{// adds 1st option
|
|
2346 |
if( fillMethod == 'innerhtml' )
|
|
2347 |
slcInnerHtml += '<option value="">'+o.displayAllText+'</option>';
|
|
2348 |
else {
|
|
2349 |
var opt0 = tf_CreateOpt(o.displayAllText,'');
|
|
2350 |
slc.appendChild(opt0);
|
|
2351 |
}
|
|
2352 |
}
|
|
2353 |
|
|
2354 |
function AddOpts()
|
|
2355 |
{// populates select
|
|
2356 |
var slcValue = slc.value;
|
|
2357 |
slc.innerHTML = '';
|
|
2358 |
AddOpt0();
|
|
2359 |
|
|
2360 |
for(var y=0; y<optArray.length; y++)
|
|
2361 |
{
|
|
2362 |
if( fillMethod == 'innerhtml' )
|
|
2363 |
{
|
|
2364 |
var slcAttr = '';
|
|
2365 |
var slcCustomTxt = (isCustomSlc) ? optTxt[y] : optArray[y];
|
|
2366 |
if( o.fillSlcOnDemand && slcValue==optArray[y] )
|
|
2367 |
slcAttr = 'selected="selected"';
|
|
2368 |
slcInnerHtml += '<option value="'+optArray[y]+'" '
|
|
2369 |
+slcAttr+'>'+slcCustomTxt+'</option>';
|
|
2370 |
} else {
|
|
2371 |
var opt;
|
|
2372 |
//fill select on demand
|
|
2373 |
if(o.fillSlcOnDemand && slcValue==optArray[y] && o['col'+colIndex]==o.fltTypeSlc)
|
|
2374 |
opt = tf_CreateOpt( (isCustomSlc) ? optTxt[y] : optArray[y],
|
|
2375 |
optArray[y],
|
|
2376 |
true );
|
|
2377 |
else{
|
|
2378 |
if( o['col'+colIndex]!=o.fltTypeMulti )
|
|
2379 |
opt = tf_CreateOpt( (isCustomSlc) ? optTxt[y] : optArray[y],
|
|
2380 |
optArray[y],
|
|
2381 |
(flts_values[colIndex]!=' ' && optArray[y]==flts_values[colIndex])
|
|
2382 |
? true : false );
|
|
2383 |
else
|
|
2384 |
{
|
|
2385 |
opt = tf_CreateOpt( (isCustomSlc) ? optTxt[y] : optArray[y],
|
|
2386 |
optArray[y],
|
|
2387 |
(fltArr.tf_Has(optArray[y].tf_MatchCase(o.matchCase),o.matchCase))
|
|
2388 |
? true : false );
|
|
2389 |
}
|
|
2390 |
}
|
|
2391 |
slc.appendChild(opt);
|
|
2392 |
}
|
|
2393 |
}// for y
|
|
2394 |
|
|
2395 |
if( fillMethod == 'innerhtml' )
|
|
2396 |
slc.innerHTML += slcInnerHtml;
|
|
2397 |
|
|
2398 |
slc.setAttribute('filled','1');
|
|
2399 |
}// fn AddOpt
|
|
2400 |
},
|
|
2401 |
|
|
2402 |
PopulateCheckList: function(colIndex, isExternal, extFltId)
|
|
2403 |
{
|
|
2404 |
this.EvtManager(
|
|
2405 |
this.Evt.name.populatechecklist,
|
|
2406 |
{ slcIndex:colIndex, slcExternal:isExternal, slcId:extFltId }
|
|
2407 |
);
|
|
2408 |
},
|
|
2409 |
_PopulateCheckList: function(colIndex, isExternal, extFltId)
|
|
2410 |
/*====================================================
|
|
2411 |
- populates checklist filters
|
|
2412 |
=====================================================*/
|
|
2413 |
{
|
|
2414 |
isExternal = (isExternal==undefined) ? false : isExternal;
|
|
2415 |
var divFltId = this.prfxCheckListDiv+colIndex+'_'+this.id;
|
|
2416 |
if( tf_Id(divFltId)==null && !isExternal ) return;
|
|
2417 |
if( tf_Id(extFltId)==null && isExternal ) return;
|
|
2418 |
var flt = (!isExternal) ? this.checkListDiv[colIndex] : tf_Id(extFltId);
|
|
2419 |
var ul = tf_CreateElm('ul',['id',this.fltIds[colIndex]],['colIndex',colIndex]);
|
|
2420 |
ul.className = this.checkListCssClass;
|
|
2421 |
ul.onchange = this.Evt._OnSlcChange;
|
|
2422 |
var o = this, row = this.tbl.rows;
|
|
2423 |
var optArray = [];
|
|
2424 |
var isCustomSlc = (this.hasCustomSlcOptions //custom select test
|
|
2425 |
&& this.customSlcOptions.cols.tf_Has(colIndex));
|
|
2426 |
var optTxt = []; //custom selects text
|
|
2427 |
var activeFlt;
|
|
2428 |
if(this.refreshFilters && this.activeFilterId){
|
|
2429 |
activeFlt = this.activeFilterId.split('_')[0];
|
|
2430 |
activeFlt = activeFlt.split(this.prfxFlt)[1];
|
|
2431 |
}
|
|
2432 |
|
|
2433 |
for(var k=this.refRow; k<this.nbRows; k++)
|
|
2434 |
{
|
|
2435 |
// always visible rows don't need to appear on selects as always valid
|
|
2436 |
if( this.hasVisibleRows && this.visibleRows.tf_Has(k) && !this.paging )
|
|
2437 |
continue;
|
|
2438 |
|
|
2439 |
var cells = tf_Tag(row[k],'td');
|
|
2440 |
var ncells = cells.length;
|
|
2441 |
|
|
2442 |
if(ncells == this.nbCells && !isCustomSlc)
|
|
2443 |
{// checks if row has exact cell #
|
|
2444 |
for(var j=0; j<ncells; j++)
|
|
2445 |
{// this loop retrieves cell data
|
|
2446 |
if((colIndex==j && !this.refreshFilters) ||
|
|
2447 |
(colIndex==j && this.refreshFilters && ((row[k].style.display == '' && !this.paging) ||
|
|
2448 |
( this.paging && ((activeFlt==undefined || activeFlt==colIndex ) ||(activeFlt!=colIndex && this.validRowsIndex.tf_Has(k))) ))))
|
|
2449 |
{
|
|
2450 |
var cell_data = this.GetCellData(j, cells[j]);
|
|
2451 |
var cell_string = cell_data.tf_MatchCase(this.matchCase);//Váry Péter's patch
|
|
2452 |
// checks if celldata is already in array
|
|
2453 |
var isMatched = false;
|
|
2454 |
isMatched = optArray.tf_Has(cell_string,this.matchCase);
|
|
2455 |
|
|
2456 |
if(!isMatched)
|
|
2457 |
optArray.push(cell_data);
|
|
2458 |
}
|
|
2459 |
}
|
|
2460 |
}
|
|
2461 |
}
|
|
2462 |
|
|
2463 |
//Retrieves custom values
|
|
2464 |
if(isCustomSlc)
|
|
2465 |
{
|
|
2466 |
var customValues = this.__getCustomValues(colIndex);
|
|
2467 |
optArray = customValues[0];
|
|
2468 |
optTxt = customValues[1];
|
|
2469 |
}
|
|
2470 |
|
|
2471 |
if(this.sortSlc && !isCustomSlc)
|
|
2472 |
optArray.sort(this.matchCase ? null : tf_IgnoreCaseSort);
|
|
2473 |
|
|
2474 |
if(this.sortNumAsc && this.sortNumAsc.tf_Has(colIndex))
|
|
2475 |
{//asc sort
|
|
2476 |
try{
|
|
2477 |
optArray.sort( tf_NumSortAsc );
|
|
2478 |
if(isCustomSlc) optTxt.sort( tf_NumSortAsc );
|
|
2479 |
} catch(e) {
|
|
2480 |
optArray.sort();
|
|
2481 |
if(isCustomSlc) optTxt.sort();
|
|
2482 |
}//in case there are alphanumeric values
|
|
2483 |
}
|
|
2484 |
if(this.sortNumDesc && this.sortNumDesc.tf_Has(colIndex))
|
|
2485 |
{//desc sort
|
|
2486 |
try{
|
|
2487 |
optArray.sort( tf_NumSortDesc );
|
|
2488 |
if(isCustomSlc) optTxt.sort( tf_NumSortDesc );
|
|
2489 |
} catch(e) {
|
|
2490 |
optArray.sort();
|
|
2491 |
if(isCustomSlc) optTxt.sort();
|
|
2492 |
}//in case there are alphanumeric values
|
|
2493 |
}
|
|
2494 |
|
|
2495 |
AddChecks();
|
|
2496 |
|
|
2497 |
function AddCheck0()
|
|
2498 |
{// adds 1st option
|
|
2499 |
var li0 = tf_CreateCheckItem(o.fltIds[colIndex]+'_0', '', o.displayAllText);
|
|
2500 |
li0.className = o.checkListItemCssClass;
|
|
2501 |
ul.appendChild(li0);
|
|
2502 |
li0.check.onclick = function(){
|
|
2503 |
o.__setCheckListValues(this);
|
|
2504 |
|
|
2505 |
if(o.refreshFilters){
|
|
2506 |
//o.activeFilterId = '';
|
|
2507 |
//o.RefreshFiltersGrid();
|
|
2508 |
}
|
|
2509 |
else
|
|
2510 |
ul.onchange.call(null);
|
|
2511 |
};
|
|
2512 |
|
|
2513 |
if(tf_isIE)
|
|
2514 |
{//IE: label looses check capability
|
|
2515 |
li0.label.onclick = function(){ li0.check.click(); };
|
|
2516 |
}
|
|
2517 |
}
|
|
2518 |
|
|
2519 |
function AddChecks()
|
|
2520 |
{
|
|
2521 |
AddCheck0();
|
|
2522 |
|
|
2523 |
var flts_values = [], fltArr = []; //remember grid values
|
|
2524 |
if(tf_CookieValueByIndex(o.fltsValuesCookie, colIndex)!=undefined)
|
|
2525 |
fltArr = tf_CookieValueByIndex(o.fltsValuesCookie, colIndex).split(' '+o.orOperator+' ');
|
|
2526 |
|
|
2527 |
for(var y=0; y<optArray.length; y++)
|
|
2528 |
{
|
|
2529 |
var li = tf_CreateCheckItem(
|
|
2530 |
o.fltIds[colIndex]+'_'+(y+1),
|
|
2531 |
optArray[y],
|
|
2532 |
(isCustomSlc) ? optTxt[y] : optArray[y]
|
|
2533 |
);
|
|
2534 |
li.className = o.checkListItemCssClass;
|
|
2535 |
ul.appendChild(li);
|
|
2536 |
li.check.onclick = function(){ o.__setCheckListValues(this); ul.onchange.call(null); };
|
|
2537 |
|
|
2538 |
/*** remember grid values ***/
|
|
2539 |
if(o.rememberGridValues)
|
|
2540 |
{
|
|
2541 |
if(fltArr.tf_Has(optArray[y].tf_MatchCase(o.matchCase),o.matchCase))
|
|
2542 |
{
|
|
2543 |
li.check.checked = true;
|
|
2544 |
o.__setCheckListValues(li.check);
|
|
2545 |
}
|
|
2546 |
}
|
|
2547 |
|
|
2548 |
if(tf_isIE)
|
|
2549 |
{//IE: label looses check capability
|
|
2550 |
li.label.onclick = function(){ this.firstChild.click(); };
|
|
2551 |
}
|
|
2552 |
}
|
|
2553 |
}
|
|
2554 |
|
|
2555 |
if(this.fillSlcOnDemand)
|
|
2556 |
flt.innerHTML = '';
|
|
2557 |
flt.appendChild(ul);
|
|
2558 |
flt.setAttribute('filled','1');
|
|
2559 |
|
|
2560 |
/*** remember grid values IE only, items remain un-checked ***/
|
|
2561 |
if(o.rememberGridValues && tf_isIE)
|
|
2562 |
{
|
|
2563 |
var slcIndexes = ul.getAttribute('indexes');
|
|
2564 |
if(slcIndexes != null)
|
|
2565 |
{
|
|
2566 |
var indSplit = slcIndexes.split(',');//items indexes
|
|
2567 |
for(var n=0; n<indSplit.length; n++)
|
|
2568 |
{
|
|
2569 |
var cChk = tf_Id(this.fltIds[colIndex]+'_'+indSplit[n]); //checked item
|
|
2570 |
if(cChk) cChk.checked = true;
|
|
2571 |
}
|
|
2572 |
}
|
|
2573 |
}
|
|
2574 |
},
|
|
2575 |
|
|
2576 |
Filter: function()
|
|
2577 |
{
|
|
2578 |
this.EvtManager(this.Evt.name.filter);
|
|
2579 |
},
|
|
2580 |
_Filter: function()
|
|
2581 |
/*====================================================
|
|
2582 |
- Filtering fn
|
|
2583 |
- retrieves data from each td in every single tr
|
|
2584 |
and compares to search string for current
|
|
2585 |
column
|
|
2586 |
- tr is hidden if all search strings are not
|
|
2587 |
found
|
|
2588 |
=====================================================*/
|
|
2589 |
{
|
|
2590 |
if( !this.fltGrid || (!this.hasGrid && !this.isFirstLoad) ) return;
|
|
2591 |
//invokes eventual onbefore method
|
|
2592 |
if(this.onBeforeFilter) this.onBeforeFilter.call(null,this);
|
|
2593 |
var row = this.tbl.rows;
|
|
2594 |
f = this.fObj!=undefined ? this.fObj : [];
|
|
2595 |
var hiddenrows = 0;
|
|
2596 |
this.validRowsIndex = [];
|
|
2597 |
var o = this;
|
|
2598 |
|
|
2599 |
// removes keyword highlighting
|
|
2600 |
this.UnhighlightAll();
|
|
2601 |
|
|
2602 |
// search args re-init
|
|
2603 |
this.searchArgs = this.GetFiltersValue();
|
|
2604 |
|
|
2605 |
var num_cell_data, nbFormat;
|
|
2606 |
var re_le = new RegExp(this.leOperator), re_ge = new RegExp(this.geOperator);
|
|
2607 |
var re_l = new RegExp(this.lwOperator), re_g = new RegExp(this.grOperator);
|
|
2608 |
var re_d = new RegExp(this.dfOperator), re_lk = new RegExp(tf_RegexpEscape(this.lkOperator));
|
|
2609 |
var re_eq = new RegExp(this.eqOperator), re_st = new RegExp(this.stOperator);
|
|
2610 |
var re_en = new RegExp(this.enOperator), re_an = new RegExp(this.anOperator);
|
|
2611 |
var re_cr = new RegExp(this.curExp);
|
|
2612 |
|
|
2613 |
function highlight(str,ok,cell){//keyword highlighting
|
|
2614 |
if( o.highlightKeywords && ok ){
|
|
2615 |
str = str.replace(re_lk,'');
|
|
2616 |
str = str.replace(re_eq,'');
|
|
2617 |
str = str.replace(re_st,'');
|
|
2618 |
str = str.replace(re_en,'');
|
|
2619 |
var w = str;
|
|
2620 |
if(re_le.test(str) || re_ge.test(str) || re_l.test(str) || re_g.test(str) || re_d.test(str))
|
|
2621 |
w = tf_GetNodeText(cell);
|
|
2622 |
if(w!='')
|
|
2623 |
tf_HighlightWord( cell,w,o.highlightCssClass );
|
|
2624 |
}
|
|
2625 |
}
|
|
2626 |
|
|
2627 |
//looks for search argument in current row
|
|
2628 |
function hasArg(sA,cell_data,j)
|
|
2629 |
{
|
|
2630 |
var occurence;
|
|
2631 |
//Search arg operator tests
|
|
2632 |
var hasLO = re_l.test(sA), hasLE = re_le.test(sA);
|
|
2633 |
var hasGR = re_g.test(sA), hasGE = re_ge.test(sA);
|
|
2634 |
var hasDF = re_d.test(sA), hasEQ = re_eq.test(sA);
|
|
2635 |
var hasLK = re_lk.test(sA), hasAN = re_an.test(sA);
|
|
2636 |
var hasST = re_st.test(sA), hasEN = re_en.test(sA);
|
|
2637 |
|
|
2638 |
//Search arg dates tests
|
|
2639 |
var isLDate = ( hasLO && tf_isValidDate(sA.replace(re_l,''),dtType) );
|
|
2640 |
var isLEDate = ( hasLE && tf_isValidDate(sA.replace(re_le,''),dtType) );
|
|
2641 |
var isGDate = ( hasGR && tf_isValidDate(sA.replace(re_g,''),dtType) );
|
|
2642 |
var isGEDate = ( hasGE && tf_isValidDate(sA.replace(re_ge,''),dtType) );
|
|
2643 |
var isDFDate = ( hasDF && tf_isValidDate(sA.replace(re_d,''),dtType) );
|
|
2644 |
var isEQDate = ( hasEQ && tf_isValidDate(sA.replace(re_eq,''),dtType) );
|
|
2645 |
|
|
2646 |
if( tf_isValidDate(cell_data,dtType) )
|
|
2647 |
{//dates
|
|
2648 |
var dte1 = tf_formatDate(cell_data,dtType);
|
|
2649 |
if(isLDate)
|
|
2650 |
{// lower date
|
|
2651 |
var dte2 = tf_formatDate(sA.replace(re_l,''),dtType);
|
|
2652 |
occurence = (dte1 < dte2);
|
|
2653 |
}
|
|
2654 |
else if(isLEDate)
|
|
2655 |
{// lower equal date
|
|
2656 |
var dte2 = tf_formatDate(sA.replace(re_le,''),dtType);
|
|
2657 |
occurence = (dte1 <= dte2);
|
|
2658 |
}
|
|
2659 |
else if(isGEDate)
|
|
2660 |
{// greater equal date
|
|
2661 |
var dte2 = tf_formatDate(sA.replace(re_ge,''),dtType);
|
|
2662 |
occurence = (dte1 >= dte2);
|
|
2663 |
}
|
|
2664 |
else if(isGDate)
|
|
2665 |
{// greater date
|
|
2666 |
var dte2 = tf_formatDate(sA.replace(re_g,''),dtType);
|
|
2667 |
occurence = (dte1 > dte2);
|
|
2668 |
}
|
|
2669 |
else if(isDFDate)
|
|
2670 |
{// different date
|
|
2671 |
var dte2 = tf_formatDate(sA.replace(re_d,''),dtType);
|
|
2672 |
occurence = (dte1.toString() != dte2.toString());
|
|
2673 |
}
|
|
2674 |
else if(isEQDate)
|
|
2675 |
{// equal date
|
|
2676 |
var dte2 = tf_formatDate(sA.replace(re_eq,''),dtType);
|
|
2677 |
occurence = (dte1.toString() == dte2.toString());
|
|
2678 |
}
|
|
2679 |
else if(re_lk.test(sA)) // searched keyword with * operator doesn't have to be a date
|
|
2680 |
{// like date
|
|
2681 |
occurence = o.__containsStr( sA.replace(re_lk,''),cell_data,null,false);
|
|
2682 |
}
|
|
2683 |
else if(tf_isValidDate(sA,dtType))
|
|
2684 |
{
|
|
2685 |
var dte2 = tf_formatDate(sA,dtType);
|
|
2686 |
occurence = (dte1.toString() == dte2.toString());
|
|
2687 |
}
|
|
2688 |
}
|
|
2689 |
|
|
2690 |
else
|
|
2691 |
{
|
|
2692 |
//first numbers need to be formated
|
|
2693 |
if(o.hasColNbFormat && o.colNbFormat[j]!=null)
|
|
2694 |
{
|
|
2695 |
num_cell_data = tf_removeNbFormat(cell_data,o.colNbFormat[j]);
|
|
2696 |
nbFormat = o.colNbFormat[j];
|
|
2697 |
} else {
|
|
2698 |
if(o.thousandsSeparator==',' && o.decimalSeparator=='.')
|
|
2699 |
{
|
|
2700 |
num_cell_data = tf_removeNbFormat(cell_data,'us');
|
|
2701 |
nbFormat = 'us';
|
|
2702 |
} else {
|
|
2703 |
num_cell_data = tf_removeNbFormat(cell_data,'eu');
|
|
2704 |
nbFormat = 'eu';
|
|
2705 |
}
|
|
2706 |
}
|
|
2707 |
|
|
2708 |
// first checks if there is any operator (<,>,<=,>=,!,*,=,{,})
|
|
2709 |
if(hasLE) //lower equal
|
|
2710 |
occurence = num_cell_data <= tf_removeNbFormat(sA.replace(re_le,''),nbFormat);
|
|
2711 |
|
|
2712 |
else if(hasGE) //greater equal
|
|
2713 |
occurence = num_cell_data >= tf_removeNbFormat(sA.replace(re_ge,''),nbFormat);
|
|
2714 |
|
|
2715 |
else if(hasLO) //lower
|
|
2716 |
occurence = num_cell_data < tf_removeNbFormat(sA.replace(re_l,''),nbFormat);
|
|
2717 |
|
|
2718 |
else if(hasGR) //greater
|
|
2719 |
occurence = num_cell_data > tf_removeNbFormat(sA.replace(re_g,''),nbFormat);
|
|
2720 |
|
|
2721 |
else if(hasDF) //different
|
|
2722 |
occurence = o.__containsStr( sA.replace(re_d,''),cell_data ) ? false : true;
|
|
2723 |
|
|
2724 |
else if(hasLK) //like
|
|
2725 |
occurence = o.__containsStr( sA.replace(re_lk,''),cell_data,null,false);
|
|
2726 |
|
|
2727 |
else if(hasEQ) //equal
|
|
2728 |
occurence = o.__containsStr( sA.replace(re_eq,''),cell_data,null,true);
|
|
2729 |
|
|
2730 |
else if(hasST) //starts with
|
|
2731 |
occurence = cell_data.indexOf(sA.replace(re_st,''))==0 ? true : false;
|
|
2732 |
|
|
2733 |
else if(hasEN) //ends with
|
|
2734 |
{
|
|
2735 |
var searchArg = sA.replace(re_en,'');
|
|
2736 |
occurence = cell_data.lastIndexOf(searchArg,cell_data.length-1)==(cell_data.length-1)-(searchArg.length-1)
|
|
2737 |
&& cell_data.lastIndexOf(searchArg,cell_data.length-1) > -1
|
|
2738 |
? true : false;
|
|
2739 |
}
|
|
2740 |
|
|
2741 |
else
|
|
2742 |
occurence = o.__containsStr( sA,cell_data,(f['col_'+j]==undefined) ? this.fltTypeInp : f['col_'+j] );
|
|
2743 |
|
|
2744 |
}//else
|
|
2745 |
return occurence;
|
|
2746 |
}//fn
|
|
2747 |
|
|
2748 |
for(var k=this.refRow; k<this.nbRows; k++)
|
|
2749 |
{
|
|
2750 |
/*** if table already filtered some rows are not visible ***/
|
|
2751 |
if(row[k].style.display == 'none') row[k].style.display = '';
|
|
2752 |
|
|
2753 |
var cell = tf_Tag(row[k],'td');
|
|
2754 |
var nchilds = cell.length;
|
|
2755 |
|
|
2756 |
// checks if row has exact cell #
|
|
2757 |
if(nchilds != this.nbCells) continue;
|
|
2758 |
|
|
2759 |
var occurence = [];
|
|
2760 |
var isRowValid = (this.searchType=='include') ? true : false;
|
|
2761 |
var singleFltRowValid = false; //only for single filter search
|
|
2762 |
|
|
2763 |
for(var j=0; j<nchilds; j++)
|
|
2764 |
{// this loop retrieves cell data
|
|
2765 |
var sA = this.searchArgs[(this.singleSearchFlt) ? 0 : j]; //searched keyword
|
|
2766 |
var dtType = (this.hasColDateType) ? this.colDateType[j] : this.defaultDateType;
|
|
2767 |
if(sA=='') continue;
|
|
2768 |
|
|
2769 |
var cell_data = this.GetCellData(j, cell[j]).tf_MatchCase(this.matchCase);
|
|
2770 |
|
|
2771 |
var sAOrSplit = sA.split(this.orOperator);//multiple search parameter operator ||
|
|
2772 |
var hasMultiOrSA = (sAOrSplit.length>1) ? true : false;//multiple search || parameter boolean
|
|
2773 |
var sAAndSplit = sA.split('&&');//multiple search parameter operator &&
|
|
2774 |
var hasMultiAndSA = (sAAndSplit.length>1) ? true : false;//multiple search && parameter boolean
|
|
2775 |
|
|
2776 |
if(hasMultiOrSA || hasMultiAndSA)
|
|
2777 |
{//multiple sarch parameters
|
|
2778 |
var cS, occur = false;
|
|
2779 |
var s = (hasMultiOrSA) ? sAOrSplit : sAAndSplit;
|
|
2780 |
for(var w=0; w<s.length; w++)
|
|
2781 |
{
|
|
2782 |
cS = s[w].tf_Trim();
|
|
2783 |
occur = hasArg(cS,cell_data,j);
|
|
2784 |
highlight(cS,occur,cell[j]);
|
|
2785 |
if(hasMultiOrSA && occur) break;
|
|
2786 |
if(hasMultiAndSA && !occur) break;
|
|
2787 |
}
|
|
2788 |
occurence[j] = occur;
|
|
2789 |
}
|
|
2790 |
else {//single search parameter
|
|
2791 |
occurence[j] = hasArg(sA.tf_Trim(),cell_data,j);
|
|
2792 |
highlight(sA,occurence[j],cell[j]);
|
|
2793 |
}//else single param
|
|
2794 |
|
|
2795 |
if(!occurence[j]) isRowValid = (this.searchType=='include') ? false : true;
|
|
2796 |
if(this.singleSearchFlt && occurence[j]) singleFltRowValid = true;
|
|
2797 |
|
|
2798 |
}//for j
|
|
2799 |
|
|
2800 |
if(this.singleSearchFlt && singleFltRowValid) isRowValid = true;
|
|
2801 |
|
|
2802 |
if(!isRowValid)
|
|
2803 |
{
|
|
2804 |
this.SetRowValidation(k,false);
|
|
2805 |
// always visible rows need to be counted as valid
|
|
2806 |
if( this.hasVisibleRows && this.visibleRows.tf_Has(k) && !this.paging)
|
|
2807 |
this.validRowsIndex.push(k);
|
|
2808 |
else
|
|
2809 |
hiddenrows++;
|
|
2810 |
} else {
|
|
2811 |
this.SetRowValidation(k,true);
|
|
2812 |
this.validRowsIndex.push(k);
|
|
2813 |
this.SetRowBg(k,this.validRowsIndex.length);
|
|
2814 |
if(this.onRowValidated) this.onRowValidated.call(null,this,k);
|
|
2815 |
}
|
|
2816 |
|
|
2817 |
}// for k
|
|
2818 |
|
|
2819 |
this.nbVisibleRows = this.validRowsIndex.length;
|
|
2820 |
this.nbHiddenRows = hiddenrows;
|
|
2821 |
this.isStartBgAlternate = false;
|
|
2822 |
if( this.rememberGridValues ) this.RememberFiltersValue(this.fltsValuesCookie);
|
|
2823 |
if(!this.paging) this.ApplyGridProps();//applies filter props after filtering process
|
|
2824 |
if(this.paging){
|
|
2825 |
this.startPagingRow = 0;
|
|
2826 |
this.currentPageNb = 1;
|
|
2827 |
this.SetPagingInfo(this.validRowsIndex);
|
|
2828 |
}//starts paging process
|
|
2829 |
//invokes eventual onafter function
|
|
2830 |
if(this.onAfterFilter) this.onAfterFilter.call(null,this);
|
|
2831 |
},
|
|
2832 |
|
|
2833 |
SetPagingInfo: function( validRows )
|
|
2834 |
/*====================================================
|
|
2835 |
- calculates page # according to valid rows
|
|
2836 |
- refreshes paging select according to page #
|
|
2837 |
- Calls GroupByPage method
|
|
2838 |
=====================================================*/
|
|
2839 |
{
|
|
2840 |
var row = this.tbl.rows;
|
|
2841 |
var mdiv = ( this.pagingTgtId==null ) ? this.mDiv : tf_Id( this.pagingTgtId );
|
|
2842 |
var pgspan = tf_Id(this.prfxPgSpan+this.id);
|
|
2843 |
|
|
2844 |
if( validRows!=undefined ) this.validRowsIndex = validRows;//stores valid rows index
|
|
2845 |
else
|
|
2846 |
{
|
|
2847 |
this.validRowsIndex = [];//re-sets valid rows index
|
|
2848 |
|
|
2849 |
for(var j=this.refRow; j<this.nbRows; j++)//counts rows to be grouped
|
|
2850 |
{
|
|
2851 |
var isRowValid = row[j].getAttribute('validRow');
|
|
2852 |
if(isRowValid=='true' || isRowValid==null )
|
|
2853 |
this.validRowsIndex.push(j);
|
|
2854 |
}//for j
|
|
2855 |
}
|
|
2856 |
|
|
2857 |
this.nbPages = Math.ceil( this.validRowsIndex.length/this.pagingLength );//calculates nb of pages
|
|
2858 |
pgspan.innerHTML = this.nbPages; //refresh page nb span
|
|
2859 |
if(this.pageSelectorType==this.fltTypeSlc)
|
|
2860 |
this.pagingSlc.innerHTML = '';//select clearing shortcut
|
|
2861 |
|
|
2862 |
if( this.nbPages>0 )
|
|
2863 |
{
|
|
2864 |
mdiv.style.visibility = 'visible';
|
|
2865 |
if(this.pageSelectorType==this.fltTypeSlc)
|
|
2866 |
for(var z=0; z<this.nbPages; z++)
|
|
2867 |
{
|
|
2868 |
var currOpt = new Option((z+1),z*this.pagingLength,false,false);
|
|
2869 |
this.pagingSlc.options[z] = currOpt;
|
|
2870 |
}
|
|
2871 |
else this.pagingSlc.value = this.currentPageNb; //input type
|
|
2872 |
|
|
2873 |
} else {/*** if no results paging select and buttons are hidden ***/
|
|
2874 |
mdiv.style.visibility = 'hidden';
|
|
2875 |
}
|
|
2876 |
this.GroupByPage( this.validRowsIndex );
|
|
2877 |
},
|
|
2878 |
|
|
2879 |
GroupByPage: function( validRows )
|
|
2880 |
/*====================================================
|
|
2881 |
- Displays current page rows
|
|
2882 |
=====================================================*/
|
|
2883 |
{
|
|
2884 |
var row = this.tbl.rows;
|
|
2885 |
var paging_end_row = parseInt( this.startPagingRow ) + parseInt( this.pagingLength );
|
|
2886 |
|
|
2887 |
if( validRows!=undefined ) this.validRowsIndex = validRows;//stores valid rows index
|
|
2888 |
|
|
2889 |
for(h=0; h<this.validRowsIndex.length; h++)
|
|
2890 |
{//this loop shows valid rows of current page
|
|
2891 |
if( h>=this.startPagingRow && h<paging_end_row )
|
|
2892 |
{
|
|
2893 |
var r = row[ this.validRowsIndex[h] ];
|
|
2894 |
if(r.getAttribute('validRow')=='true' || r.getAttribute('validRow')==undefined)
|
|
2895 |
r.style.display = '';
|
|
2896 |
this.SetRowBg(this.validRowsIndex[h],h);
|
|
2897 |
} else {
|
|
2898 |
row[ this.validRowsIndex[h] ].style.display = 'none';
|
|
2899 |
this.RemoveRowBg(this.validRowsIndex[h]);
|
|
2900 |
}
|
|
2901 |
}
|
|
2902 |
|
|
2903 |
this.nbVisibleRows = this.validRowsIndex.length;
|
|
2904 |
this.isStartBgAlternate = false;
|
|
2905 |
this.ApplyGridProps();//re-applies filter behaviours after filtering process
|
|
2906 |
},
|
|
2907 |
|
|
2908 |
ApplyGridProps: function()
|
|
2909 |
/*====================================================
|
|
2910 |
- checks methods that should be called
|
|
2911 |
after filtering and/or paging process
|
|
2912 |
=====================================================*/
|
|
2913 |
{
|
|
2914 |
if( this.activeFlt && this.activeFlt.nodeName.tf_LCase()==this.fltTypeSlc )
|
|
2915 |
{// blurs active filter (IE)
|
|
2916 |
this.activeFlt.blur();
|
|
2917 |
if(this.activeFlt.parentNode) this.activeFlt.parentNode.focus();
|
|
2918 |
}
|
|
2919 |
|
|
2920 |
if( this.visibleRows ) this.SetVisibleRows();//shows rows always visible
|
|
2921 |
if( this.colOperation ) this.SetColOperation();//makes operation on a col
|
|
2922 |
if( this.refreshFilters ) this.RefreshFiltersGrid();//re-populates drop-down filters
|
|
2923 |
var nr = (!this.paging && this.hasVisibleRows)
|
|
2924 |
? (this.nbVisibleRows - this.visibleRows.length) : this.nbVisibleRows;
|
|
2925 |
if( this.rowsCounter ) this.RefreshNbRows( nr );//refreshes rows counter
|
|
2926 |
},
|
|
2927 |
|
|
2928 |
RefreshNbRows: function(p)
|
|
2929 |
/*====================================================
|
|
2930 |
- Shows total number of filtered rows
|
|
2931 |
=====================================================*/
|
|
2932 |
{
|
|
2933 |
if(this.rowsCounterSpan == null) return;
|
|
2934 |
var totTxt;
|
|
2935 |
if(!this.paging)
|
|
2936 |
{
|
|
2937 |
if(p!=undefined && p!='') totTxt=p;
|
|
2938 |
else totTxt = (this.nbFilterableRows - this.nbHiddenRows - (this.hasVisibleRows ? this.visibleRows.length : 0) );
|
|
2939 |
} else {
|
|
2940 |
var paging_start_row = parseInt(this.startPagingRow)+((this.nbVisibleRows>0) ? 1 : 0);//paging start row
|
|
2941 |
var paging_end_row = (paging_start_row+this.pagingLength)-1 <= this.nbVisibleRows
|
|
2942 |
? (paging_start_row+this.pagingLength)-1 : this.nbVisibleRows;
|
|
2943 |
totTxt = paging_start_row+'-'+paging_end_row+' / '+this.nbVisibleRows;
|
|
2944 |
}
|
|
2945 |
this.rowsCounterSpan.innerHTML = totTxt;
|
|
2946 |
},
|
|
2947 |
|
|
2948 |
ChangePage: function( index )
|
|
2949 |
{
|
|
2950 |
this.EvtManager(this.Evt.name.changepage,{ pgIndex:index });
|
|
2951 |
},
|
|
2952 |
_ChangePage: function( index )
|
|
2953 |
/*====================================================
|
|
2954 |
- Changes page
|
|
2955 |
- Param:
|
|
2956 |
- index: option index of paging select
|
|
2957 |
(numeric value)
|
|
2958 |
=====================================================*/
|
|
2959 |
{
|
|
2960 |
if( !this.paging ) return;
|
|
2961 |
if( index==undefined )
|
|
2962 |
index = (this.pageSelectorType==this.fltTypeSlc) ?
|
|
2963 |
this.pagingSlc.options.selectedIndex : (this.pagingSlc.value-1);
|
|
2964 |
if( index>=0 && index<=(this.nbPages-1) )
|
|
2965 |
{
|
|
2966 |
this.currentPageNb = parseInt(index)+1;
|
|
2967 |
if(this.pageSelectorType==this.fltTypeSlc)
|
|
2968 |
this.pagingSlc.options[index].selected = true;
|
|
2969 |
else
|
|
2970 |
this.pagingSlc.value = this.currentPageNb;
|
|
2971 |
|
|
2972 |
if( this.rememberPageNb ) this.RememberPageNb( this.pgNbCookie );
|
|
2973 |
this.startPagingRow = (this.pageSelectorType==this.fltTypeSlc)
|
|
2974 |
? this.pagingSlc.value : (index*this.pagingLength);
|
|
2975 |
this.GroupByPage();
|
|
2976 |
}
|
|
2977 |
},
|
|
2978 |
|
|
2979 |
ChangeResultsPerPage: function()
|
|
2980 |
{
|
|
2981 |
this.EvtManager(this.Evt.name.changeresultsperpage);
|
|
2982 |
},
|
|
2983 |
_ChangeResultsPerPage: function()
|
|
2984 |
/*====================================================
|
|
2985 |
- calculates rows to be displayed in a page
|
|
2986 |
- method called by nb results per page select
|
|
2987 |
=====================================================*/
|
|
2988 |
{
|
|
2989 |
if( !this.paging ) return;
|
|
2990 |
var slcR = this.resultsPerPageSlc;
|
|
2991 |
var slcPagesSelIndex = (this.pageSelectorType==this.fltTypeSlc)
|
|
2992 |
? this.pagingSlc.selectedIndex : parseInt(this.pagingSlc.value-1);
|
|
2993 |
this.pagingLength = parseInt(slcR.options[slcR.selectedIndex].value);
|
|
2994 |
this.startPagingRow = this.pagingLength*slcPagesSelIndex;
|
|
2995 |
|
|
2996 |
if( !isNaN(this.pagingLength) )
|
|
2997 |
{
|
|
2998 |
if( this.startPagingRow>=this.nbFilterableRows )
|
|
2999 |
this.startPagingRow = (this.nbFilterableRows-this.pagingLength);
|
|
3000 |
this.SetPagingInfo();
|
|
3001 |
|
|
3002 |
if(this.pageSelectorType==this.fltTypeSlc)
|
|
3003 |
{
|
|
3004 |
var slcIndex = (this.pagingSlc.options.length-1<=slcPagesSelIndex )
|
|
3005 |
? (this.pagingSlc.options.length-1) : slcPagesSelIndex;
|
|
3006 |
this.pagingSlc.options[slcIndex].selected = true;
|
|
3007 |
}
|
|
3008 |
if( this.rememberPageLen ) this.RememberPageLength( this.pgLenCookie );
|
|
3009 |
}//if isNaN
|
|
3010 |
},
|
|
3011 |
|
|
3012 |
Sort: function()
|
|
3013 |
{
|
|
3014 |
this.EvtManager(this.Evt.name.sort);
|
|
3015 |
},
|
|
3016 |
|
|
3017 |
GetColValues: function(colindex,num,exclude)
|
|
3018 |
/*====================================================
|
|
3019 |
- returns an array containing cell values of
|
|
3020 |
a column
|
|
3021 |
- needs following args:
|
|
3022 |
- column index (number)
|
|
3023 |
- a boolean set to true if we want only
|
|
3024 |
numbers to be returned
|
|
3025 |
- array containing rows index to be excluded
|
|
3026 |
from returned values
|
|
3027 |
=====================================================*/
|
|
3028 |
{
|
|
3029 |
if( !this.fltGrid ) return;
|
|
3030 |
var row = this.tbl.rows;
|
|
3031 |
var colValues = [];
|
|
3032 |
|
|
3033 |
for(var i=this.refRow; i<this.nbRows; i++)//iterates rows
|
|
3034 |
{
|
|
3035 |
var isExludedRow = false;
|
|
3036 |
if(exclude!=undefined && (typeof exclude).tf_LCase()=='object')
|
|
3037 |
{ // checks if current row index appears in exclude array
|
|
3038 |
isExludedRow = exclude.tf_Has(i); //boolean
|
|
3039 |
}
|
|
3040 |
var cell = tf_Tag(row[i],'td');
|
|
3041 |
var nchilds = cell.length;
|
|
3042 |
|
|
3043 |
if(nchilds == this.nbCells && !isExludedRow)
|
|
3044 |
{// checks if row has exact cell # and is not excluded
|
|
3045 |
for(var j=0; j<nchilds; j++)// this loop retrieves cell data
|
|
3046 |
{
|
|
3047 |
if(j==colindex && row[i].style.display=='' )
|
|
3048 |
{
|
|
3049 |
var cell_data = this.GetCellData(j, cell[j]).tf_LCase();
|
|
3050 |
var nbFormat = this.colNbFormat ? this.colNbFormat[colindex] : null;
|
|
3051 |
(num) ? colValues.push( tf_removeNbFormat(cell_data,nbFormat) )
|
|
3052 |
: colValues.push( cell_data );
|
|
3053 |
}//if j==k
|
|
3054 |
}//for j
|
|
3055 |
}//if nchilds == this.nbCells
|
|
3056 |
}//for i
|
|
3057 |
return colValues;
|
|
3058 |
},
|
|
3059 |
|
|
3060 |
GetFilterValue: function(index)
|
|
3061 |
/*====================================================
|
|
3062 |
- Returns value of a specified filter
|
|
3063 |
- Params:
|
|
3064 |
- index: filter column index (numeric value)
|
|
3065 |
=====================================================*/
|
|
3066 |
{
|
|
3067 |
if( !this.fltGrid ) return;
|
|
3068 |
var fltValue;
|
|
3069 |
var flt = tf_Id(this.fltIds[index]);
|
|
3070 |
if(flt==null) return fltValue='';
|
|
3071 |
|
|
3072 |
if( this['col'+index]!=this.fltTypeMulti &&
|
|
3073 |
this['col'+index]!=this.fltTypeCheckList )
|
|
3074 |
fltValue = flt.value;
|
|
3075 |
else if(this['col'+index] == this.fltTypeMulti)
|
|
3076 |
{//mutiple select
|
|
3077 |
fltValue = '';
|
|
3078 |
for(var j=0; j<flt.options.length; j++)
|
|
3079 |
if(flt.options[j].selected)
|
|
3080 |
fltValue = fltValue.concat(
|
|
3081 |
flt.options[j].value+' ' +
|
|
3082 |
this.orOperator + ' '
|
|
3083 |
);
|
|
3084 |
//removes last operator ||
|
|
3085 |
fltValue = fltValue.substr(0,fltValue.length-4);
|
|
3086 |
}
|
|
3087 |
else if(this['col'+index]==this.fltTypeCheckList)
|
|
3088 |
{//checklist
|
|
3089 |
if(flt.getAttribute('value')!=null)
|
|
3090 |
{
|
|
3091 |
fltValue = flt.getAttribute('value');
|
|
3092 |
//removes last operator ||
|
|
3093 |
fltValue = fltValue.substr(0,fltValue.length-3);
|
|
3094 |
} else fltValue = '';
|
|
3095 |
}
|
|
3096 |
return fltValue;
|
|
3097 |
},
|
|
3098 |
|
|
3099 |
GetFiltersValue: function()
|
|
3100 |
/*====================================================
|
|
3101 |
- Returns the value of every single filter
|
|
3102 |
=====================================================*/
|
|
3103 |
{
|
|
3104 |
if( !this.fltGrid ) return;
|
|
3105 |
var searchArgs = [];
|
|
3106 |
for(var i=0; i<this.fltIds.length; i++)
|
|
3107 |
searchArgs.push(
|
|
3108 |
this.GetFilterValue(i).tf_MatchCase(this.matchCase).tf_Trim()
|
|
3109 |
);
|
|
3110 |
return searchArgs;
|
|
3111 |
},
|
|
3112 |
|
|
3113 |
GetFilterId: function(index)
|
|
3114 |
/*====================================================
|
|
3115 |
- Returns filter id of a specified column
|
|
3116 |
- Params:
|
|
3117 |
- index: column index (numeric value)
|
|
3118 |
=====================================================*/
|
|
3119 |
{
|
|
3120 |
if( !this.fltGrid ) return;
|
|
3121 |
return this.fltIds[i];
|
|
3122 |
},
|
|
3123 |
|
|
3124 |
GetFiltersByType: function(type,bool)
|
|
3125 |
/*====================================================
|
|
3126 |
- returns an array containing ids of filters of a
|
|
3127 |
specified type (inputs or selects)
|
|
3128 |
- Note that hidden filters are also returned
|
|
3129 |
- Needs folllowing args:
|
|
3130 |
- filter type string ('input','select',
|
|
3131 |
'multiple')
|
|
3132 |
- optional boolean: if set true method
|
|
3133 |
returns column indexes otherwise filters ids
|
|
3134 |
=====================================================*/
|
|
3135 |
{
|
|
3136 |
if( !this.fltGrid ) return;
|
|
3137 |
var arr = [];
|
|
3138 |
for(var i=0; i<this.fltIds.length; i++)
|
|
3139 |
{
|
|
3140 |
var fltType = this['col'+i];
|
|
3141 |
if(fltType == type.tf_LCase())
|
|
3142 |
{
|
|
3143 |
var a = (bool) ? i : this.fltIds[i];
|
|
3144 |
arr.push(a);
|
|
3145 |
}
|
|
3146 |
}
|
|
3147 |
return arr;
|
|
3148 |
},
|
|
3149 |
|
|
3150 |
GetCellsNb: function( rowIndex )
|
|
3151 |
/*====================================================
|
|
3152 |
- returns number of cells in a row
|
|
3153 |
- if rowIndex param is passed returns number of
|
|
3154 |
cells of specified row (number)
|
|
3155 |
=====================================================*/
|
|
3156 |
{
|
|
3157 |
var tr = (rowIndex == undefined) ? this.tbl.rows[0] : this.tbl.rows[rowIndex];
|
|
3158 |
var n = tf_GetChildElms(tr);
|
|
3159 |
return n.childNodes.length;
|
|
3160 |
},
|
|
3161 |
|
|
3162 |
GetRowsNb: function()
|
|
3163 |
/*====================================================
|
|
3164 |
- returns total nb of filterable rows starting
|
|
3165 |
from reference row if defined
|
|
3166 |
=====================================================*/
|
|
3167 |
{
|
|
3168 |
var s = this.refRow==undefined ? 0 : this.refRow;
|
|
3169 |
var ntrs = this.tbl.rows.length;
|
|
3170 |
return parseInt(ntrs-s);
|
|
3171 |
},
|
|
3172 |
|
|
3173 |
GetCellData: function(i, cell)
|
|
3174 |
/*====================================================
|
|
3175 |
- returns text content of a given cell
|
|
3176 |
- Params:
|
|
3177 |
- i: index of the column (number)
|
|
3178 |
- cell: td DOM object
|
|
3179 |
=====================================================*/
|
|
3180 |
{
|
|
3181 |
if(i==undefined || cell==null) return "";
|
|
3182 |
//First checks for customCellData event
|
|
3183 |
if(this.customCellData && this.customCellDataCols.tf_Has(i))
|
|
3184 |
return this.customCellData.call(null,this,cell,i);
|
|
3185 |
else
|
|
3186 |
return tf_GetNodeText(cell);
|
|
3187 |
},
|
|
3188 |
|
|
3189 |
GetTableData: function()
|
|
3190 |
/*====================================================
|
|
3191 |
- returns an array containing table data:
|
|
3192 |
[rowindex,[value1,value2,value3...]]
|
|
3193 |
=====================================================*/
|
|
3194 |
{
|
|
3195 |
var row = this.tbl.rows;
|
|
3196 |
for(var k=this.refRow; k<this.nbRows; k++)
|
|
3197 |
{
|
|
3198 |
var rowData, cellData;
|
|
3199 |
rowData = [k,[]];
|
|
3200 |
var cells = tf_Tag(row[k],'td');
|
|
3201 |
for(var j=0; j<cells.length; j++)
|
|
3202 |
{// this loop retrieves cell data
|
|
3203 |
var cell_data = this.GetCellData(j, cells[j]);
|
|
3204 |
rowData[1].push( cell_data );
|
|
3205 |
}
|
|
3206 |
this.tblData.push( rowData )
|
|
3207 |
}
|
|
3208 |
return this.tblData;
|
|
3209 |
},
|
|
3210 |
|
|
3211 |
GetFilteredData: function()
|
|
3212 |
/*====================================================
|
|
3213 |
- returns an array containing filtered data:
|
|
3214 |
[rowindex,[value1,value2,value3...]]
|
|
3215 |
=====================================================*/
|
|
3216 |
{
|
|
3217 |
if(!this.validRowsIndex) return [];
|
|
3218 |
var row = this.tbl.rows;
|
|
3219 |
var filteredData = [];
|
|
3220 |
for(var i=0; i<this.validRowsIndex.length; i++)
|
|
3221 |
{
|
|
3222 |
var rowData, cellData;
|
|
3223 |
rowData = [this.validRowsIndex[i],[]];
|
|
3224 |
var cells = tf_Tag(row[this.validRowsIndex[i]],'td');
|
|
3225 |
for(var j=0; j<cells.length; j++)
|
|
3226 |
{
|
|
3227 |
var cell_data = this.GetCellData(j, cells[j]);
|
|
3228 |
rowData[1].push( cell_data );
|
|
3229 |
}
|
|
3230 |
filteredData.push(rowData);
|
|
3231 |
}
|
|
3232 |
return filteredData;
|
|
3233 |
},
|
|
3234 |
|
|
3235 |
GetFilteredDataCol: function(colIndex)
|
|
3236 |
/*====================================================
|
|
3237 |
- returns an array containing filtered data of a
|
|
3238 |
specified column.
|
|
3239 |
- Params:
|
|
3240 |
- colIndex: index of the column (number)
|
|
3241 |
- returned array:
|
|
3242 |
[value1,value2,value3...]
|
|
3243 |
=====================================================*/
|
|
3244 |
{
|
|
3245 |
if(colIndex==undefined) return [];
|
|
3246 |
var data = this.GetFilteredData();
|
|
3247 |
var colData = [];
|
|
3248 |
for(var i=0; i<data.length; i++)
|
|
3249 |
{
|
|
3250 |
var r = data[i];
|
|
3251 |
var d = r[1]; //cols values of current row
|
|
3252 |
var c = d[colIndex]; //data of searched column
|
|
3253 |
colData.push(c);
|
|
3254 |
}
|
|
3255 |
return colData;
|
|
3256 |
},
|
|
3257 |
|
|
3258 |
GetRowDisplay: function(row)
|
|
3259 |
{
|
|
3260 |
if( !this.fltGrid && typeof row.tf_LCase!='object' ) return;
|
|
3261 |
return row.style.display;
|
|
3262 |
},
|
|
3263 |
|
|
3264 |
SetRowValidation: function( rowIndex,isValid )
|
|
3265 |
/*====================================================
|
|
3266 |
- Validates/unvalidates row by setting 'validRow'
|
|
3267 |
attribute and shows/hides row
|
|
3268 |
- Params:
|
|
3269 |
- rowIndex: index of the row (number)
|
|
3270 |
- isValid: boolean
|
|
3271 |
=====================================================*/
|
|
3272 |
{
|
|
3273 |
var row = this.tbl.rows[rowIndex];
|
|
3274 |
if( !row || (typeof isValid).tf_LCase()!='boolean' ) return;
|
|
3275 |
|
|
3276 |
// always visible rows are valid
|
|
3277 |
if( this.hasVisibleRows && this.visibleRows.tf_Has(rowIndex) && !this.paging )
|
|
3278 |
isValid = true;
|
|
3279 |
|
|
3280 |
var displayFlag = (isValid) ? '' : 'none';
|
|
3281 |
var validFlag = (isValid) ? 'true' : 'false';
|
|
3282 |
row.style.display = displayFlag;
|
|
3283 |
|
|
3284 |
if( this.paging )
|
|
3285 |
row.setAttribute('validRow',validFlag);
|
|
3286 |
},
|
|
3287 |
|
|
3288 |
ValidateAllRows: function()
|
|
3289 |
/*====================================================
|
|
3290 |
- Validates all filterable rows
|
|
3291 |
=====================================================*/
|
|
3292 |
{
|
|
3293 |
if( !this.hasGrid ) return;
|
|
3294 |
this.validRowsIndex = [];
|
|
3295 |
for(var k=this.refRow; k<this.nbFilterableRows; k++)
|
|
3296 |
{
|
|
3297 |
this.SetRowValidation(k,true);
|
|
3298 |
this.validRowsIndex.push(k);
|
|
3299 |
}
|
|
3300 |
},
|
|
3301 |
|
|
3302 |
SetFilterValue: function(index,searcharg,doFilter)
|
|
3303 |
/*====================================================
|
|
3304 |
- Inserts value in a specified filter
|
|
3305 |
- Params:
|
|
3306 |
- index: filter column index (numeric value)
|
|
3307 |
- searcharg: search string
|
|
3308 |
- doFilter: optional boolean for multiple
|
|
3309 |
selects: executes filtering when multiple
|
|
3310 |
select populated... IE only!
|
|
3311 |
=====================================================*/
|
|
3312 |
{
|
|
3313 |
if( (!this.fltGrid && !this.isFirstLoad) || tf_Id(this.fltIds[index])==null ) return;
|
|
3314 |
var slc = tf_Id(this.fltIds[index]);
|
|
3315 |
var execFilter = (doFilter==undefined) ? true : doFilter;
|
|
3316 |
searcharg = (searcharg==undefined) ? '' : searcharg;
|
|
3317 |
|
|
3318 |
if( this['col'+index]!=this.fltTypeMulti &&
|
|
3319 |
this['col'+index]!=this.fltTypeCheckList )
|
|
3320 |
slc.value = searcharg;
|
|
3321 |
|
|
3322 |
else if(this['col'+index] == this.fltTypeMulti)
|
|
3323 |
{//multiple selects
|
|
3324 |
var s = searcharg.split(' '+this.orOperator+' ');
|
|
3325 |
var ct = 0; //keywords counter
|
|
3326 |
for(var j=0; j<slc.options.length; j++)
|
|
3327 |
{
|
|
3328 |
if(s=='') slc.options[j].selected = false;
|
|
3329 |
if(slc.options[j].value=='') slc.options[j].selected = false;
|
|
3330 |
if(slc.options[j].value!='' && s.tf_Has(slc.options[j].value,true))
|
|
3331 |
{
|
|
3332 |
if(tf_isIE)
|
|
3333 |
{// IE multiple selection work-around
|
|
3334 |
//when last value reached filtering can be executed
|
|
3335 |
var filter = (ct==(s.length-1) && execFilter) ? true : false;
|
|
3336 |
this.__deferMultipleSelection(slc,j,filter);
|
|
3337 |
ct++;
|
|
3338 |
}
|
|
3339 |
else
|
|
3340 |
slc.options[j].selected = true;
|
|
3341 |
}//if
|
|
3342 |
}//for j
|
|
3343 |
}
|
|
3344 |
|
|
3345 |
else if(this['col'+index]==this.fltTypeCheckList)
|
|
3346 |
{//checklist
|
|
3347 |
searcharg = searcharg.tf_MatchCase(this.matchCase);
|
|
3348 |
var s = searcharg.split(' '+this.orOperator+' ');
|
|
3349 |
var fltValue = slc.setAttribute('value','');
|
|
3350 |
var fltIndex = slc.setAttribute('indexes','');
|
|
3351 |
for(var k=0; k<tf_Tag(slc,'li').length; k++)
|
|
3352 |
{
|
|
3353 |
var li = tf_Tag(slc,'li')[k];
|
|
3354 |
var lbl = tf_Tag(li,'label')[0];
|
|
3355 |
var chk = tf_Tag(li,'input')[0];
|
|
3356 |
var lblTxt = tf_GetNodeText(lbl).tf_MatchCase(this.matchCase);
|
|
3357 |
if(lblTxt!='' && s.tf_Has(lblTxt,true))
|
|
3358 |
{
|
|
3359 |
chk.checked = true;
|
|
3360 |
this.__setCheckListValues(chk);
|
|
3361 |
}
|
|
3362 |
else{
|
|
3363 |
chk.checked = false;
|
|
3364 |
this.__setCheckListValues(chk);
|
|
3365 |
}
|
|
3366 |
}
|
|
3367 |
}
|
|
3368 |
},
|
|
3369 |
|
|
3370 |
SetColWidths: function(rowIndex)
|
|
3371 |
/*====================================================
|
|
3372 |
- sets coluun widths in pixels
|
|
3373 |
=====================================================*/
|
|
3374 |
{
|
|
3375 |
if( !this.fltGrid || !this.hasColWidth ) return;
|
|
3376 |
var o = this, rIndex;
|
|
3377 |
if(rowIndex==undefined) rIndex = this.tbl.rows[0].style.display!='none' ? 0 : 1;
|
|
3378 |
else rIndex = rowIndex;
|
|
3379 |
setWidths( this.tbl.rows[rIndex] );
|
|
3380 |
|
|
3381 |
function setWidths( row )
|
|
3382 |
{
|
|
3383 |
if( !o && (o.nbCells!=o.colWidth.length) ) return;
|
|
3384 |
if( o.nbCells==row.cells.length )
|
|
3385 |
for(var k=0; k<o.nbCells; k++)
|
|
3386 |
row.cells[k].style.width = o.colWidth[k];
|
|
3387 |
}
|
|
3388 |
},
|
|
3389 |
|
|
3390 |
SetVisibleRows: function()
|
|
3391 |
/*====================================================
|
|
3392 |
- makes a row always visible
|
|
3393 |
- Note this works only if paging is false
|
|
3394 |
=====================================================*/
|
|
3395 |
{
|
|
3396 |
if( this.hasGrid && this.hasVisibleRows && !this.paging )
|
|
3397 |
{
|
|
3398 |
for(var i=0; i<this.visibleRows.length; i++)
|
|
3399 |
{
|
|
3400 |
if(this.visibleRows[i]<=this.nbRows)//row index cannot be > nrows
|
|
3401 |
this.SetRowValidation(this.visibleRows[i],true);
|
|
3402 |
}//for i
|
|
3403 |
}//if hasGrid
|
|
3404 |
},
|
|
3405 |
|
|
3406 |
SetRowBg: function(rIndex,index)
|
|
3407 |
/*====================================================
|
|
3408 |
- sets row background color
|
|
3409 |
- Params:
|
|
3410 |
- rIndex: row index (numeric value)
|
|
3411 |
- index: valid row collection index needed to
|
|
3412 |
calculate bg color
|
|
3413 |
=====================================================*/
|
|
3414 |
{
|
|
3415 |
if(!this.alternateBgs || isNaN(rIndex)) return;
|
|
3416 |
var rows = this.tbl.rows;
|
|
3417 |
var i = (index==undefined) ? rIndex : index;
|
|
3418 |
this.RemoveRowBg(rIndex);
|
|
3419 |
tf_addClass(
|
|
3420 |
rows[rIndex],
|
|
3421 |
(i%2 == 0) ? this.rowBgEvenCssClass : this.rowBgOddCssClass
|
|
3422 |
);
|
|
3423 |
},
|
|
3424 |
|
|
3425 |
RemoveRowBg: function(index)
|
|
3426 |
/*====================================================
|
|
3427 |
- removes row background color
|
|
3428 |
- Params:
|
|
3429 |
- index: row index (numeric value)
|
|
3430 |
=====================================================*/
|
|
3431 |
{
|
|
3432 |
if(isNaN(index)) return;
|
|
3433 |
var rows = this.tbl.rows;
|
|
3434 |
tf_removeClass(rows[index],this.rowBgOddCssClass);
|
|
3435 |
tf_removeClass(rows[index],this.rowBgEvenCssClass);
|
|
3436 |
},
|
|
3437 |
|
|
3438 |
SetAlternateRows: function()
|
|
3439 |
/*====================================================
|
|
3440 |
- alternates row colors for better readability
|
|
3441 |
=====================================================*/
|
|
3442 |
{
|
|
3443 |
if( !this.hasGrid && !this.isFirstLoad ) return;
|
|
3444 |
var rows = this.tbl.rows;
|
|
3445 |
var noValidRowsIndex = this.validRowsIndex==null;
|
|
3446 |
var beginIndex = (noValidRowsIndex) ? this.refRow : 0; //1st index
|
|
3447 |
var indexLen = (noValidRowsIndex) // nb indexes
|
|
3448 |
? (this.nbFilterableRows+beginIndex) : this.validRowsIndex.length;
|
|
3449 |
|
|
3450 |
for(var j=beginIndex; j<indexLen; j++)//alternates bg color
|
|
3451 |
{
|
|
3452 |
var rIndex = (noValidRowsIndex) ? j : this.validRowsIndex[j];
|
|
3453 |
this.SetRowBg(rIndex);
|
|
3454 |
}
|
|
3455 |
},
|
|
3456 |
|
|
3457 |
RemoveAlternateRows: function()
|
|
3458 |
/*====================================================
|
|
3459 |
- removes alternate row colors
|
|
3460 |
=====================================================*/
|
|
3461 |
{
|
|
3462 |
if(!this.hasGrid) return;
|
|
3463 |
var row = this.tbl.rows;
|
|
3464 |
for(var i=this.refRow; i<this.nbRows; i++)
|
|
3465 |
this.RemoveRowBg(i);
|
|
3466 |
this.isStartBgAlternate = true;
|
|
3467 |
},
|
|
3468 |
|
|
3469 |
SetColOperation: function()
|
|
3470 |
/*====================================================
|
|
3471 |
- Calculates values of a column
|
|
3472 |
- params are stored in 'colOperation' table's
|
|
3473 |
attribute
|
|
3474 |
- colOperation['id'] contains ids of elements
|
|
3475 |
showing result (array)
|
|
3476 |
- colOperation['col'] contains index of
|
|
3477 |
columns (array)
|
|
3478 |
- colOperation['operation'] contains operation
|
|
3479 |
type (array, values: sum, mean)
|
|
3480 |
- colOperation['write_method'] array defines
|
|
3481 |
which method to use for displaying the
|
|
3482 |
result (innerHTML, setValue, createTextNode).
|
|
3483 |
Note that innerHTML is the default value.
|
|
3484 |
- colOperation['tot_row_index'] defines in
|
|
3485 |
which row results are displayed (integers array)
|
|
3486 |
|
|
3487 |
- changes made by nuovella:
|
|
3488 |
(1) optimized the routine (now it will only
|
|
3489 |
process each column once),
|
|
3490 |
(2) added calculations for the median, lower and
|
|
3491 |
upper quartile.
|
|
3492 |
=====================================================*/
|
|
3493 |
{
|
|
3494 |
if( !this.isFirstLoad && !this.hasGrid ) return;
|
|
3495 |
|
|
3496 |
if(this.onBeforeOperation) this.onBeforeOperation.call(null,this);
|
|
3497 |
|
|
3498 |
var labelId = this.colOperation['id'];
|
|
3499 |
var colIndex = this.colOperation['col'];
|
|
3500 |
var operation = this.colOperation['operation'];
|
|
3501 |
var outputType = this.colOperation['write_method'];
|
|
3502 |
var totRowIndex = this.colOperation['tot_row_index'];
|
|
3503 |
var excludeRow = this.colOperation['exclude_row'];
|
|
3504 |
var decimalPrecision = this.colOperation['decimal_precision']!=undefined
|
|
3505 |
? this.colOperation['decimal_precision'] : 2;
|
|
3506 |
|
|
3507 |
//nuovella: determine unique list of columns to operate on
|
|
3508 |
var ucolIndex =[];
|
|
3509 |
var ucolMax=0;
|
|
3510 |
|
|
3511 |
ucolIndex[ucolMax]=colIndex[0];
|
|
3512 |
|
|
3513 |
for(var i=1; i<colIndex.length; i++)
|
|
3514 |
{
|
|
3515 |
saved=0;
|
|
3516 |
//see if colIndex[i] is already in the list of unique indexes
|
|
3517 |
for(var j=0; j<=ucolMax; j++ )
|
|
3518 |
{
|
|
3519 |
if (ucolIndex[j]==colIndex[i])
|
|
3520 |
saved=1;
|
|
3521 |
}
|
|
3522 |
if (saved==0)
|
|
3523 |
{//if not saved then, save the index;
|
|
3524 |
ucolMax++;
|
|
3525 |
ucolIndex[ucolMax]=colIndex[i];
|
|
3526 |
}
|
|
3527 |
}// for i
|
|
3528 |
|
|
3529 |
if( (typeof labelId).tf_LCase()=='object'
|
|
3530 |
&& (typeof colIndex).tf_LCase()=='object'
|
|
3531 |
&& (typeof operation).tf_LCase()=='object' )
|
|
3532 |
{
|
|
3533 |
var row = this.tbl.rows;
|
|
3534 |
var colvalues = [];
|
|
3535 |
|
|
3536 |
for(var ucol=0; ucol<=ucolMax; ucol++)
|
|
3537 |
{
|
|
3538 |
//this retrieves col values
|
|
3539 |
//use ucolIndex because we only want to pass through this loop once for each column
|
|
3540 |
//get the values in this unique column
|
|
3541 |
colvalues.push( this.GetColValues(ucolIndex[ucol],true,excludeRow) );
|
|
3542 |
|
|
3543 |
//next: calculate all operations for this column
|
|
3544 |
var result, nbvalues=0, temp;
|
|
3545 |
var meanValue=0, sumValue=0, minValue=null, maxValue=null, q1Value=null, medValue=null, q3Value=null;
|
|
3546 |
var meanFlag=0, sumFlag=0, minFlag=0, maxFlag=0, q1Flag=0, medFlag=0, q3Flag=0;
|
|
3547 |
var theList=[];
|
|
3548 |
var opsThisCol=[], decThisCol=[], labThisCol=[], oTypeThisCol=[];
|
|
3549 |
var mThisCol=-1;
|
|
3550 |
|
|
3551 |
for(var i=0; i<colIndex.length; i++)
|
|
3552 |
{
|
|
3553 |
if (colIndex[i]==ucolIndex[ucol])
|
|
3554 |
{
|
|
3555 |
mThisCol++;
|
|
3556 |
opsThisCol[mThisCol]=operation[i].tf_LCase();
|
|
3557 |
decThisCol[mThisCol]=decimalPrecision[i];
|
|
3558 |
labThisCol[mThisCol]=labelId[i];
|
|
3559 |
oTypeThisCol = (outputType != undefined && (typeof outputType).tf_LCase()=='object')
|
|
3560 |
? outputType[i] : null;
|
|
3561 |
|
|
3562 |
switch( opsThisCol[mThisCol] )
|
|
3563 |
{
|
|
3564 |
case 'mean':
|
|
3565 |
meanFlag=1;
|
|
3566 |
break;
|
|
3567 |
case 'sum':
|
|
3568 |
sumFlag=1;
|
|
3569 |
break;
|
|
3570 |
case 'min':
|
|
3571 |
minFlag=1;
|
|
3572 |
break;
|
|
3573 |
case 'max':
|
|
3574 |
maxFlag=1;
|
|
3575 |
break;
|
|
3576 |
case 'median':
|
|
3577 |
medFlag=1;
|
|
3578 |
break;
|
|
3579 |
case 'q1':
|
|
3580 |
q1Flag=1;
|
|
3581 |
break;
|
|
3582 |
case 'q3':
|
|
3583 |
q3Flag=1;
|
|
3584 |
break;
|
|
3585 |
}
|
|
3586 |
}
|
|
3587 |
}
|
|
3588 |
|
|
3589 |
for(var j=0; j<colvalues[ucol].length; j++ )
|
|
3590 |
{
|
|
3591 |
if ((q1Flag==1)||(q3Flag==1) || (medFlag==1))
|
|
3592 |
{//sort the list for calculation of median and quartiles
|
|
3593 |
if (j<colvalues[ucol].length -1)
|
|
3594 |
{
|
|
3595 |
for(k=j+1;k<colvalues[ucol].length; k++) {
|
|
3596 |
|
|
3597 |
if( eval(colvalues[ucol][k]) < eval(colvalues[ucol][j]))
|
|
3598 |
{
|
|
3599 |
temp = colvalues[ucol][j];
|
|
3600 |
colvalues[ucol][j] = colvalues[ucol][k];
|
|
3601 |
colvalues[ucol][k] = temp;
|
|
3602 |
}
|
|
3603 |
}
|
|
3604 |
}
|
|
3605 |
}
|
|
3606 |
var cvalue = parseFloat(colvalues[ucol][j]);
|
|
3607 |
theList[j]=parseFloat( cvalue );
|
|
3608 |
|
|
3609 |
if( !isNaN(cvalue) )
|
|
3610 |
{
|
|
3611 |
nbvalues++;
|
|
3612 |
if ((sumFlag==1)|| (meanFlag==1)) sumValue += parseFloat( cvalue );
|
|
3613 |
if (minFlag==1)
|
|
3614 |
{
|
|
3615 |
if (minValue==null)
|
|
3616 |
{
|
|
3617 |
minValue = parseFloat( cvalue );
|
|
3618 |
}
|
|
3619 |
else minValue= parseFloat( cvalue )<minValue? parseFloat( cvalue ): minValue;
|
|
3620 |
}
|
|
3621 |
if (maxFlag==1) {
|
|
3622 |
if (maxValue==null)
|
|
3623 |
{maxValue = parseFloat( cvalue );}
|
|
3624 |
else {maxValue= parseFloat( cvalue )>maxValue? parseFloat( cvalue ): maxValue;}
|
|
3625 |
}
|
|
3626 |
}
|
|
3627 |
}//for j
|
|
3628 |
if (meanFlag==1) meanValue = sumValue/nbvalues;
|
|
3629 |
if (medFlag==1)
|
|
3630 |
{
|
|
3631 |
var aux = 0;
|
|
3632 |
if(nbvalues%2 == 1)
|
|
3633 |
{
|
|
3634 |
aux = Math.floor(nbvalues/2);
|
|
3635 |
medValue = theList[aux];
|
|
3636 |
}
|
|
3637 |
else medValue = (theList[nbvalues/2]+theList[((nbvalues/2)-1)])/2;
|
|
3638 |
}
|
|
3639 |
if (q1Flag==1)
|
|
3640 |
{
|
|
3641 |
var posa=0.0;
|
|
3642 |
posa = Math.floor(nbvalues/4);
|
|
3643 |
if (4*posa == nbvalues) {q1Value = (theList[posa-1] + theList[posa])/2;}
|
|
3644 |
else {q1Value = theList[posa];}
|
|
3645 |
}
|
|
3646 |
if (q3Flag==1)
|
|
3647 |
{
|
|
3648 |
var posa=0.0;
|
|
3649 |
var posb=0.0;
|
|
3650 |
posa = Math.floor(nbvalues/4);
|
|
3651 |
if (4*posa == nbvalues)
|
|
3652 |
{
|
|
3653 |
posb = 3*posa;
|
|
3654 |
q3Value = (theList[posb] + theList[posb-1])/2;
|
|
3655 |
}
|
|
3656 |
else
|
|
3657 |
q3Value = theList[nbvalues-posa-1];
|
|
3658 |
}
|
|
3659 |
|
|
3660 |
for(var i=0; i<=mThisCol; i++ )
|
|
3661 |
{
|
|
3662 |
switch( opsThisCol[i] )
|
|
3663 |
{
|
|
3664 |
case 'mean':
|
|
3665 |
result=meanValue;
|
|
3666 |
break;
|
|
3667 |
case 'sum':
|
|
3668 |
result=sumValue;
|
|
3669 |
break;
|
|
3670 |
case 'min':
|
|
3671 |
result=minValue;
|
|
3672 |
break;
|
|
3673 |
case 'max':
|
|
3674 |
result=maxValue;
|
|
3675 |
break;
|
|
3676 |
case 'median':
|
|
3677 |
result=medValue;
|
|
3678 |
break;
|
|
3679 |
case 'q1':
|
|
3680 |
result=q1Value;
|
|
3681 |
break;
|
|
3682 |
case 'q3':
|
|
3683 |
result=q3Value;
|
|
3684 |
break;
|
|
3685 |
}
|
|
3686 |
|
|
3687 |
var precision = decThisCol[i]!=undefined && !isNaN( decThisCol[i] )
|
|
3688 |
? decThisCol[i] : 2;
|
|
3689 |
|
|
3690 |
if(oTypeThisCol!=null && result)
|
|
3691 |
{//if outputType is defined
|
|
3692 |
result = result.toFixed( precision );
|
|
3693 |
if( tf_Id( labThisCol[i] )!=undefined )
|
|
3694 |
{
|
|
3695 |
switch( oTypeThisCol.tf_LCase() )
|
|
3696 |
{
|
|
3697 |
case 'innerhtml':
|
|
3698 |
if (isNaN(result) || !isFinite(result) || (nbvalues==0))
|
|
3699 |
tf_Id( labThisCol[i] ).innerHTML = '.';
|
|
3700 |
else
|
|
3701 |
tf_Id( labThisCol[i] ).innerHTML = result;
|
|
3702 |
break;
|
|
3703 |
case 'setvalue':
|
|
3704 |
tf_Id( labThisCol[i] ).value = result;
|
|
3705 |
break;
|
|
3706 |
case 'createtextnode':
|
|
3707 |
var oldnode = tf_Id( labThisCol[i] ).firstChild;
|
|
3708 |
var txtnode = tf_CreateText( result );
|
|
3709 |
tf_Id( labThisCol[i] ).replaceChild( txtnode,oldnode );
|
|
3710 |
break;
|
|
3711 |
}//switch
|
|
3712 |
}
|
|
3713 |
} else {
|
|
3714 |
try
|
|
3715 |
{
|
|
3716 |
if (isNaN(result) || !isFinite(result) || (nbvalues==0))
|
|
3717 |
tf_Id( labThisCol[i] ).innerHTML = '.';
|
|
3718 |
else
|
|
3719 |
tf_Id( labThisCol[i] ).innerHTML = result.toFixed( precision );
|
|
3720 |
} catch(e){ }//catch
|
|
3721 |
}//else
|
|
3722 |
}//for i
|
|
3723 |
//eventual row(s) with result are always visible
|
|
3724 |
if(totRowIndex!=undefined && row[totRowIndex[ucol]])
|
|
3725 |
row[totRowIndex[ucol]].style.display = '';
|
|
3726 |
}//for ucol
|
|
3727 |
}//if typeof
|
|
3728 |
|
|
3729 |
if(this.onAfterOperation) this.onAfterOperation.call(null,this);
|
|
3730 |
},
|
|
3731 |
|
|
3732 |
SetPage: function( cmd )
|
|
3733 |
/*====================================================
|
|
3734 |
- If paging set true shows page according to
|
|
3735 |
param value (string or number):
|
|
3736 |
- strings: 'next','previous','last','first' or
|
|
3737 |
- number: page number
|
|
3738 |
=====================================================*/
|
|
3739 |
{
|
|
3740 |
if( this.hasGrid && this.paging )
|
|
3741 |
{
|
|
3742 |
var btnEvt = this.pagingBtnEvents, cmdtype = typeof cmd;
|
|
3743 |
if(cmdtype=='string')
|
|
3744 |
{
|
|
3745 |
switch(cmd.tf_LCase())
|
|
3746 |
{
|
|
3747 |
case 'next':
|
|
3748 |
btnEvt.next();
|
|
3749 |
break;
|
|
3750 |
case 'previous':
|
|
3751 |
btnEvt.prev();
|
|
3752 |
break;
|
|
3753 |
case 'last':
|
|
3754 |
btnEvt.last();
|
|
3755 |
break;
|
|
3756 |
case 'first':
|
|
3757 |
btnEvt.first();
|
|
3758 |
break;
|
|
3759 |
default:
|
|
3760 |
btnEvt.next();
|
|
3761 |
break;
|
|
3762 |
}//switch
|
|
3763 |
}
|
|
3764 |
if(cmdtype=='number') this.ChangePage( (cmd-1) );
|
|
3765 |
}// this.hasGrid
|
|
3766 |
},
|
|
3767 |
|
|
3768 |
RefreshFiltersGrid: function()
|
|
3769 |
/*====================================================
|
|
3770 |
- retrieves select, multiple and checklist filters
|
|
3771 |
- calls method repopulating filters
|
|
3772 |
=====================================================*/
|
|
3773 |
{
|
|
3774 |
var slcA1 = this.GetFiltersByType( this.fltTypeSlc,true );
|
|
3775 |
var slcA2 = this.GetFiltersByType( this.fltTypeMulti,true );
|
|
3776 |
var slcA3 = this.GetFiltersByType( this.fltTypeCheckList,true );
|
|
3777 |
var slcIndex = slcA1.concat(slcA2);
|
|
3778 |
slcIndex = slcIndex.concat(slcA3);
|
|
3779 |
|
|
3780 |
if( this.activeFilterId!=null )//for paging
|
|
3781 |
{
|
|
3782 |
var activeFlt = this.activeFilterId.split('_')[0];
|
|
3783 |
activeFlt = activeFlt.split(this.prfxFlt)[1];
|
|
3784 |
var slcSelectedValue;
|
|
3785 |
for(var i=0; i<slcIndex.length; i++)
|
|
3786 |
{
|
|
3787 |
var curSlc = tf_Id(this.fltIds[slcIndex[i]]);
|
|
3788 |
slcSelectedValue = this.GetFilterValue( slcIndex[i] );
|
|
3789 |
//if(activeFlt==slcIndex[i] && slcA3.tf_Has(slcIndex[i]) && slcSelectedValue!=this.displayAllText) continue;
|
|
3790 |
if(activeFlt!=slcIndex[i] || (this.paging && slcA1.tf_Has(slcIndex[i]) && activeFlt==slcIndex[i] ) ||
|
|
3791 |
( !this.paging && (slcA3.tf_Has(slcIndex[i]) || slcA2.tf_Has(slcIndex[i]) ) /*&& activeFlt==slcIndex[i]*/) ||
|
|
3792 |
slcSelectedValue==this.displayAllText )
|
|
3793 |
//(this.paging && (!slcA3.tf_Has(slcIndex[i]) && !slcA2.tf_Has(slcIndex[i]) && activeFlt==slcIndex[i]) ) )
|
|
3794 |
{
|
|
3795 |
if(slcA3.tf_Has(slcIndex[i]))
|
|
3796 |
this.checkListDiv[slcIndex[i]].innerHTML = '';
|
|
3797 |
else curSlc.innerHTML = '';
|
|
3798 |
|
|
3799 |
if(this.fillSlcOnDemand) { //1st option needs to be inserted
|
|
3800 |
var opt0 = tf_CreateOpt(this.displayAllText,'');
|
|
3801 |
curSlc.appendChild( opt0 );
|
|
3802 |
}
|
|
3803 |
|
|
3804 |
if(slcA3.tf_Has(slcIndex[i]))
|
|
3805 |
this._PopulateCheckList(slcIndex[i]);
|
|
3806 |
else
|
|
3807 |
this._PopulateSelect(slcIndex[i],true);
|
|
3808 |
|
|
3809 |
this.SetFilterValue(slcIndex[i],slcSelectedValue);
|
|
3810 |
}
|
|
3811 |
}// for i
|
|
3812 |
}
|
|
3813 |
},
|
|
3814 |
|
|
3815 |
RememberFiltersValue: function( name )
|
|
3816 |
/*==============================================
|
|
3817 |
- stores filters' values in a cookie
|
|
3818 |
when Filter() method is called
|
|
3819 |
- Params:
|
|
3820 |
- name: cookie name (string)
|
|
3821 |
- credits to Florent Hirchy
|
|
3822 |
===============================================*/
|
|
3823 |
{
|
|
3824 |
var flt_values = [];
|
|
3825 |
for(var i=0; i<this.fltIds.length; i++)
|
|
3826 |
{//creates an array with filters' values
|
|
3827 |
value = this.GetFilterValue(i);
|
|
3828 |
if (value == '') value = ' ';
|
|
3829 |
flt_values.push(value);
|
|
3830 |
}
|
|
3831 |
flt_values.push(this.fltIds.length); //adds array size
|
|
3832 |
tf_WriteCookie(
|
|
3833 |
name,
|
|
3834 |
flt_values,
|
|
3835 |
this.cookieDuration
|
|
3836 |
); //writes cookie
|
|
3837 |
},
|
|
3838 |
|
|
3839 |
RememberPageNb: function( name )
|
|
3840 |
/*==============================================
|
|
3841 |
- stores page number value in a cookie
|
|
3842 |
when ChangePage method is called
|
|
3843 |
- Params:
|
|
3844 |
- name: cookie name (string)
|
|
3845 |
===============================================*/
|
|
3846 |
{
|
|
3847 |
tf_WriteCookie(
|
|
3848 |
name,
|
|
3849 |
this.currentPageNb,
|
|
3850 |
this.cookieDuration
|
|
3851 |
); //writes cookie
|
|
3852 |
},
|
|
3853 |
|
|
3854 |
RememberPageLength: function( name )
|
|
3855 |
/*==============================================
|
|
3856 |
- stores page length value in a cookie
|
|
3857 |
when ChangePageLength method is called
|
|
3858 |
- Params:
|
|
3859 |
- name: cookie name (string)
|
|
3860 |
===============================================*/
|
|
3861 |
{
|
|
3862 |
tf_WriteCookie(
|
|
3863 |
name,
|
|
3864 |
this.resultsPerPageSlc.selectedIndex,
|
|
3865 |
this.cookieDuration
|
|
3866 |
); //writes cookie
|
|
3867 |
},
|
|
3868 |
|
|
3869 |
ResetValues: function()
|
|
3870 |
{
|
|
3871 |
this.EvtManager(this.Evt.name.resetvalues);
|
|
3872 |
},
|
|
3873 |
|
|
3874 |
_ResetValues: function()
|
|
3875 |
/*==============================================
|
|
3876 |
- re-sets grid values when page is
|
|
3877 |
re-loaded. It invokes ResetGridValues,
|
|
3878 |
ResetPage and ResetPageLength methods
|
|
3879 |
- Params:
|
|
3880 |
- name: cookie name (string)
|
|
3881 |
===============================================*/
|
|
3882 |
{
|
|
3883 |
if(this.rememberGridValues && this.fillSlcOnDemand) //only fillSlcOnDemand
|
|
3884 |
this.ResetGridValues(this.fltsValuesCookie);
|
|
3885 |
if(this.rememberPageLen) this.ResetPageLength( this.pgLenCookie );
|
|
3886 |
if(this.rememberPageNb) this.ResetPage( this.pgNbCookie );
|
|
3887 |
},
|
|
3888 |
|
|
3889 |
ResetGridValues: function( name )
|
|
3890 |
/*==============================================
|
|
3891 |
- re-sets filters' values when page is
|
|
3892 |
re-loaded if load on demand is enabled
|
|
3893 |
- Params:
|
|
3894 |
- name: cookie name (string)
|
|
3895 |
- credits to Florent Hirchy
|
|
3896 |
===============================================*/
|
|
3897 |
{
|
|
3898 |
if(!this.fillSlcOnDemand) return;
|
|
3899 |
var flts = tf_ReadCookie(name); //reads the cookie
|
|
3900 |
var reg = new RegExp(',','g');
|
|
3901 |
var flts_values = flts.split(reg); //creates an array with filters' values
|
|
3902 |
var slcFltsIndex = this.GetFiltersByType(this.fltTypeSlc, true);
|
|
3903 |
var multiFltsIndex = this.GetFiltersByType(this.fltTypeMulti, true);
|
|
3904 |
|
|
3905 |
if(flts_values[(flts_values.length-1)] == this.fltIds.length)
|
|
3906 |
{//if the number of columns is the same as before page reload
|
|
3907 |
for(var i=0; i<(flts_values.length - 1); i++)
|
|
3908 |
{
|
|
3909 |
if (flts_values[i]==' ') continue;
|
|
3910 |
if(this['col'+i]==this.fltTypeSlc || this['col'+i]==this.fltTypeMulti)
|
|
3911 |
{// if fillSlcOnDemand, drop-down needs to contain stored value(s) for filtering
|
|
3912 |
var slc = tf_Id( this.fltIds[i] );
|
|
3913 |
slc.options[0].selected = false;
|
|
3914 |
|
|
3915 |
if( slcFltsIndex.tf_Has(i) )
|
|
3916 |
{//selects
|
|
3917 |
var opt = tf_CreateOpt(flts_values[i],flts_values[i],true);
|
|
3918 |
slc.appendChild(opt);
|
|
3919 |
this.hasStoredValues = true;
|
|
3920 |
}
|
|
3921 |
if(multiFltsIndex.tf_Has(i))
|
|
3922 |
{//multiple select
|
|
3923 |
var s = flts_values[i].split(' '+this.orOperator+' ');
|
|
3924 |
for(j=0; j<s.length; j++)
|
|
3925 |
{
|
|
3926 |
if(s[j]=='') continue;
|
|
3927 |
var opt = tf_CreateOpt(s[j],s[j],true);
|
|
3928 |
slc.appendChild(opt);
|
|
3929 |
this.hasStoredValues = true;
|
|
3930 |
|
|
3931 |
if(tf_isIE)
|
|
3932 |
{// IE multiple selection work-around
|
|
3933 |
this.__deferMultipleSelection(slc,j,false);
|
|
3934 |
hasStoredValues = false;
|
|
3935 |
}
|
|
3936 |
}
|
|
3937 |
}// if multiFltsIndex
|
|
3938 |
}
|
|
3939 |
else if(this['col'+i]==this.fltTypeCheckList)
|
|
3940 |
{
|
|
3941 |
var divChk = this.checkListDiv[i];
|
|
3942 |
divChk.title = divChk.innerHTML;
|
|
3943 |
divChk.innerHTML = '';
|
|
3944 |
|
|
3945 |
var ul = tf_CreateElm('ul',['id',this.fltIds[i]],['colIndex',i]);
|
|
3946 |
ul.className = this.checkListCssClass;
|
|
3947 |
|
|
3948 |
var li0 = tf_CreateCheckItem(this.fltIds[i]+'_0', '', this.displayAllText);
|
|
3949 |
li0.className = this.checkListItemCssClass;
|
|
3950 |
ul.appendChild(li0);
|
|
3951 |
|
|
3952 |
divChk.appendChild(ul);
|
|
3953 |
|
|
3954 |
var s = flts_values[i].split(' '+this.orOperator+' ');
|
|
3955 |
for(j=0; j<s.length; j++)
|
|
3956 |
{
|
|
3957 |
if(s[j]=='') continue;
|
|
3958 |
var li = tf_CreateCheckItem(this.fltIds[i]+'_'+(j+1), s[j], s[j]);
|
|
3959 |
li.className = this.checkListItemCssClass;
|
|
3960 |
ul.appendChild(li);
|
|
3961 |
li.check.checked = true;
|
|
3962 |
this.__setCheckListValues(li.check);
|
|
3963 |
this.hasStoredValues = true;
|
|
3964 |
}
|
|
3965 |
}
|
|
3966 |
}//end for
|
|
3967 |
|
|
3968 |
if(!this.hasStoredValues && this.paging) this.SetPagingInfo();
|
|
3969 |
}//end if
|
|
3970 |
},
|
|
3971 |
|
|
3972 |
ResetPage: function( name )
|
|
3973 |
{
|
|
3974 |
this.EvtManager(this.Evt.name.resetpage);
|
|
3975 |
},
|
|
3976 |
_ResetPage: function( name )
|
|
3977 |
/*==============================================
|
|
3978 |
- re-sets page nb at page re-load
|
|
3979 |
- Params:
|
|
3980 |
- name: cookie name (string)
|
|
3981 |
===============================================*/
|
|
3982 |
{
|
|
3983 |
var pgnb = tf_ReadCookie(name); //reads the cookie
|
|
3984 |
if( pgnb!='' )
|
|
3985 |
this.ChangePage((pgnb-1));
|
|
3986 |
},
|
|
3987 |
|
|
3988 |
ResetPageLength: function( name )
|
|
3989 |
{
|
|
3990 |
this.EvtManager(this.Evt.name.resetpagelength);
|
|
3991 |
},
|
|
3992 |
_ResetPageLength: function( name )
|
|
3993 |
/*==============================================
|
|
3994 |
- re-sets page length at page re-load
|
|
3995 |
- Params:
|
|
3996 |
- name: cookie name (string)
|
|
3997 |
===============================================*/
|
|
3998 |
{
|
|
3999 |
if(!this.paging) return;
|
|
4000 |
var pglenIndex = tf_ReadCookie(name); //reads the cookie
|
|
4001 |
|
|
4002 |
if( pglenIndex!='' )
|
|
4003 |
{
|
|
4004 |
this.resultsPerPageSlc.options[pglenIndex].selected = true;
|
|
4005 |
this.ChangeResultsPerPage();
|
|
4006 |
}
|
|
4007 |
},
|
|
4008 |
|
|
4009 |
SetLoader: function()
|
|
4010 |
/*====================================================
|
|
4011 |
- generates loader div
|
|
4012 |
=====================================================*/
|
|
4013 |
{
|
|
4014 |
if( this.loaderDiv!=null ) return;
|
|
4015 |
var containerDiv = tf_CreateElm( 'div',['id',this.prfxLoader+this.id] );
|
|
4016 |
containerDiv.className = this.loaderCssClass;// for ie<=6
|
|
4017 |
//containerDiv.style.display = 'none';
|
|
4018 |
var targetEl = (this.loaderTgtId==null)
|
|
4019 |
? (this.gridLayout ? this.tblCont : this.tbl.parentNode) : tf_Id( this.loaderTgtId );
|
|
4020 |
if(this.loaderTgtId==null) targetEl.insertBefore(containerDiv, this.tbl);
|
|
4021 |
else targetEl.appendChild( containerDiv );
|
|
4022 |
this.loaderDiv = tf_Id(this.prfxLoader+this.id);
|
|
4023 |
if(this.loaderHtml==null)
|
|
4024 |
this.loaderDiv.appendChild( tf_CreateText(this.loaderText) );
|
|
4025 |
else this.loaderDiv.innerHTML = this.loaderHtml;
|
|
4026 |
},
|
|
4027 |
|
|
4028 |
RemoveLoader: function()
|
|
4029 |
/*====================================================
|
|
4030 |
- removes loader div
|
|
4031 |
=====================================================*/
|
|
4032 |
{
|
|
4033 |
if( this.loaderDiv==null ) return;
|
|
4034 |
var targetEl = (this.loaderTgtId==null)
|
|
4035 |
? (this.gridLayout ? this.tblCont : this.tbl.parentNode) : tf_Id( this.loaderTgtId );
|
|
4036 |
targetEl.removeChild(this.loaderDiv);
|
|
4037 |
this.loaderDiv = null;
|
|
4038 |
},
|
|
4039 |
|
|
4040 |
ShowLoader: function(p)
|
|
4041 |
/*====================================================
|
|
4042 |
- displays/hides loader div
|
|
4043 |
=====================================================*/
|
|
4044 |
{
|
|
4045 |
if(!this.loader || !this.loaderDiv) return;
|
|
4046 |
if(this.loaderDiv.style.display==p) return;
|
|
4047 |
var o = this;
|
|
4048 |
|
|
4049 |
function displayLoader(){
|
|
4050 |
if(!o.loaderDiv) return;
|
|
4051 |
if(o.onShowLoader && p!='none')
|
|
4052 |
o.onShowLoader.call(null,o);
|
|
4053 |
o.loaderDiv.style.display = p;
|
|
4054 |
if(o.onHideLoader && p=='none')
|
|
4055 |
o.onHideLoader.call(null,o);
|
|
4056 |
}
|
|
4057 |
|
|
4058 |
var t = (p=='none') ? this.loaderCloseDelay : 1;
|
|
4059 |
window.setTimeout(displayLoader,t);
|
|
4060 |
},
|
|
4061 |
|
|
4062 |
StatusMsg: function(t)
|
|
4063 |
/*====================================================
|
|
4064 |
- sets status messages
|
|
4065 |
=====================================================*/
|
|
4066 |
{
|
|
4067 |
if(t==undefined) this.StatusMsg('');
|
|
4068 |
if(this.status) this.WinStatusMsg(t);
|
|
4069 |
if(this.statusBar) this.StatusBarMsg(t);
|
|
4070 |
},
|
|
4071 |
|
|
4072 |
StatusBarMsg: function(t)
|
|
4073 |
/*====================================================
|
|
4074 |
- sets status bar messages
|
|
4075 |
=====================================================*/
|
|
4076 |
{
|
|
4077 |
if(!this.statusBar || !this.statusBarSpan) return;
|
|
4078 |
var o = this;
|
|
4079 |
function setMsg(){
|
|
4080 |
o.statusBarSpan.innerHTML = t;
|
|
4081 |
}
|
|
4082 |
var d = (t=='') ? (this.statusBarCloseDelay) : 1;
|
|
4083 |
window.setTimeout(setMsg,d);
|
|
4084 |
},
|
|
4085 |
|
|
4086 |
WinStatusMsg: function(t)
|
|
4087 |
/*====================================================
|
|
4088 |
- sets window status messages
|
|
4089 |
=====================================================*/
|
|
4090 |
{
|
|
4091 |
if(!this.status) return;
|
|
4092 |
window.status = t;
|
|
4093 |
},
|
|
4094 |
|
|
4095 |
ClearFilters: function()
|
|
4096 |
{
|
|
4097 |
this.EvtManager(this.Evt.name.clear);
|
|
4098 |
},
|
|
4099 |
_ClearFilters: function()
|
|
4100 |
/*====================================================
|
|
4101 |
- clears grid filters
|
|
4102 |
=====================================================*/
|
|
4103 |
{
|
|
4104 |
if( !this.fltGrid ) return;
|
|
4105 |
for(var i=0; i<this.fltIds.length; i++)
|
|
4106 |
this.SetFilterValue(i,'');
|
|
4107 |
if(this.refreshFilters){
|
|
4108 |
this.activeFilterId = '';
|
|
4109 |
this.RefreshFiltersGrid();
|
|
4110 |
}
|
|
4111 |
if(this.rememberPageLen) tf_RemoveCookie(this.pgLenCookie);
|
|
4112 |
if(this.rememberPageNb) tf_RemoveCookie(this.pgNbCookie);
|
|
4113 |
},
|
|
4114 |
|
|
4115 |
UnhighlightAll: function()
|
|
4116 |
/*====================================================
|
|
4117 |
- removes keyword highlighting
|
|
4118 |
=====================================================*/
|
|
4119 |
{
|
|
4120 |
if( this.highlightKeywords && this.searchArgs!=null )
|
|
4121 |
for(var y=0; y<this.searchArgs.length; y++)
|
|
4122 |
tf_UnhighlightWord(
|
|
4123 |
this.tbl,this.searchArgs[y],
|
|
4124 |
this.highlightCssClass
|
|
4125 |
);
|
|
4126 |
},
|
|
4127 |
|
|
4128 |
RefreshGrid: function()
|
|
4129 |
/*====================================================
|
|
4130 |
- Re-generates filters grid
|
|
4131 |
=====================================================*/
|
|
4132 |
{
|
|
4133 |
this.RemoveGrid();
|
|
4134 |
setFilterGrid(this.id, this.startRow, this.fObj);
|
|
4135 |
},
|
|
4136 |
|
|
4137 |
__resetGrid: function()
|
|
4138 |
/*====================================================
|
|
4139 |
- Only used by AddGrid() method
|
|
4140 |
- Resets filtering grid bar if previously removed
|
|
4141 |
=====================================================*/
|
|
4142 |
{
|
|
4143 |
if( this.isFirstLoad ) return;
|
|
4144 |
|
|
4145 |
// grid was removed, grid row element is stored in this.fltGridEl property
|
|
4146 |
this.tbl.rows[this.filtersRowIndex].parentNode.insertBefore(
|
|
4147 |
this.fltGridEl,
|
|
4148 |
this.tbl.rows[this.filtersRowIndex]
|
|
4149 |
);
|
|
4150 |
|
|
4151 |
if( this.isExternalFlt )
|
|
4152 |
{// filters are appended in external placeholders elements
|
|
4153 |
for(var ct=0; ct<this.externalFltTgtIds.length; ct++ )
|
|
4154 |
if( tf_Id(this.externalFltTgtIds[ct]) )
|
|
4155 |
tf_Id(this.externalFltTgtIds[ct]).appendChild(this.externalFltEls[ct]);
|
|
4156 |
}
|
|
4157 |
|
|
4158 |
this.nbFilterableRows = this.GetRowsNb();
|
|
4159 |
this.nbVisibleRows = this.nbFilterableRows;
|
|
4160 |
this.nbRows = this.tbl.rows.length;
|
|
4161 |
this.sort = true;
|
|
4162 |
|
|
4163 |
/*** ie bug work-around, filters need to be re-generated
|
|
4164 |
since row is empty; insertBefore method doesn't seem to work properly
|
|
4165 |
with previously generated DOM nodes modified by innerHTML ***/
|
|
4166 |
if( this.tbl.rows[this.filtersRowIndex].innerHTML=='' )
|
|
4167 |
{
|
|
4168 |
this.tbl.deleteRow(this.filtersRowIndex);
|
|
4169 |
this.RemoveGrid();
|
|
4170 |
this.RemoveExternalFlts();
|
|
4171 |
this.fltIds = [];
|
|
4172 |
this.isFirstLoad = true;
|
|
4173 |
this.AddGrid();
|
|
4174 |
|
|
4175 |
}
|
|
4176 |
|
|
4177 |
this.hasGrid = true;
|
|
4178 |
},
|
|
4179 |
|
|
4180 |
__deferMultipleSelection: function(slc,index,filter)
|
|
4181 |
/*====================================================
|
|
4182 |
- IE bug: it seems there is no way to make
|
|
4183 |
multiple selections programatically, only last
|
|
4184 |
selection is kept (multiple select previously
|
|
4185 |
populated via DOM)
|
|
4186 |
- Turn-around: defer selection with a setTimeout
|
|
4187 |
If you find an alternative elegant solution to
|
|
4188 |
this let me know ;-)
|
|
4189 |
- For the moment only this solution seems
|
|
4190 |
to work!
|
|
4191 |
- Params:
|
|
4192 |
- slc = select object (select obj)
|
|
4193 |
- index to be selected (integer)
|
|
4194 |
- execute filtering (boolean)
|
|
4195 |
=====================================================*/
|
|
4196 |
{
|
|
4197 |
if(slc.nodeName.tf_LCase() != 'select') return;
|
|
4198 |
var doFilter = (filter==undefined) ? false : filter;
|
|
4199 |
var o = this;
|
|
4200 |
window.setTimeout(
|
|
4201 |
function(){
|
|
4202 |
slc.options[0].selected = false;
|
|
4203 |
|
|
4204 |
if(slc.options[index].value=='')
|
|
4205 |
slc.options[index].selected = false;
|
|
4206 |
else
|
|
4207 |
slc.options[index].selected = true;
|
|
4208 |
if(doFilter) o.Filter();
|
|
4209 |
},
|
|
4210 |
.1
|
|
4211 |
);
|
|
4212 |
},
|
|
4213 |
|
|
4214 |
__getCustomValues: function(colIndex)
|
|
4215 |
/*====================================================
|
|
4216 |
- Returns an array [[values],[texts]] with
|
|
4217 |
custom values for a given filter
|
|
4218 |
- Param: column index (integer)
|
|
4219 |
=====================================================*/
|
|
4220 |
{
|
|
4221 |
if(colIndex==undefined) return;
|
|
4222 |
var isCustomSlc = (this.hasCustomSlcOptions //custom select test
|
|
4223 |
&& this.customSlcOptions.cols.tf_Has(colIndex));
|
|
4224 |
if(!isCustomSlc) return;
|
|
4225 |
var optTxt = [], optArray = [];
|
|
4226 |
var index = this.customSlcOptions.cols.tf_IndexByValue(colIndex);
|
|
4227 |
var slcValues = this.customSlcOptions.values[index];
|
|
4228 |
var slcTexts = this.customSlcOptions.texts[index];
|
|
4229 |
var slcSort = this.customSlcOptions.sorts[index];
|
|
4230 |
for(var r=0; r<slcValues.length; r++)
|
|
4231 |
{
|
|
4232 |
optArray.push(slcValues[r]);
|
|
4233 |
if(slcTexts[r]!=undefined)
|
|
4234 |
optTxt.push(slcTexts[r]);
|
|
4235 |
else
|
|
4236 |
optTxt.push(slcValues[r]);
|
|
4237 |
}
|
|
4238 |
if(slcSort)
|
|
4239 |
{
|
|
4240 |
optArray.sort();
|
|
4241 |
optTxt.sort();
|
|
4242 |
}
|
|
4243 |
return [optArray,optTxt];
|
|
4244 |
},
|
|
4245 |
|
|
4246 |
__setCheckListValues: function(o)
|
|
4247 |
/*====================================================
|
|
4248 |
- Sets checked items information of a checklist
|
|
4249 |
=====================================================*/
|
|
4250 |
{
|
|
4251 |
if(o==null) return;
|
|
4252 |
var chkValue = o.value; //checked item value
|
|
4253 |
var chkIndex = parseInt(o.id.split('_')[2]);
|
|
4254 |
var filterTag = 'ul', itemTag = 'li';
|
|
4255 |
var n = o;
|
|
4256 |
|
|
4257 |
//ul tag search
|
|
4258 |
while(n.nodeName.tf_LCase() != filterTag)
|
|
4259 |
n = n.parentNode;
|
|
4260 |
|
|
4261 |
if(n.nodeName.tf_LCase() != filterTag) return;
|
|
4262 |
|
|
4263 |
var li = n.childNodes[chkIndex];
|
|
4264 |
var colIndex = n.getAttribute('colIndex');
|
|
4265 |
var fltValue = n.getAttribute('value'); //filter value (ul tag)
|
|
4266 |
var fltIndexes = n.getAttribute('indexes'); //selected items (ul tag)
|
|
4267 |
|
|
4268 |
if(o.checked)
|
|
4269 |
{
|
|
4270 |
if(chkValue=='')
|
|
4271 |
{//show all item
|
|
4272 |
if((fltIndexes!=null && fltIndexes!=''))
|
|
4273 |
{
|
|
4274 |
var indSplit = fltIndexes.split(this.separator);//items indexes
|
|
4275 |
for(var u=0; u<indSplit.length; u++)
|
|
4276 |
{//checked items loop
|
|
4277 |
var cChk = tf_Id(this.fltIds[colIndex]+'_'+indSplit[u]); //checked item
|
|
4278 |
if(cChk)
|
|
4279 |
{
|
|
4280 |
cChk.checked = false;
|
|
4281 |
tf_removeClass(
|
|
4282 |
n.childNodes[indSplit[u]],
|
|
4283 |
this.checkListSlcItemCssClass
|
|
4284 |
);
|
|
4285 |
}
|
|
4286 |
}
|
|
4287 |
}
|
|
4288 |
n.setAttribute('value', '');
|
|
4289 |
n.setAttribute('indexes', '');
|
|
4290 |
|
|
4291 |
} else {
|
|
4292 |
fltValue = (fltValue) ? fltValue : '';
|
|
4293 |
chkValue = (fltValue+' '+chkValue +' '+this.orOperator).tf_Trim();
|
|
4294 |
chkIndex = fltIndexes + chkIndex + this.separator;
|
|
4295 |
n.setAttribute('value', chkValue );
|
|
4296 |
n.setAttribute('indexes', chkIndex);
|
|
4297 |
//1st option unchecked
|
|
4298 |
if(tf_Id(this.fltIds[colIndex]+'_0'))
|
|
4299 |
tf_Id(this.fltIds[colIndex]+'_0').checked = false;
|
|
4300 |
}
|
|
4301 |
|
|
4302 |
if(li.nodeName.tf_LCase() == itemTag)
|
|
4303 |
{
|
|
4304 |
tf_removeClass(n.childNodes[0],this.checkListSlcItemCssClass);
|
|
4305 |
tf_addClass(li,this.checkListSlcItemCssClass);
|
|
4306 |
}
|
|
4307 |
} else { //removes values and indexes
|
|
4308 |
if(chkValue!='')
|
|
4309 |
{
|
|
4310 |
var replaceValue = new RegExp(tf_RegexpEscape(chkValue+' '+this.orOperator));
|
|
4311 |
fltValue = fltValue.replace(replaceValue,'');
|
|
4312 |
n.setAttribute('value', fltValue);
|
|
4313 |
|
|
4314 |
var replaceIndex = new RegExp(tf_RegexpEscape(chkIndex + this.separator));
|
|
4315 |
fltIndexes = fltIndexes.replace(replaceIndex,'');
|
|
4316 |
n.setAttribute('indexes', fltIndexes);
|
|
4317 |
}
|
|
4318 |
if(li.nodeName.tf_LCase() == itemTag)
|
|
4319 |
tf_removeClass(li,this.checkListSlcItemCssClass);
|
|
4320 |
}
|
|
4321 |
|
|
4322 |
},
|
|
4323 |
|
|
4324 |
__containsStr: function(arg,data,fltType,forceMatch)
|
|
4325 |
/*==============================================
|
|
4326 |
- Checks if data contains searched arg,
|
|
4327 |
returns a boolean
|
|
4328 |
- Params:
|
|
4329 |
- arg: searched string
|
|
4330 |
- data: data string
|
|
4331 |
- fltType: filter type (string,
|
|
4332 |
exact match by default for selects -
|
|
4333 |
optional)
|
|
4334 |
- forceMatch: boolean forcing exact
|
|
4335 |
match (optional)
|
|
4336 |
===============================================*/
|
|
4337 |
{
|
|
4338 |
// Improved by Cedric Wartel (cwl)
|
|
4339 |
// automatic exact match for selects and special characters are now filtered
|
|
4340 |
var regexp;
|
|
4341 |
var modifier = (this.matchCase) ? 'g' : 'gi';
|
|
4342 |
var exactMatch = (forceMatch==undefined) ? this.exactMatch : forceMatch;
|
|
4343 |
if(exactMatch || (fltType!=this.fltTypeInp && fltType!=undefined))//Váry Péter's patch
|
|
4344 |
regexp = new RegExp('(^\\s*)'+tf_RegexpEscape(arg)+'(\\s*$)', modifier);
|
|
4345 |
else
|
|
4346 |
regexp = new RegExp(tf_RegexpEscape(arg), modifier);
|
|
4347 |
return regexp.test(data);
|
|
4348 |
},
|
|
4349 |
|
|
4350 |
IncludeFile: function(fileId, filePath, callback, type)
|
|
4351 |
{
|
|
4352 |
var ftype = (type==undefined) ? 'script' : type;
|
|
4353 |
var isImported = tf_isImported(filePath, ftype);
|
|
4354 |
if( isImported ) return;
|
|
4355 |
|
|
4356 |
var o = this, isLoaded = false, file;
|
|
4357 |
var head = tf_Tag(document,'head')[0];
|
|
4358 |
|
|
4359 |
if(ftype.tf_LCase() == 'link')
|
|
4360 |
file = tf_CreateElm(
|
|
4361 |
'link', ['id',fileId], ['type','text/css'],
|
|
4362 |
['rel','stylesheet'], ['href',filePath]
|
|
4363 |
);
|
|
4364 |
else
|
|
4365 |
file = tf_CreateElm(
|
|
4366 |
'script', ['id',fileId],
|
|
4367 |
['type','text/javascript'], ['src',filePath]
|
|
4368 |
);
|
|
4369 |
|
|
4370 |
file.onload = file.onreadystatechange = function()
|
|
4371 |
{
|
|
4372 |
if (!isLoaded &&
|
|
4373 |
(!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete'))
|
|
4374 |
{
|
|
4375 |
isLoaded = true;
|
|
4376 |
if (typeof callback === 'function')
|
|
4377 |
callback(o);
|
|
4378 |
}
|
|
4379 |
}
|
|
4380 |
head.appendChild(file);
|
|
4381 |
},
|
|
4382 |
|
|
4383 |
/*====================================================
|
|
4384 |
- Additional public methods for developers
|
|
4385 |
=====================================================*/
|
|
4386 |
|
|
4387 |
HasGrid: function()
|
|
4388 |
/*====================================================
|
|
4389 |
- checks if table has a filter grid
|
|
4390 |
- returns a boolean
|
|
4391 |
=====================================================*/
|
|
4392 |
{
|
|
4393 |
return this.hasGrid;
|
|
4394 |
},
|
|
4395 |
|
|
4396 |
GetFiltersId: function()
|
|
4397 |
/*====================================================
|
|
4398 |
- returns an array containing filters ids
|
|
4399 |
- Note that hidden filters are also returned
|
|
4400 |
=====================================================*/
|
|
4401 |
{
|
|
4402 |
if( !this.hasGrid ) return;
|
|
4403 |
return this.fltIds;
|
|
4404 |
},
|
|
4405 |
|
|
4406 |
GetValidRowsIndex: function()
|
|
4407 |
/*====================================================
|
|
4408 |
- returns an array containing valid rows indexes
|
|
4409 |
(valid rows upon filtering)
|
|
4410 |
=====================================================*/
|
|
4411 |
{
|
|
4412 |
if( !this.hasGrid ) return;
|
|
4413 |
return this.validRowsIndex;
|
|
4414 |
},
|
|
4415 |
|
|
4416 |
GetFiltersRowIndex: function()
|
|
4417 |
/*====================================================
|
|
4418 |
- Returns the index of the row containing the
|
|
4419 |
filters
|
|
4420 |
=====================================================*/
|
|
4421 |
{
|
|
4422 |
if( !this.hasGrid ) return;
|
|
4423 |
return this.filtersRowIndex;
|
|
4424 |
},
|
|
4425 |
|
|
4426 |
GetHeadersRowIndex: function()
|
|
4427 |
/*====================================================
|
|
4428 |
- Returns the index of the headers row
|
|
4429 |
=====================================================*/
|
|
4430 |
{
|
|
4431 |
if( !this.hasGrid ) return;
|
|
4432 |
return this.headersRow;
|
|
4433 |
},
|
|
4434 |
|
|
4435 |
GetStartRowIndex: function()
|
|
4436 |
/*====================================================
|
|
4437 |
- Returns the index of the row from which will
|
|
4438 |
start the filtering process (1st filterable row)
|
|
4439 |
=====================================================*/
|
|
4440 |
{
|
|
4441 |
if( !this.hasGrid ) return;
|
|
4442 |
return this.refRow;
|
|
4443 |
},
|
|
4444 |
|
|
4445 |
GetLastRowIndex: function()
|
|
4446 |
/*====================================================
|
|
4447 |
- Returns the index of the last row
|
|
4448 |
=====================================================*/
|
|
4449 |
{
|
|
4450 |
if( !this.hasGrid ) return;
|
|
4451 |
return (this.nbRows-1);
|
|
4452 |
},
|
|
4453 |
|
|
4454 |
AddPaging: function(filterTable)
|
|
4455 |
/*====================================================
|
|
4456 |
- Adds paging feature if filter grid bar is
|
|
4457 |
already set
|
|
4458 |
- Param(s):
|
|
4459 |
- execFilter: if true table is filtered
|
|
4460 |
(boolean)
|
|
4461 |
=====================================================*/
|
|
4462 |
{
|
|
4463 |
if( !this.hasGrid || this.paging ) return;
|
|
4464 |
this.paging = true;
|
|
4465 |
this.isPagingRemoved = true;
|
|
4466 |
this.SetPaging();
|
|
4467 |
if(filterTable) this.Filter();
|
|
4468 |
}
|
|
4469 |
|
|
4470 |
}
|
|
4471 |
|
|
4472 |
/* --- */
|
|
4473 |
|
|
4474 |
/*====================================================
|
|
4475 |
- General TF utility fns below
|
|
4476 |
=====================================================*/
|
|
4477 |
|
|
4478 |
function tf_GetChildElms(n)
|
|
4479 |
/*====================================================
|
|
4480 |
- checks passed node is a ELEMENT_NODE nodeType=1
|
|
4481 |
- removes TEXT_NODE nodeType=3
|
|
4482 |
=====================================================*/
|
|
4483 |
{
|
|
4484 |
if(n!=undefined && n.nodeType == 1)
|
|
4485 |
{
|
|
4486 |
var enfants = n.childNodes;
|
|
4487 |
for(var i=0; i<enfants.length; i++)
|
|
4488 |
{
|
|
4489 |
var child = enfants[i];
|
|
4490 |
if(child.nodeType == 3)
|
|
4491 |
{
|
|
4492 |
n.removeChild(child);
|
|
4493 |
i = -1;
|
|
4494 |
}
|
|
4495 |
}
|
|
4496 |
return n;
|
|
4497 |
}
|
|
4498 |
}
|
|
4499 |
|
|
4500 |
function tf_GetNodeText(n)
|
|
4501 |
/*====================================================
|
|
4502 |
- returns text + text of child nodes of a node
|
|
4503 |
=====================================================*/
|
|
4504 |
{
|
|
4505 |
/*if(n.innerText) return n.innerText.tf_Trim();
|
|
4506 |
var s = '';
|
|
4507 |
var enfants = n.childNodes;
|
|
4508 |
for(var i=0; i<enfants.length; i++)
|
|
4509 |
{
|
|
4510 |
var child = enfants[i];
|
|
4511 |
if(child.nodeType == 3) s+= child.data;
|
|
4512 |
else s+= tf_GetNodeText(child).tf_Trim();
|
|
4513 |
}*/
|
|
4514 |
var s = n.textContent || n.innerText || n.innerHTML.replace(/\<[^<>]+>/g, '');
|
|
4515 |
return s.replace(/^\s+/, '').replace(/\s+$/, '');
|
|
4516 |
|
|
4517 |
return s.tf_Trim();
|
|
4518 |
}
|
|
4519 |
|
|
4520 |
function tf_isObj(varname)
|
|
4521 |
/*====================================================
|
|
4522 |
- checks if var exists and is an object
|
|
4523 |
- returns a boolean
|
|
4524 |
=====================================================*/
|
|
4525 |
{
|
|
4526 |
var isO = false;
|
|
4527 |
if( window[varname] && (typeof window[varname]).tf_LCase()=='object' )
|
|
4528 |
isO = true;
|
|
4529 |
return isO;
|
|
4530 |
}
|
|
4531 |
|
|
4532 |
function tf_isFn(fn)
|
|
4533 |
/*====================================================
|
|
4534 |
- checks if passed param is a function
|
|
4535 |
- returns a boolean
|
|
4536 |
=====================================================*/
|
|
4537 |
{
|
|
4538 |
var isFn = false;
|
|
4539 |
if(fn && (typeof fn).tf_LCase() == 'function')
|
|
4540 |
isFn = true;
|
|
4541 |
return isFn;
|
|
4542 |
}
|
|
4543 |
|
|
4544 |
function tf_Id(id)
|
|
4545 |
/*====================================================
|
|
4546 |
- this is just a getElementById shortcut
|
|
4547 |
=====================================================*/
|
|
4548 |
{
|
|
4549 |
return document.getElementById( id );
|
|
4550 |
}
|
|
4551 |
|
|
4552 |
function tf_Tag(o,tagname)
|
|
4553 |
/*====================================================
|
|
4554 |
- this is just a getElementsByTagName shortcut
|
|
4555 |
=====================================================*/
|
|
4556 |
{
|
|
4557 |
return o.getElementsByTagName( tagname );
|
|
4558 |
}
|
|
4559 |
|
|
4560 |
function tf_RegexpEscape(s)
|
|
4561 |
/*====================================================
|
|
4562 |
- escapes special characters [\^$.|?*+()
|
|
4563 |
for regexp
|
|
4564 |
- Many thanks to Cedric Wartel for this fn
|
|
4565 |
=====================================================*/
|
|
4566 |
{
|
|
4567 |
// traite les caractères spéciaux [\^$.|?*+()
|
|
4568 |
//remplace le carctère c par \c
|
|
4569 |
function escape(e)
|
|
4570 |
{
|
|
4571 |
a = new RegExp('\\'+e,'g');
|
|
4572 |
s = s.replace(a,'\\'+e);
|
|
4573 |
}
|
|
4574 |
|
|
4575 |
chars = new Array('\\','[','^','$','.','|','?','*','+','(',')');
|
|
4576 |
//for(e in chars) escape(chars[e]); // compatibility issue with prototype
|
|
4577 |
for(var e=0; e<chars.length; e++) escape(chars[e]);
|
|
4578 |
return s;
|
|
4579 |
}
|
|
4580 |
|
|
4581 |
function tf_CreateElm(tag)
|
|
4582 |
/*====================================================
|
|
4583 |
- creates an html element with its attributes
|
|
4584 |
- accepts the following params:
|
|
4585 |
- a string defining the html tag
|
|
4586 |
to create
|
|
4587 |
- an undetermined # of arrays containing the
|
|
4588 |
couple 'attribute name','value' ['id','myId']
|
|
4589 |
=====================================================*/
|
|
4590 |
{
|
|
4591 |
if(tag==undefined || tag==null || tag=='') return;
|
|
4592 |
var el = document.createElement( tag );
|
|
4593 |
if(arguments.length>1)
|
|
4594 |
{
|
|
4595 |
for(var i=0; i<arguments.length; i++)
|
|
4596 |
{
|
|
4597 |
var argtype = typeof arguments[i];
|
|
4598 |
switch( argtype.tf_LCase() )
|
|
4599 |
{
|
|
4600 |
case 'object':
|
|
4601 |
if( arguments[i].length==2 )
|
|
4602 |
{
|
|
4603 |
el.setAttribute( arguments[i][0],arguments[i][1] );
|
|
4604 |
}//if array length==2
|
|
4605 |
break;
|
|
4606 |
}//switch
|
|
4607 |
}//for i
|
|
4608 |
}//if args
|
|
4609 |
return el;
|
|
4610 |
}
|
|
4611 |
|
|
4612 |
function tf_CreateText(node)
|
|
4613 |
/*====================================================
|
|
4614 |
- this is just a document.createTextNode shortcut
|
|
4615 |
=====================================================*/
|
|
4616 |
{
|
|
4617 |
return document.createTextNode( node );
|
|
4618 |
}
|
|
4619 |
|
|
4620 |
function tf_CreateOpt(text,value,isSel)
|
|
4621 |
/*====================================================
|
|
4622 |
- creates an option element and returns it:
|
|
4623 |
- text: displayed text (string)
|
|
4624 |
- value: option value (string)
|
|
4625 |
- isSel: is selected option (boolean)
|
|
4626 |
=====================================================*/
|
|
4627 |
{
|
|
4628 |
var isSelected = isSel ? true : false;
|
|
4629 |
var opt = (isSelected)
|
|
4630 |
? tf_CreateElm('option',['value',value],['selected','true'])
|
|
4631 |
: tf_CreateElm('option',['value',value]);
|
|
4632 |
opt.appendChild(tf_CreateText(text));
|
|
4633 |
return opt;
|
|
4634 |
}
|
|
4635 |
|
|
4636 |
function tf_CreateCheckItem(chkIndex, chkValue, labelText)
|
|
4637 |
/*====================================================
|
|
4638 |
- creates an checklist item and returns it
|
|
4639 |
- accepts the following params:
|
|
4640 |
- chkIndex: index of check item (number)
|
|
4641 |
- chkValue: check item value (string)
|
|
4642 |
- labelText: check item label text (string)
|
|
4643 |
=====================================================*/
|
|
4644 |
{
|
|
4645 |
if(chkIndex==undefined || chkValue==undefined || labelText==undefined )
|
|
4646 |
return;
|
|
4647 |
var li = tf_CreateElm('li');
|
|
4648 |
var label = tf_CreateElm('label',['for',chkIndex]);
|
|
4649 |
var check = tf_CreateElm( 'input',
|
|
4650 |
['id',chkIndex],
|
|
4651 |
['name',chkIndex],
|
|
4652 |
['type','checkbox'],
|
|
4653 |
['value',chkValue] );
|
|
4654 |
label.appendChild(check);
|
|
4655 |
label.appendChild(tf_CreateText(labelText));
|
|
4656 |
li.appendChild(label);
|
|
4657 |
li.label = label;
|
|
4658 |
li.check = check;
|
|
4659 |
return li;
|
|
4660 |
}
|
|
4661 |
|
|
4662 |
function tf_HighlightWord( node,word,cssClass )
|
|
4663 |
/*====================================================
|
|
4664 |
- highlights keyword found in passed node
|
|
4665 |
- accepts the following params:
|
|
4666 |
- node
|
|
4667 |
- word to search
|
|
4668 |
- css class name for highlighting
|
|
4669 |
=====================================================*/
|
|
4670 |
{
|
|
4671 |
// Iterate into this nodes childNodes
|
|
4672 |
if(node.hasChildNodes)
|
|
4673 |
for( var i=0; i<node.childNodes.length; i++ )
|
|
4674 |
tf_HighlightWord(node.childNodes[i],word,cssClass);
|
|
4675 |
|
|
4676 |
// And do this node itself
|
|
4677 |
if(node.nodeType == 3)
|
|
4678 |
{ // text node
|
|
4679 |
var tempNodeVal = node.nodeValue.tf_LCase();
|
|
4680 |
var tempWordVal = word.tf_LCase();
|
|
4681 |
if(tempNodeVal.indexOf(tempWordVal) != -1)
|
|
4682 |
{
|
|
4683 |
var pn = node.parentNode;
|
|
4684 |
if(pn.className != cssClass)
|
|
4685 |
{
|
|
4686 |
// word has not already been highlighted!
|
|
4687 |
var nv = node.nodeValue;
|
|
4688 |
var ni = tempNodeVal.indexOf(tempWordVal);
|
|
4689 |
// Create a load of replacement nodes
|
|
4690 |
var before = tf_CreateText(nv.substr(0,ni));
|
|
4691 |
var docWordVal = nv.substr(ni,word.length);
|
|
4692 |
var after = tf_CreateText(nv.substr(ni+word.length));
|
|
4693 |
var hiwordtext = tf_CreateText(docWordVal);
|
|
4694 |
var hiword = tf_CreateElm('span');
|
|
4695 |
hiword.className = cssClass;
|
|
4696 |
hiword.appendChild(hiwordtext);
|
|
4697 |
pn.insertBefore(before,node);
|
|
4698 |
pn.insertBefore(hiword,node);
|
|
4699 |
pn.insertBefore(after,node);
|
|
4700 |
pn.removeChild(node);
|
|
4701 |
}
|
|
4702 |
}
|
|
4703 |
}// if node.nodeType == 3
|
|
4704 |
}
|
|
4705 |
|
|
4706 |
function tf_UnhighlightWord( node,word,cssClass )
|
|
4707 |
/*====================================================
|
|
4708 |
- removes highlights found in passed node
|
|
4709 |
- accepts the following params:
|
|
4710 |
- node
|
|
4711 |
- word to search
|
|
4712 |
- css class name for highlighting
|
|
4713 |
=====================================================*/
|
|
4714 |
{
|
|
4715 |
// Iterate into this nodes childNodes
|
|
4716 |
if(node.hasChildNodes)
|
|
4717 |
for( var i=0; i<node.childNodes.length; i++ )
|
|
4718 |
tf_UnhighlightWord(node.childNodes[i],word,cssClass);
|
|
4719 |
|
|
4720 |
// And do this node itself
|
|
4721 |
if(node.nodeType == 3)
|
|
4722 |
{ // text node
|
|
4723 |
var tempNodeVal = node.nodeValue.tf_LCase();
|
|
4724 |
var tempWordVal = word.tf_LCase();
|
|
4725 |
if(tempNodeVal.indexOf(tempWordVal) != -1)
|
|
4726 |
{
|
|
4727 |
var pn = node.parentNode;
|
|
4728 |
if(pn.className == cssClass)
|
|
4729 |
{
|
|
4730 |
var prevSib = pn.previousSibling;
|
|
4731 |
var nextSib = pn.nextSibling;
|
|
4732 |
nextSib.nodeValue = prevSib.nodeValue + node.nodeValue + nextSib.nodeValue;
|
|
4733 |
prevSib.nodeValue = '';
|
|
4734 |
node.nodeValue = '';
|
|
4735 |
}
|
|
4736 |
}
|
|
4737 |
}// if node.nodeType == 3
|
|
4738 |
}
|
|
4739 |
|
|
4740 |
function tf_addEvent(obj,event_name,func_name)
|
|
4741 |
{
|
|
4742 |
if (obj.attachEvent)
|
|
4743 |
obj.attachEvent('on'+event_name, func_name);
|
|
4744 |
else if(obj.addEventListener)
|
|
4745 |
obj.addEventListener(event_name,func_name,true);
|
|
4746 |
else
|
|
4747 |
obj['on'+event_name] = func_name;
|
|
4748 |
}
|
|
4749 |
|
|
4750 |
function tf_removeEvent(obj,event_name,func_name)
|
|
4751 |
{
|
|
4752 |
if (obj.detachEvent)
|
|
4753 |
obj.detachEvent('on'+event_name,func_name);
|
|
4754 |
else if(obj.removeEventListener)
|
|
4755 |
obj.removeEventListener(event_name,func_name,true);
|
|
4756 |
else
|
|
4757 |
obj['on'+event_name] = null;
|
|
4758 |
}
|
|
4759 |
|
|
4760 |
function tf_NumSortAsc(a, b){ return (a-b); }
|
|
4761 |
|
|
4762 |
function tf_NumSortDesc(a, b){ return (b-a); }
|
|
4763 |
|
|
4764 |
function tf_IgnoreCaseSort(a, b) {
|
|
4765 |
var x = a.tf_LCase();
|
|
4766 |
var y = b.tf_LCase();
|
|
4767 |
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
|
|
4768 |
}
|
|
4769 |
|
|
4770 |
String.prototype.tf_MatchCase = function (mc)
|
|
4771 |
{
|
|
4772 |
if (!mc) return this.tf_LCase();
|
|
4773 |
else return this.toString();
|
|
4774 |
}
|
|
4775 |
|
|
4776 |
String.prototype.tf_Trim = function()
|
|
4777 |
{//optimised by Anthony Maes
|
|
4778 |
return this.replace(/(^[\s\xA0]*)|([\s\xA0]*$)/g,'');
|
|
4779 |
}
|
|
4780 |
|
|
4781 |
String.prototype.tf_LCase = function()
|
|
4782 |
{
|
|
4783 |
return this.toLowerCase();
|
|
4784 |
}
|
|
4785 |
|
|
4786 |
String.prototype.tf_UCase = function()
|
|
4787 |
{
|
|
4788 |
return this.toUpperCase();
|
|
4789 |
}
|
|
4790 |
|
|
4791 |
Array.prototype.tf_Has = function(s,mc)
|
|
4792 |
{
|
|
4793 |
//return this.indexOf(s) >= 0;
|
|
4794 |
var sCase = (mc==undefined) ? false : mc;
|
|
4795 |
for (i=0; i<this.length; i++)
|
|
4796 |
if (this[i].toString().tf_MatchCase(sCase)==s) return true;
|
|
4797 |
return false;
|
|
4798 |
}
|
|
4799 |
|
|
4800 |
Array.prototype.tf_IndexByValue = function(s,mc)
|
|
4801 |
{
|
|
4802 |
var sCase = (mc==undefined) ? false : mc;
|
|
4803 |
for (i=0; i<this.length; i++)
|
|
4804 |
if (this[i].toString().tf_MatchCase(sCase)==s) return i;
|
|
4805 |
return (-1);
|
|
4806 |
}
|
|
4807 |
|
|
4808 |
// Is this IE 6? the ultimate browser sniffer ;-)
|
|
4809 |
//window['tf_isIE'] = (window.innerHeight) ? false : true;
|
|
4810 |
window['tf_isIE'] = (window.innerHeight) ? false : /msie|MSIE 6/.test(navigator.userAgent) ? true : false;
|
|
4811 |
window['tf_isIE7'] = (window.innerHeight) ? false : /msie|MSIE 7/.test(navigator.userAgent) ? true : false;
|
|
4812 |
|
|
4813 |
function tf_hasClass(elm,cl)
|
|
4814 |
{
|
|
4815 |
return elm.className.match(new RegExp('(\\s|^)'+cl+'(\\s|$)'));
|
|
4816 |
}
|
|
4817 |
|
|
4818 |
function tf_addClass(elm,cl)
|
|
4819 |
{
|
|
4820 |
if (!tf_hasClass(elm,cl))
|
|
4821 |
elm.className += ' '+cl;
|
|
4822 |
}
|
|
4823 |
|
|
4824 |
function tf_removeClass(elm,cl)
|
|
4825 |
{
|
|
4826 |
if ( !tf_hasClass(elm,cl) ) return;
|
|
4827 |
var reg = new RegExp('(\\s|^)'+cl+'(\\s|$)');
|
|
4828 |
elm.className = elm.className.replace(reg,' ');
|
|
4829 |
}
|
|
4830 |
|
|
4831 |
function tf_isValidDate(dateStr, format)
|
|
4832 |
{
|
|
4833 |
if (format == null) { format = 'DMY'; }
|
|
4834 |
format = format.toUpperCase();
|
|
4835 |
if (format.length != 3) { format = 'DMY'; }
|
|
4836 |
if ( (format.indexOf('M') == -1) || (format.indexOf('D') == -1) ||
|
|
4837 |
(format.indexOf('Y') == -1) ) { format = 'DMY'; }
|
|
4838 |
if (format.substring(0, 1) == 'Y') { // If the year is first
|
|
4839 |
var reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/;
|
|
4840 |
var reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/;
|
|
4841 |
} else if (format.substring(1, 2) == 'Y') { // If the year is second
|
|
4842 |
var reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/;
|
|
4843 |
var reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/;
|
|
4844 |
} else { // The year must be third
|
|
4845 |
var reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/;
|
|
4846 |
var reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
|
|
4847 |
}
|
|
4848 |
// If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail
|
|
4849 |
if ( (reg1.test(dateStr) == false) && (reg2.test(dateStr) == false) ) { return false; }
|
|
4850 |
var parts = dateStr.split(RegExp.$1); // Split into 3 parts based on what the divider was
|
|
4851 |
// Check to see if the 3 parts end up making a valid date
|
|
4852 |
if (format.substring(0, 1) == 'M') { var mm = parts[0]; } else
|
|
4853 |
if (format.substring(1, 2) == 'M') { var mm = parts[1]; } else { var mm = parts[2]; }
|
|
4854 |
if (format.substring(0, 1) == 'D') { var dd = parts[0]; } else
|
|
4855 |
if (format.substring(1, 2) == 'D') { var dd = parts[1]; } else { var dd = parts[2]; }
|
|
4856 |
if (format.substring(0, 1) == 'Y') { var yy = parts[0]; } else
|
|
4857 |
if (format.substring(1, 2) == 'Y') { var yy = parts[1]; } else { var yy = parts[2]; }
|
|
4858 |
if (parseFloat(yy) <= 50) { yy = (parseFloat(yy) + 2000).toString(); }
|
|
4859 |
if (parseFloat(yy) <= 99) { yy = (parseFloat(yy) + 1900).toString(); }
|
|
4860 |
var dt = new Date(parseFloat(yy), parseFloat(mm)-1, parseFloat(dd), 0, 0, 0, 0);
|
|
4861 |
if (parseFloat(dd) != dt.getDate()) { return false; }
|
|
4862 |
if (parseFloat(mm)-1 != dt.getMonth()) { return false; }
|
|
4863 |
return true;
|
|
4864 |
}
|
|
4865 |
|
|
4866 |
function tf_formatDate(dateStr, format)
|
|
4867 |
{
|
|
4868 |
if(format==null) format = 'DMY';
|
|
4869 |
var oDate, parts;
|
|
4870 |
|
|
4871 |
function y2kDate(yr){
|
|
4872 |
if(yr == undefined) return 0;
|
|
4873 |
if(yr.length>2) return yr;
|
|
4874 |
var y;
|
|
4875 |
if(yr <= 99 && yr>50) //>50 belong to 1900
|
|
4876 |
y = '19' + yr;
|
|
4877 |
if(yr<50 || yr =='00') //<50 belong to 2000
|
|
4878 |
y = '20' + yr;
|
|
4879 |
return y;
|
|
4880 |
}
|
|
4881 |
|
|
4882 |
switch(format.toUpperCase())
|
|
4883 |
{
|
|
4884 |
case 'DMY':
|
|
4885 |
parts = dateStr.replace(/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/,'$1 $3 $5').split(' ');
|
|
4886 |
oDate = new Date(y2kDate(parts[2]),parts[1]-1,parts[0]);
|
|
4887 |
break;
|
|
4888 |
case 'MDY':
|
|
4889 |
parts = dateStr.replace(/^(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])([- \/.])((\d\d)?\d\d)$/,'$1 $3 $5').split(' ');
|
|
4890 |
oDate = new Date(y2kDate(parts[2]),parts[0]-1,parts[1]);
|
|
4891 |
break;
|
|
4892 |
case 'YMD':
|
|
4893 |
parts = dateStr.replace(/^((\d\d)?\d\d)([- \/.])(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])$/,'$1 $4 $6').split(' ');
|
|
4894 |
oDate = new Date(y2kDate(parts[0]),parts[1]-1,parts[2]);
|
|
4895 |
break;
|
|
4896 |
default: //in case format is not correct
|
|
4897 |
parts = dateStr.replace(/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/,'$1 $3 $5').split(' ');
|
|
4898 |
oDate = new Date(y2kDate(parts[2]),parts[1]-1,parts[0]);
|
|
4899 |
break;
|
|
4900 |
}
|
|
4901 |
return oDate;
|
|
4902 |
}
|
|
4903 |
|
|
4904 |
function tf_removeNbFormat(data,format)
|
|
4905 |
{
|
|
4906 |
if(data==null) return;
|
|
4907 |
if(format==null) format = 'us';
|
|
4908 |
var n = data;
|
|
4909 |
if( format.tf_LCase()=='us' )
|
|
4910 |
n =+ n.replace(/[^\d\.-]/g,'');
|
|
4911 |
else
|
|
4912 |
n =+ n.replace(/[^\d\,-]/g,'').replace(',','.');
|
|
4913 |
return n;
|
|
4914 |
}
|
|
4915 |
|
|
4916 |
function tf_isImported(filePath,type)
|
|
4917 |
{
|
|
4918 |
var isImported = false;
|
|
4919 |
var importType = (type==undefined) ? 'script' : type;
|
|
4920 |
var files = tf_Tag(document,importType);
|
|
4921 |
for (var i=0; i<files.length; i++)
|
|
4922 |
{
|
|
4923 |
if(files[i].src == undefined) continue;
|
|
4924 |
if(files[i].src.match(filePath))
|
|
4925 |
{
|
|
4926 |
isImported = true;
|
|
4927 |
break;
|
|
4928 |
}
|
|
4929 |
}
|
|
4930 |
return isImported;
|
|
4931 |
}
|
|
4932 |
|
|
4933 |
function tf_WriteCookie(name, value, hours)
|
|
4934 |
{
|
|
4935 |
var expire = '';
|
|
4936 |
if(hours != null)
|
|
4937 |
{
|
|
4938 |
expire = new Date((new Date()).getTime() + hours * 3600000);
|
|
4939 |
expire = '; expires=' + expire.toGMTString();
|
|
4940 |
}
|
|
4941 |
document.cookie = name + '=' + escape(value) + expire;
|
|
4942 |
}
|
|
4943 |
|
|
4944 |
function tf_ReadCookie(name)
|
|
4945 |
{
|
|
4946 |
var cookieValue = '';
|
|
4947 |
var search = name + '=';
|
|
4948 |
if(document.cookie.length > 0)
|
|
4949 |
{
|
|
4950 |
offset = document.cookie.indexOf(search);
|
|
4951 |
if (offset != -1)
|
|
4952 |
{
|
|
4953 |
offset += search.length;
|
|
4954 |
end = document.cookie.indexOf(';', offset);
|
|
4955 |
if (end == -1) end = document.cookie.length;
|
|
4956 |
cookieValue = unescape(document.cookie.substring(offset, end))
|
|
4957 |
}
|
|
4958 |
}
|
|
4959 |
return cookieValue;
|
|
4960 |
}
|
|
4961 |
|
|
4962 |
function tf_CookieValueArray(name)
|
|
4963 |
{
|
|
4964 |
var val = tf_ReadCookie(name); //reads the cookie
|
|
4965 |
var arr = val.split(','); //creates an array with filters' values
|
|
4966 |
return arr;
|
|
4967 |
}
|
|
4968 |
|
|
4969 |
function tf_CookieValueByIndex(name, index)
|
|
4970 |
{
|
|
4971 |
var val = tf_CookieValueArray(name); //reads the cookie
|
|
4972 |
return val[index];
|
|
4973 |
}
|
|
4974 |
|
|
4975 |
function tf_RemoveCookie(name)
|
|
4976 |
{
|
|
4977 |
tf_WriteCookie(name,'',-1);
|
|
4978 |
}
|
|
4979 |
/* --- */
|
|
4980 |
|
|
4981 |
/*====================================================
|
|
4982 |
- Backward compatibility fns
|
|
4983 |
=====================================================*/
|
|
4984 |
function grabEBI(id){ return tf_Id( id ); }
|
|
4985 |
function grabTag(obj,tagname){ return tf_Tag(obj,tagname); }
|
|
4986 |
function tf_GetCellText(n){ return tf_GetNodeText(n); }
|
|
4987 |
function tf_isObject(varname){ return tf_isObj(varname); }
|
|
4988 |
/* --- */
|
|
4989 |
//]]>
|
|
4990 |
</script>
|
|
4991 |
|
|
4992 |
<script language="javascript" type="text/javascript">
|
|
4993 |
//<![CDATA[
|
|
4994 |
/**
|
|
4995 |
* Copyright (c)2005-2009 Matt Kruse (javascripttoolbox.com)
|
|
4996 |
*
|
|
4997 |
* Dual licensed under the MIT and GPL licenses.
|
|
4998 |
* This basically means you can use this code however you want for
|
|
4999 |
* free, but don't claim to have written it yourself!
|
|
5000 |
* Donations always accepted: http://www.JavascriptToolbox.com/donate/
|
|
5001 |
*
|
|
5002 |
* Please do not link to the .js files on javascripttoolbox.com from
|
|
5003 |
* your site. Copy the files locally to your server instead.
|
|
5004 |
*
|
|
5005 |
*/
|
|
5006 |
/* ******************************************************************* */
|
|
5007 |
/* UTIL FUNCTIONS */
|
|
5008 |
/* ******************************************************************* */
|
|
5009 |
var Util = {'$VERSION':1.06};
|
|
5010 |
|
|
5011 |
// Util functions - these are GLOBAL so they
|
|
5012 |
// look like built-in functions.
|
|
5013 |
|
|
5014 |
// Determine if an object is an array
|
|
5015 |
function isArray(o) {
|
|
5016 |
return (o!=null && typeof(o)=="object" && typeof(o.length)=="number" && (o.length==0 || defined(o[0])));
|
|
5017 |
};
|
|
5018 |
|
|
5019 |
// Determine if an object is an Object
|
|
5020 |
function isObject(o) {
|
|
5021 |
return (o!=null && typeof(o)=="object" && defined(o.constructor) && o.constructor==Object && !defined(o.nodeName));
|
|
5022 |
};
|
|
5023 |
|
|
5024 |
// Determine if a reference is defined
|
|
5025 |
function defined(o) {
|
|
5026 |
return (typeof(o)!="undefined");
|
|
5027 |
};
|
|
5028 |
|
|
5029 |
// Iterate over an array, object, or list of items and run code against each item
|
|
5030 |
// Similar functionality to Perl's map() function
|
|
5031 |
function map(func) {
|
|
5032 |
var i,j,o;
|
|
5033 |
var results = [];
|
|
5034 |
if (typeof(func)=="string") {
|
|
5035 |
func = new Function('$_',func);
|
|
5036 |
}
|
|
5037 |
for (i=1; i<arguments.length; i++) {
|
|
5038 |
o = arguments[i];
|
|
5039 |
if (isArray(o)) {
|
|
5040 |
for (j=0; j<o.length; j++) {
|
|
5041 |
results[results.length] = func(o[j]);
|
|
5042 |
}
|
|
5043 |
}
|
|
5044 |
else if (isObject(o)) {
|
|
5045 |
for (j in o) {
|
|
5046 |
results[results.length] = func(o[j]);
|
|
5047 |
}
|
|
5048 |
}
|
|
5049 |
else {
|
|
5050 |
results[results.length] = func(o);
|
|
5051 |
}
|
|
5052 |
}
|
|
5053 |
return results;
|
|
5054 |
};
|
|
5055 |
|
|
5056 |
// Set default values in an object if they are undefined
|
|
5057 |
function setDefaultValues(o,values) {
|
|
5058 |
if (!defined(o) || o==null) {
|
|
5059 |
o = {};
|
|
5060 |
}
|
|
5061 |
if (!defined(values) || values==null) {
|
|
5062 |
return o;
|
|
5063 |
}
|
|
5064 |
for (var val in values) {
|
|
5065 |
if (!defined(o[val])) {
|
|
5066 |
o[val] = values[val];
|
|
5067 |
}
|
|
5068 |
}
|
|
5069 |
return o;
|
|
5070 |
};
|
|
5071 |
|
|
5072 |
/* ******************************************************************* */
|
|
5073 |
/* DEFAULT OBJECT PROTOTYPE ENHANCEMENTS */
|
|
5074 |
/* ******************************************************************* */
|
|
5075 |
// These functions add useful functionality to built-in objects
|
|
5076 |
Array.prototype.contains = function(o) {
|
|
5077 |
var i,l;
|
|
5078 |
if (!(l = this.length)) { return false; }
|
|
5079 |
for (i=0; i<l; i++) {
|
|
5080 |
if (o==this[i]) {
|
|
5081 |
return true;
|
|
5082 |
}
|
|
5083 |
}
|
|
5084 |
};
|
|
5085 |
|
|
5086 |
/* ******************************************************************* */
|
|
5087 |
/* DOM FUNCTIONS */
|
|
5088 |
/* ******************************************************************* */
|
|
5089 |
var DOM = (function() {
|
|
5090 |
var dom = {};
|
|
5091 |
|
|
5092 |
// Get a parent tag with a given nodename
|
|
5093 |
dom.getParentByTagName = function(o,tagNames) {
|
|
5094 |
if(o==null) { return null; }
|
|
5095 |
if (isArray(tagNames)) {
|
|
5096 |
tagNames = map("return $_.toUpperCase()",tagNames);
|
|
5097 |
while (o=o.parentNode) {
|
|
5098 |
if (o.nodeName && tagNames.contains(o.nodeName)) {
|
|
5099 |
return o;
|
|
5100 |
}
|
|
5101 |
}
|
|
5102 |
}
|
|
5103 |
else {
|
|
5104 |
tagNames = tagNames.toUpperCase();
|
|
5105 |
while (o=o.parentNode) {
|
|
5106 |
if (o.nodeName && tagNames==o.nodeName) {
|
|
5107 |
return o;
|
|
5108 |
}
|
|
5109 |
}
|
|
5110 |
}
|
|
5111 |
return null;
|
|
5112 |
};
|
|
5113 |
|
|
5114 |
// Remove a node from its parent
|
|
5115 |
dom.removeNode = function(o) {
|
|
5116 |
if (o!=null && o.parentNode && o.parentNode.removeChild) {
|
|
5117 |
// First remove all attributes which are func references, to avoid memory leaks
|
|
5118 |
for (var i in o) {
|
|
5119 |
if (typeof(o[i])=="function") {
|
|
5120 |
o[i] = null;
|
|
5121 |
}
|
|
5122 |
}
|
|
5123 |
o.parentNode.removeChild(o);
|
|
5124 |
return true;
|
|
5125 |
}
|
|
5126 |
return false;
|
|
5127 |
};
|
|
5128 |
|
|
5129 |
// Get the outer width in pixels of an object, including borders, padding, and margin
|
|
5130 |
dom.getOuterWidth = function(o) {
|
|
5131 |
if (defined(o.offsetWidth)) {
|
|
5132 |
return o.offsetWidth;
|
|
5133 |
}
|
|
5134 |
return null;
|
|
5135 |
};
|
|
5136 |
|
|
5137 |
// Get the outer height in pixels of an object, including borders, padding, and margin
|
|
5138 |
dom.getOuterHeight = function(o) {
|
|
5139 |
if (defined(o.offsetHeight)) {
|
|
5140 |
return o.offsetHeight;
|
|
5141 |
}
|
|
5142 |
return null;
|
|
5143 |
};
|
|
5144 |
|
|
5145 |
// Resolve an item, an array of items, or an object of items
|
|
5146 |
dom.resolve = function() {
|
|
5147 |
var results = new Array();
|
|
5148 |
var i,j,o;
|
|
5149 |
for (var i=0; i<arguments.length; i++) {
|
|
5150 |
var o = arguments[i];
|
|
5151 |
if (o==null) {
|
|
5152 |
if (arguments.length==1) {
|
|
5153 |
return null;
|
|
5154 |
}
|
|
5155 |
results[results.length] = null;
|
|
5156 |
}
|
|
5157 |
else if (typeof(o)=='string') {
|
|
5158 |
if (document.getElementById) {
|
|
5159 |
o = document.getElementById(o);
|
|
5160 |
}
|
|
5161 |
else if (document.all) {
|
|
5162 |
o = document.all[o];
|
|
5163 |
}
|
|
5164 |
if (arguments.length==1) {
|
|
5165 |
return o;
|
|
5166 |
}
|
|
5167 |
results[results.length] = o;
|
|
5168 |
}
|
|
5169 |
else if (isArray(o)) {
|
|
5170 |
for (j=0; j<o.length; j++) {
|
|
5171 |
results[results.length] = o[j];
|
|
5172 |
}
|
|
5173 |
}
|
|
5174 |
else if (isObject(o)) {
|
|
5175 |
for (j in o) {
|
|
5176 |
results[results.length] = o[j];
|
|
5177 |
}
|
|
5178 |
}
|
|
5179 |
else if (arguments.length==1) {
|
|
5180 |
return o;
|
|
5181 |
}
|
|
5182 |
else {
|
|
5183 |
results[results.length] = o;
|
|
5184 |
}
|
|
5185 |
}
|
|
5186 |
return results;
|
|
5187 |
};
|
|
5188 |
dom.$ = dom.resolve;
|
|
5189 |
|
|
5190 |
return dom;
|
|
5191 |
})();
|
|
5192 |
|
|
5193 |
/* ******************************************************************* */
|
|
5194 |
/* CSS FUNCTIONS */
|
|
5195 |
/* ******************************************************************* */
|
|
5196 |
var CSS = (function(){
|
|
5197 |
var css = {};
|
|
5198 |
|
|
5199 |
// Convert an RGB string in the form "rgb (255, 255, 255)" to "#ffffff"
|
|
5200 |
css.rgb2hex = function(rgbString) {
|
|
5201 |
if (typeof(rgbString)!="string" || !defined(rgbString.match)) { return null; }
|
|
5202 |
var result = rgbString.match(/^\s*rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*/);
|
|
5203 |
if (result==null) { return rgbString; }
|
|
5204 |
var rgb = +result[1] << 16 | +result[2] << 8 | +result[3];
|
|
5205 |
var hex = "";
|
|
5206 |
var digits = "0123456789abcdef";
|
|
5207 |
while(rgb!=0) {
|
|
5208 |
hex = digits.charAt(rgb&0xf)+hex;
|
|
5209 |
rgb>>>=4;
|
|
5210 |
}
|
|
5211 |
while(hex.length<6) { hex='0'+hex; }
|
|
5212 |
return "#" + hex;
|
|
5213 |
};
|
|
5214 |
|
|
5215 |
// Convert hyphen style names like border-width to camel case like borderWidth
|
|
5216 |
css.hyphen2camel = function(property) {
|
|
5217 |
if (!defined(property) || property==null) { return null; }
|
|
5218 |
if (property.indexOf("-")<0) { return property; }
|
|
5219 |
var str = "";
|
|
5220 |
var c = null;
|
|
5221 |
var l = property.length;
|
|
5222 |
for (var i=0; i<l; i++) {
|
|
5223 |
c = property.charAt(i);
|
|
5224 |
str += (c!="-")?c:property.charAt(++i).toUpperCase();
|
|
5225 |
}
|
|
5226 |
return str;
|
|
5227 |
};
|
|
5228 |
|
|
5229 |
// Determine if an object or class string contains a given class.
|
|
5230 |
css.hasClass = function(obj,className) {
|
|
5231 |
if (!defined(obj) || obj==null || !RegExp) { return false; }
|
|
5232 |
var re = new RegExp("(^|\\s)" + className + "(\\s|$)");
|
|
5233 |
if (typeof(obj)=="string") {
|
|
5234 |
return re.test(obj);
|
|
5235 |
}
|
|
5236 |
else if (typeof(obj)=="object" && obj.className) {
|
|
5237 |
return re.test(obj.className);
|
|
5238 |
}
|
|
5239 |
return false;
|
|
5240 |
};
|
|
5241 |
|
|
5242 |
// Add a class to an object
|
|
5243 |
css.addClass = function(obj,className) {
|
|
5244 |
if (typeof(obj)!="object" || obj==null || !defined(obj.className)) { return false; }
|
|
5245 |
if (obj.className==null || obj.className=='') {
|
|
5246 |
obj.className = className;
|
|
5247 |
return true;
|
|
5248 |
}
|
|
5249 |
if (css.hasClass(obj,className)) { return true; }
|
|
5250 |
obj.className = obj.className + " " + className;
|
|
5251 |
return true;
|
|
5252 |
};
|
|
5253 |
|
|
5254 |
// Remove a class from an object
|
|
5255 |
css.removeClass = function(obj,className) {
|
|
5256 |
if (typeof(obj)!="object" || obj==null || !defined(obj.className) || obj.className==null) { return false; }
|
|
5257 |
if (!css.hasClass(obj,className)) { return false; }
|
|
5258 |
var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)");
|
|
5259 |
obj.className = obj.className.replace(re,' ');
|
|
5260 |
return true;
|
|
5261 |
};
|
|
5262 |
|
|
5263 |
// Fully replace a class with a new one
|
|
5264 |
css.replaceClass = function(obj,className,newClassName) {
|
|
5265 |
if (typeof(obj)!="object" || obj==null || !defined(obj.className) || obj.className==null) { return false; }
|
|
5266 |
css.removeClass(obj,className);
|
|
5267 |
css.addClass(obj,newClassName);
|
|
5268 |
return true;
|
|
5269 |
};
|
|
5270 |
|
|
5271 |
// Get the currently-applied style of an object
|
|
5272 |
css.getStyle = function(o, property) {
|
|
5273 |
if (o==null) { return null; }
|
|
5274 |
var val = null;
|
|
5275 |
var camelProperty = css.hyphen2camel(property);
|
|
5276 |
// Handle "float" property as a special case
|
|
5277 |
if (property=="float") {
|
|
5278 |
val = css.getStyle(o,"cssFloat");
|
|
5279 |
if (val==null) {
|
|
5280 |
val = css.getStyle(o,"styleFloat");
|
|
5281 |
}
|
|
5282 |
}
|
|
5283 |
else if (o.currentStyle && defined(o.currentStyle[camelProperty])) {
|
|
5284 |
val = o.currentStyle[camelProperty];
|
|
5285 |
}
|
|
5286 |
else if (window.getComputedStyle) {
|
|
5287 |
val = window.getComputedStyle(o,null).getPropertyValue(property);
|
|
5288 |
}
|
|
5289 |
else if (o.style && defined(o.style[camelProperty])) {
|
|
5290 |
val = o.style[camelProperty];
|
|
5291 |
}
|
|
5292 |
// For color values, make the value consistent across browsers
|
|
5293 |
// Convert rgb() colors back to hex for consistency
|
|
5294 |
if (/^\s*rgb\s*\(/.test(val)) {
|
|
5295 |
val = css.rgb2hex(val);
|
|
5296 |
}
|
|
5297 |
// Lowercase all #hex values
|
|
5298 |
if (/^#/.test(val)) {
|
|
5299 |
val = val.toLowerCase();
|
|
5300 |
}
|
|
5301 |
return val;
|
|
5302 |
};
|
|
5303 |
css.get = css.getStyle;
|
|
5304 |
|
|
5305 |
// Set a style on an object
|
|
5306 |
css.setStyle = function(o, property, value) {
|
|
5307 |
if (o==null || !defined(o.style) || !defined(property) || property==null || !defined(value)) { return false; }
|
|
5308 |
if (property=="float") {
|
|
5309 |
o.style["cssFloat"] = value;
|
|
5310 |
o.style["styleFloat"] = value;
|
|
5311 |
}
|
|
5312 |
else if (property=="opacity") {
|
|
5313 |
o.style['-moz-opacity'] = value;
|
|
5314 |
o.style['-khtml-opacity'] = value;
|
|
5315 |
o.style.opacity = value;
|
|
5316 |
if (defined(o.style.filter)) {
|
|
5317 |
o.style.filter = "alpha(opacity=" + value*100 + ")";
|
|
5318 |
}
|
|
5319 |
}
|
|
5320 |
else {
|
|
5321 |
o.style[css.hyphen2camel(property)] = value;
|
|
5322 |
}
|
|
5323 |
return true;
|
|
5324 |
};
|
|
5325 |
css.set = css.setStyle;
|
|
5326 |
|
|
5327 |
// Get a unique ID which doesn't already exist on the page
|
|
5328 |
css.uniqueIdNumber=1000;
|
|
5329 |
css.createId = function(o) {
|
|
5330 |
if (defined(o) && o!=null && defined(o.id) && o.id!=null && o.id!="") {
|
|
5331 |
return o.id;
|
|
5332 |
}
|
|
5333 |
var id = null;
|
|
5334 |
while (id==null || document.getElementById(id)!=null) {
|
|
5335 |
id = "ID_"+(css.uniqueIdNumber++);
|
|
5336 |
}
|
|
5337 |
if (defined(o) && o!=null && (!defined(o.id)||o.id=="")) {
|
|
5338 |
o.id = id;
|
|
5339 |
}
|
|
5340 |
return id;
|
|
5341 |
};
|
|
5342 |
|
|
5343 |
return css;
|
|
5344 |
})();
|
|
5345 |
|
|
5346 |
/* ******************************************************************* */
|
|
5347 |
/* EVENT FUNCTIONS */
|
|
5348 |
/* ******************************************************************* */
|
|
5349 |
|
|
5350 |
var Event = (function(){
|
|
5351 |
var ev = {};
|
|
5352 |
|
|
5353 |
// Resolve an event using IE's window.event if necessary
|
|
5354 |
// --------------------------------------------------------------------
|
|
5355 |
ev.resolve = function(e) {
|
|
5356 |
if (!defined(e) && defined(window.event)) {
|
|
5357 |
e = window.event;
|
|
5358 |
}
|
|
5359 |
return e;
|
|
5360 |
};
|
|
5361 |
|
|
5362 |
// Add an event handler to a function
|
|
5363 |
// Note: Don't use 'this' within functions added using this method, since
|
|
5364 |
// the attachEvent and addEventListener models differ.
|
|
5365 |
// --------------------------------------------------------------------
|
|
5366 |
ev.add = function( obj, type, fn, capture ) {
|
|
5367 |
if (obj.addEventListener) {
|
|
5368 |
obj.addEventListener( type, fn, capture );
|
|
5369 |
return true;
|
|
5370 |
}
|
|
5371 |
else if (obj.attachEvent) {
|
|
5372 |
obj.attachEvent( "on"+type, fn );
|
|
5373 |
return true;
|
|
5374 |
}
|
|
5375 |
return false;
|
|
5376 |
};
|
|
5377 |
|
|
5378 |
// Get the mouse position of an event
|
|
5379 |
// --------------------------------------------------------------------
|
|
5380 |
// PageX/Y, where they exist, are more reliable than ClientX/Y because
|
|
5381 |
// of some browser bugs in Opera/Safari
|
|
5382 |
ev.getMouseX = function(e) {
|
|
5383 |
e = ev.resolve(e);
|
|
5384 |
if (defined(e.pageX)) {
|
|
5385 |
return e.pageX;
|
|
5386 |
}
|
|
5387 |
if (defined(e.clientX)) {
|
|
5388 |
return e.clientX+Screen.getScrollLeft();
|
|
5389 |
}
|
|
5390 |
return null;
|
|
5391 |
};
|
|
5392 |
ev.getMouseY = function(e) {
|
|
5393 |
e = ev.resolve(e);
|
|
5394 |
if (defined(e.pageY)) {
|
|
5395 |
return e.pageY;
|
|
5396 |
}
|
|
5397 |
if (defined(e.clientY)) {
|
|
5398 |
return e.clientY+Screen.getScrollTop();
|
|
5399 |
}
|
|
5400 |
return null;
|
|
5401 |
};
|
|
5402 |
|
|
5403 |
// Stop the event from bubbling up to parent elements.
|
|
5404 |
// Two method names map to the same function
|
|
5405 |
// --------------------------------------------------------------------
|
|
5406 |
ev.cancelBubble = function(e) {
|
|
5407 |
e = ev.resolve(e);
|
|
5408 |
if (typeof(e.stopPropagation)=="function") { e.stopPropagation(); }
|
|
5409 |
if (defined(e.cancelBubble)) { e.cancelBubble = true; }
|
|
5410 |
};
|
|
5411 |
ev.stopPropagation = ev.cancelBubble;
|
|
5412 |
|
|
5413 |
// Prevent the default handling of the event to occur
|
|
5414 |
// --------------------------------------------------------------------
|
|
5415 |
ev.preventDefault = function(e) {
|
|
5416 |
e = ev.resolve(e);
|
|
5417 |
if (typeof(e.preventDefault)=="function") { e.preventDefault(); }
|
|
5418 |
if (defined(e.returnValue)) { e.returnValue = false; }
|
|
5419 |
};
|
|
5420 |
|
|
5421 |
return ev;
|
|
5422 |
})();
|
|
5423 |
|
|
5424 |
/* ******************************************************************* */
|
|
5425 |
/* SCREEN FUNCTIONS */
|
|
5426 |
/* ******************************************************************* */
|
|
5427 |
var Screen = (function() {
|
|
5428 |
var screen = {};
|
|
5429 |
|
|
5430 |
// Get a reference to the body
|
|
5431 |
// --------------------------------------------------------------------
|
|
5432 |
screen.getBody = function() {
|
|
5433 |
if (document.body) {
|
|
5434 |
return document.body;
|
|
5435 |
}
|
|
5436 |
if (document.getElementsByTagName) {
|
|
5437 |
var bodies = document.getElementsByTagName("BODY");
|
|
5438 |
if (bodies!=null && bodies.length>0) {
|
|
5439 |
return bodies[0];
|
|
5440 |
}
|
|
5441 |
}
|
|
5442 |
return null;
|
|
5443 |
};
|
|
5444 |
|
|
5445 |
// Get the amount that the main document has scrolled from top
|
|
5446 |
// --------------------------------------------------------------------
|
|
5447 |
screen.getScrollTop = function() {
|
|
5448 |
if (document.documentElement && defined(document.documentElement.scrollTop) && document.documentElement.scrollTop>0) {
|
|
5449 |
return document.documentElement.scrollTop;
|
|
5450 |
}
|
|
5451 |
if (document.body && defined(document.body.scrollTop)) {
|
|
5452 |
return document.body.scrollTop;
|
|
5453 |
}
|
|
5454 |
return null;
|
|
5455 |
};
|
|
5456 |
|
|
5457 |
// Get the amount that the main document has scrolled from left
|
|
5458 |
// --------------------------------------------------------------------
|
|
5459 |
screen.getScrollLeft = function() {
|
|
5460 |
if (document.documentElement && defined(document.documentElement.scrollLeft) && document.documentElement.scrollLeft>0) {
|
|
5461 |
return document.documentElement.scrollLeft;
|
|
5462 |
}
|
|
5463 |
if (document.body && defined(document.body.scrollLeft)) {
|
|
5464 |
return document.body.scrollLeft;
|
|
5465 |
}
|
|
5466 |
return null;
|
|
5467 |
};
|
|
5468 |
|
|
5469 |
// Util function to default a bad number to 0
|
|
5470 |
// --------------------------------------------------------------------
|
|
5471 |
screen.zero = function(n) {
|
|
5472 |
return (!defined(n) || isNaN(n))?0:n;
|
|
5473 |
};
|
|
5474 |
|
|
5475 |
// Get the width of the entire document
|
|
5476 |
// --------------------------------------------------------------------
|
|
5477 |
screen.getDocumentWidth = function() {
|
|
5478 |
var width = 0;
|
|
5479 |
var body = screen.getBody();
|
|
5480 |
if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
|
|
5481 |
var rightMargin = parseInt(CSS.get(body,'marginRight'),10) || 0;
|
|
5482 |
var leftMargin = parseInt(CSS.get(body,'marginLeft'), 10) || 0;
|
|
5483 |
width = Math.max(body.offsetWidth + leftMargin + rightMargin, document.documentElement.clientWidth);
|
|
5484 |
}
|
|
5485 |
else {
|
|
5486 |
width = Math.max(body.clientWidth, body.scrollWidth);
|
|
5487 |
}
|
|
5488 |
if (isNaN(width) || width==0) {
|
|
5489 |
width = screen.zero(self.innerWidth);
|
|
5490 |
}
|
|
5491 |
return width;
|
|
5492 |
};
|
|
5493 |
|
|
5494 |
// Get the height of the entire document
|
|
5495 |
// --------------------------------------------------------------------
|
|
5496 |
screen.getDocumentHeight = function() {
|
|
5497 |
var body = screen.getBody();
|
|
5498 |
var innerHeight = (defined(self.innerHeight)&&!isNaN(self.innerHeight))?self.innerHeight:0;
|
|
5499 |
if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
|
|
5500 |
var topMargin = parseInt(CSS.get(body,'marginTop'),10) || 0;
|
|
5501 |
var bottomMargin = parseInt(CSS.get(body,'marginBottom'), 10) || 0;
|
|
5502 |
return Math.max(body.offsetHeight + topMargin + bottomMargin, document.documentElement.clientHeight, document.documentElement.scrollHeight, screen.zero(self.innerHeight));
|
|
5503 |
}
|
|
5504 |
return Math.max(body.scrollHeight, body.clientHeight, screen.zero(self.innerHeight));
|
|
5505 |
};
|
|
5506 |
|
|
5507 |
// Get the width of the viewport (viewable area) in the browser window
|
|
5508 |
// --------------------------------------------------------------------
|
|
5509 |
screen.getViewportWidth = function() {
|
|
5510 |
if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
|
|
5511 |
return document.documentElement.clientWidth;
|
|
5512 |
}
|
|
5513 |
else if (document.compatMode && document.body) {
|
|
5514 |
return document.body.clientWidth;
|
|
5515 |
}
|
|
5516 |
return screen.zero(self.innerWidth);
|
|
5517 |
};
|
|
5518 |
|
|
5519 |
// Get the height of the viewport (viewable area) in the browser window
|
|
5520 |
// --------------------------------------------------------------------
|
|
5521 |
screen.getViewportHeight = function() {
|
|
5522 |
if (!window.opera && document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
|
|
5523 |
return document.documentElement.clientHeight;
|
|
5524 |
}
|
|
5525 |
else if (document.compatMode && !window.opera && document.body) {
|
|
5526 |
return document.body.clientHeight;
|
|
5527 |
}
|
|
5528 |
return screen.zero(self.innerHeight);
|
|
5529 |
};
|
|
5530 |
|
|
5531 |
return screen;
|
|
5532 |
})();var Sort = (function(){
|
|
5533 |
var sort = {};
|
|
5534 |
sort.AlphaNumeric = function(a,b) {
|
|
5535 |
if (a==b) { return 0; }
|
|
5536 |
if (a<b) { return -1; }
|
|
5537 |
return 1;
|
|
5538 |
};
|
|
5539 |
|
|
5540 |
sort.Default = sort.AlphaNumeric;
|
|
5541 |
|
|
5542 |
sort.NumericConversion = function(val) {
|
|
5543 |
if (typeof(val)!="number") {
|
|
5544 |
if (typeof(val)=="string") {
|
|
5545 |
val = parseFloat(val.replace(/,/g,''));
|
|
5546 |
if (isNaN(val) || val==null) { val=0; }
|
|
5547 |
}
|
|
5548 |
else {
|
|
5549 |
val = 0;
|
|
5550 |
}
|
|
5551 |
}
|
|
5552 |
return val;
|
|
5553 |
};
|
|
5554 |
|
|
5555 |
sort.Numeric = function(a,b) {
|
|
5556 |
return sort.NumericConversion(a)-sort.NumericConversion(b);
|
|
5557 |
};
|
|
5558 |
|
|
5559 |
sort.IgnoreCaseConversion = function(val) {
|
|
5560 |
if (val==null) { val=""; }
|
|
5561 |
return (""+val).toLowerCase();
|
|
5562 |
};
|
|
5563 |
|
|
5564 |
sort.IgnoreCase = function(a,b) {
|
|
5565 |
return sort.AlphaNumeric(sort.IgnoreCaseConversion(a),sort.IgnoreCaseConversion(b));
|
|
5566 |
};
|
|
5567 |
|
|
5568 |
sort.CurrencyConversion = function(val) {
|
|
5569 |
if (typeof(val)=="string") {
|
|
5570 |
val = val.replace(/^[^\d\.]/,'');
|
|
5571 |
}
|
|
5572 |
return sort.NumericConversion(val);
|
|
5573 |
};
|
|
5574 |
|
|
5575 |
sort.Currency = function(a,b) {
|
|
5576 |
return sort.Numeric(sort.CurrencyConversion(a),sort.CurrencyConversion(b));
|
|
5577 |
};
|
|
5578 |
|
|
5579 |
sort.DateConversion = function(val) {
|
|
5580 |
// inner util function to parse date formats
|
|
5581 |
function getdate(str) {
|
|
5582 |
// inner util function to convert 2-digit years to 4
|
|
5583 |
function fixYear(yr) {
|
|
5584 |
yr = +yr;
|
|
5585 |
if (yr<50) { yr += 2000; }
|
|
5586 |
else if (yr<100) { yr += 1900; }
|
|
5587 |
return yr;
|
|
5588 |
};
|
|
5589 |
var ret;
|
|
5590 |
// YYYY-MM-DD
|
|
5591 |
if (ret=str.match(/(\d{2,4})-(\d{1,2})-(\d{1,2})/)) {
|
|
5592 |
return (fixYear(ret[1])*10000) + (ret[2]*100) + (+ret[3]);
|
|
5593 |
}
|
|
5594 |
// MM/DD/YY[YY] or MM-DD-YY[YY]
|
|
5595 |
if (ret=str.match(/(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})/)) {
|
|
5596 |
return (fixYear(ret[3])*10000) + (ret[1]*100) + (+ret[2]);
|
|
5597 |
}
|
|
5598 |
return 99999999; // So non-parsed dates will be last, not first
|
|
5599 |
};
|
|
5600 |
return getdate(val);
|
|
5601 |
};
|
|
5602 |
|
|
5603 |
sort.Date = function(a,b) {
|
|
5604 |
return sort.Numeric(sort.DateConversion(a),sort.DateConversion(b));
|
|
5605 |
};
|
|
5606 |
|
|
5607 |
return sort;
|
|
5608 |
})();
|
|
5609 |
|
|
5610 |
var Position = (function() {
|
|
5611 |
// Resolve a string identifier to an object
|
|
5612 |
// ========================================
|
|
5613 |
function resolveObject(s) {
|
|
5614 |
if (document.getElementById && document.getElementById(s)!=null) {
|
|
5615 |
return document.getElementById(s);
|
|
5616 |
}
|
|
5617 |
else if (document.all && document.all[s]!=null) {
|
|
5618 |
return document.all[s];
|
|
5619 |
}
|
|
5620 |
else if (document.anchors && document.anchors.length && document.anchors.length>0 && document.anchors[0].x) {
|
|
5621 |
for (var i=0; i<document.anchors.length; i++) {
|
|
5622 |
if (document.anchors[i].name==s) {
|
|
5623 |
return document.anchors[i]
|
|
5624 |
}
|
|
5625 |
}
|
|
5626 |
}
|
|
5627 |
}
|
|
5628 |
|
|
5629 |
var pos = {};
|
|
5630 |
pos.$VERSION = 1.0;
|
|
5631 |
|
|
5632 |
// Set the position of an object
|
|
5633 |
// =============================
|
|
5634 |
pos.set = function(o,left,top) {
|
|
5635 |
if (typeof(o)=="string") {
|
|
5636 |
o = resolveObject(o);
|
|
5637 |
}
|
|
5638 |
if (o==null || !o.style) {
|
|
5639 |
return false;
|
|
5640 |
}
|
|
5641 |
|
|
5642 |
// If the second parameter is an object, it is assumed to be the result of getPosition()
|
|
5643 |
if (typeof(left)=="object") {
|
|
5644 |
var pos = left;
|
|
5645 |
left = pos.left;
|
|
5646 |
top = pos.top;
|
|
5647 |
}
|
|
5648 |
|
|
5649 |
o.style.left = left + "px";
|
|
5650 |
o.style.top = top + "px";
|
|
5651 |
return true;
|
|
5652 |
};
|
|
5653 |
|
|
5654 |
// Retrieve the position and size of an object
|
|
5655 |
// ===========================================
|
|
5656 |
pos.get = function(o) {
|
|
5657 |
var fixBrowserQuirks = true;
|
|
5658 |
// If a string is passed in instead of an object ref, resolve it
|
|
5659 |
if (typeof(o)=="string") {
|
|
5660 |
o = resolveObject(o);
|
|
5661 |
}
|
|
5662 |
|
|
5663 |
if (o==null) {
|
|
5664 |
return null;
|
|
5665 |
}
|
|
5666 |
|
|
5667 |
var left = 0;
|
|
5668 |
var top = 0;
|
|
5669 |
var width = 0;
|
|
5670 |
var height = 0;
|
|
5671 |
var parentNode = null;
|
|
5672 |
var offsetParent = null;
|
|
5673 |
|
|
5674 |
|
|
5675 |
offsetParent = o.offsetParent;
|
|
5676 |
var originalObject = o;
|
|
5677 |
var el = o; // "el" will be nodes as we walk up, "o" will be saved for offsetParent references
|
|
5678 |
while (el.parentNode!=null) {
|
|
5679 |
el = el.parentNode;
|
|
5680 |
if (el.offsetParent==null) {
|
|
5681 |
}
|
|
5682 |
else {
|
|
5683 |
var considerScroll = true;
|
|
5684 |
/*
|
|
5685 |
In Opera, if parentNode of the first object is scrollable, then offsetLeft/offsetTop already
|
|
5686 |
take its scroll position into account. If elements further up the chain are scrollable, their
|
|
5687 |
scroll offsets still need to be added in. And for some reason, TR nodes have a scrolltop value
|
|
5688 |
which must be ignored.
|
|
5689 |
*/
|
|
5690 |
if (fixBrowserQuirks && window.opera) {
|
|
5691 |
if (el==originalObject.parentNode || el.nodeName=="TR") {
|
|
5692 |
considerScroll = false;
|
|
5693 |
}
|
|
5694 |
}
|
|
5695 |
if (considerScroll) {
|
|
5696 |
if (el.scrollTop && el.scrollTop>0) {
|
|
5697 |
top -= el.scrollTop;
|
|
5698 |
}
|
|
5699 |
if (el.scrollLeft && el.scrollLeft>0) {
|
|
5700 |
left -= el.scrollLeft;
|
|
5701 |
}
|
|
5702 |
}
|
|
5703 |
}
|
|
5704 |
// If this node is also the offsetParent, add on the offsets and reset to the new offsetParent
|
|
5705 |
if (el == offsetParent) {
|
|
5706 |
left += o.offsetLeft;
|
|
5707 |
if (el.clientLeft && el.nodeName!="TABLE") {
|
|
5708 |
left += el.clientLeft;
|
|
5709 |
}
|
|
5710 |
top += o.offsetTop;
|
|
5711 |
if (el.clientTop && el.nodeName!="TABLE") {
|
|
5712 |
top += el.clientTop;
|
|
5713 |
}
|
|
5714 |
o = el;
|
|
5715 |
if (o.offsetParent==null) {
|
|
5716 |
if (o.offsetLeft) {
|
|
5717 |
left += o.offsetLeft;
|
|
5718 |
}
|
|
5719 |
if (o.offsetTop) {
|
|
5720 |
top += o.offsetTop;
|
|
5721 |
}
|
|
5722 |
}
|
|
5723 |
offsetParent = o.offsetParent;
|
|
5724 |
}
|
|
5725 |
}
|
|
5726 |
|
|
5727 |
|
|
5728 |
if (originalObject.offsetWidth) {
|
|
5729 |
width = originalObject.offsetWidth;
|
|
5730 |
}
|
|
5731 |
if (originalObject.offsetHeight) {
|
|
5732 |
height = originalObject.offsetHeight;
|
|
5733 |
}
|
|
5734 |
|
|
5735 |
return {'left':left, 'top':top, 'width':width, 'height':height
|
|
5736 |
};
|
|
5737 |
};
|
|
5738 |
|
|
5739 |
// Retrieve the position of an object's center point
|
|
5740 |
// =================================================
|
|
5741 |
pos.getCenter = function(o) {
|
|
5742 |
var c = this.get(o);
|
|
5743 |
if (c==null) { return null; }
|
|
5744 |
c.left = c.left + (c.width/2);
|
|
5745 |
c.top = c.top + (c.height/2);
|
|
5746 |
return c;
|
|
5747 |
};
|
|
5748 |
|
|
5749 |
return pos;
|
|
5750 |
})();// CLASS CONSTRUCTOR
|
|
5751 |
// --------------------------------------------------------------------
|
|
5752 |
var Popup = function(div, options) {
|
|
5753 |
this.div = defined(div)?div:null;
|
|
5754 |
this.index = Popup.maxIndex++;
|
|
5755 |
this.ref = "Popup.objects["+this.index+"]";
|
|
5756 |
Popup.objects[this.index] = this;
|
|
5757 |
// Store a reference to the DIV by id, also
|
|
5758 |
if (typeof(this.div)=="string") {
|
|
5759 |
Popup.objectsById[this.div] = this;
|
|
5760 |
}
|
|
5761 |
if (defined(this.div) && this.div!=null && defined(this.div.id)) {
|
|
5762 |
Popup.objectsById[this.div.id] = this.div.id;
|
|
5763 |
}
|
|
5764 |
// Apply passed-in options
|
|
5765 |
if (defined(options) && options!=null && typeof(options)=="object") {
|
|
5766 |
for (var i in options) {
|
|
5767 |
this[i] = options[i];
|
|
5768 |
}
|
|
5769 |
}
|
|
5770 |
return this;
|
|
5771 |
};
|
|
5772 |
|
|
5773 |
// CLASS PROPERTIES
|
|
5774 |
// --------------------------------------------------------------------
|
|
5775 |
// Index of popup objects, to maintain a global reference if necessary
|
|
5776 |
Popup.maxIndex = 0;
|
|
5777 |
Popup.objects = {};
|
|
5778 |
Popup.objectsById = {};
|
|
5779 |
|
|
5780 |
// The z-index value that popups will start at
|
|
5781 |
Popup.minZIndex = 101;
|
|
5782 |
|
|
5783 |
// Class names to assign to other objects
|
|
5784 |
Popup.screenClass = "PopupScreen";
|
|
5785 |
Popup.iframeClass = "PopupIframe";
|
|
5786 |
Popup.screenIframeClass = "PopupScreenIframe";
|
|
5787 |
|
|
5788 |
// CLASS METHODS
|
|
5789 |
// --------------------------------------------------------------------
|
|
5790 |
|
|
5791 |
// Hide all currently-visible non-modal dialogs
|
|
5792 |
Popup.hideAll = function() {
|
|
5793 |
for (var i in Popup.objects) {
|
|
5794 |
var p = Popup.objects[i];
|
|
5795 |
if (!p.modal && p.autoHide) {
|
|
5796 |
p.hide();
|
|
5797 |
}
|
|
5798 |
}
|
|
5799 |
};
|
|
5800 |
// Catch global events as a trigger to hide auto-hide popups
|
|
5801 |
Event.add(document, "mouseup", Popup.hideAll, false);
|
|
5802 |
|
|
5803 |
// A simple class method to show a popup without creating an instance
|
|
5804 |
Popup.show = function(divObject, referenceObject, position, options, modal) {
|
|
5805 |
var popup;
|
|
5806 |
if (defined(divObject)) {
|
|
5807 |
popup = new Popup(divObject);
|
|
5808 |
}
|
|
5809 |
else {
|
|
5810 |
popup = new Popup();
|
|
5811 |
popup.destroyDivOnHide = true;
|
|
5812 |
}
|
|
5813 |
if (defined(referenceObject)) { popup.reference = DOM.resolve(referenceObject); }
|
|
5814 |
if (defined(position)) { popup.position = position; }
|
|
5815 |
if (defined(options) && options!=null && typeof(options)=="object") {
|
|
5816 |
for (var i in options) {
|
|
5817 |
popup[i] = options[i];
|
|
5818 |
}
|
|
5819 |
}
|
|
5820 |
if (typeof(modal)=="boolean") {
|
|
5821 |
popup.modal = modal;
|
|
5822 |
}
|
|
5823 |
popup.destroyObjectsOnHide = true;
|
|
5824 |
popup.show();
|
|
5825 |
return popup;
|
|
5826 |
};
|
|
5827 |
|
|
5828 |
// A simple class method to show a modal popup
|
|
5829 |
Popup.showModal = function(divObject, referenceObject, position, options) {
|
|
5830 |
Popup.show(divObject, referenceObject, position, options, true);
|
|
5831 |
};
|
|
5832 |
|
|
5833 |
// A method to retrieve a popup object based on a div ID
|
|
5834 |
Popup.get = function(divId) {
|
|
5835 |
if (defined(Popup.objectsById[divId])) {
|
|
5836 |
return Popup.objectsById[divId];
|
|
5837 |
}
|
|
5838 |
return null;
|
|
5839 |
};
|
|
5840 |
|
|
5841 |
// A method to hide a popup based on a div id
|
|
5842 |
Popup.hide = function(divId) {
|
|
5843 |
var popup = Popup.get(divId);
|
|
5844 |
if (popup!=null) {
|
|
5845 |
popup.hide();
|
|
5846 |
}
|
|
5847 |
};
|
|
5848 |
|
|
5849 |
// PROTOTYPE PROPERTIES
|
|
5850 |
// --------------------------------------------------------------------
|
|
5851 |
Popup.prototype.content = null;
|
|
5852 |
Popup.prototype.className = "PopupDiv";
|
|
5853 |
Popup.prototype.style = null; // Styles to be applied to the DIV
|
|
5854 |
Popup.prototype.width = null;
|
|
5855 |
Popup.prototype.height = null;
|
|
5856 |
Popup.prototype.top = null;
|
|
5857 |
Popup.prototype.left = null;
|
|
5858 |
Popup.prototype.offsetLeft = 0;
|
|
5859 |
Popup.prototype.offsetTop = 0;
|
|
5860 |
Popup.prototype.constrainToScreen = true;
|
|
5861 |
Popup.prototype.autoHide = true;
|
|
5862 |
Popup.prototype.useIframeShim = false; /*@cc_on @*/ /*@if (@_win32) {Popup.prototype.useIframeShim = true;} @end @*/
|
|
5863 |
Popup.prototype.iframe = null;
|
|
5864 |
Popup.prototype.position = null; // vertical: "above top center bottom below", horizontal: "adjacent-left,left,center,right,adjacent-right"
|
|
5865 |
Popup.prototype.reference = null;
|
|
5866 |
Popup.prototype.modal = false;
|
|
5867 |
Popup.prototype.destroyDivOnHide = false;
|
|
5868 |
Popup.prototype.destroyObjectsOnHide = false;
|
|
5869 |
Popup.prototype.screen = null;
|
|
5870 |
Popup.prototype.screenIframeShim = null;
|
|
5871 |
Popup.prototype.screenOpacity=.4;
|
|
5872 |
Popup.prototype.screenColor="#cccccc";
|
|
5873 |
|
|
5874 |
// INSTANCE METHODS
|
|
5875 |
// --------------------------------------------------------------------
|
|
5876 |
|
|
5877 |
// Show the popup
|
|
5878 |
// --------------------------------------------------------------------
|
|
5879 |
Popup.prototype.show = function(options, modal) {
|
|
5880 |
this.modal = this.modal || (typeof(modal)=="boolean" && modal);
|
|
5881 |
if (defined(options) && options!=null && typeof(options)=="object") {
|
|
5882 |
for (var i in options) {
|
|
5883 |
this[i] = options[i];
|
|
5884 |
}
|
|
5885 |
}
|
|
5886 |
this.div = DOM.resolve(this.div);
|
|
5887 |
CSS.setStyle(this.div,'position','absolute');
|
|
5888 |
|
|
5889 |
// If there is no div pre-defined to use, create one
|
|
5890 |
if (this.div==null) {
|
|
5891 |
this.div = this.createDiv();
|
|
5892 |
}
|
|
5893 |
if (this.content!=null) {
|
|
5894 |
this.div.innerHTML = this.content;
|
|
5895 |
this.content = null;
|
|
5896 |
}
|
|
5897 |
if (this.className!=null) {
|
|
5898 |
this.div.className = this.className;
|
|
5899 |
}
|
|
5900 |
if (this.style!=null) {
|
|
5901 |
this.applyStyle();
|
|
5902 |
}
|
|
5903 |
if (this.width!=null) {
|
|
5904 |
this.div.style.width = this.width+"px";
|
|
5905 |
this.div.style.overflowX="auto";
|
|
5906 |
}
|
|
5907 |
if (this.height!=null) {
|
|
5908 |
this.div.style.height = this.height+"px";
|
|
5909 |
this.div.style.overflowY="auto";
|
|
5910 |
}
|
|
5911 |
|
|
5912 |
// Do the actual display - this is a separate method so display transitions can be implemented
|
|
5913 |
this.transition();
|
|
5914 |
|
|
5915 |
// Make sure clicks on the DIV don't bubble up to the document
|
|
5916 |
this.div.onclick = function(e) {
|
|
5917 |
Event.cancelBubble(Event.resolve(e));
|
|
5918 |
};
|
|
5919 |
this.div.onmouseup = this.div.onclick;
|
|
5920 |
|
|
5921 |
// Focus to the DIV if possible
|
|
5922 |
if (this.modal && this.div.focus) {
|
|
5923 |
this.div.focus();
|
|
5924 |
}
|
|
5925 |
};
|
|
5926 |
|
|
5927 |
// Show the popup but make it modal
|
|
5928 |
// --------------------------------------------------------------------
|
|
5929 |
Popup.prototype.transition = function() {
|
|
5930 |
if (this.modal) {
|
|
5931 |
this.addScreen();
|
|
5932 |
}
|
|
5933 |
|
|
5934 |
// Make the DIV displayed but hidden so its size can be measured
|
|
5935 |
CSS.setStyle(this.div,'visibility','hidden');
|
|
5936 |
CSS.setStyle(this.div,'display','block');
|
|
5937 |
|
|
5938 |
// Position the popup
|
|
5939 |
this.setPosition();
|
|
5940 |
|
|
5941 |
// Add the shim if necessary
|
|
5942 |
if (this.useIframeShim) {
|
|
5943 |
this.addIframeShim();
|
|
5944 |
}
|
|
5945 |
|
|
5946 |
// Make sure the DIV is higher than the shim
|
|
5947 |
this.div.style.zIndex = Popup.minZIndex++;
|
|
5948 |
|
|
5949 |
CSS.setStyle(this.div,'display','block');
|
|
5950 |
CSS.setStyle(this.div,'visibility','visible');
|
|
5951 |
};
|
|
5952 |
|
|
5953 |
// Show the popup but make it modal
|
|
5954 |
// --------------------------------------------------------------------
|
|
5955 |
Popup.prototype.showModal = function(options) {
|
|
5956 |
this.show(options,true);
|
|
5957 |
};
|
|
5958 |
|
|
5959 |
// Apply user styles to the DIV
|
|
5960 |
// --------------------------------------------------------------------
|
|
5961 |
Popup.prototype.applyStyle = function() {
|
|
5962 |
if (this.div!=null && this.style!=null && typeof(this.style)=="object") {
|
|
5963 |
for (var i in this.style) {
|
|
5964 |
this.div.style[i] = this.style[i];
|
|
5965 |
}
|
|
5966 |
}
|
|
5967 |
};
|
|
5968 |
|
|
5969 |
// Hide the popup
|
|
5970 |
// --------------------------------------------------------------------
|
|
5971 |
Popup.prototype.hide = function() {
|
|
5972 |
// If this was a temp object creating on-the-fly, then remove objects from the DOM so
|
|
5973 |
// The document doesn't get littered with extra objects
|
|
5974 |
if (this.destroyDivOnHide) {
|
|
5975 |
DOM.removeNode(this.div);
|
|
5976 |
this.div = null;
|
|
5977 |
delete Popup.objects[this.id];
|
|
5978 |
}
|
|
5979 |
else if (this.div!=null) {
|
|
5980 |
CSS.setStyle(this.div,'display','none');
|
|
5981 |
}
|
|
5982 |
|
|
5983 |
if (this.destroyObjectsOnHide) {
|
|
5984 |
DOM.removeNode(this.iframe);
|
|
5985 |
DOM.removeNode(this.screen);
|
|
5986 |
DOM.removeNode(this.screenIframeShim);
|
|
5987 |
}
|
|
5988 |
else {
|
|
5989 |
if (this.iframe!=null) {
|
|
5990 |
this.iframe.style.display = "none";
|
|
5991 |
}
|
|
5992 |
if (this.screen!=null) {
|
|
5993 |
this.screen.style.display = "none";
|
|
5994 |
}
|
|
5995 |
if (this.screenIframeShim!=null) {
|
|
5996 |
this.screenIframeShim.style.display = "none";
|
|
5997 |
}
|
|
5998 |
}
|
|
5999 |
};
|
|
6000 |
|
|
6001 |
// Util funcs for position
|
|
6002 |
// --------------------------------------------------------------------
|
|
6003 |
Popup.prototype.setTop = function(top) {
|
|
6004 |
this.div.style.top = top+"px";
|
|
6005 |
};
|
|
6006 |
Popup.prototype.setLeft = function(left) {
|
|
6007 |
this.div.style.left = left+"px";
|
|
6008 |
};
|
|
6009 |
Popup.prototype.getTop = function() {
|
|
6010 |
return parseInt(CSS.getStyle(this.div,"top"),10);
|
|
6011 |
};
|
|
6012 |
Popup.prototype.getLeft = function() {
|
|
6013 |
return parseInt(CSS.getStyle(this.div,"left"),10);
|
|
6014 |
};
|
|
6015 |
|
|
6016 |
// All the logic to position the popup based on various criteria
|
|
6017 |
// --------------------------------------------------------------------
|
|
6018 |
Popup.prototype.setPosition = function() {
|
|
6019 |
if (this.position!=null) {
|
|
6020 |
var m = this.position.match(/^(\S+)\s+(\S+)/);
|
|
6021 |
if (m!=null && m.length==3) {
|
|
6022 |
var v = m[1];
|
|
6023 |
var h = m[2];
|
|
6024 |
|
|
6025 |
var ref = this.reference;
|
|
6026 |
if (ref==null) { ref = Screen.getBody(); }
|
|
6027 |
var p = Position.get(ref);
|
|
6028 |
var refTop = p.top;
|
|
6029 |
var refLeft = p.left;
|
|
6030 |
var refWidth = DOM.getOuterWidth(ref);
|
|
6031 |
var refHeight = DOM.getOuterHeight(ref);
|
|
6032 |
|
|
6033 |
var width = DOM.getOuterWidth(this.div);
|
|
6034 |
var height = DOM.getOuterHeight(this.div);
|
|
6035 |
|
|
6036 |
var scrollLeft = Screen.getScrollLeft();
|
|
6037 |
var scrollTop = Screen.getScrollTop();
|
|
6038 |
|
|
6039 |
// Set vertical position relative to reference object
|
|
6040 |
if (v=="above") { this.setTop(refTop-height+this.offsetTop); }
|
|
6041 |
else if (v=="top") { this.setTop(refTop+this.offsetTop); }
|
|
6042 |
else if (v=="center") { this.setTop(refTop+(refHeight/2)-(height/2)+this.offsetTop); }
|
|
6043 |
else if (v=="bottom") { this.setTop(refTop+refHeight-height+this.offsetTop); }
|
|
6044 |
else if (v=="below") { this.setTop(refTop+refHeight+this.offsetTop); }
|
|
6045 |
|
|
6046 |
// Set horizontal position relative to reference object
|
|
6047 |
if (h=="adjacent-left") { this.setLeft(refLeft-width+this.offsetLeft); }
|
|
6048 |
else if (h=="left") { this.setLeft(refLeft+this.offsetLeft); }
|
|
6049 |
else if (h=="center") { this.setLeft(refLeft+(refWidth/2)-(width/2)+this.offsetLeft); }
|
|
6050 |
else if (h=="right") { this.setLeft(refLeft+refWidth-width+this.offsetLeft); }
|
|
6051 |
else if (h=="adjacent-right") { this.setLeft(refLeft+refWidth+this.offsetLeft); }
|
|
6052 |
}
|
|
6053 |
}
|
|
6054 |
else if (this.top==null && this.left==null) {
|
|
6055 |
this.center();
|
|
6056 |
}
|
|
6057 |
else {
|
|
6058 |
if (this.top==null) { this.top=0; }
|
|
6059 |
if (this.left==null) { this.left=0; }
|
|
6060 |
this.div.style.top = this.top+this.offsetTop+"px";
|
|
6061 |
this.div.style.left = this.left+this.offsetLeft+"px";
|
|
6062 |
}
|
|
6063 |
|
|
6064 |
// Re-position to make sure it stays on the screen
|
|
6065 |
if (this.constrainToScreen) {
|
|
6066 |
this.fitToScreen();
|
|
6067 |
}
|
|
6068 |
};
|
|
6069 |
|
|
6070 |
// Append an object to the body
|
|
6071 |
// --------------------------------------------------------------------
|
|
6072 |
Popup.prototype.appendToBody = function(o) {
|
|
6073 |
var body = Screen.getBody();
|
|
6074 |
if (body && body.appendChild) {
|
|
6075 |
body.appendChild(o);
|
|
6076 |
}
|
|
6077 |
};
|
|
6078 |
|
|
6079 |
// Create a new DIV object to be used for a popup
|
|
6080 |
// --------------------------------------------------------------------
|
|
6081 |
Popup.prototype.createDiv = function() {
|
|
6082 |
if (document.createElement) {
|
|
6083 |
var d = document.createElement("DIV");
|
|
6084 |
d.style.position="absolute";
|
|
6085 |
d.style.display="block";
|
|
6086 |
d.style.visibility="hidden";
|
|
6087 |
this.appendToBody(d);
|
|
6088 |
return d;
|
|
6089 |
}
|
|
6090 |
alert("ERROR: Couldn't create DIV element in Popup.prototype.createDiv()");
|
|
6091 |
return null;
|
|
6092 |
};
|
|
6093 |
|
|
6094 |
// Create a new IFRAME object to be used behind the popup
|
|
6095 |
// --------------------------------------------------------------------
|
|
6096 |
Popup.prototype.createIframe = function() {
|
|
6097 |
if (document.createElement) {
|
|
6098 |
var i= document.createElement("IFRAME");
|
|
6099 |
i.style.position="absolute";
|
|
6100 |
i.style.display="block";
|
|
6101 |
i.style.visibility="hidden";
|
|
6102 |
i.style.background="none";
|
|
6103 |
this.appendToBody(i);
|
|
6104 |
return i;
|
|
6105 |
}
|
|
6106 |
else {
|
|
6107 |
alert("ERROR: Couldn't create IFRAME object in Popup.prototype.createIframe()");
|
|
6108 |
}
|
|
6109 |
};
|
|
6110 |
|
|
6111 |
// Add an IFRAME shim for the DIV
|
|
6112 |
// --------------------------------------------------------------------
|
|
6113 |
Popup.prototype.addIframeShim = function() {
|
|
6114 |
if (this.iframe==null) {
|
|
6115 |
this.iframe = this.createIframe();
|
|
6116 |
}
|
|
6117 |
this.iframe.className = Popup.iframeClass;
|
|
6118 |
CSS.setStyle(this.iframe,'top',this.getTop()+"px");
|
|
6119 |
CSS.setStyle(this.iframe,'left',this.getLeft()+"px");
|
|
6120 |
CSS.setStyle(this.iframe,'width',DOM.getOuterWidth(this.div) + "px");
|
|
6121 |
CSS.setStyle(this.iframe,'height',DOM.getOuterHeight(this.div) + "px");
|
|
6122 |
CSS.setStyle(this.iframe,'zIndex',Popup.minZIndex++);
|
|
6123 |
CSS.setStyle(this.iframe,'opacity',0);
|
|
6124 |
CSS.setStyle(this.iframe,'visibility','visible');
|
|
6125 |
CSS.setStyle(this.iframe,'display','block');
|
|
6126 |
};
|
|
6127 |
|
|
6128 |
// Create a "screen" to make a popup modal
|
|
6129 |
// --------------------------------------------------------------------
|
|
6130 |
Popup.prototype.addScreen = function() {
|
|
6131 |
if (this.screen==null) {
|
|
6132 |
this.screen = this.createDiv();
|
|
6133 |
this.screen.style.top="0px";
|
|
6134 |
this.screen.style.left="0px";
|
|
6135 |
this.screen.style.backgroundColor = this.screenColor;
|
|
6136 |
this.screen.className=Popup.screenClass;;
|
|
6137 |
CSS.setStyle(this.screen,"opacity",this.screenOpacity);
|
|
6138 |
this.screen.onclick = function(e) { Event.cancelBubble(Event.resolve(e)); }
|
|
6139 |
}
|
|
6140 |
if (this.screenIframeShim==null) {
|
|
6141 |
this.screenIframeShim = this.createIframe();
|
|
6142 |
this.screenIframeShim.style.top="0px";
|
|
6143 |
this.screenIframeShim.style.left="0px";
|
|
6144 |
this.screenIframeShim.className=Popup.screenIframeClass;
|
|
6145 |
CSS.setStyle(this.screenIframeShim,"opacity",0);
|
|
6146 |
}
|
|
6147 |
this.screen.style.width = Screen.getDocumentWidth()+"px";
|
|
6148 |
this.screen.style.height = Screen.getDocumentHeight()+"px";
|
|
6149 |
this.screenIframeShim.style.width = Screen.getDocumentWidth()+"px";
|
|
6150 |
this.screenIframeShim.style.height = Screen.getDocumentHeight()+"px";
|
|
6151 |
this.screenIframeShim.style.zIndex = Popup.minZIndex++;
|
|
6152 |
this.screenIframeShim.style.visibility="visible";
|
|
6153 |
this.screenIframeShim.style.display="block";
|
|
6154 |
this.screen.style.zIndex = Popup.minZIndex++;
|
|
6155 |
this.screen.style.visibility="visible";
|
|
6156 |
this.screen.style.display="block";
|
|
6157 |
};
|
|
6158 |
|
|
6159 |
// Re-position the DIV so it stays on the screen
|
|
6160 |
// --------------------------------------------------------------------
|
|
6161 |
Popup.prototype.fitToScreen = function() {
|
|
6162 |
var width = DOM.getOuterWidth(this.div);
|
|
6163 |
var height = DOM.getOuterHeight(this.div);
|
|
6164 |
var top = this.getTop();
|
|
6165 |
var left = this.getLeft();
|
|
6166 |
|
|
6167 |
var clientWidth = Screen.getViewportWidth();
|
|
6168 |
var clientHeight = Screen.getViewportHeight();
|
|
6169 |
|
|
6170 |
var scrollLeft = Screen.getScrollLeft();
|
|
6171 |
var scrollTop = Screen.getScrollTop();
|
|
6172 |
|
|
6173 |
if (top-scrollTop+height>clientHeight) {
|
|
6174 |
top = top - ((top+height) - (scrollTop+clientHeight));
|
|
6175 |
this.div.style.top = top + "px";
|
|
6176 |
}
|
|
6177 |
if (left-scrollLeft+width>clientWidth) {
|
|
6178 |
left = left - ((left+width) - (scrollLeft+clientWidth));
|
|
6179 |
this.div.style.left = left + "px";
|
|
6180 |
}
|
|
6181 |
if (top<scrollTop) {
|
|
6182 |
this.div.style.top=scrollTop+"px";
|
|
6183 |
}
|
|
6184 |
if (left<scrollLeft) {
|
|
6185 |
this.div.style.left=scrollLeft+"px";
|
|
6186 |
}
|
|
6187 |
};
|
|
6188 |
|
|
6189 |
// Center the DIV object
|
|
6190 |
// --------------------------------------------------------------------
|
|
6191 |
Popup.prototype.center = function() {
|
|
6192 |
var left = DOM.getOuterWidth(this.div);
|
|
6193 |
var top = DOM.getOuterHeight(this.div);
|
|
6194 |
if (isNaN(left)) { left=0; }
|
|
6195 |
if (isNaN(top)) { top=0; }
|
|
6196 |
var clientW = Screen.getViewportWidth();
|
|
6197 |
var clientH = Screen.getViewportHeight();
|
|
6198 |
if (clientW!=null && clientH!=null) {
|
|
6199 |
top = (clientH-top)/2;
|
|
6200 |
left = (clientW-left)/2;
|
|
6201 |
}
|
|
6202 |
top += Screen.getScrollTop();
|
|
6203 |
left += Screen.getScrollLeft();
|
|
6204 |
|
|
6205 |
this.div.style.top = top+this.offsetTop+"px";
|
|
6206 |
this.div.style.left = left+this.offsetLeft+"px";
|
|
6207 |
};
|
|
6208 |
|
|
6209 |
//]]>
|
|
6210 |
</script>
|
|
6211 |
|
0
|
6212 |
</head>
|
|
6213 |
<body>
|
|
6214 |
|
|
6215 |
<h1>Generation summary:</h1>
|
|
6216 |
<table class="summary">
|
3
|
6217 |
<tr>
|
|
6218 |
<th class="featureName">Statistics</th>
|
|
6219 |
<th class="featureName"></th>
|
|
6220 |
</tr>
|
|
6221 |
<tr>
|
0
|
6222 |
<td>Refs in files</td>
|
3
|
6223 |
<td>48</td>
|
|
6224 |
</tr>
|
0
|
6225 |
<tr>
|
3
|
6226 |
<td>Not generated Refs</td>
|
|
6227 |
<td>32</td>
|
|
6228 |
</tr>
|
0
|
6229 |
<tr>
|
|
6230 |
<th class="featureName" colspan="2">Details</th>
|
3
|
6231 |
</tr>
|
0
|
6232 |
<tr>
|
|
6233 |
<td>Report generated</td>
|
3
|
6234 |
<td>20.04.2010 19:23:59</td>
|
|
6235 |
</tr>
|
0
|
6236 |
<tr>
|
|
6237 |
<td>Generation duration</td>
|
3
|
6238 |
<td>1.172</td>
|
|
6239 |
</tr>
|
0
|
6240 |
<tr>
|
|
6241 |
<td>Generation log</td>
|
3
|
6242 |
<td><a href="file:///C|/Documents%20and%20Settings/teerytko/workspace/cone.trunk/source/scripts/tests/temp/gen_ll3/cone.log">cone log</a></td>
|
|
6243 |
</tr>
|
0
|
6244 |
<tr>
|
|
6245 |
<th class="featureName" colspan="2">Generation options</th>
|
|
6246 |
</tr>
|
|
6247 |
<tr>
|
|
6248 |
<td align="left">Layers</td>
|
|
6249 |
<td align="left">[-1]</td>
|
3
|
6250 |
</tr>
|
0
|
6251 |
<tr>
|
|
6252 |
<td align="left">Added</td>
|
|
6253 |
<td align="left">None</td>
|
3
|
6254 |
</tr>
|
0
|
6255 |
<tr>
|
|
6256 |
<td align="left">Dryrun</td>
|
|
6257 |
<td align="left">False</td>
|
3
|
6258 |
</tr>
|
0
|
6259 |
<tr>
|
|
6260 |
<td align="left">Verbose</td>
|
|
6261 |
<td align="left">3</td>
|
3
|
6262 |
</tr>
|
0
|
6263 |
<tr>
|
|
6264 |
<td align="left">Overrides</td>
|
|
6265 |
<td align="left">None</td>
|
3
|
6266 |
</tr>
|
0
|
6267 |
<tr>
|
|
6268 |
<td align="left">Project</td>
|
3
|
6269 |
<td align="left">C:\Documents and Settings\teerytko\workspace\cone.trunk\source\scripts\tests\generation_test_project</td>
|
|
6270 |
</tr>
|
0
|
6271 |
<tr>
|
|
6272 |
<td align="left">Report</td>
|
|
6273 |
<td align="left">report.html</td>
|
3
|
6274 |
</tr>
|
0
|
6275 |
<tr>
|
|
6276 |
<td align="left">Impls</td>
|
|
6277 |
<td align="left">None</td>
|
3
|
6278 |
</tr>
|
|
6279 |
<tr>
|
|
6280 |
<td align="left">Tags</td>
|
|
6281 |
<td align="left">{}</td>
|
|
6282 |
</tr>
|
0
|
6283 |
<tr>
|
|
6284 |
<td align="left">Output</td>
|
|
6285 |
<td align="left">output</td>
|
3
|
6286 |
</tr>
|
0
|
6287 |
<tr>
|
|
6288 |
<td align="left">Configuration</td>
|
|
6289 |
<td align="left">root.confml</td>
|
|
6290 |
</tr>
|
|
6291 |
</table>
|
|
6292 |
|
3
|
6293 |
<h1>Generation Outputs:</h1><br>
|
|
6294 |
<p>Predefined filters:<br>
|
|
6295 |
<FORM>
|
|
6296 |
<INPUT type="button" value="Refs with no implementation" onclick="tf_outputs.SetFilterValue(1,'None');tf_outputs.SetFilterValue(0, '');tf_outputs.SetFilterValue(2, '');tf_outputs.Filter();return false;" name="Refs with no implementation"">
|
|
6297 |
<br>
|
|
6298 |
<INPUT type="button" value="Refs with not output" onclick="tf_outputs.SetFilterValue(2, 'None');tf_outputs.SetFilterValue(0, '');tf_outputs.SetFilterValue(1, '');tf_outputs.Filter();return false;" name="Refs with not output">
|
|
6299 |
</FORM>
|
|
6300 |
</p>
|
|
6301 |
<table class="report" id="outputs">
|
0
|
6302 |
<tr>
|
3
|
6303 |
<th class="featureName">Settings</th>
|
0
|
6304 |
<th class="featureName">Impl. file</th>
|
3
|
6305 |
<th class="featureName">Outputs</th>
|
0
|
6306 |
</tr>
|
3
|
6307 |
|
0
|
6308 |
|
3
|
6309 |
|
0
|
6310 |
|
3
|
6311 |
|
|
6312 |
<!-- process the output files -->
|
0
|
6313 |
|
3
|
6314 |
<tr>
|
|
6315 |
<td>
|
|
6316 |
</td>
|
|
6317 |
<td>
|
|
6318 |
Rule:
|
|
6319 |
|
|
6320 |
custom/implml/seq_tempvar.implml:15
|
|
6321 |
|
|
6322 |
</td>
|
|
6323 |
<td>
|
|
6324 |
|
|
6325 |
TempFeature2.FilesToCopy
|
|
6326 |
|
|
6327 |
</td>
|
|
6328 |
</tr>
|
|
6329 |
<tr>
|
|
6330 |
<td>
|
|
6331 |
</td>
|
|
6332 |
<td>
|
|
6333 |
Rule:
|
|
6334 |
|
|
6335 |
custom/implml/simple_tempvars.implml:12
|
|
6336 |
|
|
6337 |
</td>
|
|
6338 |
<td>
|
|
6339 |
|
|
6340 |
TempFeature.String
|
|
6341 |
|
|
6342 |
</td>
|
|
6343 |
</tr>
|
|
6344 |
<tr>
|
|
6345 |
<td>
|
|
6346 |
</td>
|
|
6347 |
<td>
|
|
6348 |
Rule:
|
|
6349 |
|
|
6350 |
custom/implml/simple_tempvars.implml:13
|
|
6351 |
|
|
6352 |
</td>
|
|
6353 |
<td>
|
|
6354 |
|
|
6355 |
TempFeature.Int
|
|
6356 |
|
|
6357 |
</td>
|
|
6358 |
</tr>
|
|
6359 |
<tr>
|
|
6360 |
<td>
|
|
6361 |
</td>
|
|
6362 |
<td>
|
|
6363 |
Rule:
|
|
6364 |
|
|
6365 |
custom/implml/simple_tempvars.implml:14
|
|
6366 |
|
|
6367 |
</td>
|
|
6368 |
<td>
|
|
6369 |
|
|
6370 |
TempFeature.Real
|
|
6371 |
|
|
6372 |
</td>
|
|
6373 |
</tr>
|
|
6374 |
<tr>
|
|
6375 |
<td>
|
|
6376 |
<B>
|
|
6377 |
MultiSelectionTest.MultiSelectionSetting
|
|
6378 |
</B><br>
|
|
6379 |
</td>
|
|
6380 |
<td>
|
|
6381 |
|
|
6382 |
base/implml/multiselection.templateml:2
|
|
6383 |
|
|
6384 |
</td>
|
|
6385 |
<td>
|
|
6386 |
|
|
6387 |
output/multiselection.txt
|
|
6388 |
|
|
6389 |
</td>
|
|
6390 |
</tr>
|
|
6391 |
<tr>
|
|
6392 |
<td>
|
|
6393 |
<B>
|
|
6394 |
NameIdMappingTestTargetSettings.Selection
|
|
6395 |
</B><br>
|
|
6396 |
<B>
|
|
6397 |
NameIdMappingTestTargetSettings.Int
|
|
6398 |
</B><br>
|
|
6399 |
<B>
|
|
6400 |
NameIdMappingTestTargetSettings.Real
|
|
6401 |
</B><br>
|
|
6402 |
<B>
|
|
6403 |
NameIdMappingTestTargetSettings.Sequence.Selection
|
|
6404 |
</B><br>
|
|
6405 |
<B>
|
|
6406 |
NameIdMappingTestTargetSettings.Sequence.Int
|
|
6407 |
</B><br>
|
|
6408 |
<B>
|
|
6409 |
NameIdMappingTestTargetSettings.Sequence.Real
|
|
6410 |
</B><br>
|
|
6411 |
</td>
|
|
6412 |
<td>
|
|
6413 |
|
|
6414 |
base/implml/name_id_mapping_test.templateml:2
|
|
6415 |
|
|
6416 |
</td>
|
|
6417 |
<td>
|
|
6418 |
|
|
6419 |
output/name_id_mapping_test.txt
|
|
6420 |
|
|
6421 |
</td>
|
|
6422 |
</tr>
|
|
6423 |
<tr>
|
|
6424 |
<td>
|
|
6425 |
<i>
|
|
6426 |
TempFeature.String
|
|
6427 |
</i><br>
|
|
6428 |
</td>
|
|
6429 |
<td>
|
|
6430 |
|
|
6431 |
custom/implml/conditional_container.implml:12
|
|
6432 |
|
|
6433 |
</td>
|
|
6434 |
<td>
|
|
6435 |
|
|
6436 |
output/content/template_string_condition_true.txt
|
|
6437 |
|
|
6438 |
</td>
|
|
6439 |
</tr>
|
|
6440 |
<tr>
|
|
6441 |
<td>
|
|
6442 |
</td>
|
|
6443 |
<td>
|
|
6444 |
|
|
6445 |
custom/implml/conditional_container.implml:34
|
|
6446 |
|
|
6447 |
</td>
|
|
6448 |
<td>
|
|
6449 |
|
|
6450 |
output/sis/app1.txt
|
|
6451 |
|
|
6452 |
</td>
|
|
6453 |
</tr>
|
|
6454 |
<tr>
|
|
6455 |
<td>
|
|
6456 |
<B>
|
|
6457 |
BasicSettingTypesTest.IntSetting
|
|
6458 |
</B><br>
|
|
6459 |
</td>
|
|
6460 |
<td>
|
|
6461 |
|
|
6462 |
custom/implml/impl_override_test.templateml:2
|
|
6463 |
|
|
6464 |
</td>
|
|
6465 |
<td>
|
|
6466 |
|
|
6467 |
output/impl_override_test.txt
|
|
6468 |
|
|
6469 |
</td>
|
|
6470 |
</tr>
|
|
6471 |
<tr>
|
|
6472 |
<td>
|
|
6473 |
</td>
|
|
6474 |
<td>
|
|
6475 |
|
|
6476 |
custom/implml/invocation_phase_test.implml:6
|
|
6477 |
|
|
6478 |
</td>
|
|
6479 |
<td>
|
|
6480 |
|
|
6481 |
output/content/invocation_phase_test_common_ns.txt
|
|
6482 |
|
|
6483 |
</td>
|
|
6484 |
</tr>
|
|
6485 |
<tr>
|
|
6486 |
<td>
|
|
6487 |
</td>
|
|
6488 |
<td>
|
|
6489 |
|
|
6490 |
custom/implml/invocation_phase_test.implml:25
|
|
6491 |
|
|
6492 |
</td>
|
|
6493 |
<td>
|
|
6494 |
|
|
6495 |
output/content/invocation_phase_test_contentml_ns.txt
|
|
6496 |
|
|
6497 |
</td>
|
|
6498 |
</tr>
|
|
6499 |
<tr>
|
|
6500 |
<td>
|
|
6501 |
<i>
|
|
6502 |
TempFeatureMissingFile.Test1
|
|
6503 |
</i><br>
|
|
6504 |
<i>
|
|
6505 |
TempFeatureMissingFile.Test2
|
|
6506 |
</i><br>
|
|
6507 |
</td>
|
|
6508 |
<td>
|
|
6509 |
|
|
6510 |
custom/implml/missing_file_in_report_test.implml:11
|
|
6511 |
|
|
6512 |
</td>
|
|
6513 |
<td>
|
|
6514 |
|
|
6515 |
output/content/missing_output_file_test1.txt
|
|
6516 |
|
|
6517 |
</td>
|
|
6518 |
</tr>
|
|
6519 |
<tr>
|
|
6520 |
<td>
|
|
6521 |
<i>
|
|
6522 |
TempFeatureMissingFile.Test1
|
|
6523 |
</i><br>
|
|
6524 |
<i>
|
|
6525 |
TempFeatureMissingFile.Test2
|
|
6526 |
</i><br>
|
|
6527 |
</td>
|
|
6528 |
<td>
|
|
6529 |
|
|
6530 |
custom/implml/missing_file_in_report_test.implml:11
|
|
6531 |
|
|
6532 |
</td>
|
|
6533 |
<td>
|
|
6534 |
|
|
6535 |
output/content/missing_output_file_test2.txt
|
|
6536 |
|
|
6537 |
</td>
|
|
6538 |
</tr>
|
|
6539 |
<tr>
|
|
6540 |
<td>
|
|
6541 |
</td>
|
|
6542 |
<td>
|
|
6543 |
|
|
6544 |
custom/implml/output_override_test.implml:6
|
|
6545 |
|
|
6546 |
</td>
|
|
6547 |
<td>
|
|
6548 |
|
|
6549 |
output/test_subdir/output_subdir_test.txt
|
|
6550 |
|
|
6551 |
</td>
|
|
6552 |
</tr>
|
|
6553 |
<tr>
|
|
6554 |
<td>
|
|
6555 |
</td>
|
|
6556 |
<td>
|
|
6557 |
|
|
6558 |
custom/implml/output_override_test.implml:16
|
|
6559 |
|
|
6560 |
</td>
|
|
6561 |
<td>
|
|
6562 |
|
|
6563 |
output/overridden_output/output_rootdir_test.txt
|
|
6564 |
|
|
6565 |
</td>
|
|
6566 |
</tr>
|
|
6567 |
<tr>
|
|
6568 |
<td>
|
|
6569 |
</td>
|
|
6570 |
<td>
|
|
6571 |
|
|
6572 |
custom/implml/output_override_test.implml:27
|
|
6573 |
|
|
6574 |
</td>
|
|
6575 |
<td>
|
|
6576 |
|
|
6577 |
output/overridden_output/test_subdir/output_rootdir_test.txt
|
|
6578 |
|
|
6579 |
</td>
|
|
6580 |
</tr>
|
|
6581 |
<tr>
|
|
6582 |
<td>
|
|
6583 |
<B>
|
|
6584 |
TempFeature2.FilesToCopy.FilePath
|
|
6585 |
</B><br>
|
|
6586 |
</td>
|
|
6587 |
<td>
|
|
6588 |
|
|
6589 |
custom/implml/seq_tempvar.implml:21
|
|
6590 |
|
|
6591 |
</td>
|
|
6592 |
<td>
|
|
6593 |
|
|
6594 |
output/content/temp_seq_test/invocation_phase_test_1.txt
|
|
6595 |
|
|
6596 |
</td>
|
|
6597 |
</tr>
|
|
6598 |
<tr>
|
|
6599 |
<td>
|
|
6600 |
<B>
|
|
6601 |
TempFeature2.FilesToCopy.FilePath
|
|
6602 |
</B><br>
|
|
6603 |
</td>
|
|
6604 |
<td>
|
|
6605 |
|
|
6606 |
custom/implml/seq_tempvar.implml:21
|
|
6607 |
|
|
6608 |
</td>
|
|
6609 |
<td>
|
|
6610 |
|
|
6611 |
output/content/temp_seq_test/invocation_phase_test_2.txt
|
|
6612 |
|
|
6613 |
</td>
|
|
6614 |
</tr>
|
|
6615 |
<tr>
|
|
6616 |
<td>
|
|
6617 |
<i>
|
|
6618 |
TempFeature.String
|
|
6619 |
</i><br>
|
|
6620 |
<i>
|
|
6621 |
TempFeature.Int
|
|
6622 |
</i><br>
|
|
6623 |
<i>
|
|
6624 |
TempFeature.Real
|
|
6625 |
</i><br>
|
|
6626 |
<i>
|
|
6627 |
TempFeature.Boolean
|
|
6628 |
</i><br>
|
|
6629 |
</td>
|
|
6630 |
<td>
|
|
6631 |
|
|
6632 |
custom/implml/simple_tempvars.implml:18
|
|
6633 |
|
|
6634 |
</td>
|
|
6635 |
<td>
|
|
6636 |
|
|
6637 |
output/content/simple_tempvars_test.txt
|
|
6638 |
|
|
6639 |
</td>
|
|
6640 |
</tr>
|
|
6641 |
<tr>
|
|
6642 |
<td>
|
|
6643 |
</td>
|
|
6644 |
<td>
|
|
6645 |
|
|
6646 |
custom/implml/invocation_phase_test.implml:15
|
|
6647 |
|
|
6648 |
</td>
|
|
6649 |
<td>
|
|
6650 |
|
|
6651 |
output/content/invocation_phase_test_common_ns.txt
|
|
6652 |
|
|
6653 |
</td>
|
|
6654 |
</tr>
|
|
6655 |
<tr>
|
|
6656 |
<td>
|
|
6657 |
</td>
|
|
6658 |
<td>
|
|
6659 |
|
|
6660 |
custom/implml/invocation_phase_test.implml:31
|
|
6661 |
|
|
6662 |
</td>
|
|
6663 |
<td>
|
|
6664 |
|
|
6665 |
output/content/invocation_phase_test_contentml_ns.txt
|
|
6666 |
|
|
6667 |
</td>
|
|
6668 |
</tr>
|
|
6669 |
<tr>
|
|
6670 |
<td>
|
|
6671 |
</td>
|
|
6672 |
<td>
|
|
6673 |
Rule:
|
|
6674 |
|
|
6675 |
custom/implml/missing_file_in_report_test.implml:28
|
|
6676 |
|
|
6677 |
</td>
|
|
6678 |
<td>
|
|
6679 |
|
|
6680 |
TempFeatureMissingFile.Test1
|
|
6681 |
|
|
6682 |
</td>
|
|
6683 |
</tr>
|
|
6684 |
<tr>
|
|
6685 |
<td>
|
|
6686 |
</td>
|
|
6687 |
<td>
|
|
6688 |
Rule:
|
|
6689 |
|
|
6690 |
custom/implml/missing_file_in_report_test.implml:29
|
|
6691 |
|
|
6692 |
</td>
|
|
6693 |
<td>
|
|
6694 |
|
|
6695 |
TempFeatureMissingFile.Test2
|
|
6696 |
|
|
6697 |
</td>
|
|
6698 |
</tr>
|
0
|
6699 |
|
3
|
6700 |
<!-- process the refs with no output -->
|
|
6701 |
<tr>
|
|
6702 |
<td>
|
|
6703 |
<B>
|
0
|
6704 |
|
3
|
6705 |
BasicSettingTypesTest.StringSetting
|
|
6706 |
|
|
6707 |
</B><br>
|
|
6708 |
</td>
|
|
6709 |
<td>
|
|
6710 |
<span class="red">None</span><br>
|
|
6711 |
</td>
|
|
6712 |
<td>
|
|
6713 |
<span class="red">None</span><br>
|
|
6714 |
</td>
|
|
6715 |
</tr>
|
|
6716 |
<tr>
|
|
6717 |
<td>
|
|
6718 |
<B>
|
0
|
6719 |
|
3
|
6720 |
Feature1.SequenceSetting
|
0
|
6721 |
|
3
|
6722 |
</B><br>
|
|
6723 |
</td>
|
|
6724 |
<td>
|
|
6725 |
<span class="red">None</span><br>
|
|
6726 |
</td>
|
|
6727 |
<td>
|
|
6728 |
<span class="red">None</span><br>
|
|
6729 |
</td>
|
0
|
6730 |
</tr>
|
3
|
6731 |
<tr>
|
|
6732 |
<td>
|
|
6733 |
<B>
|
0
|
6734 |
|
3
|
6735 |
Feature1.SequenceSetting.BooleanSubSetting
|
|
6736 |
|
|
6737 |
</B><br>
|
|
6738 |
</td>
|
|
6739 |
<td>
|
|
6740 |
<span class="red">None</span><br>
|
|
6741 |
</td>
|
|
6742 |
<td>
|
|
6743 |
<span class="red">None</span><br>
|
|
6744 |
</td>
|
|
6745 |
</tr>
|
|
6746 |
<tr>
|
|
6747 |
<td>
|
|
6748 |
<B>
|
0
|
6749 |
|
3
|
6750 |
Feature1.SequenceSetting.IntSubSetting
|
|
6751 |
|
|
6752 |
</B><br>
|
|
6753 |
</td>
|
|
6754 |
<td>
|
|
6755 |
<span class="red">None</span><br>
|
|
6756 |
</td>
|
|
6757 |
<td>
|
|
6758 |
<span class="red">None</span><br>
|
|
6759 |
</td>
|
|
6760 |
</tr>
|
|
6761 |
<tr>
|
|
6762 |
<td>
|
|
6763 |
<B>
|
0
|
6764 |
|
3
|
6765 |
Feature1.SequenceSetting.RealSubSetting
|
|
6766 |
|
|
6767 |
</B><br>
|
|
6768 |
</td>
|
|
6769 |
<td>
|
|
6770 |
<span class="red">None</span><br>
|
|
6771 |
</td>
|
|
6772 |
<td>
|
|
6773 |
<span class="red">None</span><br>
|
|
6774 |
</td>
|
|
6775 |
</tr>
|
|
6776 |
<tr>
|
|
6777 |
<td>
|
|
6778 |
<B>
|
0
|
6779 |
|
3
|
6780 |
Feature1.SequenceSetting.SelectionSubSetting
|
|
6781 |
|
|
6782 |
</B><br>
|
|
6783 |
</td>
|
|
6784 |
<td>
|
|
6785 |
<span class="red">None</span><br>
|
|
6786 |
</td>
|
|
6787 |
<td>
|
|
6788 |
<span class="red">None</span><br>
|
|
6789 |
</td>
|
|
6790 |
</tr>
|
|
6791 |
<tr>
|
|
6792 |
<td>
|
|
6793 |
<B>
|
0
|
6794 |
|
3
|
6795 |
Feature1.SequenceSetting.StringSubSetting
|
|
6796 |
|
|
6797 |
</B><br>
|
|
6798 |
</td>
|
|
6799 |
<td>
|
|
6800 |
<span class="red">None</span><br>
|
|
6801 |
</td>
|
|
6802 |
<td>
|
|
6803 |
<span class="red">None</span><br>
|
|
6804 |
</td>
|
|
6805 |
</tr>
|
|
6806 |
<tr>
|
|
6807 |
<td>
|
|
6808 |
<B>
|
0
|
6809 |
|
3
|
6810 |
NameIdMappingTestSourceSequences.StringSequence
|
|
6811 |
|
|
6812 |
</B><br>
|
|
6813 |
</td>
|
|
6814 |
<td>
|
|
6815 |
<span class="red">None</span><br>
|
|
6816 |
</td>
|
|
6817 |
<td>
|
|
6818 |
<span class="red">None</span><br>
|
|
6819 |
</td>
|
|
6820 |
</tr>
|
|
6821 |
<tr>
|
|
6822 |
<td>
|
|
6823 |
<B>
|
0
|
6824 |
|
3
|
6825 |
NameIdMappingTestSourceSequences.StringSequence.Value
|
|
6826 |
|
|
6827 |
</B><br>
|
|
6828 |
</td>
|
|
6829 |
<td>
|
|
6830 |
<span class="red">None</span><br>
|
|
6831 |
</td>
|
|
6832 |
<td>
|
|
6833 |
<span class="red">None</span><br>
|
|
6834 |
</td>
|
|
6835 |
</tr>
|
|
6836 |
<tr>
|
|
6837 |
<td>
|
|
6838 |
<B>
|
0
|
6839 |
|
3
|
6840 |
NameIdMappingTestSourceSequences.StringToIntSequence
|
|
6841 |
|
|
6842 |
</B><br>
|
|
6843 |
</td>
|
|
6844 |
<td>
|
|
6845 |
<span class="red">None</span><br>
|
|
6846 |
</td>
|
|
6847 |
<td>
|
|
6848 |
<span class="red">None</span><br>
|
|
6849 |
</td>
|
|
6850 |
</tr>
|
|
6851 |
<tr>
|
|
6852 |
<td>
|
|
6853 |
<B>
|
0
|
6854 |
|
3
|
6855 |
NameIdMappingTestSourceSequences.StringToIntSequence.Name
|
|
6856 |
|
|
6857 |
</B><br>
|
|
6858 |
</td>
|
|
6859 |
<td>
|
|
6860 |
<span class="red">None</span><br>
|
|
6861 |
</td>
|
|
6862 |
<td>
|
|
6863 |
<span class="red">None</span><br>
|
|
6864 |
</td>
|
|
6865 |
</tr>
|
|
6866 |
<tr>
|
|
6867 |
<td>
|
|
6868 |
<B>
|
0
|
6869 |
|
3
|
6870 |
NameIdMappingTestSourceSequences.StringToIntSequence.Value
|
|
6871 |
|
|
6872 |
</B><br>
|
|
6873 |
</td>
|
|
6874 |
<td>
|
|
6875 |
<span class="red">None</span><br>
|
|
6876 |
</td>
|
|
6877 |
<td>
|
|
6878 |
<span class="red">None</span><br>
|
|
6879 |
</td>
|
|
6880 |
</tr>
|
|
6881 |
<tr>
|
|
6882 |
<td>
|
|
6883 |
<B>
|
0
|
6884 |
|
3
|
6885 |
NameIdMappingTestSourceSequences.StringToRealSequence
|
|
6886 |
|
|
6887 |
</B><br>
|
|
6888 |
</td>
|
|
6889 |
<td>
|
|
6890 |
<span class="red">None</span><br>
|
|
6891 |
</td>
|
|
6892 |
<td>
|
|
6893 |
<span class="red">None</span><br>
|
|
6894 |
</td>
|
|
6895 |
</tr>
|
|
6896 |
<tr>
|
|
6897 |
<td>
|
|
6898 |
<B>
|
0
|
6899 |
|
3
|
6900 |
NameIdMappingTestSourceSequences.StringToRealSequence.Name
|
|
6901 |
|
|
6902 |
</B><br>
|
|
6903 |
</td>
|
|
6904 |
<td>
|
|
6905 |
<span class="red">None</span><br>
|
|
6906 |
</td>
|
|
6907 |
<td>
|
|
6908 |
<span class="red">None</span><br>
|
|
6909 |
</td>
|
|
6910 |
</tr>
|
|
6911 |
<tr>
|
|
6912 |
<td>
|
|
6913 |
<B>
|
0
|
6914 |
|
3
|
6915 |
NameIdMappingTestSourceSequences.StringToRealSequence.Value
|
|
6916 |
|
|
6917 |
</B><br>
|
|
6918 |
</td>
|
|
6919 |
<td>
|
|
6920 |
<span class="red">None</span><br>
|
|
6921 |
</td>
|
|
6922 |
<td>
|
|
6923 |
<span class="red">None</span><br>
|
|
6924 |
</td>
|
|
6925 |
</tr>
|
|
6926 |
<tr>
|
|
6927 |
<td>
|
|
6928 |
<B>
|
0
|
6929 |
|
3
|
6930 |
NameIdMappingTestTargetSettings.Sequence
|
|
6931 |
|
|
6932 |
</B><br>
|
|
6933 |
</td>
|
|
6934 |
<td>
|
|
6935 |
<span class="red">None</span><br>
|
|
6936 |
</td>
|
|
6937 |
<td>
|
|
6938 |
<span class="red">None</span><br>
|
|
6939 |
</td>
|
|
6940 |
</tr>
|
|
6941 |
<tr>
|
|
6942 |
<td>
|
|
6943 |
<B>
|
0
|
6944 |
|
3
|
6945 |
SequenceSettingTest.SequenceSetting
|
|
6946 |
|
|
6947 |
</B><br>
|
|
6948 |
</td>
|
|
6949 |
<td>
|
|
6950 |
<span class="red">None</span><br>
|
|
6951 |
</td>
|
|
6952 |
<td>
|
|
6953 |
<span class="red">None</span><br>
|
|
6954 |
</td>
|
|
6955 |
</tr>
|
|
6956 |
<tr>
|
|
6957 |
<td>
|
|
6958 |
<B>
|
0
|
6959 |
|
3
|
6960 |
SequenceSettingTest.SequenceSetting.BooleanSubSetting
|
|
6961 |
|
|
6962 |
</B><br>
|
|
6963 |
</td>
|
|
6964 |
<td>
|
|
6965 |
<span class="red">None</span><br>
|
|
6966 |
</td>
|
|
6967 |
<td>
|
|
6968 |
<span class="red">None</span><br>
|
|
6969 |
</td>
|
|
6970 |
</tr>
|
|
6971 |
<tr>
|
|
6972 |
<td>
|
|
6973 |
<B>
|
0
|
6974 |
|
3
|
6975 |
SequenceSettingTest.SequenceSetting.FileSubSetting.localPath
|
|
6976 |
|
|
6977 |
</B><br>
|
|
6978 |
</td>
|
|
6979 |
<td>
|
|
6980 |
<span class="red">None</span><br>
|
|
6981 |
</td>
|
|
6982 |
<td>
|
|
6983 |
<span class="red">None</span><br>
|
|
6984 |
</td>
|
|
6985 |
</tr>
|
|
6986 |
<tr>
|
|
6987 |
<td>
|
|
6988 |
<B>
|
0
|
6989 |
|
3
|
6990 |
SequenceSettingTest.SequenceSetting.FileSubSetting.targetPath
|
|
6991 |
|
|
6992 |
</B><br>
|
|
6993 |
</td>
|
|
6994 |
<td>
|
|
6995 |
<span class="red">None</span><br>
|
|
6996 |
</td>
|
|
6997 |
<td>
|
|
6998 |
<span class="red">None</span><br>
|
|
6999 |
</td>
|
|
7000 |
</tr>
|
|
7001 |
<tr>
|
|
7002 |
<td>
|
|
7003 |
<B>
|
0
|
7004 |
|
3
|
7005 |
SequenceSettingTest.SequenceSetting.FolderSubSetting.localPath
|
|
7006 |
|
|
7007 |
</B><br>
|
|
7008 |
</td>
|
|
7009 |
<td>
|
|
7010 |
<span class="red">None</span><br>
|
|
7011 |
</td>
|
|
7012 |
<td>
|
|
7013 |
<span class="red">None</span><br>
|
|
7014 |
</td>
|
|
7015 |
</tr>
|
|
7016 |
<tr>
|
|
7017 |
<td>
|
|
7018 |
<B>
|
0
|
7019 |
|
3
|
7020 |
SequenceSettingTest.SequenceSetting.FolderSubSetting.targetPath
|
|
7021 |
|
|
7022 |
</B><br>
|
|
7023 |
</td>
|
|
7024 |
<td>
|
|
7025 |
<span class="red">None</span><br>
|
|
7026 |
</td>
|
|
7027 |
<td>
|
|
7028 |
<span class="red">None</span><br>
|
|
7029 |
</td>
|
|
7030 |
</tr>
|
|
7031 |
<tr>
|
|
7032 |
<td>
|
|
7033 |
<B>
|
0
|
7034 |
|
3
|
7035 |
SequenceSettingTest.SequenceSetting.IntSubSetting
|
|
7036 |
|
|
7037 |
</B><br>
|
|
7038 |
</td>
|
|
7039 |
<td>
|
|
7040 |
<span class="red">None</span><br>
|
|
7041 |
</td>
|
|
7042 |
<td>
|
|
7043 |
<span class="red">None</span><br>
|
|
7044 |
</td>
|
|
7045 |
</tr>
|
|
7046 |
<tr>
|
|
7047 |
<td>
|
|
7048 |
<B>
|
0
|
7049 |
|
3
|
7050 |
SequenceSettingTest.SequenceSetting.RealSubSetting
|
|
7051 |
|
|
7052 |
</B><br>
|
|
7053 |
</td>
|
|
7054 |
<td>
|
|
7055 |
<span class="red">None</span><br>
|
|
7056 |
</td>
|
|
7057 |
<td>
|
|
7058 |
<span class="red">None</span><br>
|
|
7059 |
</td>
|
|
7060 |
</tr>
|
|
7061 |
<tr>
|
|
7062 |
<td>
|
|
7063 |
<B>
|
|
7064 |
|
|
7065 |
SequenceSettingTest.SequenceSetting.SelectionSubSetting
|
|
7066 |
|
|
7067 |
</B><br>
|
|
7068 |
</td>
|
|
7069 |
<td>
|
|
7070 |
<span class="red">None</span><br>
|
|
7071 |
</td>
|
|
7072 |
<td>
|
|
7073 |
<span class="red">None</span><br>
|
|
7074 |
</td>
|
|
7075 |
</tr>
|
|
7076 |
<tr>
|
|
7077 |
<td>
|
|
7078 |
<B>
|
0
|
7079 |
|
3
|
7080 |
SequenceSettingTest.SequenceSetting.StringSubSetting
|
0
|
7081 |
|
3
|
7082 |
</B><br>
|
|
7083 |
</td>
|
|
7084 |
<td>
|
|
7085 |
<span class="red">None</span><br>
|
|
7086 |
</td>
|
|
7087 |
<td>
|
|
7088 |
<span class="red">None</span><br>
|
|
7089 |
</td>
|
|
7090 |
</tr>
|
|
7091 |
|
0
|
7092 |
</table>
|
3
|
7093 |
|
|
7094 |
<!-- Create extra data divs only when debug is on -->
|
|
7095 |
<!-- verbose 3 -->
|
|
7096 |
|
|
7097 |
<script language="javascript" type="text/javascript">
|
|
7098 |
//<![CDATA[
|
|
7099 |
var output_Props = {
|
|
7100 |
paging: false,
|
|
7101 |
highlight_keywords: true,
|
|
7102 |
rows_counter: true,
|
|
7103 |
rows_counter_text: "Rows:",
|
|
7104 |
btn_reset: true,
|
|
7105 |
loader: true,
|
|
7106 |
loader_text: "Filtering data..."
|
|
7107 |
};
|
|
7108 |
setFilterGrid("outputs", output_Props);
|
|
7109 |
|
|
7110 |
function Showpopup(item_over, popup_ref)
|
|
7111 |
{
|
|
7112 |
Popup.show(popup_ref, item_over,'top left', {'offsetTop':20});
|
|
7113 |
}
|
|
7114 |
//]]>
|
|
7115 |
</script>
|
|
7116 |
|
0
|
7117 |
|
|
7118 |
</body>
|
|
7119 |
</html> |