libre-jqgrid 4.17.2 → 4.17.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/.tscache/all/hashes/free-jqgrid.d.ts-74303c8b076937117540c0cb798f2053 +1 -0
  2. package/.tscache/all/hashes/test.ts-0d81877a31bc5d7ac52dd35a66602f01 +1 -0
  3. package/.tscache/all/timestamp +0 -0
  4. package/dist/css/ui.jqgrid.css +1618 -0
  5. package/dist/css/ui.jqgrid.min.css +4 -0
  6. package/dist/css/ui.jqgrid.min.css.map +1 -0
  7. package/dist/i18n/grid.locale-ar.js +198 -0
  8. package/dist/i18n/grid.locale-bg.js +201 -0
  9. package/dist/i18n/grid.locale-bs.js +230 -0
  10. package/dist/i18n/grid.locale-ca.js +204 -0
  11. package/dist/i18n/grid.locale-cn.js +237 -0
  12. package/dist/i18n/grid.locale-cs.js +197 -0
  13. package/dist/i18n/grid.locale-da.js +196 -0
  14. package/dist/i18n/grid.locale-de.js +240 -0
  15. package/dist/i18n/grid.locale-el.js +195 -0
  16. package/dist/i18n/grid.locale-en.js +256 -0
  17. package/dist/i18n/grid.locale-es.js +202 -0
  18. package/dist/i18n/grid.locale-fa.js +211 -0
  19. package/dist/i18n/grid.locale-fi.js +201 -0
  20. package/dist/i18n/grid.locale-fr.js +197 -0
  21. package/dist/i18n/grid.locale-gl.js +197 -0
  22. package/dist/i18n/grid.locale-he.js +198 -0
  23. package/dist/i18n/grid.locale-hr.js +231 -0
  24. package/dist/i18n/grid.locale-hu.js +196 -0
  25. package/dist/i18n/grid.locale-id.js +238 -0
  26. package/dist/i18n/grid.locale-is.js +197 -0
  27. package/dist/i18n/grid.locale-it.js +189 -0
  28. package/dist/i18n/grid.locale-ja.js +203 -0
  29. package/dist/i18n/grid.locale-kr.js +194 -0
  30. package/dist/i18n/grid.locale-lt.js +199 -0
  31. package/dist/i18n/grid.locale-me.js +198 -0
  32. package/dist/i18n/grid.locale-nl.js +208 -0
  33. package/dist/i18n/grid.locale-no.js +180 -0
  34. package/dist/i18n/grid.locale-pl.js +204 -0
  35. package/dist/i18n/grid.locale-pt-br.js +210 -0
  36. package/dist/i18n/grid.locale-pt.js +196 -0
  37. package/dist/i18n/grid.locale-ro.js +210 -0
  38. package/dist/i18n/grid.locale-ru.js +196 -0
  39. package/dist/i18n/grid.locale-sk.js +198 -0
  40. package/dist/i18n/grid.locale-sl.js +230 -0
  41. package/dist/i18n/grid.locale-sr.js +199 -0
  42. package/dist/i18n/grid.locale-sv.js +198 -0
  43. package/dist/i18n/grid.locale-th.js +195 -0
  44. package/dist/i18n/grid.locale-tr.js +197 -0
  45. package/dist/i18n/grid.locale-tw.js +199 -0
  46. package/dist/i18n/grid.locale-ua.js +199 -0
  47. package/dist/i18n/grid.locale-vi.js +238 -0
  48. package/dist/i18n/min/grid.locale-ar.js +10 -0
  49. package/dist/i18n/min/grid.locale-ar.js.map +1 -0
  50. package/dist/i18n/min/grid.locale-bg.js +10 -0
  51. package/dist/i18n/min/grid.locale-bg.js.map +1 -0
  52. package/dist/i18n/min/grid.locale-ca.js +15 -0
  53. package/dist/i18n/min/grid.locale-ca.js.map +1 -0
  54. package/dist/i18n/min/grid.locale-cn.js +10 -0
  55. package/dist/i18n/min/grid.locale-cn.js.map +1 -0
  56. package/dist/i18n/min/grid.locale-cs.js +11 -0
  57. package/dist/i18n/min/grid.locale-cs.js.map +1 -0
  58. package/dist/i18n/min/grid.locale-da.js +10 -0
  59. package/dist/i18n/min/grid.locale-da.js.map +1 -0
  60. package/dist/i18n/min/grid.locale-de.js +21 -0
  61. package/dist/i18n/min/grid.locale-de.js.map +1 -0
  62. package/dist/i18n/min/grid.locale-el.js +10 -0
  63. package/dist/i18n/min/grid.locale-el.js.map +1 -0
  64. package/dist/i18n/min/grid.locale-en.js +11 -0
  65. package/dist/i18n/min/grid.locale-en.js.map +1 -0
  66. package/dist/i18n/min/grid.locale-es.js +16 -0
  67. package/dist/i18n/min/grid.locale-es.js.map +1 -0
  68. package/dist/i18n/min/grid.locale-fa.js +8 -0
  69. package/dist/i18n/min/grid.locale-fa.js.map +1 -0
  70. package/dist/i18n/min/grid.locale-fi.js +11 -0
  71. package/dist/i18n/min/grid.locale-fi.js.map +1 -0
  72. package/dist/i18n/min/grid.locale-fr.js +10 -0
  73. package/dist/i18n/min/grid.locale-fr.js.map +1 -0
  74. package/dist/i18n/min/grid.locale-gl.js +9 -0
  75. package/dist/i18n/min/grid.locale-gl.js.map +1 -0
  76. package/dist/i18n/min/grid.locale-he.js +10 -0
  77. package/dist/i18n/min/grid.locale-he.js.map +1 -0
  78. package/dist/i18n/min/grid.locale-hr.js +11 -0
  79. package/dist/i18n/min/grid.locale-hr.js.map +1 -0
  80. package/dist/i18n/min/grid.locale-hu.js +10 -0
  81. package/dist/i18n/min/grid.locale-hu.js.map +1 -0
  82. package/dist/i18n/min/grid.locale-id.js +10 -0
  83. package/dist/i18n/min/grid.locale-id.js.map +1 -0
  84. package/dist/i18n/min/grid.locale-is.js +9 -0
  85. package/dist/i18n/min/grid.locale-is.js.map +1 -0
  86. package/dist/i18n/min/grid.locale-it.js +2 -0
  87. package/dist/i18n/min/grid.locale-it.js.map +1 -0
  88. package/dist/i18n/min/grid.locale-ja.js +10 -0
  89. package/dist/i18n/min/grid.locale-ja.js.map +1 -0
  90. package/dist/i18n/min/grid.locale-kr.js +2 -0
  91. package/dist/i18n/min/grid.locale-kr.js.map +1 -0
  92. package/dist/i18n/min/grid.locale-lt.js +10 -0
  93. package/dist/i18n/min/grid.locale-lt.js.map +1 -0
  94. package/dist/i18n/min/grid.locale-me.js +10 -0
  95. package/dist/i18n/min/grid.locale-me.js.map +1 -0
  96. package/dist/i18n/min/grid.locale-nl.js +2 -0
  97. package/dist/i18n/min/grid.locale-nl.js.map +1 -0
  98. package/dist/i18n/min/grid.locale-no.js +2 -0
  99. package/dist/i18n/min/grid.locale-no.js.map +1 -0
  100. package/dist/i18n/min/grid.locale-pl.js +18 -0
  101. package/dist/i18n/min/grid.locale-pl.js.map +1 -0
  102. package/dist/i18n/min/grid.locale-pt-br.js +21 -0
  103. package/dist/i18n/min/grid.locale-pt-br.js.map +1 -0
  104. package/dist/i18n/min/grid.locale-pt.js +9 -0
  105. package/dist/i18n/min/grid.locale-pt.js.map +1 -0
  106. package/dist/i18n/min/grid.locale-ro.js +10 -0
  107. package/dist/i18n/min/grid.locale-ro.js.map +1 -0
  108. package/dist/i18n/min/grid.locale-ru.js +10 -0
  109. package/dist/i18n/min/grid.locale-ru.js.map +1 -0
  110. package/dist/i18n/min/grid.locale-sk.js +10 -0
  111. package/dist/i18n/min/grid.locale-sk.js.map +1 -0
  112. package/dist/i18n/min/grid.locale-sr.js +10 -0
  113. package/dist/i18n/min/grid.locale-sr.js.map +1 -0
  114. package/dist/i18n/min/grid.locale-sv.js +10 -0
  115. package/dist/i18n/min/grid.locale-sv.js.map +1 -0
  116. package/dist/i18n/min/grid.locale-th.js +10 -0
  117. package/dist/i18n/min/grid.locale-th.js.map +1 -0
  118. package/dist/i18n/min/grid.locale-tr.js +10 -0
  119. package/dist/i18n/min/grid.locale-tr.js.map +1 -0
  120. package/dist/i18n/min/grid.locale-tw.js +11 -0
  121. package/dist/i18n/min/grid.locale-tw.js.map +1 -0
  122. package/dist/i18n/min/grid.locale-ua.js +10 -0
  123. package/dist/i18n/min/grid.locale-ua.js.map +1 -0
  124. package/dist/i18n/min/grid.locale-vi.js +10 -0
  125. package/dist/i18n/min/grid.locale-vi.js.map +1 -0
  126. package/dist/jquery.jqgrid.min.js +11 -0
  127. package/dist/jquery.jqgrid.min.js.map +1 -0
  128. package/{js/jquery.jqgrid.src.js.1 → dist/jquery.jqgrid.src.js} +1 -1
  129. package/dist/modules/grid.base.js +8518 -0
  130. package/dist/modules/grid.celledit.js +673 -0
  131. package/dist/modules/grid.common.js +844 -0
  132. package/dist/modules/grid.custom.js +1795 -0
  133. package/dist/modules/grid.filter.js +897 -0
  134. package/dist/modules/grid.formedit.js +2537 -0
  135. package/dist/modules/grid.grouping.js +737 -0
  136. package/dist/modules/grid.import.js +251 -0
  137. package/dist/modules/grid.inlinedit.js +784 -0
  138. package/dist/modules/grid.jqueryui.js +965 -0
  139. package/dist/modules/grid.pivot.js +862 -0
  140. package/dist/modules/grid.subgrid.js +379 -0
  141. package/dist/modules/grid.tbltogrid.js +141 -0
  142. package/dist/modules/grid.treegrid.js +683 -0
  143. package/dist/modules/jqdnr.js +188 -0
  144. package/dist/modules/jqmodal.js +292 -0
  145. package/dist/modules/jquery.fmatter.js +1061 -0
  146. package/dist/modules/jsonxml.js +343 -0
  147. package/dist/modules/min/grid.base.js +11 -0
  148. package/dist/modules/min/grid.base.js.map +1 -0
  149. package/dist/modules/min/grid.celledit.js +2 -0
  150. package/dist/modules/min/grid.celledit.js.map +1 -0
  151. package/dist/modules/min/grid.common.js +2 -0
  152. package/dist/modules/min/grid.common.js.map +1 -0
  153. package/dist/modules/min/grid.custom.js +2 -0
  154. package/dist/modules/min/grid.custom.js.map +1 -0
  155. package/dist/modules/min/grid.filter.js +2 -0
  156. package/dist/modules/min/grid.filter.js.map +1 -0
  157. package/dist/modules/min/grid.formedit.js +2 -0
  158. package/dist/modules/min/grid.formedit.js.map +1 -0
  159. package/dist/modules/min/grid.grouping.js +2 -0
  160. package/dist/modules/min/grid.grouping.js.map +1 -0
  161. package/dist/modules/min/grid.import.js +2 -0
  162. package/dist/modules/min/grid.import.js.map +1 -0
  163. package/dist/modules/min/grid.inlinedit.js +2 -0
  164. package/dist/modules/min/grid.inlinedit.js.map +1 -0
  165. package/dist/modules/min/grid.jqueryui.js +2 -0
  166. package/dist/modules/min/grid.jqueryui.js.map +1 -0
  167. package/dist/modules/min/grid.pivot.js +2 -0
  168. package/dist/modules/min/grid.pivot.js.map +1 -0
  169. package/dist/modules/min/grid.subgrid.js +2 -0
  170. package/dist/modules/min/grid.subgrid.js.map +1 -0
  171. package/dist/modules/min/grid.tbltogrid.js +2 -0
  172. package/dist/modules/min/grid.tbltogrid.js.map +1 -0
  173. package/dist/modules/min/grid.treegrid.js +2 -0
  174. package/dist/modules/min/grid.treegrid.js.map +1 -0
  175. package/dist/modules/min/jqdnr.js +2 -0
  176. package/dist/modules/min/jqdnr.js.map +1 -0
  177. package/dist/modules/min/jqmodal.js +2 -0
  178. package/dist/modules/min/jqmodal.js.map +1 -0
  179. package/dist/modules/min/jquery.fmatter.js +2 -0
  180. package/dist/modules/min/jquery.fmatter.js.map +1 -0
  181. package/dist/modules/min/jsonxml.js +2 -0
  182. package/dist/modules/min/jsonxml.js.map +1 -0
  183. package/dist/plugins/css/ui.multiselect.css +30 -0
  184. package/dist/plugins/css/ui.multiselect.min.css +2 -0
  185. package/dist/plugins/css/ui.multiselect.min.css.map +1 -0
  186. package/dist/plugins/grid.odata.js +1313 -0
  187. package/dist/plugins/jqgrid_download.js +109 -0
  188. package/dist/plugins/jquery.contextmenu-ui.js +304 -0
  189. package/dist/plugins/jquery.contextmenu.js +174 -0
  190. package/dist/plugins/jquery.createcontexmenufromnavigatorbuttons.js +172 -0
  191. package/dist/plugins/jquery.jqgrid.showhidecolumnmenu.js +201 -0
  192. package/dist/plugins/min/grid.odata.js +11 -0
  193. package/dist/plugins/min/grid.odata.js.map +1 -0
  194. package/dist/plugins/min/jquery.contextmenu-ui.js +26 -0
  195. package/dist/plugins/min/jquery.contextmenu-ui.js.map +1 -0
  196. package/dist/plugins/min/jquery.contextmenu.js +19 -0
  197. package/dist/plugins/min/jquery.contextmenu.js.map +1 -0
  198. package/dist/plugins/min/jquery.createcontexmenufromnavigatorbuttons.js +12 -0
  199. package/dist/plugins/min/jquery.createcontexmenufromnavigatorbuttons.js.map +1 -0
  200. package/dist/plugins/min/jquery.jqgrid.showhidecolumnmenu.js +10 -0
  201. package/dist/plugins/min/jquery.jqgrid.showhidecolumnmenu.js.map +1 -0
  202. package/dist/plugins/min/ui.multiselect.js +30 -0
  203. package/dist/plugins/min/ui.multiselect.js.map +1 -0
  204. package/dist/plugins/ui.multiselect.js +389 -0
  205. package/dist/ts/free-jqgrid.d.ts +2132 -0
  206. package/js/jquery.jqgrid.min.js +1 -1
  207. package/js/jquery.jqgrid.min.js.map +1 -1
  208. package/js/jquery.jqgrid.src.js +8 -3
  209. package/libre-jqgrid-4.17.4.tgz +0 -0
  210. package/package.json +1 -1
  211. package/.github/workflows/npm.yml +0 -47
