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,784 @@
1
+ /**
2
+ * jqGrid extension for manipulating Grid Data
3
+ * Copyright (c) 2008-2014, Tony Tomov, tony@trirand.com, http://trirand.com/blog/
4
+ * Copyright (c) 2014-2019, Oleg Kiriljuk, oleg.kiriljuk@ok-soft-gmbh.com
5
+ * Copyright (c) 2023, rany2, ranygh@riseup.net
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
+
11
+ /*jslint browser: true, eqeq: true, nomen: true, vars: true, devel: true, unparam: true, plusplus: true, white: true, todo: true */
12
+ /*global jQuery, define, exports, module, require */
13
+ (function (factory) {
14
+ "use strict";
15
+ if (typeof define === "function" && define.amd) {
16
+ // AMD. Register as an anonymous module.
17
+ define([
18
+ "jquery",
19
+ "./grid.base",
20
+ "./jquery.fmatter",
21
+ "./grid.common"
22
+ ], factory);
23
+ } else if (typeof module === "object" && module.exports) {
24
+ // Node/CommonJS
25
+ module.exports = function (root, $) {
26
+ if (!root) {
27
+ root = window;
28
+ }
29
+ if ($ === undefined) {
30
+ // require("jquery") returns a factory that requires window to
31
+ // build a jQuery instance, we normalize how we use modules
32
+ // that require this pattern but the window provided is a noop
33
+ // if it's defined (how jquery works)
34
+ $ = typeof window !== "undefined" ?
35
+ require("jquery") :
36
+ require("jquery")(root);
37
+ }
38
+ require("./grid.base");
39
+ require("./jquery.fmatter");
40
+ require("./grid.common");
41
+ factory($);
42
+ return $;
43
+ };
44
+ } else {
45
+ // Browser globals
46
+ factory(jQuery);
47
+ }
48
+ }(function ($) {
49
+ "use strict";
50
+ var jgrid = $.jgrid, fullBoolFeedback = jgrid.fullBoolFeedback, hasOneFromClasses = jgrid.hasOneFromClasses,
51
+ base = $.fn.jqGrid,
52
+ getGuiStateStyles = function (path) {
53
+ return base.getGuiStyles.call(this, "states." + path);
54
+ };
55
+ // begin module grid.inlinedit
56
+ var editFeedback = function (o) {
57
+ var args = $.makeArray(arguments).slice(1);
58
+ args.unshift("");
59
+ args.unshift("Inline");
60
+ args.unshift(o);
61
+ return jgrid.feedback.apply(this, args);
62
+ };
63
+ jgrid.inlineEdit = jgrid.inlineEdit || {};
64
+ jgrid.extend({
65
+ //Editing
66
+ editRow: function (rowid, keys, oneditfunc, successfunc, url, extraparam, aftersavefunc, errorfunc, afterrestorefunc, beforeEditRow) {
67
+ // Compatible mode old versions
68
+ var oMuligrid = {}, args = $.makeArray(arguments).slice(1);
69
+
70
+ if ($.type(args[0]) === "object") {
71
+ oMuligrid = args[0];
72
+ } else {
73
+ if (keys !== undefined) { oMuligrid.keys = keys; }
74
+ if ($.jgrid.isFunction(oneditfunc)) { oMuligrid.oneditfunc = oneditfunc; }
75
+ if ($.jgrid.isFunction(successfunc)) { oMuligrid.successfunc = successfunc; }
76
+ if (url !== undefined) { oMuligrid.url = url; }
77
+ if (extraparam != null) { oMuligrid.extraparam = extraparam; }
78
+ if ($.jgrid.isFunction(aftersavefunc)) { oMuligrid.aftersavefunc = aftersavefunc; }
79
+ if ($.jgrid.isFunction(errorfunc)) { oMuligrid.errorfunc = errorfunc; }
80
+ if ($.jgrid.isFunction(afterrestorefunc)) { oMuligrid.afterrestorefunc = afterrestorefunc; }
81
+ if ($.jgrid.isFunction(beforeEditRow)) { oMuligrid.beforeEditRow = beforeEditRow; }
82
+ // last two not as param, but as object (sorry)
83
+ //if (restoreAfterError !== undefined) { oMuligrid.restoreAfterError = restoreAfterError; }
84
+ //if (mtype !== undefined) { oMuligrid.mtype = mtype || "POST"; }
85
+ }
86
+
87
+ // End compatible
88
+ return this.each(function () {
89
+ var $t = this, $self = $($t), p = $t.p, cnt = 0, focus = null, svr = {}, editableValues = {}, colModel = p.colModel, opers = p.prmNames;
90
+ if (!$t.grid) { return; }
91
+ var o = $.extend(true, {
92
+ keys: false,
93
+ oneditfunc: null,
94
+ successfunc: null,
95
+ url: null,
96
+ extraparam: {},
97
+ aftersavefunc: null,
98
+ errorfunc: null,
99
+ afterrestorefunc: null,
100
+ restoreAfterError: true,
101
+ beforeEditRow: null,
102
+ //mtype: "POST",
103
+ focusField: true
104
+ }, jgrid.inlineEdit, p.inlineEditing || {}, oMuligrid),
105
+ ind = $self.jqGrid("getInd", rowid, true),
106
+ focusField = o.focusField,
107
+ td = typeof focusField === "object" && focusField != null ?
108
+ $(focusField.target || focusField).closest("tr.jqgrow>td")[0] : null;
109
+
110
+ if (ind === false) { return; }
111
+
112
+ if (o.extraparam[opers.oper] !== opers.addoper) {
113
+ if (!editFeedback.call($t, o, "beforeEditRow", o, rowid)) { return; }
114
+ }
115
+
116
+ if (($(ind).attr("editable") || "0") === "0" && !$(ind).hasClass("not-editable-row")) {
117
+ var editingInfo = jgrid.detectRowEditing.call($t, rowid);
118
+ if (editingInfo != null && editingInfo.mode === "cellEditing") {
119
+ var savedRowInfo = editingInfo.savedRow, tr = $t.rows[savedRowInfo.id],
120
+ highlightClass = getGuiStateStyles.call($t, "select");
121
+ $self.jqGrid("restoreCell", savedRowInfo.id, savedRowInfo.ic);
122
+ // remove highlighting of the cell
123
+ $(tr.cells[savedRowInfo.ic]).removeClass("edit-cell " + highlightClass);
124
+ $(tr).addClass(highlightClass).attr({ "aria-selected": "true", "tabindex": "0" });
125
+ }
126
+ jgrid.enumEditableCells.call($t, ind, $(ind).hasClass("jqgrid-new-row") ? "add" : "edit", function (options) {
127
+ var cm = options.cm, $dataFiled = $(options.dataElement), dataWidth = options.dataWidth, tmp, opt, elc,
128
+ nm = cm.name, edittype = cm.edittype, iCol = options.iCol, editoptions = cm.editoptions || {};
129
+ editableValues[nm] = options.editable;
130
+ if (options.editable === "hidden") { return; }
131
+ try {
132
+ tmp = $.unformat.call(this, options.td, { rowId: rowid, colModel: cm }, iCol);
133
+ } catch (_) {
134
+ tmp = edittype === "textarea" ? $dataFiled.text() : $dataFiled.html();
135
+ }
136
+ svr[nm] = tmp; // include only editable fields in svr object
137
+ $dataFiled.html("");
138
+ opt = $.extend({}, editoptions,
139
+ { id: rowid + "_" + nm, name: nm, rowId: rowid, mode: options.mode, cm: cm, iCol: iCol });
140
+ if (tmp === " " || tmp === " " || (tmp.length === 1 && tmp.charCodeAt(0) === 160)) { tmp = ""; }
141
+ elc = jgrid.createEl.call($t, edittype, opt, tmp, true, $.extend({}, jgrid.ajaxOptions, p.ajaxSelectOptions || {}));
142
+ $(elc).addClass("editable");
143
+ $dataFiled.append(elc);
144
+ if (dataWidth) {
145
+ // change the width from auto or the value from editoptions
146
+ // in case of editing ExpandColumn of TreeGrid
147
+ $(elc).width(options.dataWidth);
148
+ }
149
+ jgrid.bindEv.call($t, elc, opt);
150
+ //Again IE
151
+ if (edittype === "select" && editoptions.multiple === true && editoptions.dataUrl === undefined && jgrid.msie) {
152
+ $(elc).width($(elc).width());
153
+ }
154
+ if (focus === null) { focus = iCol; }
155
+ cnt++;
156
+ });
157
+ if (cnt > 0) {
158
+ svr.id = rowid;
159
+ p.savedRow.push(svr);
160
+ p.editingInfo[rowid] = {
161
+ mode: "inlineEditing",
162
+ savedRow: svr,
163
+ editable: editableValues
164
+ };
165
+ $(ind).attr("editable", "1");
166
+ if (focusField) {
167
+ if (typeof focusField === "number" && parseInt(focusField, 10) <= colModel.length) {
168
+ focus = focusField;
169
+ } else if (typeof focusField === "string") {
170
+ focus = p.iColByName[focusField];
171
+ } else if (td != null) {
172
+ focus = td.cellIndex;
173
+ }
174
+ setTimeout(function () {
175
+ // we want to use ":focusable"
176
+ var nFrozenColumns = $self.jqGrid("getNumberOfFrozenColumns"),
177
+ getTdByColIndex = function (iCol) {
178
+ return p.frozenColumns && nFrozenColumns > 0 && focus < nFrozenColumns ?
179
+ $t.grid.fbRows[ind.rowIndex].cells[iCol] :
180
+ ind.cells[iCol];
181
+ },
182
+ getFocusable = function (elem) {
183
+ return $(elem).find("input,textarea,select,button,object,*[tabindex]")
184
+ .filter(":input:visible:not(:disabled)");
185
+ },
186
+ getFirstFocusable = function () {
187
+ return getFocusable(p.frozenColumns && nFrozenColumns > 0 ? $t.grid.fbRows[ind.rowIndex] : ind)
188
+ .first();
189
+ },
190
+ $fe = getFocusable(getTdByColIndex(focus));
191
+
192
+ if ($fe.length > 0) {
193
+ $fe.first().focus();
194
+ } else if (typeof o.defaultFocusField === "number" || typeof o.defaultFocusField === "string") {
195
+ $fe = getFocusable(getTdByColIndex(typeof o.defaultFocusField === "number" ? o.defaultFocusField : p.iColByName[o.defaultFocusField]));
196
+ if ($fe.length === 0) {
197
+ $fe = getFirstFocusable();
198
+ }
199
+ $fe.first().focus();
200
+ } else {
201
+ getFirstFocusable().focus();
202
+ }
203
+ }, 0);
204
+ }
205
+ if (o.keys === true) {
206
+ var $ind = $(ind);
207
+ if (p.frozenColumns) {
208
+ $ind = $ind.add($t.grid.fbRows[ind.rowIndex]);
209
+ }
210
+ $ind.on("keydown", function (e) {
211
+ if (e.keyCode === 27) {
212
+ $self.jqGrid("restoreRow", rowid, o.afterrestorefunc);
213
+ return false;
214
+ }
215
+ if (e.keyCode === 13) {
216
+ var ta = e.target;
217
+ if (ta.tagName === "TEXTAREA") { return true; }
218
+ $self.jqGrid("saveRow", rowid, o);
219
+ return false;
220
+ }
221
+ });
222
+ }
223
+ fullBoolFeedback.call($t, o.oneditfunc, "jqGridInlineEditRow", rowid, o);
224
+ }
225
+ }
226
+ });
227
+ },
228
+ saveRow: function (rowid, successfunc, url, extraparam, aftersavefunc, errorfunc, afterrestorefunc, beforeSaveRow) {
229
+ // Compatible mode old versions
230
+ var args = $.makeArray(arguments).slice(1), o = {}, $t = this[0], $self = $($t),
231
+ p = $t != null ? $t.p : null, editOrAdd, infoDialog = jgrid.info_dialog,
232
+ isFunction = $.jgrid.isFunction,
233
+ fatalErrorFunction = jgrid.defaults != null && isFunction(jgrid.defaults.fatalError) ? jgrid.defaults.fatalError : alert;
234
+ if (!$t.grid || p == null) { return; }
235
+
236
+ if ($.type(args[0]) === "object") {
237
+ o = args[0];
238
+ } else {
239
+ if (isFunction(successfunc)) { o.successfunc = successfunc; }
240
+ if (url !== undefined) { o.url = url; }
241
+ if (extraparam !== undefined) { o.extraparam = extraparam; }
242
+ if (isFunction(aftersavefunc)) { o.aftersavefunc = aftersavefunc; }
243
+ if (isFunction(errorfunc)) { o.errorfunc = errorfunc; }
244
+ if (isFunction(afterrestorefunc)) { o.afterrestorefunc = afterrestorefunc; }
245
+ if (isFunction(beforeSaveRow)) { o.beforeSaveRow = beforeSaveRow; }
246
+ }
247
+ var getRes = function (path) { return $self.jqGrid("getGridRes", path); };
248
+ o = $.extend(true, {
249
+ successfunc: null,
250
+ url: null,
251
+ extraparam: {},
252
+ aftersavefunc: null,
253
+ errorfunc: null,
254
+ afterrestorefunc: null,
255
+ restoreAfterError: true,
256
+ beforeSaveRow: null,
257
+ ajaxSaveOptions: {},
258
+ serializeSaveData: null,
259
+ mtype: "POST",
260
+ saveui: "enable",
261
+ savetext: getRes("defaults.savetext") || "Saving..."
262
+ }, jgrid.inlineEdit, p.inlineEditing || {}, o);
263
+ // End compatible
264
+ // TODO: add return this.each(function(){....}
265
+ var tmp = {}, tmp2 = {}, postData = {}, editable, k, fr, resp, cv, editingInfo, ind = $self.jqGrid("getInd", rowid, true), $tr = $(ind),
266
+ opers = p.prmNames, errcap = getRes("errors.errcap"), bClose = getRes("edit.bClose"), isRemoteSave, isError,
267
+ displayErrorMessage = function (text, relativeElem) {
268
+ try {
269
+ var relativeRect = jgrid.getRelativeRect.call($t, relativeElem);
270
+
271
+ infoDialog.call($t, errcap, text, bClose, {
272
+ top: relativeRect.top,
273
+ left: relativeRect.left + $($t).closest(".ui-jqgrid").offset().left
274
+ });
275
+ } catch (e) {
276
+ fatalErrorFunction(text);
277
+ }
278
+ };
279
+
280
+ if (ind === false) { return; }
281
+
282
+ editOrAdd = o.extraparam[opers.oper] === opers.addoper ? "add" : "edit";
283
+
284
+ if (!editFeedback.call($t, o, "beforeSaveRow", o, rowid, editOrAdd)) { return; }
285
+
286
+ editable = $tr.attr("editable");
287
+ o.url = o.url || p.editurl;
288
+ isRemoteSave = o.url !== "clientArray";
289
+ if (editable === "1") {
290
+ editingInfo = $.jgrid.detectRowEditing.call($t, rowid);
291
+ jgrid.enumEditableCells.call($t, ind, $tr.hasClass("jqgrid-new-row") ? "add" : "edit", function (options) {
292
+ var cm = options.cm, formatter = cm.formatter, editoptions = cm.editoptions || {},
293
+ formatoptions = cm.formatoptions || {}, valueText = {},
294
+ v = jgrid.getEditedValue.call($t, $(options.dataElement), cm, valueText, options.editable);
295
+
296
+ if (cm.edittype === "select" && cm.formatter !== "select") {
297
+ tmp2[cm.name] = valueText.text;
298
+ }
299
+ cv = jgrid.checkValues.call($t, v, options.iCol, undefined, undefined,
300
+ $.extend(options, {
301
+ oldValue: editingInfo != null ? editingInfo.savedRow[cm.name] : null,
302
+ newValue: v,
303
+ oldRowData: editingInfo != null ? editingInfo.savedRow : null }));
304
+ if (cv != null && cv[0] === false) {
305
+ isError = true;
306
+ displayErrorMessage(cv[1], options.td);
307
+ return false;
308
+ }
309
+ if (formatter === "date" && formatoptions.sendFormatted !== true) {
310
+ // TODO: call all other predefined formatters!!! Not only formatter: "date" have the problem.
311
+ // Floating point separator for example
312
+ v = $.unformat.date.call($t, v, cm);
313
+ }
314
+ if (isRemoteSave && editoptions.NullIfEmpty === true) {
315
+ if (v === "") {
316
+ v = "null";
317
+ }
318
+ }
319
+ tmp[cm.name] = v;
320
+ });
321
+
322
+ if (isError) {
323
+ return;
324
+ }
325
+ var idname;
326
+ opers = p.prmNames;
327
+ if (p.keyName === false) {
328
+ idname = opers.id;
329
+ } else {
330
+ idname = p.keyName;
331
+ }
332
+ if (tmp) {
333
+ tmp[opers.oper] = opers.editoper;
334
+ if (tmp[idname] === undefined || tmp[idname] === "") {
335
+ tmp[idname] = jgrid.stripPref(p.idPrefix, rowid);
336
+ }
337
+ tmp = $.extend({}, tmp, p.inlineData || {}, o.extraparam);
338
+ }
339
+ var validationOptions = {
340
+ options: o,
341
+ rowid: rowid,
342
+ tr: ind,
343
+ iRow: ind.rowIndex,
344
+ savedRow: editingInfo.savedRow,
345
+ newData: tmp,
346
+ mode: editOrAdd
347
+ };
348
+ if (!editFeedback.call($t, o, "saveRowValidation", validationOptions)) {
349
+ if (validationOptions.errorText) {
350
+ displayErrorMessage(validationOptions.errorText, ind);
351
+ }
352
+ return;
353
+ }
354
+ if (!isRemoteSave) {
355
+ tmp = $.extend({}, tmp, tmp2);
356
+ resp = $self.jqGrid("setRowData", rowid, tmp);
357
+ $tr.attr("editable", "0");
358
+ for (k = 0; k < p.savedRow.length; k++) {
359
+ if (String(p.savedRow[k].id) === String(rowid)) { fr = k; break; }
360
+ }
361
+ if (fr >= 0) {
362
+ p.savedRow.splice(fr, 1);
363
+ delete p.editingInfo[rowid];
364
+ }
365
+ fullBoolFeedback.call($t, o.aftersavefunc, "jqGridInlineAfterSaveRow", rowid, resp, tmp, o);
366
+ $tr.removeClass("jqgrid-new-row").off("keydown");
367
+ if (ind.id !== p.idPrefix + tmp[idname]) {
368
+ $self.jqGrid("changeRowid", ind.id, p.idPrefix + tmp[idname]);
369
+ }
370
+ } else {
371
+ $self.jqGrid("progressBar", { method: "show", loadtype: o.saveui, htmlcontent: o.savetext });
372
+ postData = $.extend({}, tmp, postData);
373
+ postData[idname] = jgrid.stripPref(p.idPrefix, postData[idname]);
374
+ if (p.autoEncodeOnEdit) {
375
+ $.each(postData, function (n, v) {
376
+ if (!isFunction(v)) {
377
+ postData[n] = jgrid.oldEncodePostedData(v);
378
+ }
379
+ });
380
+ }
381
+ if (ind.id !== p.idPrefix + postData[idname] && opers.idold != null &&
382
+ !postData.hasOwnProperty(opers.idold)) {
383
+ postData[opers.idold] = jgrid.stripPref(p.idPrefix, ind.id);
384
+ }
385
+
386
+ $.ajax($.extend({
387
+ url: isFunction(o.url) ? o.url.call($t, postData[idname], editOrAdd, postData, o) : o.url,
388
+ data: jgrid.serializeFeedback.call($t,
389
+ isFunction(o.serializeSaveData) ? o.serializeSaveData : p.serializeRowData,
390
+ "jqGridInlineSerializeSaveData",
391
+ postData),
392
+ type: isFunction(o.mtype) ? o.mtype.call($t, editOrAdd, o, postData[idname], postData) : o.mtype,
393
+ complete: function (jqXHR, textStatus) {
394
+ $self.jqGrid("progressBar", { method: "hide", loadtype: o.saveui });
395
+ // textStatus can be "abort", "timeout", "error", "parsererror" or some text from text part of HTTP error occurs
396
+ // see the answer http://stackoverflow.com/a/3617710/315935 about xhr.readyState === 4 && xhr.status === 0
397
+ if ((jqXHR.status < 300 || jqXHR.status === 304) && (jqXHR.status !== 0 || jqXHR.readyState !== 4)) {
398
+ var ret, sucret, j;
399
+ sucret = $self.triggerHandler("jqGridInlineSuccessSaveRow", [jqXHR, rowid, o, editOrAdd, postData]);
400
+ if (sucret == null || sucret === true) { sucret = [true, tmp]; }
401
+ if (sucret[0] && isFunction(o.successfunc)) { sucret = o.successfunc.call($t, jqXHR, rowid, o, editOrAdd, postData); }
402
+ if (Array.isArray(sucret)) {
403
+ // expect array - status, data, rowid
404
+ ret = sucret[0];
405
+ tmp = sucret[1] || tmp;
406
+ } else {
407
+ ret = sucret;
408
+ }
409
+ if (ret === true) {
410
+ if (p.autoEncodeOnEdit) {
411
+ $.each(tmp, function (n, v) {
412
+ tmp[n] = jgrid.oldDecodePostedData(v);
413
+ });
414
+ }
415
+ tmp = $.extend({}, tmp, tmp2);
416
+ $self.jqGrid("setRowData", rowid, tmp);
417
+ $tr.attr("editable", "0");
418
+ for (j = 0; j < p.savedRow.length; j++) {
419
+ if (String(p.savedRow[j].id) === String(rowid)) { fr = j; break; }
420
+ }
421
+ if (fr >= 0) {
422
+ p.savedRow.splice(fr, 1);
423
+ delete p.editingInfo[rowid];
424
+ }
425
+ fullBoolFeedback.call($t, o.aftersavefunc, "jqGridInlineAfterSaveRow", rowid, jqXHR, tmp, o);
426
+ if (sucret[2] != null) {
427
+ $self.jqGrid("changeRowid", rowid, p.idPrefix + sucret[2]);
428
+ } else if (ind.id !== p.idPrefix + tmp[idname]) {
429
+ $self.jqGrid("changeRowid", ind.id, p.idPrefix + tmp[idname]);
430
+ }
431
+ $tr.removeClass("jqgrid-new-row").off("keydown");
432
+ } else {
433
+ fullBoolFeedback.call($t, o.errorfunc, "jqGridInlineErrorSaveRow", rowid, jqXHR, textStatus, null, o);
434
+ if (o.restoreAfterError === true) {
435
+ $self.jqGrid("restoreRow", rowid, o.afterrestorefunc);
436
+ }
437
+ }
438
+ }
439
+ },
440
+ error: function (res, stat, err) {
441
+ $self.triggerHandler("jqGridInlineErrorSaveRow", [rowid, res, stat, err, o]);
442
+ if (isFunction(o.errorfunc)) {
443
+ o.errorfunc.call($t, rowid, res, stat, err);
444
+ } else {
445
+ var rT = res.responseText || res.statusText;
446
+ try {
447
+ infoDialog.call($t, errcap, '<div class="' + getGuiStateStyles.call($t, "error") + '">' + rT + "</div>", bClose, { buttonalign: "right" });
448
+ } catch (e1) {
449
+ fatalErrorFunction(rT);
450
+ }
451
+ }
452
+ if (o.restoreAfterError === true) {
453
+ $self.jqGrid("restoreRow", rowid, o.afterrestorefunc);
454
+ }
455
+ }
456
+ }, jgrid.ajaxOptions, p.ajaxRowOptions, o.ajaxSaveOptions || {}));
457
+ }
458
+ }
459
+ return;
460
+ },
461
+ restoreRow: function (rowid, afterrestorefunc) {
462
+ // Compatible mode old versions
463
+ var args = $.makeArray(arguments).slice(1), oMuligrid = {};
464
+
465
+ if ($.type(args[0]) === "object") {
466
+ oMuligrid = args[0];
467
+ } else {
468
+ if ($.jgrid.isFunction(afterrestorefunc)) { oMuligrid.afterrestorefunc = afterrestorefunc; }
469
+ }
470
+
471
+ // End compatible
472
+
473
+ return this.each(function () {
474
+ var $t = this, $self = $($t), p = $t.p, fr = -1, ares = {}, k;
475
+ if (!$t.grid) { return; }
476
+
477
+ var o = $.extend(true, {}, jgrid.inlineEdit, p.inlineEditing || {}, oMuligrid);
478
+ var ind = $self.jqGrid("getInd", rowid, true);
479
+ if (ind === false) { return; }
480
+
481
+ if (!editFeedback.call($t, o, "beforeCancelRow", o, rowid)) { return; }
482
+
483
+ for (k = 0; k < p.savedRow.length; k++) {
484
+ if (String(p.savedRow[k].id) === String(rowid)) {
485
+ fr = k;
486
+ break;
487
+ }
488
+ }
489
+ if (fr >= 0) {
490
+ if ($.jgrid.isFunction($.fn.datepicker)) {
491
+ try {
492
+ $("input.hasDatepicker", "#" + jgrid.jqID(ind.id)).datepicker("hide");
493
+ } catch (ignore) { }
494
+ }
495
+
496
+ $.each(p.colModel, function () {
497
+ var nm = this.name;
498
+ if (p.savedRow[fr].hasOwnProperty(nm)) {
499
+ ares[nm] = p.savedRow[fr][nm];
500
+ if (this.formatter && this.formatter === "date" && (this.formatoptions == null || this.formatoptions.sendFormatted !== true)) {
501
+ // TODO: call all other predefined formatters!!! Not only formatter: "date" have the problem.
502
+ // Floating point separator for example
503
+ ares[nm] = $.unformat.date.call($t, ares[nm], this);
504
+ }
505
+ }
506
+ });
507
+ $self.jqGrid("setRowData", rowid, ares);
508
+ $(ind).attr("editable", "0").off("keydown");
509
+ p.savedRow.splice(fr, 1);
510
+ delete p.editingInfo[rowid];
511
+ if ($("#" + jgrid.jqID(rowid), $t).hasClass("jqgrid-new-row")) {
512
+ setTimeout(function () {
513
+ $self.jqGrid("delRowData", rowid);
514
+ $self.jqGrid("showAddEditButtons", false);
515
+ }, 0);
516
+ }
517
+ }
518
+ fullBoolFeedback.call($t, o.afterrestorefunc, "jqGridInlineAfterRestoreRow", rowid);
519
+ });
520
+ },
521
+ addRow: function (oMuligrid) {
522
+ return this.each(function () {
523
+ if (!this.grid) { return; }
524
+
525
+ var $t = this, $self = $($t), p = $t.p,
526
+ o = $.extend(true, {
527
+ rowID: null,
528
+ initdata: {},
529
+ position: "first",
530
+ useDefValues: true,
531
+ useFormatter: false,
532
+ beforeAddRow: null,
533
+ //srcRowid: undefined,
534
+ addRowParams: { extraparam: {} }
535
+ }, jgrid.inlineEdit, p.inlineEditing || {}, oMuligrid || {});
536
+ if (!editFeedback.call($t, o, "beforeAddRow", o.addRowParams)) { return; }
537
+
538
+ o.rowID = $.jgrid.isFunction(o.rowID) ? o.rowID.call($t, o) : ((o.rowID != null) ? o.rowID : jgrid.randId());
539
+ if (o.useDefValues === true) {
540
+ $(p.colModel).each(function () {
541
+ if (this.editoptions && this.editoptions.defaultValue) {
542
+ var opt = this.editoptions.defaultValue;
543
+ o.initdata[this.name] = $.jgrid.isFunction(opt) ? opt.call($t, o) : opt;
544
+ }
545
+ });
546
+ }
547
+ o.rowID = p.idPrefix + o.rowID;
548
+ $self.jqGrid("addRowData", o.rowID, o.initdata, o.position, o.srcRowid);
549
+ $("#" + jgrid.jqID(o.rowID), $t).addClass("jqgrid-new-row");
550
+ if (o.useFormatter) {
551
+ $("#" + jgrid.jqID(o.rowID) + " .ui-inline-edit", $t).click();
552
+ } else {
553
+ var opers = p.prmNames, oper = opers.oper;
554
+ o.addRowParams.extraparam[oper] = opers.addoper;
555
+ $self.jqGrid("editRow", o.rowID, o.addRowParams);
556
+ $self.jqGrid("setSelection", o.rowID);
557
+ }
558
+ });
559
+ },
560
+ inlineNav: function (elem, oMuligrid) {
561
+ if (typeof elem === "object") {
562
+ // the option pager are skipped
563
+ oMuligrid = elem;
564
+ elem = undefined;
565
+ }
566
+ return this.each(function () {
567
+ var $t = this, $self = $($t), p = $t.p;
568
+ if (!this.grid || p == null) { return; }
569
+ var $elem, gID = elem === p.toppager ? p.idSel + "_top" : p.idSel,
570
+ gid = elem === p.toppager ? p.id + "_top" : p.id, disabledClass = getGuiStateStyles.call($t, "disabled"),
571
+ o = $.extend(true,
572
+ {
573
+ edit: true,
574
+ editicon: "ui-icon-pencil",
575
+ add: true,
576
+ addicon: "ui-icon-plus",
577
+ save: true,
578
+ saveicon: "ui-icon-disk",
579
+ cancel: true,
580
+ cancelicon: "ui-icon-cancel",
581
+ commonIconClass: "ui-icon",
582
+ iconsOverText: false,
583
+ //alertToTop: false, use undefined to be able to use defaults from $.jgrid.jqModal or later from p.jqModal
584
+ addParams: { addRowParams: { extraparam: {} } },
585
+ editParams: {},
586
+ restoreAfterSelect: true
587
+ },
588
+ //TODO make getRes(locales[p.locale], "nav"), jgrid.nav || {}, p.navOptions || {}
589
+ // as the result of working getRes("nav")
590
+ //getRes(locales[p.locale], "nav"),
591
+ $self.jqGrid("getGridRes", "nav"),
592
+ jgrid.nav || {},
593
+ p.navOptions || {},
594
+ jgrid.inlineNav || {},
595
+ p.inlineNavOptions || {},
596
+ oMuligrid || {}
597
+ ),
598
+ viewModalAlert = function () {
599
+ $t.modalAlert();
600
+ };
601
+
602
+ if (elem === undefined) {
603
+ if (p.pager) {
604
+ $self.jqGrid("inlineNav", p.pager, o);
605
+ if (p.toppager) {
606
+ elem = p.toppager;
607
+ gID = p.idSel + "_top";
608
+ gid = p.id + "_top";
609
+ } else {
610
+ return;
611
+ }
612
+ } else if (p.toppager) {
613
+ elem = p.toppager;
614
+ gID = p.idSel + "_top";
615
+ gid = p.id + "_top";
616
+ }
617
+ }
618
+ if (elem === undefined) {
619
+ return; // error
620
+ }
621
+ $elem = $(elem);
622
+ if ($elem.length <= 0) {
623
+ return; // error
624
+ }
625
+ if ($elem.find(".navtable").length <= 0) {
626
+ // create navigator bar if it is not yet exist
627
+ $self.jqGrid("navGrid", elem, { add: false, edit: false, del: false, search: false, refresh: false, view: false });
628
+ }
629
+
630
+ p._inlinenav = true;
631
+ // detect the formatactions column
632
+ if (o.addParams.useFormatter === true) {
633
+ var cm = p.colModel, i, defaults, ap;
634
+ for (i = 0; i < cm.length; i++) {
635
+ if (cm[i].formatter && cm[i].formatter === "actions") {
636
+ if (cm[i].formatoptions) {
637
+ defaults = {
638
+ keys: false,
639
+ onEdit: null,
640
+ onSuccess: null,
641
+ afterSave: null,
642
+ onError: null,
643
+ afterRestore: null,
644
+ extraparam: {},
645
+ url: null
646
+ };
647
+ ap = $.extend(defaults, cm[i].formatoptions);
648
+ o.addParams.addRowParams = {
649
+ "keys": ap.keys,
650
+ "oneditfunc": ap.onEdit,
651
+ "successfunc": ap.onSuccess,
652
+ "url": ap.url,
653
+ "extraparam": ap.extraparam,
654
+ "aftersavefunc": ap.afterSave,
655
+ "errorfunc": ap.onError,
656
+ "afterrestorefunc": ap.afterRestore
657
+ };
658
+ }
659
+ break;
660
+ }
661
+ }
662
+ }
663
+ if (o.add) {
664
+ $self.jqGrid("navButtonAdd", elem, {
665
+ caption: o.addtext,
666
+ title: o.addtitle,
667
+ commonIconClass: o.commonIconClass,
668
+ buttonicon: o.addicon,
669
+ iconsOverText: o.iconsOverText,
670
+ id: gid + "_iladd",
671
+ onClickButton: function () {
672
+ if (!hasOneFromClasses(this, disabledClass)) {
673
+ $self.jqGrid("addRow", o.addParams);
674
+ }
675
+ }
676
+ });
677
+ }
678
+ if (o.edit) {
679
+ $self.jqGrid("navButtonAdd", elem, {
680
+ caption: o.edittext,
681
+ title: o.edittitle,
682
+ commonIconClass: o.commonIconClass,
683
+ buttonicon: o.editicon,
684
+ iconsOverText: o.iconsOverText,
685
+ id: gid + "_iledit",
686
+ onClickButton: function () {
687
+ if (!hasOneFromClasses(this, disabledClass)) {
688
+ var sr = p.selrow;
689
+ if (sr) {
690
+ $self.jqGrid("editRow", sr, o.editParams);
691
+ } else {
692
+ viewModalAlert();
693
+ }
694
+ }
695
+ }
696
+ });
697
+ }
698
+ if (o.save) {
699
+ $self.jqGrid("navButtonAdd", elem, {
700
+ caption: o.savetext,
701
+ title: o.savetitle,
702
+ commonIconClass: o.commonIconClass,
703
+ buttonicon: o.saveicon,
704
+ iconsOverText: o.iconsOverText,
705
+ id: gid + "_ilsave",
706
+ onClickButton: function () {
707
+ if (!hasOneFromClasses(this, disabledClass) && p.savedRow.length > 0) {
708
+ var sr = p.savedRow[0].id;
709
+ if (sr) {
710
+ var opers = p.prmNames, oper = opers.oper, tmpParams = o.editParams;
711
+ if ($("#" + jgrid.jqID(sr), $t).hasClass("jqgrid-new-row")) {
712
+ o.addParams.addRowParams.extraparam[oper] = opers.addoper;
713
+ tmpParams = o.addParams.addRowParams;
714
+ } else {
715
+ if (!o.editParams.extraparam) {
716
+ o.editParams.extraparam = {};
717
+ }
718
+ o.editParams.extraparam[oper] = opers.editoper;
719
+ }
720
+ $self.jqGrid("saveRow", sr, tmpParams);
721
+ } else {
722
+ viewModalAlert();
723
+ }
724
+ }
725
+ }
726
+ });
727
+ $(gID + "_ilsave").addClass(disabledClass);
728
+ }
729
+ if (o.cancel) {
730
+ $self.jqGrid("navButtonAdd", elem, {
731
+ caption: o.canceltext,
732
+ title: o.canceltitle,
733
+ commonIconClass: o.commonIconClass,
734
+ buttonicon: o.cancelicon,
735
+ iconsOverText: o.iconsOverText,
736
+ id: gid + "_ilcancel",
737
+ onClickButton: function () {
738
+ if (!hasOneFromClasses(this, disabledClass) && p.savedRow.length > 0) {
739
+ var sr = p.savedRow[0].id, cancelPrm = o.editParams;
740
+ if (sr) {
741
+ if ($("#" + jgrid.jqID(sr), $t).hasClass("jqgrid-new-row")) {
742
+ cancelPrm = o.addParams.addRowParams;
743
+ }
744
+ $self.jqGrid("restoreRow", sr, cancelPrm);
745
+ } else {
746
+ viewModalAlert();
747
+ }
748
+ }
749
+ }
750
+ });
751
+ $(gID + "_ilcancel").addClass(disabledClass);
752
+ }
753
+ if (o.restoreAfterSelect === true) {
754
+ $self.on("jqGridSelectRow", function (e, rowid) {
755
+ if (p.savedRow.length > 0 && p._inlinenav === true) {
756
+ var editingRowId = p.savedRow[0].id;
757
+ if (rowid !== editingRowId && typeof editingRowId !== "number") {
758
+ $self.jqGrid("restoreRow", editingRowId, o.editParams);
759
+ }
760
+ }
761
+ });
762
+ }
763
+ $self.on("jqGridInlineAfterRestoreRow jqGridInlineAfterSaveRow", function () {
764
+ $self.jqGrid("showAddEditButtons", false);
765
+ });
766
+ $self.on("jqGridInlineEditRow", function (e, rowid) {
767
+ $self.jqGrid("showAddEditButtons", true, rowid);
768
+ });
769
+ });
770
+ },
771
+ showAddEditButtons: function (isEditing) {
772
+ return this.each(function () {
773
+ var $t = this;
774
+ if (!$t.grid) { return; }
775
+ var p = $t.p, idSel = p.idSel, disabledClass = getGuiStateStyles.call($t, "disabled"),
776
+ saveCancel = idSel + "_ilsave," + idSel + "_ilcancel" + (p.toppager ? "," + idSel + "_top_ilsave," + idSel + "_top_ilcancel" : ""),
777
+ addEdit = idSel + "_iladd," + idSel + "_iledit" + (p.toppager ? "," + idSel + "_top_iladd," + idSel + "_top_iledit" : "");
778
+ $(isEditing ? addEdit : saveCancel).addClass(disabledClass);
779
+ $(isEditing ? saveCancel : addEdit).removeClass(disabledClass);
780
+ });
781
+ }
782
+ });
783
+ // end module grid.inlinedit
784
+ }));