PageRenderTime 84ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 2ms

/script/jquery.jqGrid.src.js

https://gitlab.com/yellowrangler/leah
JavaScript | 13540 lines | 7316 code | 173 blank | 6051 comment | 2046 complexity | 0730e1e62e5660f98d075018b7f27c03 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. /**
  2. *
  3. * @license Guriddo jqGrid JS - v4.8.2 - 2015-03-24
  4. * Copyright(c) 2008, Tony Tomov, tony@trirand.com
  5. *
  6. * License: http://guriddo.net/?page_id=103334
  7. */
  8. (function( factory ) {
  9. "use strict";
  10. if ( typeof define === "function" && define.amd ) {
  11. // AMD. Register as an anonymous module.
  12. define([
  13. "jquery"
  14. ], factory );
  15. } else {
  16. // Browser globals
  17. factory( jQuery );
  18. }
  19. }(function( $ ) {
  20. "use strict";
  21. //module begin
  22. $.jgrid = $.jgrid || {};
  23. if(!$.jgrid.hasOwnProperty("defaults")) {
  24. $.jgrid.defaults = {};
  25. }
  26. $.extend($.jgrid,{
  27. version : "4.8.2",
  28. htmlDecode : function(value){
  29. if(value && (value===' ' || value===' ' || (value.length===1 && value.charCodeAt(0)===160))) { return "";}
  30. return !value ? value : String(value).replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&quot;/g, '"').replace(/&amp;/g, "&");
  31. },
  32. htmlEncode : function (value){
  33. return !value ? value : String(value).replace(/&/g, "&amp;").replace(/\"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
  34. },
  35. template : function(format){ //jqgformat
  36. var args = $.makeArray(arguments).slice(1), j, al = args.length;
  37. if(format==null) { format = ""; }
  38. return format.replace(/\{([\w\-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g, function(m,i){
  39. if(!isNaN(parseInt(i,10))) {
  40. return args[parseInt(i,10)];
  41. }
  42. for(j=0; j < al;j++) {
  43. if($.isArray(args[j])) {
  44. var nmarr = args[ j ],
  45. k = nmarr.length;
  46. while(k--) {
  47. if(i===nmarr[k].nm) {
  48. return nmarr[k].v;
  49. }
  50. }
  51. }
  52. }
  53. });
  54. },
  55. msie : navigator.appName === 'Microsoft Internet Explorer',
  56. msiever : function () {
  57. var rv = -1;
  58. var ua = navigator.userAgent;
  59. var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
  60. if (re.exec(ua) != null) {
  61. rv = parseFloat( RegExp.$1 );
  62. }
  63. return rv;
  64. },
  65. getCellIndex : function (cell) {
  66. var c = $(cell);
  67. if (c.is('tr')) { return -1; }
  68. c = (!c.is('td') && !c.is('th') ? c.closest("td,th") : c)[0];
  69. if ($.jgrid.msie) { return $.inArray(c, c.parentNode.cells); }
  70. return c.cellIndex;
  71. },
  72. stripHtml : function(v) {
  73. v = String(v);
  74. var regexp = /<("[^"]*"|'[^']*'|[^'">])*>/gi;
  75. if (v) {
  76. v = v.replace(regexp,"");
  77. return (v && v !== '&nbsp;' && v !== '&#160;') ? v.replace(/\"/g,"'") : "";
  78. }
  79. return v;
  80. },
  81. stripPref : function (pref, id) {
  82. var obj = $.type( pref );
  83. if( obj === "string" || obj === "number") {
  84. pref = String(pref);
  85. id = pref !== "" ? String(id).replace(String(pref), "") : id;
  86. }
  87. return id;
  88. },
  89. parse : function(jsonString) {
  90. var js = jsonString;
  91. if (js.substr(0,9) === "while(1);") { js = js.substr(9); }
  92. if (js.substr(0,2) === "/*") { js = js.substr(2,js.length-4); }
  93. if(!js) { js = "{}"; }
  94. return ($.jgrid.useJSON===true && typeof JSON === 'object' && typeof JSON.parse === 'function') ?
  95. JSON.parse(js) :
  96. eval('(' + js + ')');
  97. },
  98. parseDate : function(format, date, newformat, opts) {
  99. var token = /\\.|[dDjlNSwzWFmMntLoYyaABgGhHisueIOPTZcrU]/g,
  100. timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
  101. timezoneClip = /[^-+\dA-Z]/g,
  102. msDateRegExp = new RegExp("^\/Date\\((([-+])?[0-9]+)(([-+])([0-9]{2})([0-9]{2}))?\\)\/$"),
  103. msMatch = ((typeof date === 'string') ? date.match(msDateRegExp): null),
  104. pad = function (value, length) {
  105. value = String(value);
  106. length = parseInt(length,10) || 2;
  107. while (value.length < length) { value = '0' + value; }
  108. return value;
  109. },
  110. ts = {m : 1, d : 1, y : 1970, h : 0, i : 0, s : 0, u:0},
  111. timestamp=0, dM, k,hl,
  112. h12to24 = function(ampm, h){
  113. if (ampm === 0){ if (h === 12) { h = 0;} }
  114. else { if (h !== 12) { h += 12; } }
  115. return h;
  116. },
  117. offset =0;
  118. if(opts === undefined) {
  119. opts = $.jgrid.getRegional(this, "formatter.date");//$.jgrid.formatter.date;
  120. }
  121. // old lang files
  122. if(opts.parseRe === undefined ) {
  123. opts.parseRe = /[#%\\\/:_;.,\t\s-]/;
  124. }
  125. if( opts.masks.hasOwnProperty(format) ) { format = opts.masks[format]; }
  126. if(date && date != null) {
  127. if( !isNaN( date - 0 ) && String(format).toLowerCase() === "u") {
  128. //Unix timestamp
  129. timestamp = new Date( parseFloat(date)*1000 );
  130. } else if(date.constructor === Date) {
  131. timestamp = date;
  132. // Microsoft date format support
  133. } else if( msMatch !== null ) {
  134. timestamp = new Date(parseInt(msMatch[1], 10));
  135. if (msMatch[3]) {
  136. offset = Number(msMatch[5]) * 60 + Number(msMatch[6]);
  137. offset *= ((msMatch[4] === '-') ? 1 : -1);
  138. offset -= timestamp.getTimezoneOffset();
  139. timestamp.setTime(Number(Number(timestamp) + (offset * 60 * 1000)));
  140. }
  141. } else {
  142. //Support ISO8601Long that have Z at the end to indicate UTC timezone
  143. if(opts.srcformat === 'ISO8601Long' && date.charAt(date.length - 1) === 'Z') {
  144. offset -= (new Date()).getTimezoneOffset();
  145. }
  146. date = String(date).replace(/\T/g,"#").replace(/\t/,"%").split(opts.parseRe);
  147. format = format.replace(/\T/g,"#").replace(/\t/,"%").split(opts.parseRe);
  148. // parsing for month names
  149. for(k=0,hl=format.length;k<hl;k++){
  150. switch ( format[k] ) {
  151. case 'M':
  152. dM = $.inArray(date[k],opts.monthNames);
  153. if(dM !== -1 && dM < 12){date[k] = dM+1; ts.m = date[k];}
  154. break;
  155. case 'F':
  156. dM = $.inArray(date[k],opts.monthNames,12);
  157. if(dM !== -1 && dM > 11){date[k] = dM+1-12; ts.m = date[k];}
  158. break;
  159. case 'n':
  160. format[k] = 'm';
  161. break;
  162. case 'j':
  163. format[k] = 'd';
  164. break;
  165. case 'a':
  166. dM = $.inArray(date[k],opts.AmPm);
  167. if(dM !== -1 && dM < 2 && date[k] === opts.AmPm[dM]){
  168. date[k] = dM;
  169. ts.h = h12to24(date[k], ts.h);
  170. }
  171. break;
  172. case 'A':
  173. dM = $.inArray(date[k],opts.AmPm);
  174. if(dM !== -1 && dM > 1 && date[k] === opts.AmPm[dM]){
  175. date[k] = dM-2;
  176. ts.h = h12to24(date[k], ts.h);
  177. }
  178. break;
  179. case 'g':
  180. ts.h = parseInt(date[k], 10);
  181. break;
  182. }
  183. if(date[k] !== undefined) {
  184. ts[format[k].toLowerCase()] = parseInt(date[k],10);
  185. }
  186. }
  187. if(ts.f) {ts.m = ts.f;}
  188. if( ts.m === 0 && ts.y === 0 && ts.d === 0) {
  189. return "&#160;" ;
  190. }
  191. ts.m = parseInt(ts.m,10)-1;
  192. var ty = ts.y;
  193. if (ty >= 70 && ty <= 99) {ts.y = 1900+ts.y;}
  194. else if (ty >=0 && ty <=69) {ts.y= 2000+ts.y;}
  195. timestamp = new Date(ts.y, ts.m, ts.d, ts.h, ts.i, ts.s, ts.u);
  196. //Apply offset to show date as local time.
  197. if(offset > 0) {
  198. timestamp.setTime(Number(Number(timestamp) + (offset * 60 * 1000)));
  199. }
  200. }
  201. } else {
  202. timestamp = new Date(ts.y, ts.m, ts.d, ts.h, ts.i, ts.s, ts.u);
  203. }
  204. if(opts.userLocalTime && offset === 0) {
  205. offset -= (new Date()).getTimezoneOffset();
  206. if( offset > 0 ) {
  207. timestamp.setTime(Number(Number(timestamp) + (offset * 60 * 1000)));
  208. }
  209. }
  210. if( newformat === undefined ) {
  211. return timestamp;
  212. }
  213. if( opts.masks.hasOwnProperty(newformat) ) {
  214. newformat = opts.masks[newformat];
  215. } else if ( !newformat ) {
  216. newformat = 'Y-m-d';
  217. }
  218. var
  219. G = timestamp.getHours(),
  220. i = timestamp.getMinutes(),
  221. j = timestamp.getDate(),
  222. n = timestamp.getMonth() + 1,
  223. o = timestamp.getTimezoneOffset(),
  224. s = timestamp.getSeconds(),
  225. u = timestamp.getMilliseconds(),
  226. w = timestamp.getDay(),
  227. Y = timestamp.getFullYear(),
  228. N = (w + 6) % 7 + 1,
  229. z = (new Date(Y, n - 1, j) - new Date(Y, 0, 1)) / 86400000,
  230. flags = {
  231. // Day
  232. d: pad(j),
  233. D: opts.dayNames[w],
  234. j: j,
  235. l: opts.dayNames[w + 7],
  236. N: N,
  237. S: opts.S(j),
  238. //j < 11 || j > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((j - 1) % 10, 3)] : 'th',
  239. w: w,
  240. z: z,
  241. // Week
  242. W: N < 5 ? Math.floor((z + N - 1) / 7) + 1 : Math.floor((z + N - 1) / 7) || ((new Date(Y - 1, 0, 1).getDay() + 6) % 7 < 4 ? 53 : 52),
  243. // Month
  244. F: opts.monthNames[n - 1 + 12],
  245. m: pad(n),
  246. M: opts.monthNames[n - 1],
  247. n: n,
  248. t: '?',
  249. // Year
  250. L: '?',
  251. o: '?',
  252. Y: Y,
  253. y: String(Y).substring(2),
  254. // Time
  255. a: G < 12 ? opts.AmPm[0] : opts.AmPm[1],
  256. A: G < 12 ? opts.AmPm[2] : opts.AmPm[3],
  257. B: '?',
  258. g: G % 12 || 12,
  259. G: G,
  260. h: pad(G % 12 || 12),
  261. H: pad(G),
  262. i: pad(i),
  263. s: pad(s),
  264. u: u,
  265. // Timezone
  266. e: '?',
  267. I: '?',
  268. O: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
  269. P: '?',
  270. T: (String(timestamp).match(timezone) || [""]).pop().replace(timezoneClip, ""),
  271. Z: '?',
  272. // Full Date/Time
  273. c: '?',
  274. r: '?',
  275. U: Math.floor(timestamp / 1000)
  276. };
  277. return newformat.replace(token, function ($0) {
  278. return flags.hasOwnProperty($0) ? flags[$0] : $0.substring(1);
  279. });
  280. },
  281. jqID : function(sid){
  282. return String(sid).replace(/[!"#$%&'()*+,.\/:; <=>?@\[\\\]\^`{|}~]/g,"\\$&");
  283. },
  284. guid : 1,
  285. uidPref: 'jqg',
  286. randId : function( prefix ) {
  287. return (prefix || $.jgrid.uidPref) + ($.jgrid.guid++);
  288. },
  289. getAccessor : function(obj, expr) {
  290. var ret,p,prm = [], i;
  291. if( typeof expr === 'function') { return expr(obj); }
  292. ret = obj[expr];
  293. if(ret===undefined) {
  294. try {
  295. if ( typeof expr === 'string' ) {
  296. prm = expr.split('.');
  297. }
  298. i = prm.length;
  299. if( i ) {
  300. ret = obj;
  301. while (ret && i--) {
  302. p = prm.shift();
  303. ret = ret[p];
  304. }
  305. }
  306. } catch (e) {}
  307. }
  308. return ret;
  309. },
  310. getXmlData: function (obj, expr, returnObj) {
  311. var ret, m = typeof expr === 'string' ? expr.match(/^(.*)\[(\w+)\]$/) : null;
  312. if (typeof expr === 'function') { return expr(obj); }
  313. if (m && m[2]) {
  314. // m[2] is the attribute selector
  315. // m[1] is an optional element selector
  316. // examples: "[id]", "rows[page]"
  317. return m[1] ? $(m[1], obj).attr(m[2]) : $(obj).attr(m[2]);
  318. }
  319. ret = $(expr, obj);
  320. if (returnObj) { return ret; }
  321. //$(expr, obj).filter(':last'); // we use ':last' to be more compatible with old version of jqGrid
  322. return ret.length > 0 ? $(ret).text() : undefined;
  323. },
  324. cellWidth : function () {
  325. var $testDiv = $("<div class='ui-jqgrid' style='left:10000px'><table class='ui-jqgrid-btable' style='width:5px;'><tr class='jqgrow'><td style='width:5px;display:block;'></td></tr></table></div>"),
  326. testCell = $testDiv.appendTo("body")
  327. .find("td")
  328. .width();
  329. $testDiv.remove();
  330. return Math.abs(testCell-5) > 0.1;
  331. },
  332. isLocalStorage : function () {
  333. try {
  334. return 'localStorage' in window && window.localStorage !== null;
  335. } catch (e) {
  336. return false;
  337. }
  338. },
  339. getRegional : function(inst, param, def_val) {
  340. var ret;
  341. if(def_val !== undefined) {
  342. return def_val;
  343. }
  344. if(inst.p && inst.p.regional && $.jgrid.regional) {
  345. ret = $.jgrid.getAccessor( $.jgrid.regional[inst.p.regional] || {}, param);
  346. }
  347. if(ret === undefined ) {
  348. ret = $.jgrid.getAccessor( $.jgrid, param);
  349. }
  350. return ret;
  351. },
  352. cell_width : true,
  353. ajaxOptions: {},
  354. from : function(source){
  355. // Original Author Hugo Bonacci
  356. // License MIT http://jlinq.codeplex.com/license
  357. var $t = this,
  358. QueryObject=function(d,q){
  359. if(typeof d==="string"){
  360. d=$.data(d);
  361. }
  362. var self=this,
  363. _data=d,
  364. _usecase=true,
  365. _trim=false,
  366. _query=q,
  367. _stripNum = /[\$,%]/g,
  368. _lastCommand=null,
  369. _lastField=null,
  370. _orDepth=0,
  371. _negate=false,
  372. _queuedOperator="",
  373. _sorting=[],
  374. _useProperties=true;
  375. if(typeof d==="object"&&d.push) {
  376. if(d.length>0){
  377. if(typeof d[0]!=="object"){
  378. _useProperties=false;
  379. }else{
  380. _useProperties=true;
  381. }
  382. }
  383. }else{
  384. throw "data provides is not an array";
  385. }
  386. this._hasData=function(){
  387. return _data===null?false:_data.length===0?false:true;
  388. };
  389. this._getStr=function(s){
  390. var phrase=[];
  391. if(_trim){
  392. phrase.push("jQuery.trim(");
  393. }
  394. phrase.push("String("+s+")");
  395. if(_trim){
  396. phrase.push(")");
  397. }
  398. if(!_usecase){
  399. phrase.push(".toLowerCase()");
  400. }
  401. return phrase.join("");
  402. };
  403. this._strComp=function(val){
  404. if(typeof val==="string"){
  405. return".toString()";
  406. }
  407. return"";
  408. };
  409. this._group=function(f,u){
  410. return({field:f.toString(),unique:u,items:[]});
  411. };
  412. this._toStr=function(phrase){
  413. if(_trim){
  414. phrase=$.trim(phrase);
  415. }
  416. phrase=phrase.toString().replace(/\\/g,'\\\\').replace(/\"/g,'\\"');
  417. return _usecase ? phrase : phrase.toLowerCase();
  418. };
  419. this._funcLoop=function(func){
  420. var results=[];
  421. $.each(_data,function(i,v){
  422. results.push(func(v));
  423. });
  424. return results;
  425. };
  426. this._append=function(s){
  427. var i;
  428. if(_query===null){
  429. _query="";
  430. } else {
  431. _query+=_queuedOperator === "" ? " && " :_queuedOperator;
  432. }
  433. for (i=0;i<_orDepth;i++){
  434. _query+="(";
  435. }
  436. if(_negate){
  437. _query+="!";
  438. }
  439. _query+="("+s+")";
  440. _negate=false;
  441. _queuedOperator="";
  442. _orDepth=0;
  443. };
  444. this._setCommand=function(f,c){
  445. _lastCommand=f;
  446. _lastField=c;
  447. };
  448. this._resetNegate=function(){
  449. _negate=false;
  450. };
  451. this._repeatCommand=function(f,v){
  452. if(_lastCommand===null){
  453. return self;
  454. }
  455. if(f!==null&&v!==null){
  456. return _lastCommand(f,v);
  457. }
  458. if(_lastField===null){
  459. return _lastCommand(f);
  460. }
  461. if(!_useProperties){
  462. return _lastCommand(f);
  463. }
  464. return _lastCommand(_lastField,f);
  465. };
  466. this._equals=function(a,b){
  467. return(self._compare(a,b,1)===0);
  468. };
  469. this._compare=function(a,b,d){
  470. var toString = Object.prototype.toString;
  471. if( d === undefined) { d = 1; }
  472. if(a===undefined) { a = null; }
  473. if(b===undefined) { b = null; }
  474. if(a===null && b===null){
  475. return 0;
  476. }
  477. if(a===null&&b!==null){
  478. return 1;
  479. }
  480. if(a!==null&&b===null){
  481. return -1;
  482. }
  483. if (toString.call(a) === '[object Date]' && toString.call(b) === '[object Date]') {
  484. if (a < b) { return -d; }
  485. if (a > b) { return d; }
  486. return 0;
  487. }
  488. if(!_usecase && typeof a !== "number" && typeof b !== "number" ) {
  489. a=String(a);
  490. b=String(b);
  491. }
  492. if(a<b){return -d;}
  493. if(a>b){return d;}
  494. return 0;
  495. };
  496. this._performSort=function(){
  497. if(_sorting.length===0){return;}
  498. _data=self._doSort(_data,0);
  499. };
  500. this._doSort=function(d,q){
  501. var by=_sorting[q].by,
  502. dir=_sorting[q].dir,
  503. type = _sorting[q].type,
  504. dfmt = _sorting[q].datefmt,
  505. sfunc = _sorting[q].sfunc;
  506. if(q===_sorting.length-1){
  507. return self._getOrder(d, by, dir, type, dfmt, sfunc);
  508. }
  509. q++;
  510. var values=self._getGroup(d,by,dir,type,dfmt), results=[], i, j, sorted;
  511. for(i=0;i<values.length;i++){
  512. sorted=self._doSort(values[i].items,q);
  513. for(j=0;j<sorted.length;j++){
  514. results.push(sorted[j]);
  515. }
  516. }
  517. return results;
  518. };
  519. this._getOrder=function(data,by,dir,type, dfmt, sfunc){
  520. var sortData=[],_sortData=[], newDir = dir==="a" ? 1 : -1, i,ab,j,
  521. findSortKey;
  522. if(type === undefined ) { type = "text"; }
  523. if (type === 'float' || type=== 'number' || type=== 'currency' || type=== 'numeric') {
  524. findSortKey = function($cell) {
  525. var key = parseFloat( String($cell).replace(_stripNum, ''));
  526. return isNaN(key) ? Number.NEGATIVE_INFINITY : key;
  527. };
  528. } else if (type==='int' || type==='integer') {
  529. findSortKey = function($cell) {
  530. return $cell ? parseFloat(String($cell).replace(_stripNum, '')) : Number.NEGATIVE_INFINITY;
  531. };
  532. } else if(type === 'date' || type === 'datetime') {
  533. findSortKey = function($cell) {
  534. return $.jgrid.parseDate.call($t, dfmt, $cell).getTime();
  535. };
  536. } else if($.isFunction(type)) {
  537. findSortKey = type;
  538. } else {
  539. findSortKey = function($cell) {
  540. $cell = $cell ? $.trim(String($cell)) : "";
  541. return _usecase ? $cell : $cell.toLowerCase();
  542. };
  543. }
  544. $.each(data,function(i,v){
  545. ab = by!=="" ? $.jgrid.getAccessor(v,by) : v;
  546. if(ab === undefined) { ab = ""; }
  547. ab = findSortKey(ab, v);
  548. _sortData.push({ 'vSort': ab,'index':i});
  549. });
  550. if($.isFunction(sfunc)) {
  551. _sortData.sort(function(a,b){
  552. a = a.vSort;
  553. b = b.vSort;
  554. return sfunc.call(this,a,b,newDir);
  555. });
  556. } else {
  557. _sortData.sort(function(a,b){
  558. a = a.vSort;
  559. b = b.vSort;
  560. return self._compare(a,b,newDir);
  561. });
  562. }
  563. j=0;
  564. var nrec= data.length;
  565. // overhead, but we do not change the original data.
  566. while(j<nrec) {
  567. i = _sortData[j].index;
  568. sortData.push(data[i]);
  569. j++;
  570. }
  571. return sortData;
  572. };
  573. this._getGroup=function(data,by,dir,type, dfmt){
  574. var results=[],
  575. group=null,
  576. last=null, val;
  577. $.each(self._getOrder(data,by,dir,type, dfmt),function(i,v){
  578. val = $.jgrid.getAccessor(v, by);
  579. if(val == null) { val = ""; }
  580. if(!self._equals(last,val)){
  581. last=val;
  582. if(group !== null){
  583. results.push(group);
  584. }
  585. group=self._group(by,val);
  586. }
  587. group.items.push(v);
  588. });
  589. if(group !== null){
  590. results.push(group);
  591. }
  592. return results;
  593. };
  594. this.ignoreCase=function(){
  595. _usecase=false;
  596. return self;
  597. };
  598. this.useCase=function(){
  599. _usecase=true;
  600. return self;
  601. };
  602. this.trim=function(){
  603. _trim=true;
  604. return self;
  605. };
  606. this.noTrim=function(){
  607. _trim=false;
  608. return self;
  609. };
  610. this.execute=function(){
  611. var match=_query, results=[];
  612. if(match === null){
  613. return self;
  614. }
  615. $.each(_data,function(){
  616. if(eval(match)){results.push(this);}
  617. });
  618. _data=results;
  619. return self;
  620. };
  621. this.data=function(){
  622. return _data;
  623. };
  624. this.select=function(f){
  625. self._performSort();
  626. if(!self._hasData()){ return[]; }
  627. self.execute();
  628. if($.isFunction(f)){
  629. var results=[];
  630. $.each(_data,function(i,v){
  631. results.push(f(v));
  632. });
  633. return results;
  634. }
  635. return _data;
  636. };
  637. this.hasMatch=function(){
  638. if(!self._hasData()) { return false; }
  639. self.execute();
  640. return _data.length>0;
  641. };
  642. this.andNot=function(f,v,x){
  643. _negate=!_negate;
  644. return self.and(f,v,x);
  645. };
  646. this.orNot=function(f,v,x){
  647. _negate=!_negate;
  648. return self.or(f,v,x);
  649. };
  650. this.not=function(f,v,x){
  651. return self.andNot(f,v,x);
  652. };
  653. this.and=function(f,v,x){
  654. _queuedOperator=" && ";
  655. if(f===undefined){
  656. return self;
  657. }
  658. return self._repeatCommand(f,v,x);
  659. };
  660. this.or=function(f,v,x){
  661. _queuedOperator=" || ";
  662. if(f===undefined) { return self; }
  663. return self._repeatCommand(f,v,x);
  664. };
  665. this.orBegin=function(){
  666. _orDepth++;
  667. return self;
  668. };
  669. this.orEnd=function(){
  670. if (_query !== null){
  671. _query+=")";
  672. }
  673. return self;
  674. };
  675. this.isNot=function(f){
  676. _negate=!_negate;
  677. return self.is(f);
  678. };
  679. this.is=function(f){
  680. self._append('this.'+f);
  681. self._resetNegate();
  682. return self;
  683. };
  684. this._compareValues=function(func,f,v,how,t){
  685. var fld;
  686. if(_useProperties){
  687. fld='jQuery.jgrid.getAccessor(this,\''+f+'\')';
  688. }else{
  689. fld='this';
  690. }
  691. if(v===undefined) { v = null; }
  692. //var val=v===null?f:v,
  693. var val =v,
  694. swst = t.stype === undefined ? "text" : t.stype;
  695. if(v !== null) {
  696. switch(swst) {
  697. case 'int':
  698. case 'integer':
  699. val = (isNaN(Number(val)) || val==="") ? '0' : val; // To be fixed with more inteligent code
  700. fld = 'parseInt('+fld+',10)';
  701. val = 'parseInt('+val+',10)';
  702. break;
  703. case 'float':
  704. case 'number':
  705. case 'numeric':
  706. val = String(val).replace(_stripNum, '');
  707. val = (isNaN(Number(val)) || val==="") ? '0' : val; // To be fixed with more inteligent code
  708. fld = 'parseFloat('+fld+')';
  709. val = 'parseFloat('+val+')';
  710. break;
  711. case 'date':
  712. case 'datetime':
  713. val = String($.jgrid.parseDate.call($t, t.srcfmt || 'Y-m-d',val).getTime());
  714. fld = 'jQuery.jgrid.parseDate.call(jQuery("#'+$.jgrid.jqID($t.p.id)+'")[0],"'+t.srcfmt+'",'+fld+').getTime()';
  715. break;
  716. default :
  717. fld=self._getStr(fld);
  718. val=self._getStr('"'+self._toStr(val)+'"');
  719. }
  720. }
  721. self._append(fld+' '+how+' '+val);
  722. self._setCommand(func,f);
  723. self._resetNegate();
  724. return self;
  725. };
  726. this.equals=function(f,v,t){
  727. return self._compareValues(self.equals,f,v,"==",t);
  728. };
  729. this.notEquals=function(f,v,t){
  730. return self._compareValues(self.equals,f,v,"!==",t);
  731. };
  732. this.isNull = function(f,v,t){
  733. return self._compareValues(self.equals,f,null,"===",t);
  734. };
  735. this.greater=function(f,v,t){
  736. return self._compareValues(self.greater,f,v,">",t);
  737. };
  738. this.less=function(f,v,t){
  739. return self._compareValues(self.less,f,v,"<",t);
  740. };
  741. this.greaterOrEquals=function(f,v,t){
  742. return self._compareValues(self.greaterOrEquals,f,v,">=",t);
  743. };
  744. this.lessOrEquals=function(f,v,t){
  745. return self._compareValues(self.lessOrEquals,f,v,"<=",t);
  746. };
  747. this.startsWith=function(f,v){
  748. var val = (v==null) ? f: v,
  749. length=_trim ? $.trim(val.toString()).length : val.toString().length;
  750. if(_useProperties){
  751. self._append(self._getStr('jQuery.jgrid.getAccessor(this,\''+f+'\')')+'.substr(0,'+length+') == '+self._getStr('"'+self._toStr(v)+'"'));
  752. }else{
  753. if (v!=null) { length=_trim?$.trim(v.toString()).length:v.toString().length; }
  754. self._append(self._getStr('this')+'.substr(0,'+length+') == '+self._getStr('"'+self._toStr(f)+'"'));
  755. }
  756. self._setCommand(self.startsWith,f);
  757. self._resetNegate();
  758. return self;
  759. };
  760. this.endsWith=function(f,v){
  761. var val = (v==null) ? f: v,
  762. length=_trim ? $.trim(val.toString()).length:val.toString().length;
  763. if(_useProperties){
  764. self._append(self._getStr('jQuery.jgrid.getAccessor(this,\''+f+'\')')+'.substr('+self._getStr('jQuery.jgrid.getAccessor(this,\''+f+'\')')+'.length-'+length+','+length+') == "'+self._toStr(v)+'"');
  765. } else {
  766. self._append(self._getStr('this')+'.substr('+self._getStr('this')+'.length-"'+self._toStr(f)+'".length,"'+self._toStr(f)+'".length) == "'+self._toStr(f)+'"');
  767. }
  768. self._setCommand(self.endsWith,f);self._resetNegate();
  769. return self;
  770. };
  771. this.contains=function(f,v){
  772. if(_useProperties){
  773. self._append(self._getStr('jQuery.jgrid.getAccessor(this,\''+f+'\')')+'.indexOf("'+self._toStr(v)+'",0) > -1');
  774. }else{
  775. self._append(self._getStr('this')+'.indexOf("'+self._toStr(f)+'",0) > -1');
  776. }
  777. self._setCommand(self.contains,f);
  778. self._resetNegate();
  779. return self;
  780. };
  781. this.groupBy=function(by,dir,type, datefmt){
  782. if(!self._hasData()){
  783. return null;
  784. }
  785. return self._getGroup(_data,by,dir,type, datefmt);
  786. };
  787. this.orderBy=function(by,dir,stype, dfmt, sfunc){
  788. dir = dir == null ? "a" :$.trim(dir.toString().toLowerCase());
  789. if(stype == null) { stype = "text"; }
  790. if(dfmt == null) { dfmt = "Y-m-d"; }
  791. if(sfunc == null) { sfunc = false; }
  792. if(dir==="desc"||dir==="descending"){dir="d";}
  793. if(dir==="asc"||dir==="ascending"){dir="a";}
  794. _sorting.push({by:by,dir:dir,type:stype, datefmt: dfmt, sfunc: sfunc});
  795. return self;
  796. };
  797. return self;
  798. };
  799. return new QueryObject(source,null);
  800. },
  801. getMethod: function (name) {
  802. return this.getAccessor($.fn.jqGrid, name);
  803. },
  804. extend : function(methods) {
  805. $.extend($.fn.jqGrid,methods);
  806. if (!this.no_legacy_api) {
  807. $.fn.extend(methods);
  808. }
  809. },
  810. clearBeforeUnload : function( jqGridId ) {
  811. var $t = $("#"+$.jgrid.jqID( jqGridId ))[0], grid;
  812. if(!$t.grid) { return;}
  813. grid = $t.grid;
  814. if ($.isFunction(grid.emptyRows)) {
  815. grid.emptyRows.call($t, true, true); // this work quick enough and reduce the size of memory leaks if we have someone
  816. }
  817. $(document).unbind("mouseup.jqGrid" + $t.p.id );
  818. $(grid.hDiv).unbind("mousemove"); // TODO add namespace
  819. $($t).unbind();
  820. var i, l = grid.headers.length,
  821. removevents = ['formatCol','sortData','updatepager','refreshIndex','setHeadCheckBox','constructTr','formatter','addXmlData','addJSONData','grid','p'];
  822. for (i = 0; i < l; i++) {
  823. grid.headers[i].el = null;
  824. }
  825. for( i in grid) {
  826. if( grid.hasOwnProperty(i)) {
  827. grid[i] = null;
  828. }
  829. }
  830. // experimental
  831. for( i in $t.p) {
  832. if($t.p.hasOwnProperty(i)) {
  833. $t.p[i] = $.isArray($t.p[i]) ? [] : null;
  834. }
  835. }
  836. l = removevents.length;
  837. for(i = 0; i < l; i++) {
  838. if($t.hasOwnProperty(removevents[i])) {
  839. $t[removevents[i]] = null;
  840. delete($t[removevents[i]]);
  841. }
  842. }
  843. },
  844. gridUnload : function ( jqGridId ) {
  845. if(!jqGridId) { return; }
  846. jqGridId = $.trim(jqGridId);
  847. if(jqGridId.indexOf("#") === 0) {
  848. jqGridId = jqGridId.substring(1);
  849. }
  850. var $t = $("#"+ $.jgrid.jqID(jqGridId))[0];
  851. if ( !$t.grid ) {return;}
  852. var defgrid = {id: $($t).attr('id'),cl: $($t).attr('class')};
  853. if ($t.p.pager) {
  854. $($t.p.pager).unbind().empty().removeClass("ui-state-default ui-jqgrid-pager ui-corner-bottom");
  855. }
  856. var newtable = document.createElement('table');
  857. newtable.className = defgrid.cl;
  858. var gid = $.jgrid.jqID($t.id);
  859. $(newtable).removeClass("ui-jqgrid-btable").insertBefore("#gbox_"+gid);
  860. if( $($t.p.pager).parents("#gbox_"+gid).length === 1 ) {
  861. $($t.p.pager).insertBefore("#gbox_"+gid);
  862. }
  863. $.jgrid.clearBeforeUnload( jqGridId );
  864. $("#gbox_"+gid).remove();
  865. $(newtable).attr({id:defgrid.id});
  866. $("#alertmod_"+$.jgrid.jqID(jqGridId)).remove();
  867. },
  868. gridDestroy : function ( jqGridId ) {
  869. if(!jqGridId) { return; }
  870. jqGridId = $.trim(jqGridId);
  871. if(jqGridId.indexOf("#") === 0) {
  872. jqGridId = jqGridId.substring(1);
  873. }
  874. var $t = $("#"+ $.jgrid.jqID(jqGridId))[0];
  875. if ( !$t.grid ) {return;}
  876. if ( $t.p.pager ) { // if not part of grid
  877. $($t.p.pager).remove();
  878. }
  879. try {
  880. $.jgrid.clearBeforeUnload( jqGridId );
  881. $("#gbox_"+$.jgrid.jqID(jqGridId)).remove();
  882. } catch (_) {}
  883. }
  884. });
  885. $.fn.jqGrid = function( pin ) {
  886. if (typeof pin === 'string') {
  887. var fn = $.jgrid.getMethod(pin);
  888. if (!fn) {
  889. throw ("jqGrid - No such method: " + pin);
  890. }
  891. var args = $.makeArray(arguments).slice(1);
  892. return fn.apply(this,args);
  893. }
  894. return this.each( function() {
  895. if(this.grid) {return;}
  896. var localData;
  897. if (pin != null && pin.data !== undefined) {
  898. localData = pin.data;
  899. pin.data = [];
  900. }
  901. var p = $.extend(true,{
  902. url: "",
  903. height: 150,
  904. page: 1,
  905. rowNum: 20,
  906. rowTotal : null,
  907. records: 0,
  908. pager: "",
  909. pgbuttons: true,
  910. pginput: true,
  911. colModel: [],
  912. rowList: [],
  913. colNames: [],
  914. sortorder: "asc",
  915. sortname: "",
  916. datatype: "xml",
  917. mtype: "GET",
  918. altRows: false,
  919. selarrrow: [],
  920. savedRow: [],
  921. shrinkToFit: true,
  922. xmlReader: {},
  923. jsonReader: {},
  924. subGrid: false,
  925. subGridModel :[],
  926. reccount: 0,
  927. lastpage: 0,
  928. lastsort: 0,
  929. selrow: null,
  930. beforeSelectRow: null,
  931. onSelectRow: null,
  932. onSortCol: null,
  933. ondblClickRow: null,
  934. onRightClickRow: null,
  935. onPaging: null,
  936. onSelectAll: null,
  937. onInitGrid : null,
  938. loadComplete: null,
  939. gridComplete: null,
  940. loadError: null,
  941. loadBeforeSend: null,
  942. afterInsertRow: null,
  943. beforeRequest: null,
  944. beforeProcessing : null,
  945. onHeaderClick: null,
  946. viewrecords: false,
  947. loadonce: false,
  948. multiselect: false,
  949. multikey: false,
  950. editurl: null,
  951. search: false,
  952. caption: "",
  953. hidegrid: true,
  954. hiddengrid: false,
  955. postData: {},
  956. userData: {},
  957. treeGrid : false,
  958. treeGridModel : 'nested',
  959. treeReader : {},
  960. treeANode : -1,
  961. ExpandColumn: null,
  962. tree_root_level : 0,
  963. prmNames: {page:"page",rows:"rows", sort: "sidx",order: "sord", search:"_search", nd:"nd", id:"id",oper:"oper",editoper:"edit",addoper:"add",deloper:"del", subgridid:"id", npage: null, totalrows:"totalrows"},
  964. forceFit : false,
  965. gridstate : "visible",
  966. cellEdit: false,
  967. cellsubmit: "remote",
  968. nv:0,
  969. loadui: "enable",
  970. toolbar: [false,""],
  971. scroll: false,
  972. multiboxonly : false,
  973. deselectAfterSort : true,
  974. scrollrows : false,
  975. autowidth: false,
  976. scrollOffset :18,
  977. cellLayout: 5,
  978. subGridWidth: 20,
  979. multiselectWidth: 20,
  980. gridview: true,
  981. rownumWidth: 25,
  982. rownumbers : false,
  983. pagerpos: 'center',
  984. recordpos: 'right',
  985. footerrow : false,
  986. userDataOnFooter : false,
  987. hoverrows : true,
  988. altclass : 'ui-priority-secondary',
  989. viewsortcols : [false,'vertical',true],
  990. resizeclass : '',
  991. autoencode : false,
  992. remapColumns : [],
  993. ajaxGridOptions :{},
  994. direction : "ltr",
  995. toppager: false,
  996. headertitles: false,
  997. scrollTimeout: 40,
  998. data : [],
  999. _index : {},
  1000. grouping : false,
  1001. groupingView : {groupField:[],groupOrder:[], groupText:[],groupColumnShow:[],groupSummary:[], showSummaryOnHide: false, sortitems:[], sortnames:[], summary:[],summaryval:[], plusicon: 'ui-icon-circlesmall-plus', minusicon: 'ui-icon-circlesmall-minus', displayField: [], groupSummaryPos:[], formatDisplayField : [], _locgr : false},
  1002. ignoreCase : true,
  1003. cmTemplate : {},
  1004. idPrefix : "",
  1005. multiSort : false,
  1006. minColWidth : 33,
  1007. scrollPopUp : false,
  1008. scrollTopOffset: 0, // pixel
  1009. scrollLeftOffset : "100%", //percent
  1010. storeNavOptions: false,
  1011. regional : "en"
  1012. }, $.jgrid.defaults , pin );
  1013. if (localData !== undefined) {
  1014. p.data = localData;
  1015. pin.data = localData;
  1016. }
  1017. var ts= this, grid={
  1018. headers:[],
  1019. cols:[],
  1020. footers: [],
  1021. dragStart: function(i,x,y) {
  1022. var gridLeftPos = $(this.bDiv).offset().left;
  1023. this.resizing = { idx: i, startX: x.pageX, sOL : x.pageX - gridLeftPos };
  1024. this.hDiv.style.cursor = "col-resize";
  1025. this.curGbox = $("#rs_m"+$.jgrid.jqID(p.id),"#gbox_"+$.jgrid.jqID(p.id));
  1026. this.curGbox.css({display:"block",left:x.pageX-gridLeftPos,top:y[1],height:y[2]});
  1027. $(ts).triggerHandler("jqGridResizeStart", [x, i]);
  1028. if($.isFunction(p.resizeStart)) { p.resizeStart.call(ts,x,i); }
  1029. document.onselectstart=function(){return false;};
  1030. },
  1031. dragMove: function(x) {
  1032. if(this.resizing) {
  1033. var diff = x.pageX-this.resizing.startX,
  1034. h = this.headers[this.resizing.idx],
  1035. newWidth = p.direction === "ltr" ? h.width + diff : h.width - diff, hn, nWn;
  1036. if(newWidth > 33) {
  1037. this.curGbox.css({left:this.resizing.sOL+diff});
  1038. if(p.forceFit===true ){
  1039. hn = this.headers[this.resizing.idx+p.nv];
  1040. nWn = p.direction === "ltr" ? hn.width - diff : hn.width + diff;
  1041. if(nWn > p.minColWidth ) {
  1042. h.newWidth = newWidth;
  1043. hn.newWidth = nWn;
  1044. }
  1045. } else {
  1046. this.newWidth = p.direction === "ltr" ? p.tblwidth+diff : p.tblwidth-diff;
  1047. h.newWidth = newWidth;
  1048. }
  1049. }
  1050. }
  1051. },
  1052. dragEnd: function() {
  1053. this.hDiv.style.cursor = "default";
  1054. if(this.resizing) {
  1055. var idx = this.resizing.idx,
  1056. nw = this.headers[idx].newWidth || this.headers[idx].width;
  1057. nw = parseInt(nw,10);
  1058. this.resizing = false;
  1059. $("#rs_m"+$.jgrid.jqID(p.id)).css("display","none");
  1060. p.colModel[idx].width = nw;
  1061. this.headers[idx].width = nw;
  1062. this.headers[idx].el.style.width = nw + "px";
  1063. this.cols[idx].style.width = nw+"px";
  1064. if(this.footers.length>0) {this.footers[idx].style.width = nw+"px";}
  1065. if(p.forceFit===true){
  1066. nw = this.headers[idx+p.nv].newWidth || this.headers[idx+p.nv].width;
  1067. this.headers[idx+p.nv].width = nw;
  1068. this.headers[idx+p.nv].el.style.width = nw + "px";
  1069. this.cols[idx+p.nv].style.width = nw+"px";
  1070. if(this.footers.length>0) {this.footers[idx+p.nv].style.width = nw+"px";}
  1071. p.colModel[idx+p.nv].width = nw;
  1072. } else {
  1073. p.tblwidth = this.newWidth || p.tblwidth;
  1074. $('table:first',this.bDiv).css("width",p.tblwidth+"px");
  1075. $('table:first',this.hDiv).css("width",p.tblwidth+"px");
  1076. this.hDiv.scrollLeft = this.bDiv.scrollLeft;
  1077. if(p.footerrow) {
  1078. $('table:first',this.sDiv).css("width",p.tblwidth+"px");
  1079. this.sDiv.scrollLeft = this.bDiv.scrollLeft;
  1080. }
  1081. }
  1082. $(ts).triggerHandler("jqGridResizeStop", [nw, idx]);
  1083. if($.isFunction(p.resizeStop)) { p.resizeStop.call(ts,nw,idx); }
  1084. }
  1085. this.curGbox = null;
  1086. document.onselectstart=function(){return true;};
  1087. },
  1088. populateVisible: function() {
  1089. if (grid.timer) { clearTimeout(grid.timer); }
  1090. grid.timer = null;
  1091. var dh = $(grid.bDiv).height();
  1092. if (!dh) { return; }
  1093. var table = $("table:first", grid.bDiv);
  1094. var rows, rh;
  1095. if(table[0].rows.length) {
  1096. try {
  1097. rows = table[0].rows[1];
  1098. rh = rows ? $(rows).outerHeight() || grid.prevRowHeight : grid.prevRowHeight;
  1099. } catch (pv) {
  1100. rh = grid.prevRowHeight;
  1101. }
  1102. }
  1103. if (!rh) { return; }
  1104. grid.prevRowHeight = rh;
  1105. var rn = p.rowNum;
  1106. var scrollTop = grid.scrollTop = grid.bDiv.scrollTop;
  1107. var ttop = Math.round(table.position().top) - scrollTop;
  1108. var tbot = ttop + table.height();
  1109. var div = rh * rn;
  1110. var page, npage, empty;
  1111. if ( tbot < dh && ttop <= 0 &&
  1112. (p.lastpage===undefined||(parseInt((tbot + scrollTop + div - 1) / div,10) || 0) <= p.lastpage))
  1113. {
  1114. npage = parseInt((dh - tbot + div - 1) / div,10) || 1;
  1115. if (tbot >= 0 || npage < 2 || p.scroll === true) {
  1116. page = ( Math.round((tbot + scrollTop) / div) || 0) + 1;
  1117. ttop = -1;
  1118. } else {
  1119. ttop = 1;
  1120. }
  1121. }
  1122. if (ttop > 0) {
  1123. page = ( parseInt(scrollTop / div,10) || 0 ) + 1;
  1124. npage = (parseInt((scrollTop + dh) / div,10) || 0) + 2 - page;
  1125. empty = true;
  1126. }
  1127. if (npage) {
  1128. if (p.lastpage && (page > p.lastpage || p.lastpage===1 || (page === p.page && page===p.lastpage)) ) {
  1129. return;
  1130. }
  1131. if (grid.hDiv.loading) {
  1132. grid.timer = setTimeout(grid.populateVisible, p.scrollTimeout);
  1133. } else {
  1134. p.page = page;
  1135. if (empty) {
  1136. grid.selectionPreserver(table[0]);
  1137. grid.emptyRows.call(table[0], false, false);
  1138. }
  1139. grid.populate(npage);
  1140. }
  1141. if(p.scrollPopUp && p.lastpage != null) {
  1142. $("#scroll_g"+p.id).show().html( $.jgrid.template( $.jgrid.getRegional(ts, "defaults.pgtext", p.pgtext) , p.page, p.lastpage)).css({ "top": p.scrollTopOffset+scrollTop*((parseInt(p.height,10) - 45)/ (parseInt(rh,10)*parseInt(p.records,10))) +"px", "left" : p.scrollLeftOffset});
  1143. $(this).mouseout(function(){
  1144. $("#scroll_g"+p.id).hide();
  1145. });
  1146. }
  1147. }
  1148. },
  1149. scrollGrid: function( e ) {
  1150. if(p.scroll) {
  1151. var scrollTop = grid.bDiv.scrollTop;
  1152. if(grid.scrollTop === undefined) { grid.scrollTop = 0; }
  1153. if (scrollTop !== grid.scrollTop) {
  1154. grid.scrollTop = scrollTop;
  1155. if (grid.timer) { clearTimeout(grid.timer); }
  1156. grid.timer = setTimeout(grid.populateVisible, p.scrollTimeout);
  1157. }
  1158. }
  1159. grid.hDiv.scrollLeft = grid.bDiv.scrollLeft;
  1160. if(p.footerrow) {
  1161. grid.sDiv.scrollLeft = grid.bDiv.scrollLeft;
  1162. }
  1163. if( e ) { e.stopPropagation(); }
  1164. },
  1165. selectionPreserver : function(ts) {
  1166. var p = ts.p,
  1167. sr = p.selrow, sra = p.selarrrow ? $.makeArray(p.selarrrow) : null,
  1168. left = ts.grid.bDiv.scrollLeft,
  1169. restoreSelection = function() {
  1170. var i;
  1171. p.selrow = null;
  1172. p.selarrrow = [];
  1173. if(p.multiselect && sra && sra.length>0) {
  1174. for(i=0;i<sra.length;i++){
  1175. if (sra[i] !== sr) {
  1176. $(ts).jqGrid("setSelection",sra[i],false, null);
  1177. }
  1178. }
  1179. }
  1180. if (sr) {
  1181. $(ts).jqGrid("setSelection",sr,false,null);
  1182. }
  1183. ts.grid.bDiv.scrollLeft = left;
  1184. $(ts).unbind('.selectionPreserver', restoreSelection);
  1185. };
  1186. $(ts).bind('jqGridGridComplete.selectionPreserver', restoreSelection);
  1187. }
  1188. };
  1189. if(this.tagName.toUpperCase() !== 'TABLE' || this.id == null) {
  1190. alert("Element is not a table or has no id!");
  1191. return;
  1192. }
  1193. if(document.documentMode !== undefined ) { // IE only
  1194. if(document.documentMode <= 5) {
  1195. alert("Grid can not be used in this ('quirks') mode!");
  1196. return;
  1197. }
  1198. }
  1199. $(this).empty().attr("tabindex","0");
  1200. this.p = p ;
  1201. this.p.useProp = !!$.fn.prop;
  1202. var i, dir;
  1203. if(this.p.colNames.length === 0) {
  1204. for (i=0;i<this.p.colModel.length;i++){
  1205. this.p.colNames[i] = this.p.colModel[i].label || this.p.colModel[i].name;
  1206. }
  1207. }
  1208. if( this.p.colNames.length !== this.p.colModel.length ) {
  1209. alert($.jgrid.getRegional(this,"errors.model"));
  1210. return;
  1211. }
  1212. var gv = $("<div class='ui-jqgrid-view' role='grid'></div>"),
  1213. isMSIE = $.jgrid.msie;
  1214. ts.p.direction = $.trim(ts.p.direction.toLowerCase());
  1215. ts.p._ald = false;
  1216. if($.inArray(ts.p.direction,["ltr","rtl"]) === -1) { ts.p.direction = "ltr"; }
  1217. dir = ts.p.direction;
  1218. $(gv).insertBefore(this);
  1219. $(this).removeClass("scroll").appendTo(gv);
  1220. var eg = $("<div class='ui-jqgrid ui-widget ui-widget-content ui-corner-all'></div>");
  1221. $(eg).attr({"id" : "gbox_"+this.id,"dir":dir}).insertBefore(gv);
  1222. $(gv).attr("id","gview_"+this.id).appendTo(eg);
  1223. $("<div class='ui-widget-overlay jqgrid-overlay' id='lui_"+this.id+"'></div>").insertBefore(gv);
  1224. $("<div class='loading ui-state-default ui-state-active' id='load_"+this.id+"'>"+$.jgrid.getRegional(ts, "defaults.loadtext", this.p.loadtext)+"</div>").insertBefore(gv);
  1225. $(this).attr({cellspacing:"0",cellpadding:"0",border:"0","role":"presentation","aria-multiselectable":!!this.p.multiselect,"aria-labelledby":"gbox_"+this.id});
  1226. var sortkeys = ["shiftKey","altKey","ctrlKey"],
  1227. intNum = function(val,defval) {
  1228. val = parseInt(val,10);
  1229. if (isNaN(val)) { return defval || 0;}
  1230. return val;
  1231. },
  1232. formatCol = function (pos, rowInd, tv, rawObject, rowId, rdata){
  1233. var cm = ts.p.colModel[pos], cellAttrFunc,
  1234. ral = cm.align, result="style=\"", clas = cm.classes, nm = cm.name, celp, acp=[];
  1235. if(ral) { result += "text-align:"+ral+";"; }
  1236. if(cm.hidden===true) { result += "display:none;"; }
  1237. if(rowInd===0) {
  1238. result += "width: "+grid.headers[pos].width+"px;";
  1239. } else if ($.isFunction(cm.cellattr) || (typeof cm.cellattr === "string" && $.jgrid.cellattr != null && $.isFunction($.jgrid.cellattr[cm.cellattr]))) {
  1240. cellAttrFunc = $.isFunction(cm.cellattr) ? cm.cellattr : $.jgrid.cellattr[cm.cellattr];
  1241. celp = cellAttrFunc.call(ts, rowId, tv, rawObject, cm, rdata);
  1242. if(celp && typeof celp === "string") {
  1243. celp = celp.replace(/style/i,'style').replace(/title/i,'title');
  1244. if(celp.indexOf('title') > -1) { cm.title=false;}
  1245. if(celp.indexOf('class') > -1) { clas = undefined;}
  1246. acp = celp.replace(/\-style/g,'-sti').split(/style/);
  1247. if(acp.length === 2 ) {
  1248. acp[1] = $.trim(acp[1].replace(/\-sti/g,'-style').replace("=",""));
  1249. if(acp[1].indexOf("'") === 0 || acp[1].indexOf('"') === 0) {
  1250. acp[1] = acp[1].substring(1);
  1251. }
  1252. result += acp[1].replace(/'/gi,'"');
  1253. } else {
  1254. result += "\"";
  1255. }
  1256. }
  1257. }
  1258. if(!acp.length) { acp[0] = ""; result += "\"";}
  1259. result += (clas !== undefined ? (" class=\""+clas+"\"") :"") + ((cm.title && tv) ? (" title=\""+$.jgrid.stripHtml(tv)+"\"") :"");
  1260. result += " aria-describedby=\""+ts.p.id+"_"+nm+"\"";
  1261. return result + acp[0];
  1262. },
  1263. cellVal = function (val) {
  1264. return val == null || val === "" ? "&#160;" : (ts.p.autoencode ? $.jgrid.htmlEncode(val) : String(val));
  1265. },
  1266. formatter = function (rowId, cellval , colpos, rwdat, _act){
  1267. var cm = ts.p.colModel[colpos],v;
  1268. if(cm.formatter !== undefined) {
  1269. rowId = String(ts.p.idPrefix) !== "" ? $.jgrid.stripPref(ts.p.idPrefix, rowId) : rowId;
  1270. var opts= {rowId: rowId, colModel:cm, gid:ts.p.id, pos:colpos };
  1271. if($.isFunction( cm.formatter ) ) {
  1272. v = cm.formatter.call(ts,cellval,opts,rwdat,_act);
  1273. } else if($.fmatter){
  1274. v = $.fn.fmatter.call(ts,cm.formatter,cellval,opts,rwdat,_act);
  1275. } else {
  1276. v = cellVal(cellval);
  1277. }
  1278. } else {
  1279. v = cellVal(cellval);
  1280. }
  1281. return v;
  1282. },
  1283. addCell = function(rowId,cell,pos,irow, srvr, rdata) {
  1284. var v,prp;
  1285. v = formatter(rowId,cell,pos,srvr,'add');
  1286. prp = formatCol( pos,irow, v, srvr, rowId, rdata);
  1287. return "<td role=\"gridcell\" "+prp+">"+v+"</td>";
  1288. },
  1289. addMulti = function(rowid,pos,irow,checked){
  1290. var v = "<input role=\"checkbox\" type=\"checkbox\""+" id=\"jqg_"+ts.p.id+"_"+rowid+"\" class=\"cbox\" name=\"jqg_"+ts.p.id+"_"+rowid+"\"" + (checked ? "checked=\"checked\"" : "")+"/>",
  1291. prp = formatCol( pos,irow,'',null, rowid, true);
  1292. return "<td role=\"gridcell\" "+prp+">"+v+"</td>";
  1293. },
  1294. addRowNum = function (pos,irow,pG,rN) {
  1295. var v = (parseInt(pG,10)-1)*parseInt(rN,10)+1+irow,
  1296. prp = formatCol( pos,irow,v, null, irow, true);
  1297. return "<td role=\"gridcell\" class=\"ui-state-default jqgrid-rownum\" "+prp+">"+v+"</td>";
  1298. },
  1299. reader = function (datatype) {
  1300. var field, f=[], j=0, i;
  1301. for(i =0; i<ts.p.colModel.length; i++){
  1302. field = ts.p.colModel[i];
  1303. if (field.name !== 'cb' && field.name !=='subgrid' && field.name !=='rn') {
  1304. f[j]= datatype === "local" ?
  1305. field.name :
  1306. ( (datatype==="xml" || datatype === "xmlstring") ? field.xmlmap || field.name : field.jsonmap || field.name );
  1307. if(ts.p.keyName !== false && field.key===true ) {
  1308. ts.p.keyName = f[j];
  1309. }
  1310. j++;
  1311. }
  1312. }
  1313. return f;
  1314. },
  1315. orderedCols = function (offset) {
  1316. var order = ts.p.remapColumns;
  1317. if (!order || !order.length) {
  1318. order = $.map(ts.p.colModel, function(v,i) { return i; });
  1319. }
  1320. if (offset) {
  1321. order = $.map(order, function(v) { return v<offset?null:v-offset; });
  1322. }
  1323. return order;
  1324. },
  1325. emptyRows = function (scroll, locdata) {
  1326. var firstrow;
  1327. if (this.p.deepempty) {
  1328. $(this.rows).slice(1).remove();
  1329. } else {
  1330. firstrow = this.rows.length > 0 ? this.rows[0] : null;
  1331. $(this.firstChild).empty().append(firstrow);
  1332. }
  1333. if (scroll && this.p.scroll) {
  1334. $(this.grid.bDiv.firstChild).css({height: "auto"});
  1335. $(this.grid.bDiv.firstChild.firstChild).css({height: 0, display: "none"});
  1336. if (this.grid.bDiv.scrollTop !== 0) {
  1337. this.grid.bDiv.scrollTop = 0;
  1338. }
  1339. }
  1340. if(locdata === true && this.p.treeGrid && !this.p.loadonce ) {
  1341. this.p.data = []; this.p._index = {};
  1342. }
  1343. },
  1344. normalizeData = function() {
  1345. var p = ts.p, data = p.data, dataLength = data.length, i, j, cur, idn, idr, ccur, v, rd,
  1346. localReader = p.localReader,
  1347. colModel = p.colModel,
  1348. cellName = localReader.cell,
  1349. iOffset = (p.multiselect === true ? 1 : 0) + (p.subGrid === true ? 1 : 0) + (p.rownumbers === true ? 1 : 0),
  1350. br = p.scroll ? $.jgrid.randId() : 1,
  1351. arrayReader, objectReader, rowReader;
  1352. if (p.datatype !== "local" || localReader.repeatitems !== true) {
  1353. return; // nothing to do
  1354. }
  1355. arrayReader = orderedCols(iOffset);
  1356. objectReader = reader("local");
  1357. // read ALL input items and convert items to be read by
  1358. // $.jgrid.getAccessor with column name as the second parameter
  1359. idn = p.keyIndex === false ?
  1360. ($.isFunction(localReader.id) ? localReader.id.call(ts, data) : localReader.id) :
  1361. p.keyIndex;
  1362. for (i = 0; i < dataLength; i++) {
  1363. cur = data[i];
  1364. // read id in the same way like addJSONData do
  1365. // probably it would be better to start with "if (cellName) {...}"
  1366. // but the goal of the current implementation was just have THE SAME
  1367. // id values like in addJSONData ...
  1368. idr = $.jgrid.getAccessor(cur, idn);
  1369. if (idr === undefined) {
  1370. if (typeof idn === "number" && colModel[idn + iOffset] != null) {
  1371. // reread id by name
  1372. idr = $.jgrid.getAccessor(cur, colModel[idn + iOffset].name);
  1373. }
  1374. if (idr === undefined) {
  1375. idr = br + i;
  1376. if (cellName) {
  1377. ccur = $.jgrid.getAccessor(cur, cellName) || cur;
  1378. idr = ccur != null && ccur[idn] !== undefined ? ccur[idn] : idr;
  1379. ccur = null;
  1380. }
  1381. }
  1382. }
  1383. rd = { };
  1384. rd[localReader.id] = idr;
  1385. if (cellName) {
  1386. cur = $.jgrid.getAccessor(cur, cellName) || cur;
  1387. }
  1388. rowReader = $.isArray(cur) ? arrayReader : objectReader;
  1389. for (j = 0; j < rowReader.length; j++) {
  1390. v = $.jgrid.getAccessor(cur, rowReader[j]);
  1391. rd[colModel[j + iOffset].name] = v;
  1392. }
  1393. $.extend(true, data[i], rd);
  1394. }
  1395. },
  1396. refreshIndex = function() {
  1397. var datalen = ts.p.data.length, idname, i, val;
  1398. if(ts.p.keyName === false || ts.p.loadonce === true) {
  1399. idname = ts.p.localReader.id;
  1400. } else {
  1401. idname = ts.p.keyName;
  1402. }
  1403. ts.p._index = [];
  1404. for(i =0;i < datalen; i++) {
  1405. val = $.jgrid.getAccessor(ts.p.data[i],idname);
  1406. if (val === undefined) { val=String(i+1); }
  1407. ts.p._index[val] = i;
  1408. }
  1409. },
  1410. constructTr = function(id, hide, altClass, rd, cur, selected) {
  1411. var tabindex = '-1', restAttr = '', attrName, style = hide ? 'display:none;' : '',
  1412. classes = 'ui-widget-content jqgrow ui-row-' + ts.p.direction + (altClass ? ' ' + altClass : '') + (selected ? ' ui-state-highlight' : ''),
  1413. rowAttrObj = $(ts).triggerHandler("jqGridRowAttr", [rd, cur, id]);
  1414. if( typeof rowAttrObj !== "object" ) {
  1415. rowAttrObj = $.isFunction(ts.p.rowattr) ? ts.p.rowattr.call(ts, rd, cur, id) :
  1416. (typeof ts.p.rowattr === "string" && $.jgrid.rowattr != null && $.isFunction($.jgrid.rowattr[ts.p.rowattr]) ?
  1417. $.jgrid.rowattr[ts.p.rowattr].call(ts, rd, cur, id) : {});
  1418. }
  1419. if(!$.isEmptyObject( rowAttrObj )) {
  1420. if (rowAttrObj.hasOwnProperty("id")) {
  1421. id = rowAttrObj.id;
  1422. delete rowAttrObj.id;
  1423. }
  1424. if (rowAttrObj.hasOwnProperty("tabindex")) {
  1425. tabindex = rowAttrObj.tabindex;
  1426. delete rowAttrObj.tabindex;
  1427. }
  1428. if (rowAttrObj.hasOwnProperty("style")) {
  1429. style += rowAttrObj.style;
  1430. delete rowAttrObj.style;
  1431. }
  1432. if (rowAttrObj.hasOwnProperty("class")) {
  1433. classes += ' ' + rowAttrObj['class'];
  1434. delete rowAttrObj['class'];
  1435. }
  1436. // dot't allow to change role attribute
  1437. try { delete rowAttrObj.role; } catch(ra){}
  1438. for (attrName in rowAttrObj) {
  1439. if (rowAttrObj.hasOwnProperty(attrName)) {
  1440. restAttr += ' ' + attrName + '=' + rowAttrObj[attrName];
  1441. }
  1442. }
  1443. }
  1444. return '<tr role="row" id="' + id + '" tabindex="' + tabindex + '" class="' + classes + '"' +
  1445. (style === '' ? '' : ' style="' + style + '"') + restAttr + '>';
  1446. },
  1447. addXmlData = function (xml, rcnt, more, adjust) {
  1448. var startReq = new Date(),
  1449. locdata = (ts.p.datatype !== "local" && ts.p.loadonce) || ts.p.datatype === "xmlstring",
  1450. xmlid = "_id_", xmlRd = ts.p.xmlReader,
  1451. frd = ts.p.datatype === "local" ? "local" : "xml";
  1452. if(locdata) {
  1453. ts.p.data = [];
  1454. ts.p._index = {};
  1455. ts.p.localReader.id = xmlid;
  1456. }
  1457. ts.p.reccount = 0;
  1458. if($.isXMLDoc(xml)) {
  1459. if(ts.p.treeANode===-1 && !ts.p.scroll) {
  1460. emptyRows.call(ts, false, true);
  1461. rcnt=1;
  1462. } else { rcnt = rcnt > 1 ? rcnt :1; }
  1463. } else { return; }
  1464. var self= $(ts), i,fpos,ir=0,v,gi=ts.p.multiselect===true?1:0,si=0,addSubGridCell,ni=ts.p.rownumbers===true?1:0,idn, getId,f=[],F,rd ={}, xmlr,rid, rowData=[], cn=(ts.p.altRows === true) ? ts.p.altclass:"",cn1;
  1465. if(ts.p.subGrid===true) {
  1466. si = 1;
  1467. addSubGridCell = $.jgrid.getMethod("addSubGridCell");
  1468. }
  1469. if(!xmlRd.repeatitems) {f = reader(frd);}
  1470. if( ts.p.keyName===false) {
  1471. idn = $.isFunction( xmlRd.id ) ? xmlRd.id.call(ts, xml) : xmlRd.id;
  1472. } else {
  1473. idn = ts.p.keyName;
  1474. }
  1475. if( String(idn).indexOf("[") === -1 ) {
  1476. if (f.length) {
  1477. getId = function( trow, k) {return $(idn,trow).text() || k;};
  1478. } else {
  1479. getId = function( trow, k) {return $(xmlRd.cell,trow).eq(idn).text() || k;};
  1480. }
  1481. }
  1482. else {
  1483. getId = function( trow, k) {return trow.getAttribute(idn.replace(/[\[\]]/g,"")) || k;};
  1484. }
  1485. ts.p.userData = {};
  1486. ts.p.page = intNum($.jgrid.getXmlData(xml, xmlRd.page), ts.p.page);
  1487. ts.p.lastpage = intNum($.jgrid.getXmlData(xml, xmlRd.total), 1);
  1488. ts.p.records = intNum($.jgrid.getXmlData(xml, xmlRd.records));
  1489. if($.isFunction(xmlRd.userdata)) {
  1490. ts.p.userData = xmlRd.userdata.call(ts, xml) || {};
  1491. } else {
  1492. $.jgrid.getXmlData(xml, xmlRd.userdata, true).each(function() {ts.p.userData[this.getAttribute("name")]= $(this).text();});
  1493. }
  1494. var gxml = $.jgrid.getXmlData( xml, xmlRd.root, true);
  1495. gxml = $.jgrid.getXmlData( gxml, xmlRd.row, true);
  1496. if (!gxml) { gxml = []; }
  1497. var gl = gxml.length, j=0, grpdata=[], rn = parseInt(ts.p.rowNum,10), br=ts.p.scroll?$.jgrid.randId():1, altr;
  1498. if (gl > 0 && ts.p.page <= 0) { ts.p.page = 1; }
  1499. if(gxml && gl){
  1500. if (adjust) { rn *= adjust+1; }
  1501. var afterInsRow = $.isFunction(ts.p.afterInsertRow), hiderow=false, groupingPrepare;
  1502. if(ts.p.grouping) {
  1503. hiderow = ts.p.groupingView.groupCollapse === true;
  1504. groupingPrepare = $.jgrid.getMethod("groupingPrepare");
  1505. }
  1506. while (j<gl) {
  1507. xmlr = gxml[j];
  1508. rid = getId(xmlr,br+j);
  1509. rid = ts.p.idPrefix + rid;
  1510. altr = rcnt === 0 ? 0 : rcnt+1;
  1511. cn1 = (altr+j)%2 === 1 ? cn : '';
  1512. var iStartTrTag = rowData.length;
  1513. rowData.push("");
  1514. if( ni ) {
  1515. rowData.push( addRowNum(0,j,ts.p.page,ts.p.rowNum) );
  1516. }
  1517. if( gi ) {
  1518. rowData.push( addMulti(rid,ni,j, false) );
  1519. }
  1520. if( si ) {
  1521. rowData.push( addSubGridCell.call(self, gi+ni, j+rcnt) );
  1522. }
  1523. if(xmlRd.repeatitems){
  1524. if (!F) { F=orderedCols(gi+si+ni); }
  1525. var cells = $.jgrid.getXmlData( xmlr, xmlRd.cell, true);
  1526. $.each(F, function (k) {
  1527. var cell = cells[this];
  1528. if (!cell) { return false; }
  1529. v = cell.textContent || cell.text;
  1530. rd[ts.p.colModel[k+gi+si+ni].name] = v;
  1531. rowData.push( addCell(rid,v,k+gi+si+ni,j+rcnt,xmlr, rd) );
  1532. });
  1533. } else {
  1534. for(i = 0; i < f.length;i++) {
  1535. v = $.jgrid.getXmlData( xmlr, f[i]);
  1536. rd[ts.p.colModel[i+gi+si+ni].name] = v;
  1537. rowData.push( addCell(rid, v, i+gi+si+ni, j+rcnt, xmlr, rd) );
  1538. }
  1539. }
  1540. rowData[iStartTrTag] = constructTr(rid, hiderow, cn1, rd, xmlr, false);
  1541. rowData.push("</tr>");
  1542. if(ts.p.grouping) {
  1543. grpdata.push( rowData );
  1544. if(!ts.p.groupingView._locgr) {
  1545. groupingPrepare.call(self , rd, j );
  1546. }
  1547. rowData = [];
  1548. }
  1549. if(locdata || (ts.p.treeGrid === true && !(ts.p._ald)) ) {
  1550. rd[xmlid] = $.jgrid.stripPref(ts.p.idPrefix, rid);
  1551. ts.p.data.push(rd);
  1552. ts.p._index[rd[xmlid]] = ts.p.data.length-1;
  1553. }
  1554. if(ts.p.gridview === false ) {
  1555. $("tbody:first", ts.grid.bDiv).append(rowData.join(''));
  1556. self.triggerHandler("jqGridAfterInsertRow", [rid, rd, xmlr]);
  1557. if(afterInsRow) {ts.p.afterInsertRow.call(ts,rid,rd,xmlr);}
  1558. rowData=[];
  1559. }
  1560. rd={};
  1561. ir++;
  1562. j++;
  1563. if(ir===rn) {break;}
  1564. }
  1565. }
  1566. if(ts.p.gridview === true) {
  1567. fpos = ts.p.treeANode > -1 ? ts.p.treeANode: 0;
  1568. if(ts.p.grouping) {
  1569. if(!locdata) {
  1570. self.jqGrid('groupingRender',grpdata,ts.p.colModel.length, ts.p.page, rn);
  1571. grpdata = null;
  1572. }
  1573. } else if(ts.p.treeGrid === true && fpos > 0) {
  1574. $(ts.rows[fpos]).after(rowData.join(''));
  1575. } else {
  1576. //$("tbody:…

Large files files are truncated, but you can click here to view the full file