All Downloads are FREE. Search and download functionalities are using the official Maven repository.

template.js.plugins.grid.inlinedit.js Maven / Gradle / Ivy

There is a newer version: 5.0.6
Show newest version
/**
 * jqGrid extension for manipulating Grid Data
 * Copyright (c) 2008-2014, Tony Tomov, [email protected],  http://trirand.com/blog/
 * Copyright (c) 2014-2018, Oleg Kiriljuk, [email protected]
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl-2.0.html
**/

/*jslint browser: true, eqeq: true, nomen: true, vars: true, devel: true, unparam: true, plusplus: true, white: true, todo: true */
/*global jQuery, define, exports, module, require */
(function (factory) {
	"use strict";
	if (typeof define === "function" && define.amd) {
		// AMD. Register as an anonymous module.
		define([
			"jquery",
			"./grid.base",
			"./jquery.fmatter",
			"./grid.common"
		], factory);
	} else if (typeof module === "object" && module.exports) {
		// Node/CommonJS
		module.exports = function (root, $) {
			if (!root) {
				root = window;
			}
			if ($ === undefined) {
				// require("jquery") returns a factory that requires window to
				// build a jQuery instance, we normalize how we use modules
				// that require this pattern but the window provided is a noop
				// if it's defined (how jquery works)
				$ = typeof window !== "undefined" ?
						require("jquery") :
						require("jquery")(root);
			}
			require("./grid.base");
			require("./jquery.fmatter");
			require("./grid.common");
			factory($);
			return $;
		};
	} else {
		// Browser globals
		factory(jQuery);
	}
}(function ($) {
	"use strict";
	var jgrid = $.jgrid, fullBoolFeedback = jgrid.fullBoolFeedback, hasOneFromClasses = jgrid.hasOneFromClasses,
		base = $.fn.jqGrid,
		getGuiStateStyles = function (path) {
			return base.getGuiStyles.call(this, "states." + path);
		};
	// begin module grid.inlinedit
	var editFeedback = function (o) {
			var args = $.makeArray(arguments).slice(1);
			args.unshift("");
			args.unshift("Inline");
			args.unshift(o);
			return jgrid.feedback.apply(this, args);
		};
	jgrid.inlineEdit = jgrid.inlineEdit || {};
	jgrid.extend({
		//Editing
		editRow: function (rowid, keys, oneditfunc, successfunc, url, extraparam, aftersavefunc, errorfunc, afterrestorefunc, beforeEditRow) {
			// Compatible mode old versions
			var oMuligrid = {}, args = $.makeArray(arguments).slice(1);

			if ($.type(args[0]) === "object") {
				oMuligrid = args[0];
			} else {
				if (keys !== undefined) { oMuligrid.keys = keys; }
				if ($.isFunction(oneditfunc)) { oMuligrid.oneditfunc = oneditfunc; }
				if ($.isFunction(successfunc)) { oMuligrid.successfunc = successfunc; }
				if (url !== undefined) { oMuligrid.url = url; }
				if (extraparam != null) { oMuligrid.extraparam = extraparam; }
				if ($.isFunction(aftersavefunc)) { oMuligrid.aftersavefunc = aftersavefunc; }
				if ($.isFunction(errorfunc)) { oMuligrid.errorfunc = errorfunc; }
				if ($.isFunction(afterrestorefunc)) { oMuligrid.afterrestorefunc = afterrestorefunc; }
				if ($.isFunction(beforeEditRow)) { oMuligrid.beforeEditRow = beforeEditRow; }
				// last two not as param, but as object (sorry)
				//if (restoreAfterError !== undefined) { oMuligrid.restoreAfterError = restoreAfterError; }
				//if (mtype !== undefined) { oMuligrid.mtype = mtype || "POST"; }
			}

			// End compatible
			return this.each(function () {
				var $t = this, $self = $($t), p = $t.p, cnt = 0, focus = null, svr = {}, editableValues = {}, colModel = p.colModel, opers = p.prmNames;
				if (!$t.grid) { return; }
				var o = $.extend(true, {
						keys: false,
						oneditfunc: null,
						successfunc: null,
						url: null,
						extraparam: {},
						aftersavefunc: null,
						errorfunc: null,
						afterrestorefunc: null,
						restoreAfterError: true,
						beforeEditRow: null,
						//mtype: "POST",
						focusField: true
					}, jgrid.inlineEdit, p.inlineEditing || {}, oMuligrid),
					ind = $self.jqGrid("getInd", rowid, true),
					focusField = o.focusField,
					td = typeof focusField === "object" && focusField != null ?
						$(focusField.target || focusField).closest("tr.jqgrow>td")[0] : null;

				if (ind === false) { return; }

				if (o.extraparam[opers.oper] !== opers.addoper) {
					if (!editFeedback.call($t, o, "beforeEditRow", o, rowid)) { return; }
				}

				if (($(ind).attr("editable") || "0") === "0" && !$(ind).hasClass("not-editable-row")) {
					var editingInfo = jgrid.detectRowEditing.call($t, rowid);
					if (editingInfo != null && editingInfo.mode === "cellEditing") {
						var savedRowInfo = editingInfo.savedRow, tr = $t.rows[savedRowInfo.id],
							highlightClass = getGuiStateStyles.call($t, "select");
						$self.jqGrid("restoreCell", savedRowInfo.id, savedRowInfo.ic);
						// remove highlighting of the cell
						$(tr.cells[savedRowInfo.ic]).removeClass("edit-cell " + highlightClass);
						$(tr).addClass(highlightClass).attr({ "aria-selected": "true", "tabindex": "0" });
					}
					jgrid.enumEditableCells.call($t, ind, $(ind).hasClass("jqgrid-new-row") ? "add" : "edit", function (options) {
						var cm = options.cm, $dataFiled = $(options.dataElement), dataWidth = options.dataWidth, tmp, opt, elc,
							nm = cm.name, edittype = cm.edittype, iCol = options.iCol, editoptions = cm.editoptions || {};
						editableValues[nm] = options.editable;
						if (options.editable === "hidden") { return; }
						try {
							tmp = $.unformat.call(this, options.td, { rowId: rowid, colModel: cm }, iCol);
						} catch (_) {
							tmp = edittype === "textarea" ? $dataFiled.text() : $dataFiled.html();
						}
						svr[nm] = tmp; // include only editable fields in svr object
						$dataFiled.html("");
						opt = $.extend({}, editoptions,
							{ id: rowid + "_" + nm, name: nm, rowId: rowid, mode: options.mode, cm: cm, iCol: iCol });
						if (tmp === " " || tmp === " " || (tmp.length === 1 && tmp.charCodeAt(0) === 160)) { tmp = ""; }
						elc = jgrid.createEl.call($t, edittype, opt, tmp, true, $.extend({}, jgrid.ajaxOptions, p.ajaxSelectOptions || {}));
						$(elc).addClass("editable");
						$dataFiled.append(elc);
						if (dataWidth) {
							// change the width from auto or the value from editoptions
							// in case of editing ExpandColumn of TreeGrid
							$(elc).width(options.dataWidth);
						}
						jgrid.bindEv.call($t, elc, opt);
						//Again IE
						if (edittype === "select" && editoptions.multiple === true && editoptions.dataUrl === undefined && jgrid.msie) {
							$(elc).width($(elc).width());
						}
						if (focus === null) { focus = iCol; }
						cnt++;
					});
					if (cnt > 0) {
						svr.id = rowid;
						p.savedRow.push(svr);
						p.editingInfo[rowid] = {
							mode: "inlineEditing",
							savedRow: svr,
							editable: editableValues
						};
						$(ind).attr("editable", "1");
						if (focusField) {
							if (typeof focusField === "number" && parseInt(focusField, 10) <= colModel.length) {
								focus = focusField;
							} else if (typeof focusField === "string") {
								focus = p.iColByName[focusField];
							} else if (td != null) {
								focus = td.cellIndex;
							}
							setTimeout(function () {
								// we want to use ":focusable"
								var nFrozenColumns = $self.jqGrid("getNumberOfFrozenColumns"),
									getTdByColIndex = function (iCol) {
										return p.frozenColumns && nFrozenColumns > 0 && focus < nFrozenColumns ?
											$t.grid.fbRows[ind.rowIndex].cells[iCol] :
											ind.cells[iCol];
									},
									getFocusable = function (elem) {
										return $(elem).find("input,textarea,select,button,object,*[tabindex]")
												.filter(":input:visible:not(:disabled)");
									},
									getFirstFocusable = function () {
										return getFocusable(p.frozenColumns && nFrozenColumns > 0 ? $t.grid.fbRows[ind.rowIndex] : ind)
												.first();
									},
									$fe = getFocusable(getTdByColIndex(focus));

								if ($fe.length > 0) {
									$fe.first().focus();
								} else if (typeof o.defaultFocusField === "number" || typeof o.defaultFocusField === "string") {
									$fe = getFocusable(getTdByColIndex(typeof o.defaultFocusField === "number" ? o.defaultFocusField : p.iColByName[o.defaultFocusField]));
									if ($fe.length === 0) {
										$fe = getFirstFocusable();
									}
									$fe.first().focus();
								} else {
									getFirstFocusable().focus();
								}
							}, 0);
						}
						if (o.keys === true) {
							var $ind = $(ind);
							if (p.frozenColumns) {
								$ind = $ind.add($t.grid.fbRows[ind.rowIndex]);
							}
							$ind.on("keydown", function (e) {
								if (e.keyCode === 27) {
									$self.jqGrid("restoreRow", rowid, o.afterrestorefunc);
									return false;
								}
								if (e.keyCode === 13) {
									var ta = e.target;
									if (ta.tagName === "TEXTAREA") { return true; }
									$self.jqGrid("saveRow", rowid, o);
									return false;
								}
							});
						}
						fullBoolFeedback.call($t, o.oneditfunc, "jqGridInlineEditRow", rowid, o);
					}
				}
			});
		},
		saveRow: function (rowid, successfunc, url, extraparam, aftersavefunc, errorfunc, afterrestorefunc, beforeSaveRow) {
			// Compatible mode old versions
			var args = $.makeArray(arguments).slice(1), o = {}, $t = this[0], $self = $($t),
				p = $t != null ? $t.p : null, editOrAdd, infoDialog = jgrid.info_dialog,
				isFunction = $.isFunction,
				fatalErrorFunction = jgrid.defaults != null && isFunction(jgrid.defaults.fatalError) ? jgrid.defaults.fatalError : alert;
			if (!$t.grid || p == null) { return; }

			if ($.type(args[0]) === "object") {
				o = args[0];
			} else {
				if (isFunction(successfunc)) { o.successfunc = successfunc; }
				if (url !== undefined) { o.url = url; }
				if (extraparam !== undefined) { o.extraparam = extraparam; }
				if (isFunction(aftersavefunc)) { o.aftersavefunc = aftersavefunc; }
				if (isFunction(errorfunc)) { o.errorfunc = errorfunc; }
				if (isFunction(afterrestorefunc)) { o.afterrestorefunc = afterrestorefunc; }
				if (isFunction(beforeSaveRow)) { o.beforeSaveRow = beforeSaveRow; }
			}
			var getRes = function (path) { return $self.jqGrid("getGridRes", path); };
			o = $.extend(true, {
				successfunc: null,
				url: null,
				extraparam: {},
				aftersavefunc: null,
				errorfunc: null,
				afterrestorefunc: null,
				restoreAfterError: true,
				beforeSaveRow: null,
				ajaxSaveOptions: {},
				serializeSaveData: null,
				mtype: "POST",
				saveui: "enable",
				savetext: getRes("defaults.savetext") || "Saving..."
			}, jgrid.inlineEdit, p.inlineEditing || {}, o);
			// End compatible
			// TODO: add return this.each(function(){....}
			var tmp = {}, tmp2 = {}, postData = {}, editable, k, fr, resp, cv, editingInfo, ind = $self.jqGrid("getInd", rowid, true), $tr = $(ind),
				opers = p.prmNames, errcap = getRes("errors.errcap"), bClose = getRes("edit.bClose"), isRemoteSave, isError,
				displayErrorMessage = function (text, relativeElem) {
					try {
						var relativeRect = jgrid.getRelativeRect.call($t, relativeElem);

						infoDialog.call($t, errcap, text, bClose, {
							top: relativeRect.top,
							left: relativeRect.left + $($t).closest(".ui-jqgrid").offset().left
						});
					} catch (e) {
						fatalErrorFunction(text);
					}
				};

			if (ind === false) { return; }

			editOrAdd = o.extraparam[opers.oper] === opers.addoper ? "add" : "edit";

			if (!editFeedback.call($t, o, "beforeSaveRow", o, rowid, editOrAdd)) { return; }

			editable = $tr.attr("editable");
			o.url = o.url || p.editurl;
			isRemoteSave = o.url !== "clientArray";
			if (editable === "1") {
				editingInfo = $.jgrid.detectRowEditing.call($t, rowid);
				jgrid.enumEditableCells.call($t, ind, $tr.hasClass("jqgrid-new-row") ? "add" : "edit", function (options) {
					var cm = options.cm, formatter = cm.formatter, editoptions = cm.editoptions || {},
						formatoptions = cm.formatoptions || {}, valueText = {},
						v = jgrid.getEditedValue.call($t, $(options.dataElement), cm, valueText, options.editable);

					if (cm.edittype === "select" && cm.formatter !== "select") {
						tmp2[cm.name] = valueText.text;
					}
					cv = jgrid.checkValues.call($t, v, options.iCol, undefined, undefined,
							$.extend(options, {
								oldValue: editingInfo != null ? editingInfo.savedRow[cm.name] : null,
								newValue: v,
								oldRowData: editingInfo != null ? editingInfo.savedRow : null }));
					if (cv != null && cv[0] === false) {
						isError = true;
						displayErrorMessage(cv[1], options.td);
						return false;
					}
					if (formatter === "date" && formatoptions.sendFormatted !== true) {
						// TODO: call all other predefined formatters!!! Not only formatter: "date" have the problem.
						// Floating point separator for example
						v = $.unformat.date.call($t, v, cm);
					}
					if (isRemoteSave && editoptions.NullIfEmpty === true) {
						if (v === "") {
							v = "null";
						}
					}
					tmp[cm.name] = v;
				});

				if (isError) {
					return;
				}
				var idname;
				opers = p.prmNames;
				if (p.keyName === false) {
					idname = opers.id;
				} else {
					idname = p.keyName;
				}
				if (tmp) {
					tmp[opers.oper] = opers.editoper;
					if (tmp[idname] === undefined || tmp[idname] === "") {
						tmp[idname] = jgrid.stripPref(p.idPrefix, rowid);
					}
					tmp = $.extend({}, tmp, p.inlineData || {}, o.extraparam);
				}
				var validationOptions = {
						options: o,
						rowid: rowid,
						tr: ind,
						iRow: ind.rowIndex,
						savedRow: editingInfo.savedRow,
						newData: tmp,
						mode: editOrAdd
					};
				if (!editFeedback.call($t, o, "saveRowValidation", validationOptions)) {
					if (validationOptions.errorText) {
						displayErrorMessage(validationOptions.errorText, ind);
					}
					return;
				}
				if (!isRemoteSave) {
					tmp = $.extend({}, tmp, tmp2);
					resp = $self.jqGrid("setRowData", rowid, tmp);
					$tr.attr("editable", "0");
					for (k = 0; k < p.savedRow.length; k++) {
						if (String(p.savedRow[k].id) === String(rowid)) { fr = k; break; }
					}
					if (fr >= 0) {
						p.savedRow.splice(fr, 1);
						delete p.editingInfo[rowid];
					}
					fullBoolFeedback.call($t, o.aftersavefunc, "jqGridInlineAfterSaveRow", rowid, resp, tmp, o);
					$tr.removeClass("jqgrid-new-row").off("keydown");
					if (ind.id !== p.idPrefix + tmp[idname]) {
						$self.jqGrid("changeRowid", ind.id, p.idPrefix + tmp[idname]);
					}
				} else {
					$self.jqGrid("progressBar", { method: "show", loadtype: o.saveui, htmlcontent: o.savetext });
					postData = $.extend({}, tmp, postData);
					postData[idname] = jgrid.stripPref(p.idPrefix, postData[idname]);
					if (p.autoEncodeOnEdit) {
						$.each(postData, function (n, v) {
							if (!isFunction(v)) {
								postData[n] = jgrid.oldEncodePostedData(v);
							}
						});
					}
					if (ind.id !== p.idPrefix + postData[idname] && opers.idold != null &&
							!postData.hasOwnProperty(opers.idold)) {
						postData[opers.idold] = jgrid.stripPref(p.idPrefix, ind.id);
					}

					$.ajax($.extend({
						url: isFunction(o.url) ? o.url.call($t, postData[idname], editOrAdd, postData, o) : o.url,
						data: jgrid.serializeFeedback.call($t,
								isFunction(o.serializeSaveData) ? o.serializeSaveData : p.serializeRowData,
								"jqGridInlineSerializeSaveData",
								postData),
						type: isFunction(o.mtype) ? o.mtype.call($t, editOrAdd, o, postData[idname], postData) : o.mtype,
						complete: function (jqXHR, textStatus) {
							$self.jqGrid("progressBar", { method: "hide", loadtype: o.saveui });
							// textStatus can be "abort", "timeout", "error", "parsererror" or some text from text part of HTTP error occurs
							// see the answer http://stackoverflow.com/a/3617710/315935 about xhr.readyState === 4 && xhr.status === 0
							if ((jqXHR.status < 300 || jqXHR.status === 304) && (jqXHR.status !== 0 || jqXHR.readyState !== 4)) {
								var ret, sucret, j;
								sucret = $self.triggerHandler("jqGridInlineSuccessSaveRow", [jqXHR, rowid, o, editOrAdd, postData]);
								if (sucret == null || sucret === true) { sucret = [true, tmp]; }
								if (sucret[0] && isFunction(o.successfunc)) { sucret = o.successfunc.call($t, jqXHR, rowid, o, editOrAdd, postData); }
								if ($.isArray(sucret)) {
									// expect array - status, data, rowid
									ret = sucret[0];
									tmp = sucret[1] || tmp;
								} else {
									ret = sucret;
								}
								if (ret === true) {
									if (p.autoEncodeOnEdit) {
										$.each(tmp, function (n, v) {
											tmp[n] = jgrid.oldDecodePostedData(v);
										});
									}
									tmp = $.extend({}, tmp, tmp2);
									$self.jqGrid("setRowData", rowid, tmp);
									$tr.attr("editable", "0");
									for (j = 0; j < p.savedRow.length; j++) {
										if (String(p.savedRow[j].id) === String(rowid)) { fr = j; break; }
									}
									if (fr >= 0) {
										p.savedRow.splice(fr, 1);
										delete p.editingInfo[rowid];
									}
									fullBoolFeedback.call($t, o.aftersavefunc, "jqGridInlineAfterSaveRow", rowid, jqXHR, tmp, o);
									if (sucret[2] != null) {
										$self.jqGrid("changeRowid", rowid, p.idPrefix + sucret[2]);
									} else if (ind.id !== p.idPrefix + tmp[idname]) {
										$self.jqGrid("changeRowid", ind.id, p.idPrefix + tmp[idname]);
									}
									$tr.removeClass("jqgrid-new-row").off("keydown");
								} else {
									fullBoolFeedback.call($t, o.errorfunc, "jqGridInlineErrorSaveRow", rowid, jqXHR, textStatus, null, o);
									if (o.restoreAfterError === true) {
										$self.jqGrid("restoreRow", rowid, o.afterrestorefunc);
									}
								}
							}
						},
						error: function (res, stat, err) {
							$self.triggerHandler("jqGridInlineErrorSaveRow", [rowid, res, stat, err, o]);
							if (isFunction(o.errorfunc)) {
								o.errorfunc.call($t, rowid, res, stat, err);
							} else {
								var rT = res.responseText || res.statusText;
								try {
									infoDialog.call($t, errcap, '
' + rT + "
", bClose, { buttonalign: "right" }); } catch (e1) { fatalErrorFunction(rT); } } if (o.restoreAfterError === true) { $self.jqGrid("restoreRow", rowid, o.afterrestorefunc); } } }, jgrid.ajaxOptions, p.ajaxRowOptions, o.ajaxSaveOptions || {})); } } return; }, restoreRow: function (rowid, afterrestorefunc) { // Compatible mode old versions var args = $.makeArray(arguments).slice(1), oMuligrid = {}; if ($.type(args[0]) === "object") { oMuligrid = args[0]; } else { if ($.isFunction(afterrestorefunc)) { oMuligrid.afterrestorefunc = afterrestorefunc; } } // End compatible return this.each(function () { var $t = this, $self = $($t), p = $t.p, fr = -1, ares = {}, k; if (!$t.grid) { return; } var o = $.extend(true, {}, jgrid.inlineEdit, p.inlineEditing || {}, oMuligrid); var ind = $self.jqGrid("getInd", rowid, true); if (ind === false) { return; } if (!editFeedback.call($t, o, "beforeCancelRow", o, rowid)) { return; } for (k = 0; k < p.savedRow.length; k++) { if (String(p.savedRow[k].id) === String(rowid)) { fr = k; break; } } if (fr >= 0) { if ($.isFunction($.fn.datepicker)) { try { $("input.hasDatepicker", "#" + jgrid.jqID(ind.id)).datepicker("hide"); } catch (ignore) { } } $.each(p.colModel, function () { var nm = this.name; if (p.savedRow[fr].hasOwnProperty(nm)) { ares[nm] = p.savedRow[fr][nm]; if (this.formatter && this.formatter === "date" && (this.formatoptions == null || this.formatoptions.sendFormatted !== true)) { // TODO: call all other predefined formatters!!! Not only formatter: "date" have the problem. // Floating point separator for example ares[nm] = $.unformat.date.call($t, ares[nm], this); } } }); $self.jqGrid("setRowData", rowid, ares); $(ind).attr("editable", "0").off("keydown"); p.savedRow.splice(fr, 1); delete p.editingInfo[rowid]; if ($("#" + jgrid.jqID(rowid), $t).hasClass("jqgrid-new-row")) { setTimeout(function () { $self.jqGrid("delRowData", rowid); $self.jqGrid("showAddEditButtons", false); }, 0); } } fullBoolFeedback.call($t, o.afterrestorefunc, "jqGridInlineAfterRestoreRow", rowid); }); }, addRow: function (oMuligrid) { return this.each(function () { if (!this.grid) { return; } var $t = this, $self = $($t), p = $t.p, o = $.extend(true, { rowID: null, initdata: {}, position: "first", useDefValues: true, useFormatter: false, beforeAddRow: null, addRowParams: { extraparam: {} } }, jgrid.inlineEdit, p.inlineEditing || {}, oMuligrid || {}); if (!editFeedback.call($t, o, "beforeAddRow", o.addRowParams)) { return; } o.rowID = $.isFunction(o.rowID) ? o.rowID.call($t, o) : ((o.rowID != null) ? o.rowID : jgrid.randId()); if (o.useDefValues === true) { $(p.colModel).each(function () { if (this.editoptions && this.editoptions.defaultValue) { var opt = this.editoptions.defaultValue; o.initdata[this.name] = $.isFunction(opt) ? opt.call($t, o) : opt; } }); } o.rowID = p.idPrefix + o.rowID; $self.jqGrid("addRowData", o.rowID, o.initdata, o.position); $("#" + jgrid.jqID(o.rowID), $t).addClass("jqgrid-new-row"); if (o.useFormatter) { $("#" + jgrid.jqID(o.rowID) + " .ui-inline-edit", $t).click(); } else { var opers = p.prmNames, oper = opers.oper; o.addRowParams.extraparam[oper] = opers.addoper; $self.jqGrid("editRow", o.rowID, o.addRowParams); $self.jqGrid("setSelection", o.rowID); } }); }, inlineNav: function (elem, oMuligrid) { if (typeof elem === "object") { // the option pager are skipped oMuligrid = elem; elem = undefined; } return this.each(function () { var $t = this, $self = $($t), p = $t.p; if (!this.grid || p == null) { return; } var $elem, gID = elem === p.toppager ? p.idSel + "_top" : p.idSel, gid = elem === p.toppager ? p.id + "_top" : p.id, disabledClass = getGuiStateStyles.call($t, "disabled"), o = $.extend(true, { edit: true, editicon: "ui-icon-pencil", add: true, addicon: "ui-icon-plus", save: true, saveicon: "ui-icon-disk", cancel: true, cancelicon: "ui-icon-cancel", commonIconClass: "ui-icon", iconsOverText: false, //alertToTop: false, use undefined to be able to use defaults from $.jgrid.jqModal or later from p.jqModal addParams: { addRowParams: { extraparam: {} } }, editParams: {}, restoreAfterSelect: true }, //TODO make getRes(locales[p.locale], "nav"), jgrid.nav || {}, p.navOptions || {} // as the result of working getRes("nav") //getRes(locales[p.locale], "nav"), $self.jqGrid("getGridRes", "nav"), jgrid.nav || {}, p.navOptions || {}, jgrid.inlineNav || {}, p.inlineNavOptions || {}, oMuligrid || {} ), viewModalAlert = function () { $t.modalAlert(); }; if (elem === undefined) { if (p.pager) { $self.jqGrid("inlineNav", p.pager, o); if (p.toppager) { elem = p.toppager; gID = p.idSel + "_top"; gid = p.id + "_top"; } else { return; } } else if (p.toppager) { elem = p.toppager; gID = p.idSel + "_top"; gid = p.id + "_top"; } } if (elem === undefined) { return; // error } $elem = $(elem); if ($elem.length <= 0) { return; // error } if ($elem.find(".navtable").length <= 0) { // create navigator bar if it is not yet exist $self.jqGrid("navGrid", elem, { add: false, edit: false, del: false, search: false, refresh: false, view: false }); } p._inlinenav = true; // detect the formatactions column if (o.addParams.useFormatter === true) { var cm = p.colModel, i, defaults, ap; for (i = 0; i < cm.length; i++) { if (cm[i].formatter && cm[i].formatter === "actions") { if (cm[i].formatoptions) { defaults = { keys: false, onEdit: null, onSuccess: null, afterSave: null, onError: null, afterRestore: null, extraparam: {}, url: null }; ap = $.extend(defaults, cm[i].formatoptions); o.addParams.addRowParams = { "keys": ap.keys, "oneditfunc": ap.onEdit, "successfunc": ap.onSuccess, "url": ap.url, "extraparam": ap.extraparam, "aftersavefunc": ap.afterSave, "errorfunc": ap.onError, "afterrestorefunc": ap.afterRestore }; } break; } } } if (o.add) { $self.jqGrid("navButtonAdd", elem, { caption: o.addtext, title: o.addtitle, commonIconClass: o.commonIconClass, buttonicon: o.addicon, iconsOverText: o.iconsOverText, id: gid + "_iladd", onClickButton: function () { if (!hasOneFromClasses(this, disabledClass)) { $self.jqGrid("addRow", o.addParams); } } }); } if (o.edit) { $self.jqGrid("navButtonAdd", elem, { caption: o.edittext, title: o.edittitle, commonIconClass: o.commonIconClass, buttonicon: o.editicon, iconsOverText: o.iconsOverText, id: gid + "_iledit", onClickButton: function () { if (!hasOneFromClasses(this, disabledClass)) { var sr = p.selrow; if (sr) { $self.jqGrid("editRow", sr, o.editParams); } else { viewModalAlert(); } } } }); } if (o.save) { $self.jqGrid("navButtonAdd", elem, { caption: o.savetext, title: o.savetitle, commonIconClass: o.commonIconClass, buttonicon: o.saveicon, iconsOverText: o.iconsOverText, id: gid + "_ilsave", onClickButton: function () { if (!hasOneFromClasses(this, disabledClass) && p.savedRow.length > 0) { var sr = p.savedRow[0].id; if (sr) { var opers = p.prmNames, oper = opers.oper, tmpParams = o.editParams; if ($("#" + jgrid.jqID(sr), $t).hasClass("jqgrid-new-row")) { o.addParams.addRowParams.extraparam[oper] = opers.addoper; tmpParams = o.addParams.addRowParams; } else { if (!o.editParams.extraparam) { o.editParams.extraparam = {}; } o.editParams.extraparam[oper] = opers.editoper; } $self.jqGrid("saveRow", sr, tmpParams); } else { viewModalAlert(); } } } }); $(gID + "_ilsave").addClass(disabledClass); } if (o.cancel) { $self.jqGrid("navButtonAdd", elem, { caption: o.canceltext, title: o.canceltitle, commonIconClass: o.commonIconClass, buttonicon: o.cancelicon, iconsOverText: o.iconsOverText, id: gid + "_ilcancel", onClickButton: function () { if (!hasOneFromClasses(this, disabledClass) && p.savedRow.length > 0) { var sr = p.savedRow[0].id, cancelPrm = o.editParams; if (sr) { if ($("#" + jgrid.jqID(sr), $t).hasClass("jqgrid-new-row")) { cancelPrm = o.addParams.addRowParams; } $self.jqGrid("restoreRow", sr, cancelPrm); } else { viewModalAlert(); } } } }); $(gID + "_ilcancel").addClass(disabledClass); } if (o.restoreAfterSelect === true) { $self.on("jqGridSelectRow", function (e, rowid) { if (p.savedRow.length > 0 && p._inlinenav === true) { var editingRowId = p.savedRow[0].id; if (rowid !== editingRowId && typeof editingRowId !== "number") { $self.jqGrid("restoreRow", editingRowId, o.editParams); } } }); } $self.on("jqGridInlineAfterRestoreRow jqGridInlineAfterSaveRow", function () { $self.jqGrid("showAddEditButtons", false); }); $self.on("jqGridInlineEditRow", function (e, rowid) { $self.jqGrid("showAddEditButtons", true, rowid); }); }); }, showAddEditButtons: function (isEditing) { return this.each(function () { var $t = this; if (!$t.grid) { return; } var p = $t.p, idSel = p.idSel, disabledClass = getGuiStateStyles.call($t, "disabled"), saveCancel = idSel + "_ilsave," + idSel + "_ilcancel" + (p.toppager ? "," + idSel + "_top_ilsave," + idSel + "_top_ilcancel" : ""), addEdit = idSel + "_iladd," + idSel + "_iledit" + (p.toppager ? "," + idSel + "_top_iladd," + idSel + "_top_iledit" : ""); $(isEditing ? addEdit : saveCancel).addClass(disabledClass); $(isEditing ? saveCancel : addEdit).removeClass(disabledClass); }); } }); // end module grid.inlinedit }));




© 2015 - 2025 Weber Informatics LLC | Privacy Policy