@@ -0,0 +1,737 @@
1
+ /*jshint eqeqeq:false, eqnull:true */
2
+ /*global jQuery, define, exports, module, require */
3
+ /*jslint plusplus: true, unparam: true, eqeq: true, nomen: true, todo: true, continue: true */
4
+ // Grouping module
5
+ (function (factory) {
6
+ "use strict";
7
+ if (typeof define === "function" && define.amd) {
8
+ // AMD. Register as an anonymous module.
9
+ define([
10
+ "jquery",
11
+ "./grid.base"
12
+ ], factory);
13
+ } else if (typeof module === "object" && module.exports) {
14
+ // Node/CommonJS
15
+ module.exports = function (root, $) {
16
+ if (!root) {
17
+ root = window;
18
+ }
19
+ if ($ === undefined) {
20
+ // require("jquery") returns a factory that requires window to
21
+ // build a jQuery instance, we normalize how we use modules
22
+ // that require this pattern but the window provided is a noop
23
+ // if it's defined (how jquery works)
24
+ $ = typeof window !== "undefined" ?
25
+ require("jquery") :
26
+ require("jquery")(root);
27
+ }
28
+ require("./grid.base");
29
+ factory($);
30
+ return $;
31
+ };
32
+ } else {
33
+ // Browser globals
34
+ factory(jQuery);
35
+ }
36
+ }(function ($) {
37
+ "use strict";
38
+ var jgrid = $.jgrid, base = $.fn.jqGrid;
39
+ // begin module grid.grouping
40
+ jgrid.extend({
41
+ groupingSetup: function () {
42
+ return this.each(function () {
43
+ var $t = this, i, j, cml, p = $t.p, colModel = p.colModel, grp = p.groupingView, cm, summary,
44
+ emptyFormatter = function () {
45
+ return "";
46
+ };
47
+ if (grp !== null && ((typeof grp === "object") || $.jgrid.isFunction(grp))) {
48
+ if (!grp.groupField.length) {
49
+ p.grouping = false;
50
+ } else {
51
+ if (grp.visibiltyOnNextGrouping === undefined) {
52
+ grp.visibiltyOnNextGrouping = [];
53
+ }
54
+
55
+ grp.lastvalues = [];
56
+ if (!grp._locgr) {
57
+ grp.groups = [];
58
+ }
59
+ grp.counters = [];
60
+ for (i = 0; i < grp.groupField.length; i++) {
61
+ if (!grp.groupOrder[i]) {
62
+ grp.groupOrder[i] = "asc";
63
+ }
64
+ if (!grp.groupText[i]) {
65
+ grp.groupText[i] = "{0}";
66
+ }
67
+ if (typeof grp.groupColumnShow[i] !== "boolean") {
68
+ grp.groupColumnShow[i] = true;
69
+ }
70
+ if (typeof grp.groupSummary[i] !== "boolean") {
71
+ grp.groupSummary[i] = false;
72
+ }
73
+ if (!grp.groupSummaryPos[i]) {
74
+ grp.groupSummaryPos[i] = "footer";
75
+ }
76
+ // TODO: allow groupField be from additionalProperties
77
+ // and not only from colModel
78
+ cm = colModel[p.iColByName[grp.groupField[i]]];
79
+ if (grp.groupColumnShow[i] === true) {
80
+ grp.visibiltyOnNextGrouping[i] = true;
81
+ if (cm != null && cm.hidden === true) {
82
+ base.showCol.call($($t), grp.groupField[i]);
83
+ }
84
+ } else {
85
+ grp.visibiltyOnNextGrouping[i] = $("#" + jgrid.jqID(p.id + "_" + grp.groupField[i])).is(":visible");
86
+ if (cm != null && cm.hidden !== true) {
87
+ base.hideCol.call($($t), grp.groupField[i]);
88
+ }
89
+ }
90
+ }
91
+ grp.summary = [];
92
+ if (grp.hideFirstGroupCol) {
93
+ grp.formatDisplayField[0] = function (v) {
94
+ return v;
95
+ };
96
+ }
97
+ for (j = 0, cml = colModel.length; j < cml; j++) {
98
+ cm = colModel[j];
99
+ if (grp.hideFirstGroupCol) {
100
+ if (!cm.hidden && grp.groupField[0] === cm.name) {
101
+ cm.formatter = emptyFormatter;
102
+ }
103
+ }
104
+ if (cm.summaryType) {
105
+ summary = {
106
+ nm: cm.name,
107
+ st: cm.summaryType,
108
+ v: "",
109
+ sr: cm.summaryRound,
110
+ srt: cm.summaryRoundType || "round"
111
+ };
112
+ if (cm.summaryDivider) {
113
+ summary.sd = cm.summaryDivider;
114
+ summary.vd = "";
115
+ }
116
+ grp.summary.push(summary);
117
+ }
118
+ }
119
+ }
120
+ } else {
121
+ p.grouping = false;
122
+ }
123
+ });
124
+ },
125
+ groupingPrepare: function (record, irow) {
126
+ this.each(function () {
127
+ var $t = this, p = $t.p, grp = p.groupingView, groups = grp.groups, counters = grp.counters,
128
+ lastvalues = grp.lastvalues, isInTheSameGroup = grp.isInTheSameGroup, groupLength = grp.groupField.length,
129
+ i, j, keys, newGroup, counter, fieldName, v, displayName, displayValue, changed = false,
130
+ groupingCalculationsHandler = base.groupingCalculations.handler, key,
131
+ buildSummary = function () {
132
+ var iSummary, summary, st;
133
+ for (iSummary = 0; iSummary < counter.summary.length; iSummary++) {
134
+ summary = counter.summary[iSummary];
135
+ st = Array.isArray(summary.st) ? summary.st[newGroup.idx] : summary.st;
136
+ if ($.jgrid.isFunction(st)) {
137
+ summary.v = st.call($t, summary.v, summary.nm, record, newGroup);
138
+ } else {
139
+ summary.v = groupingCalculationsHandler.call($($t), st, summary.v, summary.nm, summary.sr, summary.srt, record);
140
+ if (st.toLowerCase() === "avg" && summary.sd) {
141
+ summary.vd = groupingCalculationsHandler.call($($t), st, summary.vd, summary.sd, summary.sr, summary.srt, record);
142
+ }
143
+ }
144
+ }
145
+ return counter.summary;
146
+ },
147
+ normilizeValue = function (value, cmOrPropName) {
148
+ if (value == null && grp.useDefaultValuesOnGrouping) {
149
+ var cm = p.iColByName[cmOrPropName] !== undefined ?
150
+ p.colModel[p.iColByName[cmOrPropName]] :
151
+ p.additionalProperties[p.iPropByName[cmOrPropName]],
152
+ defaultValue;
153
+
154
+ if (cm != null && cm.formatter != null) {
155
+ if (cm.formatoptions != null && cm.formatoptions.defaultValue !== undefined) {
156
+ value = cm.formatoptions.defaultValue;
157
+ } else if (typeof cm.formatter === "string") {
158
+ defaultValue = $($t).jqGrid("getGridRes", "formatter." + cm.formatter + ".defaultValue");
159
+ if (defaultValue !== undefined) {
160
+ value = defaultValue;
161
+ }
162
+ }
163
+ }
164
+ }
165
+ return value;
166
+ };
167
+
168
+ for (i = 0; i < groupLength; i++) {
169
+ fieldName = grp.groupField[i];
170
+ v = normilizeValue(record[fieldName], fieldName);
171
+ key = v;
172
+ displayName = grp.displayField[i];
173
+ displayValue = displayName == null ?
174
+ null :
175
+ normilizeValue(record[displayName], displayName);
176
+
177
+ if (displayValue == null) {
178
+ displayValue = v;
179
+ }
180
+ if (v !== undefined) {
181
+ keys = [];
182
+ for (j = 0; j <= i; j++) {
183
+ keys.push(record[grp.groupField[j]]);
184
+ }
185
+ newGroup = {
186
+ idx: i, // index in grp.groupField array
187
+ dataIndex: fieldName,
188
+ value: v,
189
+ displayValue: displayValue,
190
+ startRow: irow,
191
+ cnt: 1,
192
+ keys: keys,
193
+ summary: []
194
+ };
195
+ counter = {
196
+ cnt: 1,
197
+ pos: groups.length,
198
+ summary: $.extend(true, [], grp.summary)
199
+ };
200
+ if (irow === 0) {
201
+ // First record always starts a new group
202
+ groups.push(newGroup);
203
+ lastvalues[i] = v;
204
+ counters[i] = counter;
205
+ } else {
206
+ if (typeof v !== "object" && (Array.isArray(isInTheSameGroup) && $.jgrid.isFunction(isInTheSameGroup[i]) ? !isInTheSameGroup[i].call($t, lastvalues[i], v, i, grp) : lastvalues[i] !== v)) {
207
+ // This record is not in same group as previous one
208
+ groups.push(newGroup);
209
+ lastvalues[i] = v;
210
+ changed = true;
211
+ counters[i] = counter;
212
+ } else {
213
+ if (changed) {
214
+ // This group has changed because an earlier group changed.
215
+ groups.push(newGroup);
216
+ lastvalues[i] = v;
217
+ counters[i] = counter;
218
+ } else {
219
+ counter = counters[i];
220
+ counter.cnt += 1;
221
+ groups[counter.pos].cnt = counter.cnt;
222
+ }
223
+ }
224
+ }
225
+ groups[counter.pos].summary = buildSummary();
226
+ for (j = counter.pos - 1; j >= 0; j--) {
227
+ // find the parent group (the grouping header)
228
+ if (groups[j].idx < groups[counter.pos].idx) {
229
+ groups[counter.pos].parentGroupIndex = j;
230
+ groups[counter.pos].parentGroup = groups[j];
231
+ break;
232
+ }
233
+ }
234
+ }
235
+ }
236
+ //gdata.push( rData );
237
+ });
238
+ return this;
239
+ },
240
+ getGroupHeaderIndex: function (hid, clickedElem) {
241
+ var $self = this, self = $self[0], p = self.p,
242
+ $tr = clickedElem ?
243
+ $(clickedElem).closest("tr.jqgroup") :
244
+ $("#" + jgrid.jqID(hid)),
245
+ groupLevel = parseInt($tr.data("jqgrouplevel"), 10),
246
+ hPrefix = p.id + "ghead_" + groupLevel + "_";
247
+ if (isNaN(groupLevel) || !$tr.hasClass("jqgroup") || hid.length <= hPrefix.length) {
248
+ return -1;
249
+ }
250
+ return parseInt(hid.substring(hPrefix.length), 10);
251
+ },
252
+ groupingToggle: function (hid, clickedElem) {
253
+ this.each(function () {
254
+ var $t = this, p = $t.p, grp = p.groupingView,
255
+ minusClasses = grp.minusicon, plusClasses = grp.plusicon,
256
+ $tr = clickedElem ?
257
+ $(clickedElem).closest("tr.jqgroup") :
258
+ $("#" + jgrid.jqID(hid)),
259
+ getGroupHeaderIcon = function ($trElem) {
260
+ return $trElem.find(">td>span." + "tree-wrap");
261
+ },
262
+ itemGroupingLevel, iRowStart, showDataRowsOnExpending = true,
263
+ $groupIcon, collapsed = false, rowsToHideOrShow = [],
264
+ addToHideOrShow = function ($elem) {
265
+ var i, l = $elem.length;
266
+ for (i = 0; i < l; i++) {
267
+ rowsToHideOrShow.push($elem[i]);
268
+ }
269
+ },
270
+ num = parseInt($tr.data("jqgrouplevel"), 10);
271
+
272
+ if (p.frozenColumns && $tr.length > 0) {
273
+ // always get row from non-frozen column
274
+ iRowStart = $tr[0].rowIndex;
275
+ $tr = $($t.rows[iRowStart]);
276
+ $tr = $tr.add($t.grid.fbRows[iRowStart]);
277
+ }
278
+ $groupIcon = getGroupHeaderIcon($tr);
279
+
280
+ if (jgrid.hasAllClasses($groupIcon, minusClasses)) {
281
+ $groupIcon.removeClass(minusClasses).addClass(plusClasses);
282
+ collapsed = true;
283
+ } else {
284
+ $groupIcon.removeClass(plusClasses).addClass(minusClasses);
285
+ }
286
+ for ($tr = $tr.next(); $tr.length; $tr = $tr.next()) {
287
+ if ($tr.hasClass("jqfoot")) {
288
+ itemGroupingLevel = parseInt($tr.data("jqfootlevel"), 10);
289
+ if (collapsed) {
290
+ // hide all till the summary row of the same level.
291
+ // don't hide the summary row if grp.showSummaryOnHide === true
292
+ itemGroupingLevel = parseInt($tr.data("jqfootlevel"), 10);
293
+ if ((!grp.showSummaryOnHide && itemGroupingLevel === num) || itemGroupingLevel > num) {
294
+ addToHideOrShow($tr);
295
+ }
296
+ // stop hiding of rows if the footer of parent group are found
297
+ if (itemGroupingLevel < num) { break; }
298
+ } else {
299
+ if (itemGroupingLevel === num || (grp.showSummaryOnHide && itemGroupingLevel === num + 1)) {
300
+ addToHideOrShow($tr);
301
+ }
302
+ if (itemGroupingLevel <= num) { break; }
303
+ }
304
+ } else if ($tr.hasClass("jqgroup")) {
305
+ itemGroupingLevel = parseInt($tr.data("jqgrouplevel"), 10);
306
+ if (collapsed) {
307
+ // stop hiding of rows if the grouping header of the next group
308
+ // of the same (or higher) level are found
309
+ if (itemGroupingLevel <= num) { break; }
310
+
311
+ addToHideOrShow($tr);
312
+ } else {
313
+ // stop next grouping header of the same lever are found
314
+ if (itemGroupingLevel <= num) { break; }
315
+ if (itemGroupingLevel === num + 1) {
316
+ // one should display subgroupes in collaped form
317
+ getGroupHeaderIcon($tr).removeClass(minusClasses).addClass(plusClasses);
318
+ addToHideOrShow($tr);
319
+ }
320
+ // one need hide all data if subgroup is found
321
+ showDataRowsOnExpending = false;
322
+ }
323
+ } else { // data
324
+ // we set currently no information about the level of data
325
+ // se we use showDataRowsOnExpending variable which will be
326
+ // used during expanding of data
327
+ if (collapsed || showDataRowsOnExpending) {
328
+ // grouping data need be displayed only
329
+ // if the last level group with data (no subgroups)
330
+ // is expanded
331
+ addToHideOrShow($tr);
332
+ }
333
+ }
334
+ }
335
+ //$(rowsToHideOrShow)[collapsed ? "hide" : "show"]();
336
+ $(rowsToHideOrShow).css("display", collapsed ? "none" : "");
337
+ // fix position of elements of frozen divs
338
+ if (p.frozenColumns) {
339
+ $($t).triggerHandler("jqGridResetFrozenHeights", [{
340
+ header: {
341
+ resizeDiv: false,
342
+ resizedRows: {
343
+ iRowStart: -1, // -1 means don't recalculate heights or rows
344
+ iRowEnd: -1
345
+ }
346
+ },
347
+ resizeFooter: false,
348
+ body: {
349
+ resizeDiv: true,
350
+ resizedRows: {
351
+ iRowStart: iRowStart,
352
+ iRowEnd: ($tr.length ? $tr[0].rowIndex - 1 : -1)
353
+ }
354
+ }
355
+ }]);
356
+ }
357
+
358
+ // recalculate the width because vertical scrollbar can
359
+ // appears/disappears after expanding/collapsing
360
+ $t.fixScrollOffsetAndhBoxPadding();
361
+ $($t).triggerHandler("jqGridGroupingClickGroup", [hid, collapsed]);
362
+ if ($.jgrid.isFunction(p.onClickGroup)) {
363
+ p.onClickGroup.call($t, hid, collapsed);
364
+ }
365
+ });
366
+ return false;
367
+ },
368
+ groupingRender: function (grdata, rn) {
369
+ // input parameter grdata is array of strings, which are either opening <tr> element
370
+ // or full HTML fragment (outer HTML) of <td> element, inclusive the closing tag </td>
371
+ // or it contains the closing </tr> tag. The array grdata contains HTML fragments
372
+ // of all rows from the current group.
373
+ // The exact contain of the grdata is the following:
374
+ // "<tr ...>" - the opening tag of the first row of the group
375
+ // "<td>...</td>" - the irst cell of the first row
376
+ // "<td>...</td>" - the second cell of the first row
377
+ // ...
378
+ // "<td>...</td>" - the last cell of the first row
379
+ // "</tr>" - closing tag of the first row of the group
380
+ // "<tr ...>" - the opening tag of the second row of the group
381
+ // ... - all <td> elements of the second row
382
+ // "</tr>" - closing tag of the second row of the group
383
+ // ...
384
+ // "<tr ...>" - the opening tag of the last row of the group
385
+ // ... - all <td> elements of the last row
386
+ // "</tr>" - closing tag of the last row of the group
387
+ // The input parameter rn corresponds to p.rowNum in the most cases.
388
+ var str = "", $t = this[0], p = $t.p, toEnd = 0, cp = [],
389
+ grp = p.groupingView, sumreverse = $.makeArray(grp.groupSummary),
390
+ groupLength = grp.groupField.length, groups = grp.groups, colModel = p.colModel,
391
+ cmLength = colModel.length, page = p.page,
392
+ eventNames = "jqGridShowHideCol.groupingRender",
393
+ getGridRowStyles = function (classes) {
394
+ return base.getGuiStyles.call($t, "gridRow", classes);
395
+ },
396
+ jqgroupClass = getGridRowStyles("jqgroup ui-row-" + p.direction),
397
+ jqfootClass = getGridRowStyles("jqfoot ui-row-" + p.direction);
398
+
399
+ function buildSummaryTd(iEndGroup, offset, g, foffset, iconHtml) {
400
+ var fdata = groups[iEndGroup], i, groupCount, strTd = "", tmpdata, colSpan, align, vv,
401
+ madeHidden, nMakeHidden = 0, iSummary, summary, cm, iCol, summaryType, summaryTpl,
402
+ isColumnForIconNotFound = true;
403
+
404
+ if (offset !== 0 && groups[iEndGroup].idx !== 0) {
405
+ for (i = iEndGroup; i >= 0; i--) {
406
+ if (groups[i].idx === groups[iEndGroup].idx - offset) {
407
+ fdata = groups[i];
408
+ break;
409
+ }
410
+ }
411
+ }
412
+ groupCount = fdata.cnt;
413
+
414
+ for (iCol = (iconHtml === undefined ? foffset : 0); iCol < cmLength; iCol++) {
415
+ tmpdata = "&#160;";
416
+ cm = colModel[iCol];
417
+ for (iSummary = 0; iSummary < fdata.summary.length; iSummary++) {
418
+ summary = fdata.summary[iSummary];
419
+ summaryType = Array.isArray(summary.st) ? summary.st[g.idx] : summary.st;
420
+ summaryTpl = Array.isArray(cm.summaryTpl) ? cm.summaryTpl[g.idx] : (cm.summaryTpl || "{0}");
421
+ if (summary.nm === cm.name) {
422
+ if (typeof summaryType === "string" && summaryType.toLowerCase() === "avg") {
423
+ if (summary.sd && summary.vd) {
424
+ summary.v = (summary.v / summary.vd);
425
+ } else if (summary.v && groupCount > 0) {
426
+ summary.v = (summary.v / groupCount);
427
+ }
428
+ }
429
+ try {
430
+ summary.groupCount = fdata.cnt;
431
+ summary.groupIndex = fdata.dataIndex;
432
+ summary.groupValue = fdata.value;
433
+ vv = $t.formatter("", summary.v, iCol, summary);
434
+ } catch (ef) {
435
+ vv = summary.v;
436
+ }
437
+ tmpdata = jgrid.format(summaryTpl, vv);
438
+ if (cm.summaryFormat) {
439
+ tmpdata = cm.summaryFormat.call($t, g, tmpdata, vv, cm, summary);
440
+ }
441
+ break;
442
+ }
443
+ }
444
+ colSpan = false;
445
+ align = false;
446
+ if (iconHtml !== undefined && isColumnForIconNotFound) {
447
+ if (!cm.hidden) {
448
+ // the icon need be placed in the first non-hidden column
449
+ tmpdata = iconHtml;
450
+ isColumnForIconNotFound = false;
451
+ if (foffset > 1) {
452
+ colSpan = true;
453
+ // if foffset > 1 then the next foffset-1 non-hidden columns
454
+ // must be displayed hidden.
455
+ nMakeHidden = foffset - 1;
456
+ }
457
+ // the icon in the column header must be left aligned
458
+ align = cm.align; // save the original align value
459
+ cm.align = p.direction === "rtl" ? "right" : "left";
460
+ grp.iconColumnName = cm.name;
461
+ }
462
+ }
463
+ madeHidden = false;
464
+ if (nMakeHidden > 0 && !cm.hidden && tmpdata === "&#160;") {
465
+ madeHidden = true;
466
+ if (align) {
467
+ cm.align = align; // restore the original align value
468
+ }
469
+ nMakeHidden--;
470
+ continue;
471
+ }
472
+ strTd += "<td role='gridcell' " + $t.formatCol(iCol, 1, "") +
473
+ (colSpan ? "colspan='" + foffset + "'" : "") + ">" + tmpdata + "</td>";
474
+ colSpan = false;
475
+ if (align) {
476
+ cm.align = align; // restore the original align value
477
+ }
478
+ if (madeHidden) {
479
+ cm.hidden = false;
480
+ nMakeHidden--;
481
+ }
482
+ }
483
+ return strTd;
484
+ }
485
+
486
+ // TODO: allow groupField be from additionalProperties
487
+ // and not only from colModel
488
+ $.each(colModel, function (i, n) {
489
+ var iGroup;
490
+ for (iGroup = 0; iGroup < groupLength; iGroup++) {
491
+ if (grp.groupField[iGroup] === n.name) {
492
+ cp[iGroup] = i;
493
+ break;
494
+ }
495
+ }
496
+ });
497
+
498
+ sumreverse.reverse();
499
+ $.each(groups, function (i, n) {
500
+ var gv, clid = p.id + "ghead_" + n.idx, hid = clid + "_" + i,
501
+ groupCollapse = $.jgrid.isFunction(grp.groupCollapse) ?
502
+ grp.groupCollapse.call($t, { group: n, rowid: hid }) :
503
+ grp.groupCollapse,
504
+ jj, kk, ik, colspan = 1, offset = 0, sgr, gg, end, grpTextStr,
505
+ leaf = groupLength - 1 === n.idx,
506
+ parentGroupCollapse = n.parentGroup != null ?
507
+ n.parentGroup.collapsed :
508
+ false,
509
+ icon = "<span style='cursor:pointer;margin-" +
510
+ (p.direction === "rtl" ? "right:" : "left:") + (n.idx * 12) +
511
+ "px;' class='" + grp.commonIconClass + " " +
512
+ (groupCollapse ? grp.plusicon : grp.minusicon) + " tree-wrap'></span>";
513
+ if (grp._locgr) {
514
+ if (!(n.startRow + n.cnt > (page - 1) * rn && n.startRow < page * rn)) {
515
+ return true;
516
+ }
517
+ }
518
+ if (parentGroupCollapse) {
519
+ groupCollapse = true;
520
+ }
521
+ if (groupCollapse !== undefined) {
522
+ n.collapsed = groupCollapse;
523
+ }
524
+ toEnd++;
525
+ try {
526
+ if (Array.isArray(grp.formatDisplayField) && $.jgrid.isFunction(grp.formatDisplayField[n.idx])) {
527
+ n.displayValue = grp.formatDisplayField[n.idx].call($t, n.displayValue, n.value, colModel[cp[n.idx]], n.idx, n, i);
528
+ gv = n.displayValue;
529
+ } else {
530
+ gv = $t.formatter(hid, n.displayValue, cp[n.idx], n.value, n);
531
+ }
532
+ } catch (egv) {
533
+ gv = n.displayValue;
534
+ }
535
+ str += "<tr id='" + hid + "' data-jqgrouplevel='" + n.idx + "' " +
536
+ (groupCollapse && parentGroupCollapse ? "style='display:none;' " : "") +
537
+ "role='row' class='" + jqgroupClass + " " + clid + "'>";
538
+ grpTextStr = $.jgrid.isFunction(grp.groupText[n.idx]) ?
539
+ grp.groupText[n.idx].call($t, gv, n.cnt, n.summary) :
540
+ jgrid.template(grp.groupText[n.idx], gv, n.cnt, n.summary);
541
+ if (typeof grpTextStr !== "string" && typeof grpTextStr !== "number") {
542
+ grpTextStr = gv;
543
+ }
544
+ if (grp.groupSummaryPos[n.idx] === "header") {
545
+ colspan = 1;
546
+ if (colModel[0].name === "cb" || colModel[1].name === "cb") {
547
+ colspan++;
548
+ }
549
+ if (colModel[0].name === "subgrid" || colModel[1].name === "subgrid") {
550
+ colspan++;
551
+ }
552
+ str += buildSummaryTd(i, 0, n, colspan, icon + "<span class='cell-wrapper'>" + grpTextStr + "</span>");
553
+ } else {
554
+ str += "<td role='gridcell' style='padding-left:" + (n.idx * 12) + "px;'" +
555
+ " colspan='" + cmLength + "'>" + icon + grpTextStr + "</td>";
556
+ }
557
+ str += "</tr>";
558
+ if (leaf) {
559
+ gg = groups[i + 1];
560
+ sgr = n.startRow;
561
+ end = gg !== undefined ? gg.startRow : groups[i].startRow + groups[i].cnt;
562
+ if (grp._locgr) {
563
+ offset = (page - 1) * rn;
564
+ if (offset > n.startRow) {
565
+ sgr = offset;
566
+ }
567
+ }
568
+ for (kk = sgr; kk < end; kk++) {
569
+ if (!grdata[kk - offset]) {
570
+ break;
571
+ }
572
+ str += grdata[kk - offset].join("");
573
+ }
574
+ if (grp.groupSummaryPos[n.idx] !== "header") {
575
+ if (gg !== undefined) {
576
+ for (jj = 0; jj < grp.groupField.length; jj++) {
577
+ if (gg.dataIndex === grp.groupField[jj]) {
578
+ break;
579
+ }
580
+ }
581
+ toEnd = grp.groupField.length - jj;
582
+ }
583
+ for (ik = 0; ik < toEnd; ik++) {
584
+ if (!sumreverse[ik]) {
585
+ continue;
586
+ }
587
+ str += "<tr data-jqfootlevel='" + (n.idx - ik) +
588
+ (groupCollapse && ((n.idx - ik) > 0 || !grp.showSummaryOnHide) ? "' style='display:none;'" : "'") +
589
+ " role='row' class='" + jqfootClass + "'>";
590
+ str += buildSummaryTd(i, ik, groups[n.idx - ik], 0);
591
+ str += "</tr>";
592
+ }
593
+ toEnd = jj;
594
+ }
595
+ }
596
+ });
597
+ this.off(eventNames)
598
+ .on(eventNames, function () { //e, show, cmName, iColShow) {
599
+ // TODO fix the code after resorting columns
600
+ var iCol = p.iColByName[grp.iconColumnName], iRow, row, iColNew, i; //$cellData;
601
+ if ($.inArray("header", grp.groupSummaryPos) >= 0) {
602
+ for (i = 0; i < colModel.length; i++) {
603
+ if (!colModel[i].hidden) {
604
+ iColNew = i;
605
+ break;
606
+ }
607
+ }
608
+ if (iColNew === undefined || iCol === iColNew) { return; }
609
+
610
+ for (iRow = 0; iRow < $t.rows.length; iRow++) {
611
+ row = $t.rows[iRow];
612
+ if ($(row).hasClass("jqgroup")) {
613
+ /*$cellData = $(row.cells[iCol]).children(".cell-wrapper").detach();
614
+ $.wrapInner(row.cells[iColNew], function () {//"<span class='cell-wrapper'></span>");
615
+ return "<span class='cell-wrapper'>" + this.nodeValue + "</span>";
616
+ });
617
+ row.cells[iColNew]
618
+ $cellData = $(row.cells[iCol]).children(".cell-wrapper").detach();
619
+ $(row.cells[iCol]).html($(row.cells[iCol]).children("").html());*/
620
+ $(row.cells[iColNew]).html(row.cells[iCol].innerHTML);
621
+ $(row.cells[iCol]).html("&nbsp;");
622
+ }
623
+ }
624
+ grp.iconColumnName = colModel[iColNew].name;
625
+ }
626
+ });
627
+ return str;
628
+ },
629
+ groupingGroupBy: function (name, options) {
630
+ return this.each(function () {
631
+ var $t = this, p = $t.p, grp = p.groupingView, i, cm;
632
+ if (typeof name === "string") {
633
+ name = [name];
634
+ }
635
+ p.grouping = true;
636
+ grp._locgr = false;
637
+ //Set default, in case visibilityOnNextGrouping is undefined
638
+ if (grp.visibiltyOnNextGrouping === undefined) {
639
+ grp.visibiltyOnNextGrouping = [];
640
+ }
641
+ // show previous hidden groups if they are hidden and weren't removed yet
642
+ for (i = 0; i < grp.groupField.length; i++) {
643
+ cm = p.colModel[p.iColByName[grp.groupField[i]]];
644
+ if (!grp.groupColumnShow[i] && grp.visibiltyOnNextGrouping[i] && cm != null && cm.hidden === true) {
645
+ base.showCol.call($($t), grp.groupField[i]);
646
+ }
647
+ }
648
+ // set visibility status of current group columns on next grouping
649
+ for (i = 0; i < name.length; i++) {
650
+ grp.visibiltyOnNextGrouping[i] = $(p.idSel + "_" + jgrid.jqID(name[i])).is(":visible");
651
+ }
652
+ p.groupingView = $.extend(p.groupingView, options || {});
653
+ grp.groupField = name;
654
+ $($t).trigger("reloadGrid");
655
+ });
656
+ },
657
+ groupingRemove: function (current) {
658
+ return this.each(function () {
659
+ var $t = this, p = $t.p, tbody = $t.tBodies[0], grp = p.groupingView, i;
660
+ if (current === undefined) {
661
+ current = true;
662
+ }
663
+ p.grouping = false;
664
+ if (current === true) {
665
+ // show previous hidden groups if they are hidden and weren't removed yet
666
+ for (i = 0; i < grp.groupField.length; i++) {
667
+ if (!grp.groupColumnShow[i] && grp.visibiltyOnNextGrouping[i]) {
668
+ base.showCol.call($($t), grp.groupField);
669
+ }
670
+ }
671
+ $("tr.jqgroup, tr.jqfoot", tbody).remove();
672
+ $("tr.jqgrow", tbody).filter(":hidden").show();
673
+ } else {
674
+ $($t).trigger("reloadGrid");
675
+ }
676
+ });
677
+ },
678
+ groupingCalculations: {
679
+ handler: function (fn, v, field, round, roundType, rc) {
680
+ var funcs = {
681
+ sum: function () {
682
+ return parseFloat(v || 0) + parseFloat((rc[field] || 0));
683
+ },
684
+
685
+ min: function () {
686
+ if (v === "") {
687
+ return parseFloat(rc[field] || 0);
688
+ }
689
+ return Math.min(parseFloat(v), parseFloat(rc[field] || 0));
690
+ },
691
+
692
+ max: function () {
693
+ if (v === "") {
694
+ return parseFloat(rc[field] || 0);
695
+ }
696
+ return Math.max(parseFloat(v), parseFloat(rc[field] || 0));
697
+ },
698
+
699
+ count: function () {
700
+ if (v === "") {
701
+ v = 0;
702
+ }
703
+ if (rc.hasOwnProperty(field)) {
704
+ return v + 1;
705
+ }
706
+ return 0;
707
+ },
708
+
709
+ avg: function () {
710
+ // the same as sum, but at end we divide it
711
+ // so use sum instead of duplicating the code (?)
712
+ return funcs.sum();
713
+ }
714
+ },
715
+ res,
716
+ mul;
717
+
718
+ if (!funcs[fn]) {
719
+ throw ("jqGrid Grouping No such method: " + fn);
720
+ }
721
+ res = funcs[fn]();
722
+
723
+ if (round != null) {
724
+ if (roundType === "fixed") {
725
+ res = res.toFixed(round);
726
+ } else {
727
+ mul = Math.pow(10, round);
728
+ res = Math.round(res * mul) / mul;
729
+ }
730
+ }
731
+
732
+ return res;
733
+ }
734
+ }
735
+ });
736
+ // end module grid.grouping
737
+ }));