PageRenderTime 27ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/files/jqgrid/4.4.1/js/grid.subgrid.js

https://gitlab.com/Mirros/jsdelivr
JavaScript | 298 lines | 289 code | 0 blank | 9 comment | 85 complexity | 76caf71d101a20be87dca285bd7858e5 MD5 | raw file
  1. ;(function($){
  2. /**
  3. * jqGrid extension for SubGrid Data
  4. * Tony Tomov tony@trirand.com
  5. * http://trirand.com/blog/
  6. * Dual licensed under the MIT and GPL licenses:
  7. * http://www.opensource.org/licenses/mit-license.php
  8. * http://www.gnu.org/licenses/gpl-2.0.html
  9. **/
  10. "use strict";
  11. $.jgrid.extend({
  12. setSubGrid : function () {
  13. return this.each(function (){
  14. var $t = this, cm,
  15. suboptions = {
  16. plusicon : "ui-icon-plus",
  17. minusicon : "ui-icon-minus",
  18. openicon: "ui-icon-carat-1-sw",
  19. expandOnLoad: false,
  20. delayOnLoad : 50,
  21. selectOnExpand : false,
  22. reloadOnExpand : true
  23. };
  24. $t.p.subGridOptions = $.extend(suboptions, $t.p.subGridOptions || {});
  25. $t.p.colNames.unshift("");
  26. $t.p.colModel.unshift({name:'subgrid',width: $.browser.safari ? $t.p.subGridWidth+$t.p.cellLayout : $t.p.subGridWidth,sortable: false,resizable:false,hidedlg:true,search:false,fixed:true});
  27. cm = $t.p.subGridModel;
  28. if(cm[0]) {
  29. cm[0].align = $.extend([],cm[0].align || []);
  30. for(var i=0;i<cm[0].name.length;i++) { cm[0].align[i] = cm[0].align[i] || 'left';}
  31. }
  32. });
  33. },
  34. addSubGridCell :function (pos,iRow) {
  35. var prp='',ic,sid;
  36. this.each(function(){
  37. prp = this.formatCol(pos,iRow);
  38. sid= this.p.id;
  39. ic = this.p.subGridOptions.plusicon;
  40. });
  41. return "<td role=\"gridcell\" aria-describedby=\""+sid+"_subgrid\" class=\"ui-sgcollapsed sgcollapsed\" "+prp+"><a href='javascript:void(0);'><span class='ui-icon "+ic+"'></span></a></td>";
  42. },
  43. addSubGrid : function( pos, sind ) {
  44. return this.each(function(){
  45. var ts = this;
  46. if (!ts.grid ) { return; }
  47. //-------------------------
  48. var subGridCell = function(trdiv,cell,pos)
  49. {
  50. var tddiv = $("<td align='"+ts.p.subGridModel[0].align[pos]+"'></td>").html(cell);
  51. $(trdiv).append(tddiv);
  52. };
  53. var subGridXml = function(sjxml, sbid){
  54. var tddiv, i, sgmap,
  55. dummy = $("<table cellspacing='0' cellpadding='0' border='0'><tbody></tbody></table>"),
  56. trdiv = $("<tr></tr>");
  57. for (i = 0; i<ts.p.subGridModel[0].name.length; i++) {
  58. tddiv = $("<th class='ui-state-default ui-th-subgrid ui-th-column ui-th-"+ts.p.direction+"'></th>");
  59. $(tddiv).html(ts.p.subGridModel[0].name[i]);
  60. $(tddiv).width( ts.p.subGridModel[0].width[i]);
  61. $(trdiv).append(tddiv);
  62. }
  63. $(dummy).append(trdiv);
  64. if (sjxml){
  65. sgmap = ts.p.xmlReader.subgrid;
  66. $(sgmap.root+" "+sgmap.row, sjxml).each( function(){
  67. trdiv = $("<tr class='ui-widget-content ui-subtblcell'></tr>");
  68. if(sgmap.repeatitems === true) {
  69. $(sgmap.cell,this).each( function(i) {
  70. subGridCell(trdiv, $(this).text() || '&#160;',i);
  71. });
  72. } else {
  73. var f = ts.p.subGridModel[0].mapping || ts.p.subGridModel[0].name;
  74. if (f) {
  75. for (i=0;i<f.length;i++) {
  76. subGridCell(trdiv, $(f[i],this).text() || '&#160;',i);
  77. }
  78. }
  79. }
  80. $(dummy).append(trdiv);
  81. });
  82. }
  83. var pID = $("table:first",ts.grid.bDiv).attr("id")+"_";
  84. $("#"+$.jgrid.jqID(pID+sbid)).append(dummy);
  85. ts.grid.hDiv.loading = false;
  86. $("#load_"+$.jgrid.jqID(ts.p.id)).hide();
  87. return false;
  88. };
  89. var subGridJson = function(sjxml, sbid){
  90. var tddiv,result,i,cur, sgmap,j,
  91. dummy = $("<table cellspacing='0' cellpadding='0' border='0'><tbody></tbody></table>"),
  92. trdiv = $("<tr></tr>");
  93. for (i = 0; i<ts.p.subGridModel[0].name.length; i++) {
  94. tddiv = $("<th class='ui-state-default ui-th-subgrid ui-th-column ui-th-"+ts.p.direction+"'></th>");
  95. $(tddiv).html(ts.p.subGridModel[0].name[i]);
  96. $(tddiv).width( ts.p.subGridModel[0].width[i]);
  97. $(trdiv).append(tddiv);
  98. }
  99. $(dummy).append(trdiv);
  100. if (sjxml){
  101. sgmap = ts.p.jsonReader.subgrid;
  102. result = $.jgrid.getAccessor(sjxml, sgmap.root);
  103. if ( typeof result !== 'undefined' ) {
  104. for (i=0;i<result.length;i++) {
  105. cur = result[i];
  106. trdiv = $("<tr class='ui-widget-content ui-subtblcell'></tr>");
  107. if(sgmap.repeatitems === true) {
  108. if(sgmap.cell) { cur=cur[sgmap.cell]; }
  109. for (j=0;j<cur.length;j++) {
  110. subGridCell(trdiv, cur[j] || '&#160;',j);
  111. }
  112. } else {
  113. var f = ts.p.subGridModel[0].mapping || ts.p.subGridModel[0].name;
  114. if(f.length) {
  115. for (j=0;j<f.length;j++) {
  116. subGridCell(trdiv, cur[f[j]] || '&#160;',j);
  117. }
  118. }
  119. }
  120. $(dummy).append(trdiv);
  121. }
  122. }
  123. }
  124. var pID = $("table:first",ts.grid.bDiv).attr("id")+"_";
  125. $("#"+$.jgrid.jqID(pID+sbid)).append(dummy);
  126. ts.grid.hDiv.loading = false;
  127. $("#load_"+$.jgrid.jqID(ts.p.id)).hide();
  128. return false;
  129. };
  130. var populatesubgrid = function( rd )
  131. {
  132. var sid,dp, i, j;
  133. sid = $(rd).attr("id");
  134. dp = {nd_: (new Date().getTime())};
  135. dp[ts.p.prmNames.subgridid]=sid;
  136. if(!ts.p.subGridModel[0]) { return false; }
  137. if(ts.p.subGridModel[0].params) {
  138. for(j=0; j < ts.p.subGridModel[0].params.length; j++) {
  139. for(i=0; i<ts.p.colModel.length; i++) {
  140. if(ts.p.colModel[i].name === ts.p.subGridModel[0].params[j]) {
  141. dp[ts.p.colModel[i].name]= $("td:eq("+i+")",rd).text().replace(/\&#160\;/ig,'');
  142. }
  143. }
  144. }
  145. }
  146. if(!ts.grid.hDiv.loading) {
  147. ts.grid.hDiv.loading = true;
  148. $("#load_"+$.jgrid.jqID(ts.p.id)).show();
  149. if(!ts.p.subgridtype) { ts.p.subgridtype = ts.p.datatype; }
  150. if($.isFunction(ts.p.subgridtype)) {
  151. ts.p.subgridtype.call(ts, dp);
  152. } else {
  153. ts.p.subgridtype = ts.p.subgridtype.toLowerCase();
  154. }
  155. switch(ts.p.subgridtype) {
  156. case "xml":
  157. case "json":
  158. $.ajax($.extend({
  159. type:ts.p.mtype,
  160. url: ts.p.subGridUrl,
  161. dataType:ts.p.subgridtype,
  162. data: $.isFunction(ts.p.serializeSubGridData)? ts.p.serializeSubGridData.call(ts, dp) : dp,
  163. complete: function(sxml) {
  164. if(ts.p.subgridtype === "xml") {
  165. subGridXml(sxml.responseXML, sid);
  166. } else {
  167. subGridJson($.jgrid.parse(sxml.responseText),sid);
  168. }
  169. sxml=null;
  170. }
  171. }, $.jgrid.ajaxOptions, ts.p.ajaxSubgridOptions || {}));
  172. break;
  173. }
  174. }
  175. return false;
  176. };
  177. var _id, pID,atd, nhc=0, bfsc, r;
  178. $.each(ts.p.colModel,function(){
  179. if(this.hidden === true || this.name === 'rn' || this.name === 'cb') {
  180. nhc++;
  181. }
  182. });
  183. var len = ts.rows.length, i=1;
  184. if( sind !== undefined && sind > 0) {
  185. i = sind;
  186. len = sind+1;
  187. }
  188. while(i < len) {
  189. if($(ts.rows[i]).hasClass('jqgrow')) {
  190. $(ts.rows[i].cells[pos]).bind('click', function() {
  191. var tr = $(this).parent("tr")[0];
  192. r = tr.nextSibling;
  193. if($(this).hasClass("sgcollapsed")) {
  194. pID = ts.p.id;
  195. _id = tr.id;
  196. if(ts.p.subGridOptions.reloadOnExpand === true || ( ts.p.subGridOptions.reloadOnExpand === false && !$(r).hasClass('ui-subgrid') ) ) {
  197. atd = pos >=1 ? "<td colspan='"+pos+"'>&#160;</td>":"";
  198. bfsc = $(ts).triggerHandler("jqGridSubGridBeforeExpand", [pID + "_" + _id, _id]);
  199. bfsc = (bfsc === false || bfsc === 'stop') ? false : true;
  200. if(bfsc && $.isFunction(ts.p.subGridBeforeExpand)) {
  201. bfsc = ts.p.subGridBeforeExpand.call(ts, pID+"_"+_id,_id);
  202. }
  203. if(bfsc === false) {return false;}
  204. $(tr).after( "<tr role='row' class='ui-subgrid'>"+atd+"<td class='ui-widget-content subgrid-cell'><span class='ui-icon "+ts.p.subGridOptions.openicon+"'></span></td><td colspan='"+parseInt(ts.p.colNames.length-1-nhc,10)+"' class='ui-widget-content subgrid-data'><div id="+pID+"_"+_id+" class='tablediv'></div></td></tr>" );
  205. $(ts).triggerHandler("jqGridSubGridRowExpanded", [pID + "_" + _id, _id]);
  206. if( $.isFunction(ts.p.subGridRowExpanded)) {
  207. ts.p.subGridRowExpanded.call(ts, pID+"_"+ _id,_id);
  208. } else {
  209. populatesubgrid(tr);
  210. }
  211. } else {
  212. $(r).show();
  213. }
  214. $(this).html("<a href='javascript:void(0);'><span class='ui-icon "+ts.p.subGridOptions.minusicon+"'></span></a>").removeClass("sgcollapsed").addClass("sgexpanded");
  215. if(ts.p.subGridOptions.selectOnExpand) {
  216. $(ts).jqGrid('setSelection',_id);
  217. }
  218. } else if($(this).hasClass("sgexpanded")) {
  219. bfsc = $(ts).triggerHandler("jqGridSubGridRowColapsed", [pID + "_" + _id, _id]);
  220. bfsc = (bfsc === false || bfsc === 'stop') ? false : true;
  221. if( bfsc && $.isFunction(ts.p.subGridRowColapsed)) {
  222. _id = tr.id;
  223. bfsc = ts.p.subGridRowColapsed.call(ts, pID+"_"+_id,_id );
  224. }
  225. if(bfsc===false) {return false;}
  226. if(ts.p.subGridOptions.reloadOnExpand === true) {
  227. $(r).remove(".ui-subgrid");
  228. } else if($(r).hasClass('ui-subgrid')) { // incase of dynamic deleting
  229. $(r).hide();
  230. }
  231. $(this).html("<a href='javascript:void(0);'><span class='ui-icon "+ts.p.subGridOptions.plusicon+"'></span></a>").removeClass("sgexpanded").addClass("sgcollapsed");
  232. }
  233. return false;
  234. });
  235. }
  236. i++;
  237. }
  238. if(ts.p.subGridOptions.expandOnLoad === true) {
  239. $(ts.rows).filter('.jqgrow').each(function(index,row){
  240. $(row.cells[0]).click();
  241. });
  242. }
  243. ts.subGridXml = function(xml,sid) {subGridXml(xml,sid);};
  244. ts.subGridJson = function(json,sid) {subGridJson(json,sid);};
  245. });
  246. },
  247. expandSubGridRow : function(rowid) {
  248. return this.each(function () {
  249. var $t = this;
  250. if(!$t.grid && !rowid) {return;}
  251. if($t.p.subGrid===true) {
  252. var rc = $(this).jqGrid("getInd",rowid,true);
  253. if(rc) {
  254. var sgc = $("td.sgcollapsed",rc)[0];
  255. if(sgc) {
  256. $(sgc).trigger("click");
  257. }
  258. }
  259. }
  260. });
  261. },
  262. collapseSubGridRow : function(rowid) {
  263. return this.each(function () {
  264. var $t = this;
  265. if(!$t.grid && !rowid) {return;}
  266. if($t.p.subGrid===true) {
  267. var rc = $(this).jqGrid("getInd",rowid,true);
  268. if(rc) {
  269. var sgc = $("td.sgexpanded",rc)[0];
  270. if(sgc) {
  271. $(sgc).trigger("click");
  272. }
  273. }
  274. }
  275. });
  276. },
  277. toggleSubGridRow : function(rowid) {
  278. return this.each(function () {
  279. var $t = this;
  280. if(!$t.grid && !rowid) {return;}
  281. if($t.p.subGrid===true) {
  282. var rc = $(this).jqGrid("getInd",rowid,true);
  283. if(rc) {
  284. var sgc = $("td.sgcollapsed",rc)[0];
  285. if(sgc) {
  286. $(sgc).trigger("click");
  287. } else {
  288. sgc = $("td.sgexpanded",rc)[0];
  289. if(sgc) {
  290. $(sgc).trigger("click");
  291. }
  292. }
  293. }
  294. }
  295. });
  296. }
  297. });
  298. })(jQuery);