function WorkflowDesigner(e) { var t = this; this.Settings = e, this.GetName = function () { return t.Settings.name }, this.error = function (e) { alert(e) }, this.load = function (e) { var i = new Array; this.schemecode = e.schemecode, this.processid = e.processid, this.schemeid = e.schemeid, this.readonly = e.readonly, i.push({ name: "schemecode", value: this.schemecode }), i.push({ name: "processid", value: this.processid }), i.push({ name: "schemeid", value: this.schemeid }), i.push({ name: "operation", value: "load" }); $.ajax({ url: this.Settings.apiurl, data: i, async: !0, success: function (e) { var i = {}; try { i = JSON.parse(e) } catch (n) { return void t.error(e) } return i.isError ? void t.error(i.errorMessage) : (t.data = i, void t.render()) }, error: function (e, i, n) { t.error(i + " " + n) } }) }, this.exists = function (e) { var i = new Array; this.schemecode = e.schemecode, this.processid = e.processid, this.schemeid = e.schemeid, this.readonly = e.readonly, i.push({ name: "schemecode", value: this.schemecode }), i.push({ name: "processid", value: this.processid }), i.push({ name: "schemeid", value: this.schemeid }), i.push({ name: "operation", value: "exists" }); var n = $.ajax({ url: this.Settings.apiurl, data: i, async: !1, error: function (e, i, n) { t.error(i + " " + n) } }).responseText; try { return JSON.parse(n) } catch (o) { return t.error(n), !1 } }, this.create = function () { var e = new Array; e.push({ name: "operation", value: "load" }); $.ajax({ url: this.Settings.apiurl, data: e, async: !0, success: function (e) { try { t.data = JSON.parse(e) } catch (i) { t.error(e) } t.render() } }) }, this.render = function () { t.Graph && t.Graph.destroy(); var e = [WorkflowDesignerBackground, WorkflowDesignerActivity, WorkflowDesignerTransition, WorkflowDesignerKeyboard]; this.Settings.notrendertoolbar || e.push(WorkflowDesignerToolbar), t.Graph = new WorkflowGraph(this.Settings.renderTo, t, t.Settings, e), WorkflowDesignerCommon.DataCorrection(t.data), t.Graph.Draw(t.data) }, this.save = function (e) { if (t.readonly) return void alert(WorkflowDesignerConstants.ErrorReadOnlySaveText); var i = new Array; i.push({ name: "schemecode", value: this.schemecode }), i.push({ name: "processid", value: this.processid }), i.push({ name: "schemeid", value: this.schemeid }), i.push({ name: "operation", value: "save" }), i.push({ name: "data", value: JSON.stringify(this.data) }); $.ajax({ url: this.Settings.apiurl, data: i, async: !0, type: "post", success: function (i) { var n = {}; try { n = JSON.parse(i) } catch (o) { return void t.error(i) } return n.isError ? void t.error(n.errorMessage) : (t.data = n, t.render(), void (e && setTimeout(function () { e(t) }, 100))) } }) }, this.downloadscheme = function (e) { var t = new Array; t.push({ name: "operation", value: "downloadscheme" }), t.push({ name: "data", value: JSON.stringify(this.data) }), WorkflowDesignerCommon.download(this.Settings.apiurl, t, "post") }, this.uploadscheme = function (e, i) { var n = this.GetName() + "_uploadiframe", o = document.createElement("iframe"); o.setAttribute("id", n), o.setAttribute("name", n), o.setAttribute("width", "0"), o.setAttribute("height", "0"), o.setAttribute("border", "0"), o.setAttribute("style", "width: 0; height: 0; border: none;"), e.parentNode.appendChild(o), window.frames[n].name = n, iframeId = document.getElementById(n); var r = function () { iframeId.detachEvent ? iframeId.detachEvent("onload", r) : iframeId.removeEventListener("load", r, !1), iframeId.contentDocument ? content = iframeId.contentDocument.body.innerHTML : iframeId.contentWindow ? content = iframeId.contentWindow.document.body.innerHTML : iframeId.document && (content = iframeId.document.body.innerHTML), setTimeout("iframeId.parentNode.removeChild(iframeId)", 250); var e = {}; try { e = JSON.parse(content) } catch (n) { return void t.error(content) } return e.isError ? void t.error(e.errorMessage) : (t.data = e, t.render(), void (i && i(t))) }; iframeId.addEventListener && iframeId.addEventListener("load", r, !0), iframeId.attachEvent && iframeId.attachEvent("onload", r), e.setAttribute("target", n), e.setAttribute("action", this.createurl("uploadscheme")), e.setAttribute("method", "post"), e.setAttribute("enctype", "multipart/form-data"), e.setAttribute("encoding", "multipart/form-data"), e.submit() }, this.createurl = function (e) { var t = this.Settings.apiurl, i = "?"; return t.indexOf("?") >= 0 && (i = "&"), t += i + "operation=" + e, i = "&", void 0 != this.schemeid && (t += i + "schemeid=" + this.schemeid), void 0 != this.processid && (t += i + "processid=" + this.processid), void 0 != this.schemecode && (t += i + "schemecode=" + this.schemecode), t }, this.validate = function () { var e = void 0, i = $.grep(t.data.Activities, function (e) { return 1 == e.IsInitial }); return 1 != i.length && (e = WorkflowDesignerConstants.ErrorActivityIsInitialCountText), e }, this.destroy = function () { this.schemecode = void 0, this.processid = void 0, this.schemeid = void 0, this.data = void 0, this.Graph.destroy() }, this.compile = function (e, i) { e = { Name: e.Name, Type: e.Type, IsGlobal: e.IsGlobal, ActionCode: e.ActionCode, Usings: e.Usings }; var n = new Array; n.push({ name: "schemecode", value: this.schemecode }), n.push({ name: "processid", value: this.processid }), n.push({ name: "schemeid", value: this.schemeid }), n.push({ name: "operation", value: "compile" }), n.push({ name: "data", value: JSON.stringify(e) }); $.ajax({ url: this.Settings.apiurl, data: n, async: !0, type: "post", success: function (e) { try { e = JSON.parse(e) } catch (n) { t.error(e) } i && setTimeout(function () { i(e) }, 100) } }) }, this.getemptytype = function (e, t) { var i = new Array; i.push({ name: "operation", value: "getemptytype" }), i.push({ name: "data", value: JSON.stringify(e) }); $.ajax({ url: this.Settings.apiurl, data: i, async: !0, type: "post", success: function (e) { t && setTimeout(function () { t(e) }, 100) } }) } hideCodedActions = !this.Settings.ShowCodedOptions; } function WorkflowDesignerActivity() { this.type = "WorkflowDesignerActivity", this.init = function (e) { this.designer = e, this.Layer = new Kinetic.Layer, this.designer.Stage.add(this.Layer), this.Layer.setZIndex(1), this.ImageCreateTransitionAndActivity = new Image, this.ImageCreateTransitionAndActivity.src = this.designer.Settings.imagefolder + "designer.createat.png", this.ImageCreateTransition = new Image, this.ImageCreateTransition.src = this.designer.Settings.imagefolder + "designer.createt.png", this.ImageDeleteActivity = new Image, this.ImageDeleteActivity.src = this.designer.Settings.imagefolder + "designer.delete.png" }, this.ItemControls = new Array, this.draw = function () { null != this.ItemControls && this.ItemControls.forEach(function (e) { e.control.destroy() }), this.ItemControls = new Array; var e = this; void 0 != this.designer.data.Activities && this.designer.data.Activities.forEach(function (t) { var i, n; if ("" != t.DesignerSettings.X && "" != t.DesignerSettings.Y) i = Number(t.DesignerSettings.X), n = Number(t.DesignerSettings.Y); else { var o = this.GetDefaultPosition(); i = o.x, n = o.y } var r = new WorkflowDesignerActivityControl({ x: i, y: n, item: t, designer: e.designer, manager: e }); e.ItemControls.push(r), r.Draw(), r.Sync() }), this.Layer.batchDraw() }, this.CreateNewActivity = function (e, t) { void 0 == e && (e = this.GetDefaultPosition()), void 0 == t && (t = { IsAutoSchemeUpdate: !0, IsForSetState: !0 }), void 0 == t.Name && (t.Name = this.GetDefaultName()), 0 == this.designer.data.Activities.length && (t.IsInitial = !0), t.DesignerSettings && (t.DesignerSettings = new { X: e.x, Y: e.y }); var i = new WorkflowDesignerActivityControl({ x: e.x, y: e.y, item: t, designer: this.designer, manager: this }); return this.designer.data.Activities.push(t), this.ItemControls.push(i), i.Draw(), i.Sync(), i }, this.GetDefaultName = function () { for (var e = WorkflowDesignerConstants.ActivityNamePrefix, t = 1, i = 0; i < this.designer.data.Activities.length; i++) { var n = this.designer.data.Activities[i]; n.Name == e + t && (t++, i = -1) } return e + t }, this.GetDefaultPosition = function () { for (var e = this.designer.CorrectPossition({ x: 50, y: 50 }, this.Layer), t = this.designer.Settings.DefaultMoveStep / this.Layer.getScaleX(), i = 0; i < this.ItemControls.length; i++) { var n = this.ItemControls[i].control.getPosition(); n.x == e.x && n.y == e.y && (e.x += t, e.y += t, i = -1) } return e }, this.find = function (e) { if ("object" == typeof e && void 0 != e.Name) return this.find(e.Name); for (var t = 0; t < this.ItemControls.length; t++) if (this.ItemControls[t].GetName() == e) return this.ItemControls[t] }, this.getIntersectingActivity = function (e) { for (var t = 0; t < this.ItemControls.length; t++) { var i = this.ItemControls[t]; if (i.getIntersectingActivity(e)) return i } }, this.LayerSetOffset = function (e) { this.Layer.setOffset(e) }, this.LayerScale = function (e) { this.Layer.setScale({ x: this.Layer.getScale().x + e, y: this.Layer.getScale().y + e }) }, this.LayerScaleNorm = function (e) { this.Layer.setScale({ x: 1, y: 1 }), this.Layer.setOffset({ x: 0, y: 0 }) }, this.redrawTransitions = function () { return void 0 == this.cTransition && (this.cTransition = this.designer.GetComponentByType("WorkflowDesignerTransition")), this.cTransition.batchDraw() }, this.batchDraw = function () { this.Layer.batchDraw() }, this.DeselectAll = function () { this.ItemControls.forEach(function (e) { e.Deselect() }) }, this.GetSizeForSaveAsImage = function (e) { for (var t = 0; t < this.ItemControls.length; t++) { var i = this.ItemControls[t], n = i.rectangle.getAbsolutePosition(), o = n.x, r = n.y, a = o + i.rectangle.getWidth() * this.Layer.getScaleX(), s = r + i.rectangle.getHeight() * this.Layer.getScaleX(); o < e.x1 && (e.x1 = o), r < e.y1 && (e.y1 = r), a > e.x2 && (e.x2 = a), s > e.y2 && (e.y2 = s) } return e }, this.GetSelected = function () { var e = new Array; return this.ItemControls.forEach(function (t) { t.selected && e.push(t) }), e }, this.SelectByPosition = function (e) { this.ItemControls.forEach(function (t) { t.getIntersectingActivityRect(e) && t.Select() }) }, this.SelectByItem = function (e) { this.ItemControls.forEach(function (t) { t.item == e && t.Select() }) }, this.ObjectMove = function (e) { this.ItemControls.forEach(function (t) { t.selected && e.sender != t && t.ObjectMove(e.changepos) }), this.redrawTransitions() }, this.createTransitionAndActivity = function (e) { var t = { x: e.control.getX() + 2 * e.rectangle.attrs.width, y: e.control.getY() }, i = this.CreateNewActivity(t), n = this.designer.GetComponentByType("WorkflowDesignerTransition"); n.CreateNewTransition(e, i), this.designer.redrawAll() }, this.createTransition = function (e) { var t = this.designer.GetComponentByType("WorkflowDesignerTransition"); return t.CreateNewTransition(e) } } function WorkflowDesignerActivityControl(e) { var t = this; this.manager = e.manager, this.designer = e.designer, this.x = e.x, this.y = e.y, this.item = e.item, this.control = void 0, this.rectangle = void 0, this.text = void 0, this.deleteButton = void 0, this.createTransitionAndActivityButton = void 0, this.createTransitionButton = void 0, this.selected = !1, this.dependentTransitions = new Array, this.getX = function () { return this.rectangle.attrs.x + this.control.attrs.x }, this.getY = function () { return this.rectangle.attrs.y + this.control.attrs.y }, this.GetName = function () { return this.item.Name }, this.SetName = function (e) { this.item.Name = e }, this.Draw = function () { var i = t.designer.Settings; t.control = new Kinetic.Group({ x: e.x, y: e.y, rotationDeg: 0, draggable: !0, dragBoundFunc: function (e) { var n = (i.DefaultMoveStep * t.manager.Layer.getScaleX(), i.DefaultMoveStep * t.manager.Layer.getScaleY()), e = { x: Math.round(e.x / n) * n, y: Math.round(e.y / n) * n }; if (t.selected) { var o = this.getAbsolutePosition(); t.manager.ObjectMove({ sender: t, changepos: { x: e.x - o.x, y: e.y - o.y } }) } return e } }); var n = WorkflowDesignerConstants.ActivityColor; t.item.IsFinal && (n = WorkflowDesignerConstants.ActivityFinalColor), t.item.IsInitial && (n = WorkflowDesignerConstants.ActivityInitialColor), t.designer.GetCurrentActivity() == t.item.Name && (n = WorkflowDesignerConstants.ActivityCurrentColor), t.rectangle = new Kinetic.Rect({ x: 0, y: 0, width: this.designer.Settings.DefaultActivityWidth, height: this.designer.Settings.DefaultActivityHeight, stroke: "black", strokeWidth: 1, fill: n, shadowOpacity: .5 }), t.text = new Kinetic.Text({ x: 2, y: 2, text: this.GetName(), fontSize: 12, fontFamily: "Calibri", fontStyle: "bold", fill: "black" }), t.text.setX((t.rectangle.attrs.width - t.text.getWidth()) / 2), t.text.setY((t.rectangle.attrs.height - t.text.getHeight()) / 2 - 6), void 0 == t.item.State && (t.item.State = ""), t.stateText = new Kinetic.Text({ x: 2, y: 2, text: WorkflowDesignerConstants.ActivityFormLabel.State + ": " + t.item.State, fontSize: 10, fontFamily: "Calibri", fill: "black" }), t.stateText.setX((t.rectangle.attrs.width - t.stateText.getWidth()) / 2), t.stateText.setY(t.text.getY() + 15), t.deleteButton = new Kinetic.Image({ x: t.rectangle.attrs.width - 13, y: 3, image: t.manager.ImageDeleteActivity, width: 10, height: 10 }), t.createTransitionAndActivityButton = new Kinetic.Image({ x: t.rectangle.attrs.width - 13, y: t.rectangle.attrs.height - 26, image: t.manager.ImageCreateTransitionAndActivity, width: 10, height: 10 }), t.createTransitionButton = new Kinetic.Image({ x: t.rectangle.attrs.width - 13, y: t.rectangle.attrs.height - 13, image: t.manager.ImageCreateTransition, width: 10, height: 10 }), t.control.add(t.rectangle), t.control.add(t.text), t.control.add(t.stateText), t.control.add(t.deleteButton), t.control.add(t.createTransitionAndActivityButton), t.control.add(t.createTransitionButton), this.control.on("dragend", this.Sync), this.control.on("dragmove", this._onMove), this.control.on("click", this._onClick), this.control.on("dblclick", this._onDblClick), this.deleteButton.on("click", this._onDelete), this.createTransitionAndActivityButton.on("click", this._onCreateTransitionAndActivity), this.createTransitionButton.on("click", this._onCreateTransition), t.manager.Layer.add(t.control) }, this.Delete = function () { this.control.destroy(), this.designer.data.Activities.splice(this.designer.data.Activities.indexOf(this.item), 1), this.manager.ItemControls.splice(this.manager.ItemControls.indexOf(this), 1); for (var e = new Array, t = 0; t < this.dependentTransitions.length; t++) e.push(this.dependentTransitions[t]); for (var t = 0; t < e.length; t++) e[t].Delete() }, this.Select = function () { this.rectangle.setStrokeWidth(4), this.rectangle.setOpacity(.5), this.rectangle.setStroke(WorkflowDesignerConstants.SelectColor), this.selected = !0 }, this.Deselect = function () { this.rectangle.setStrokeWidth(1), this.rectangle.setOpacity(1), this.rectangle.setStroke("black"), this.selected = !1 }, this.ObjectMove = function (e) { var i = this.control.getAbsolutePosition(); if (i.x += e.x, i.y += e.y, this.control.setAbsolutePosition(i), this.Sync(), !(t.dependentTransitions.length < 1)) for (var n = 0; n < t.dependentTransitions.length; n++) t.dependentTransitions[n].Draw() }, this._onMove = function () { if (!(t.dependentTransitions.length < 1)) { for (var e = 0; e < t.dependentTransitions.length; e++) { var i = t.dependentTransitions[e]; i.Draw() } t.manager.redrawTransitions() } }, this._onClick = function (e) { var i = t.selected; e.evt.ctrlKey || t.designer.DeselectAll(), i ? t.Deselect() : t.Select(), t.manager.batchDraw() }, this._onDblClick = function () { t.designer.DeselectAll(), t.Select(), t.manager.batchDraw(), t.ShowProperties() }, this._onDelete = function () { confirm(WorkflowDesignerConstants.DeleteConfirm) && (t.Delete(), t.designer.redrawAll()) }, this._onCreateTransitionAndActivity = function () { t.manager.createTransitionAndActivity(t) }, this._onCreateTransition = function () { t.manager.createTransition(t) }, this.RegisterTransition = function (e) { for (var t = !1, i = 0; i < this.dependentTransitions.length; i++) if (this.dependentTransitions[i].GetName() == e.GetName()) { t = !0; break } t || this.dependentTransitions.push(e) }, this.UnregisterTransition = function (e) { for (var t = new Array, i = 0; i < this.dependentTransitions.length; i++) this.dependentTransitions[i].GetName() != e.GetName() && t.push(this.dependentTransitions[i]); this.dependentTransitions = t }, this.RegisterTransition = function (e) { for (var t = !1, i = 0; i < this.dependentTransitions.length; i++) if (this.dependentTransitions[i].GetName() == e.GetName()) { t = !0; break } t || this.dependentTransitions.push(e) }, this.UnregisterTransition = function (e) { for (var t = new Array, i = 0; i < this.dependentTransitions.length; i++) this.dependentTransitions[i].GetName() != e.GetName() && t.push(this.dependentTransitions[i]); this.dependentTransitions = t }, this.getRectPos = function () { var e = this.rectangle.getAbsolutePosition(), t = e.x, i = e.y, n = t + this.rectangle.getWidth() * this.manager.Layer.getScaleX(), o = i + this.rectangle.getHeight() * this.manager.Layer.getScaleY(); return { xl: t, yl: i, xr: n, yr: o } }, this.getIntersectingActivity = function (e) { var t = this.getRectPos(); return e.x >= t.xl && e.x < t.xr && e.y >= t.yl && e.y < t.yr }, this.getIntersectingActivityRect = function (e) { var t = this.getRectPos(); return e.xl > t.xr || e.xr < t.xl || e.yl > t.yr || e.yr < t.yl ? !1 : !0 }, this.ShowProperties = function () { var e = WorkflowDesignerConstants.ActivityFormLabel, i = [{ name: e.ImpOrder, code: "impOrder", field: "Order", type: "input", width: "40px" }, { name: e.ImpAction, code: "impAction", field: "ActionName", type: "select", datasource: t.designer.getActionNames() }, { name: e.ImpActionParameter, code: "impparam", field: "ActionParameter", type: "json" }], n = { type: "form", title: e.Title, width: "800px", data: this.item, elements: [{ name: e.Name, field: "Name", type: "input" }, { name: e.State, field: "State", type: "input" }, { name: e.IsInitial, field: "IsInitial", type: "checkbox" }, { name: e.IsFinal, field: "IsFinal", type: "checkbox" }, { name: e.IsForSetState, field: "IsForSetState", type: "checkbox" }, { name: e.IsAutoSchemeUpdate, field: "IsAutoSchemeUpdate", type: "checkbox" }, { name: e.Implementation, field: "Implementation", type: "table", elements: i, onrowadded: function (e) { var t = e.find("[name=impOrder]"); "" === t[0].value && (t[0].value = e.parent().children().length) } }, { name: e.PreExecutionImplementation, field: "PreExecutionImplementation", type: "table", elements: i, onrowadded: function (e) { var t = e.find("[name=impOrder]"); "" === t[0].value && (t[0].value = e.parent().children().length) } }], designer: t.designer }, o = new WorkflowDesignerForm(n), r = function (e, i) { var n = !0; return n &= e.CheckRequired([i], ["Name"], WorkflowDesignerConstants.FieldIsRequired), t.designer.data.Activities.forEach(function (o) { o != t.item && o.Name == i.Name && (n = !1, e.ControlAddError(i.control_Name, WorkflowDesignerConstants.FieldMustBeUnique)) }), e.CheckRequired(i.Implementation, ["ActionName", "Order"], WorkflowDesignerConstants.FieldIsRequired) || (n = !1), e.CheckRequired(i.PreExecutionImplementation, ["ActionName", "Order"], WorkflowDesignerConstants.FieldIsRequired) || (n = !1), n }, a = function (e) { return r(o, e) ? (o.ClearTempField(e), t.item.Name = e.Name, t.item.State = e.State, t.item.IsInitial = e.IsInitial, t.item.IsFinal = e.IsFinal, t.item.IsForSetState = e.IsForSetState, t.item.IsAutoSchemeUpdate = e.IsAutoSchemeUpdate, t.item.Implementation = e.Implementation, t.item.PreExecutionImplementation = e.PreExecutionImplementation, WorkflowDesignerCommon.DataCorrection(t.designer.data), t.designer.Draw(t.designer.data), !0) : !1 }; o.showModal(a) }, this.Sync = function () { void 0 == t.item.DesignerSettings && (t.item.DesignerSettings = {}); var e = t.control.getPosition(); t.item.DesignerSettings.X = e.x, t.item.DesignerSettings.Y = e.y } } function WorkflowDesignerBackground() { this.type = "WorkflowDesignerBackground", this.init = function (e) { var t = this; this.designer = e, this.BackgroundLayer = new Kinetic.Layer, this.designer.Stage.add(this.BackgroundLayer), this.BackgroundLayer.setZIndex(0), this.SelectionLayer = new Kinetic.Layer, this.designer.Stage.add(this.SelectionLayer), this.SelectionLayer.setZIndex(1); var i = new Image; i.onload = function () { t.RectBG.setFillPatternImage(i), t.BackgroundLayer.batchDraw() }, i.src = this.designer.Settings.imagefolder + "grid.gif", this.RectBG = new Kinetic.Rect({ x: 0, y: 0, width: 5e3, height: 5e3, draggable: !1, dragBoundFunc: function (e) { var i = (t.designer.Settings.DefaultMoveStep * t.BackgroundLayer.getScaleX(), t.designer.Settings.DefaultMoveStep * t.BackgroundLayer.getScaleY()), n = { x: Math.round(e.x / i) * i, y: Math.round(e.y / i) * i }; return t.designer.GraphLayerSetOffset(-n.x / t.BackgroundLayer.getScaleX(), -n.y / t.BackgroundLayer.getScaleY()), n }, designerparam: "background" }), this.BackgroundLayer.add(this.RectBG), this.BackgroundLayer.batchDraw(), this.designer.Stage.on("mousedown.background", function (e) { t._movemodeenabled || "background" != e.target.attrs.designerparam || (t._mousedownpos = t.designer.CorrectPossition({ x: e.evt.layerX, y: e.evt.layerY }, t.SelectionLayer)) }), this.designer.Stage.on("mousemove.backgrounde", function (e) { if (!t._movemodeenabled && t._mousedownpos) { var i = t.designer.CorrectPossition({ x: e.evt.layerX, y: e.evt.layerY }, t.SelectionLayer); t.DrawSelectionRect(i) } }), this.designer.Stage.on("mouseup.background", function (e) { if (!t._movemodeenabled && void 0 != t._mousedownpos) { var i = t.getSelectionRectPos(); void 0 == i ? e.evt.ctrlKey || t.designer.DeselectAll() : (Math.abs(i.xl - i.xr) > 10 || Math.abs(i.yl - i.yr) > 10) && (t.designer.DeselectAll(), t.designer.ComponentsExecute("SelectByPosition", i)) } t._mousedownpos = void 0, t.DeleteSelectionRect() }) }, this.setMoveModeEnabled = function (e) { this._movemodeenabled = e, this.RectBG.setDraggable(this._movemodeenabled) }, this.LayerScale = function (e) { this.BackgroundLayer.setScale({ x: this.BackgroundLayer.getScale().x + e, y: this.BackgroundLayer.getScale().y + e }) }, this.LayerScaleNorm = function (e) { this.BackgroundLayer.setScale({ x: 1, y: 1 }), this.SelectionLayer.setScale({ x: 1, y: 1 }), this.RectBG.setPosition({ x: 0, y: 0 }) }, this.DrawSelectionRect = function (e) { this.RectSelection ? (this.RectSelection.setWidth(e.x - this._mousedownpos.x), this.RectSelection.setHeight(e.y - this._mousedownpos.y)) : (this.RectSelection = new Kinetic.Rect({ x: this._mousedownpos.x, y: this._mousedownpos.y, width: e.x - this._mousedownpos.x, height: e.y - this._mousedownpos.y, draggable: !1, fill: "#66CCFF", opacity: .2 }), this.SelectionLayer.add(this.RectSelection)), this.SelectionLayer.batchDraw() }, this.DeleteSelectionRect = function (e) { this.RectSelection && (this.RectSelection.destroy(), this.RectSelection = void 0, this.SelectionLayer.batchDraw()) }, this.getSelectionRectPos = function () { if (void 0 != this.RectSelection) { var e = this.RectSelection.getAbsolutePosition(), t = e.x, i = e.y, n = t + this.RectSelection.getWidth() * this.SelectionLayer.getScaleX(), o = i + this.RectSelection.getHeight() * this.SelectionLayer.getScaleX(); return { xl: Math.min(t, n), yl: Math.min(i, o), xr: Math.max(t, n), yr: Math.max(i, o) } } } } function WorkflowDesignerKeyboard() { this.type = "WorkflowDesignerKeyboard", this.init = function (e) { this.designer = e } } function WorkflowDesignerToolbar() { this.type = "WorkflowDesignerToolbar"; var e = this; this.init = function (t) { this.designer = t, this.Layer = new Kinetic.Layer, this.designer.Stage.add(this.Layer), this.Layer.setZIndex(4); var i = 40, n = 10, o = 0; this.Items.forEach(function (t) { if (t.Hide) return; t.index = o, o++, t.separator || (t.ImageToolbar = new Image, t.ImageToolbar.onload = function () { t.cImageToolbar = new Kinetic.Image({ x: i + 40 * t.index, y: n, image: t.ImageToolbar, width: 32, height: 32, strokeWidth: 0 }), t.cImageToolbar.on("click", t.click), e.Layer.add(t.cImageToolbar), WorkflowDesignerTooltip(e.Layer, t.cImageToolbar, t.title), e.Layer.batchDraw() }, t.ImageToolbar.src = e.designer.Settings.imagefolder + t.img, t.imgactive && (t.ImageActiveToolbar = new Image, t.ImageActiveToolbar.src = e.designer.Settings.imagefolder + t.imgactive)) }), this.CreateInfoBlock({ x: i + 40 * (this.Items[this.Items.length - 1].index + 1), y: n - 7 }); var r = this.GetWorkflowDesignerBackground(); r.RectBG.setDraggable(!1) }, this.draw = function () { this.GraphRedrawAll() }, this.GraphRedrawAll = function () { this.UpdateInfoBlock(), this.Layer.batchDraw() }, this.CreateInfoBlock = function (e) { this.infoText = new Kinetic.Text({ text: this.GetInfoBlockText(), fontFamily: "Calibri", fontSize: 12, padding: 5, fill: "black" }), this.info = new Kinetic.Group(e), this.info.add(this.infoText), this.Layer.add(this.info) }, this.UpdateInfoBlock = function (e) { this.infoText.setText(this.GetInfoBlockText()) }, this.GetInfoBlockText = function () { var e = 0, t = 0, i = 0; return void 0 != this.designer.data && (e = this.designer.data.Activities.length, t = this.designer.data.Transitions.length, i = this.designer.data.Commands.length), WorkflowDesignerConstants.InfoBlockLabel.Activity + e + "\r\n" + WorkflowDesignerConstants.InfoBlockLabel.Transition + t + "\r\n" + WorkflowDesignerConstants.InfoBlockLabel.Command + i }, this.ToolbarMovePress = function () { var e = this.GetWorkflowDesignerBackground(); e.setMoveModeEnabled(!e._movemodeenabled); var t = this.GetItemByCode("move").cImageToolbar; e._movemodeenabled ? (t.setStrokeWidth(4), t.setStrokeEnabled(!0), t.setStroke(WorkflowDesignerConstants.SelectColor)) : (t.setStrokeEnabled(!1), t.setStroke("black")), this.Layer.batchDraw() }, this.GetWorkflowDesignerBackground = function () { return this.designer.GetComponentByType("WorkflowDesignerBackground") }, this.CreateActivity = function () { var e = this.designer.GetComponentByType("WorkflowDesignerActivity"); e.CreateNewActivity(), this.designer.redrawAll() }, this.AutoArrangement = function () { if (0 != e.designer.data.Activities.length) { var t = new Array; e.designer.data.Activities.forEach(function (e) { e.IsInitial && t.push(e) }), e.designer.data.Activities.forEach(function (i) { if (!i.IsInitial) { for (var n = !0, o = 0; o < e.designer.data.Transitions.length; o++) { var r = e.designer.data.Transitions[o]; if ("Direct" == r.Classifier && r.To == i) { n = !1; break } } n && t.push(i) } }), 0 == t.length && t.push(e.designer.data.Activities[0]); var i = { x: 80, y: 80 }, n = { x: 250, y: 150 }, o = Array(), r = function (t, i, a) { var s = { x: i.x, y: i.y }; a || (s.x += n.x); for (var d = new Array, l = 0; l < t.length; l++) { var c = t[l]; void 0 == c.DesignerSettings && (c.DesignerSettings = {}), !a && $.inArray(c, o) >= 0 || (c.DesignerSettings.X = s.x, o.push(c), d.push(c)) } for (var l = 0; l < d.length; l++) { var c = d[l]; l > 0 && (s.y += n.y); var h = new Array; e.designer.data.Transitions.forEach(function (e) { "Direct" == e.Classifier && e.From == c && h.push(e.To) }), c.DesignerSettings.Y = s.y; var m = r(h, { x: s.x, y: s.y }); s.y = m.y } return { x: s.x, y: s.y } }; r(t, i, !0), e.designer.data.Transitions.forEach(function (e) { void 0 == e.DesignerSettings && (e.DesignerSettings = {}), e.DesignerSettings.Bending = 0 }), e.designer.Draw(e.designer.data) } }, this.CopySelectedGenUniqueValue = function (e, t, i) { for (var n = e, o = 1; !0; o++) { for (var r = !1, a = 0; a < t.length; a++) if (t[a][i] == n) { r = !0; break } if (!r) break; n = e + "_" + o } return n }, this.CopySelected = function () { var t = this.designer.GetComponentByType("WorkflowDesignerActivity"), i = this.designer.GetComponentByType("WorkflowDesignerTransition"), n = t.GetSelected(), o = i.GetSelected(), r = []; n.forEach(function (t) { var i = JSON.parse(JSON.stringify(t.item)); i.DesignerSettings.Y += 150, i.Name = e.CopySelectedGenUniqueValue(i.Name, e.designer.data.Activities, "Name"), r.push({ oldItem: t.item, newItem: i }), e.designer.data.Activities.push(i) }); var a = []; o.forEach(function (t) { for (var i = t.item.From, n = t.item.To, o = 0; o < r.length; o++) i == r[o].oldItem && (i = r[o].newItem), n == r[o].oldItem && (n = r[o].newItem); var s = JSON.parse(JSON.stringify(t.item)); s.Name = e.CopySelectedGenUniqueValue(s.Name, e.designer.data.Transitions, "Name"), s.From = i, s.To = n, a.push({ oldItem: t.item, newItem: s }), e.designer.data.Transitions.push(s) }), WorkflowDesignerCommon.DataCorrection(e.designer.data), e.designer.Draw(e.designer.data), r.forEach(function (e) { t.SelectByItem(e.newItem) }), a.forEach(function (e) { i.SelectByItem(e.newItem) }) }, this.EditLocalization = function () { var t = WorkflowDesignerConstants.LocalizationFormLabel, i = { type: "table", title: t.Title, width: "800px", data: this.designer.data.Localization, datadefault: { Culture: "en-US", Type: "State" }, elements: [{ name: t.ObjectName, field: "ObjectName", type: "input" }, { name: t.Type, field: "Type", type: "select", displayfield: "Name", valuefield: "Value", datasource: [{ Name: t.Types[0], Value: "Command" }, { Name: t.Types[1], Value: "State" }, { Name: t.Types[2], Value: "Parameter" }] }, { name: t.IsDefault, field: "IsDefault", type: "checkbox" }, { name: t.Culture, field: "Culture", type: "input" }, { name: t.Value, field: "Value", type: "input" }] }, n = new WorkflowDesignerForm(i), o = function (t, o) { return n.CheckRequired(t, ["ObjectName", "Type", "Culture", "Value"], WorkflowDesignerConstants.FieldIsRequired) && n.CheckUnique(t, ["ObjectName", "Type", "Culture"], WorkflowDesignerConstants.FieldMustBeUnique) ? (n.ClearTempField(t), e.SyncTable(e.designer.data.Localization, t, i), !0) : !1 }; n.showModal(o) }, this.EditTimer = function () { var t = WorkflowDesignerConstants.TimerFormLabel, i = { type: "table", title: t.Title, width: "800px", data: this.designer.data.Timers, keyproperty: "Name", elements: [{ name: t.Name, field: "Name", type: "input" }, { name: t.Type, field: "Type", type: "select", datasource: this.designer.data.AdditionalParams.TimerTypes }, { name: t.Value, field: "Value", type: "input" }, { name: t.NotOverrideIfExists, field: "NotOverrideIfExists", type: "checkbox" }] }, n = new WorkflowDesignerForm(i), o = function (t, o) { return n.CheckRequired(t, ["Name", "Type", "Value"], WorkflowDesignerConstants.FieldIsRequired) && n.CheckUnique(t, ["Name"], WorkflowDesignerConstants.FieldMustBeUnique) ? (n.ClearTempField(t), void 0 == e.designer.data.Timers && (e.designer.data.Timers = []), e.SyncTable(e.designer.data.Timers, t, i), !0) : !1 }; n.showModal(o) }, this.EditActors = function () { var t = WorkflowDesignerConstants.ActorFormLabel, i = { type: "table", title: t.Title, width: "800px", data: this.designer.data.Actors, keyproperty: "Name", elements: [{ name: t.Name, field: "Name", type: "input" }, { name: t.Rule, field: "Rule", type: "select", datasource: this.designer.getActorConditions() }, { name: t.Value, field: "Value", type: "select", datasource: this.designer.getActorNames() }], designer: e.designer }, n = new WorkflowDesignerForm(i), o = function (t, o) { return n.CheckRequired(t, ["Name", "Rule"], WorkflowDesignerConstants.FieldIsRequired) && n.CheckUnique(t, ["Name"], WorkflowDesignerConstants.FieldMustBeUnique) ? (n.ClearTempField(t), e.SyncTable(e.designer.data.Actors, t, i), !0) : !1 }; n.showModal(o) }, this.EditParameters = function () { var e = WorkflowDesignerConstants.ParameterFormLabel, t = this, i = function (e, i, n) { for (var o = void 0, r = e.getEditData(e.parameters), a = 0; a < r.length; a++) { var s = r[a]; if (s.control_InitialValue.id === i.id) { o = s.Type; break } } void 0 != o && t.designer.designer.getemptytype(encodeURIComponent(o), n) }, n = { type: "table", title: e.Title, width: "900px", data: this.designer.data.Parameters, datadefault: { Purpose: "Persistence" }, keyproperty: "Name", elements: [{ name: e.Name, field: "Name", type: "input" }, { name: e.Type, field: "Type", type: "input", datasource: this.designer.getTypeNames(), width: "35%" }, { name: e.Purpose, field: "Purpose", type: "select", displayfield: "Name", datasource: [{ Name: "Temporary" }, { Name: "Persistence" }, { Name: "System" }] }, { name: e.InitialValue, field: "InitialValue", type: "json", width: "25%", getemptytype: i }], top: $('
'), beforerowadded: function (e) { void 0 != e.Type && (e.Type = decodeURIComponent(e.Type)) }, onrowadded: function (e) { var t = e.find("[name=Purpose]"), i = t[0]; t.change(function () { s(e) }), void 0 != i && "System" !== i.value && e.find('[name=Purpose] option[value="System"]').remove(), s(e) }, designer: t.designer }, o = new WorkflowDesignerForm(n), r = function () { for (var e = $(o.window.find(".WorkflowDesignerTable"))[0], t = 0; t < e.rows.length; t++) { var i = $(e.rows[t]), n = i.find("[name=Purpose]")[0]; void 0 != n && "System" === n.value && i.hide() } }, a = function () { for (var e = $(o.window.find(".WorkflowDesignerTable"))[0], t = 0; t < e.rows.length; t++) { var i = $(e.rows[t]), n = i.find("[name=Purpose]")[0]; void 0 != n && "System" === n.value && i.show() } }, s = function (e) { var t = e.find("[name=Purpose]")[0]; void 0 != t && "System" === t.value ? (e.find(":input").attr("readonly", !0), e.find("[name=Purpose]").attr("disabled", !0), e.find("[name=InitialValue]").val(""), e.find(".btnDelete").remove()) : void 0 != t && "Temporary" === t.value ? (e.find("[name=InitialValue]").attr("readonly", !0), e.find("[name=InitialValue]").val("")) : void 0 != t && "Persistence" === t.value && e.find("[name=InitialValue]").attr("readonly", !1) }, d = function () { for (var e = $(o.window.find(".WorkflowDesignerTable"))[0], t = 0; t < e.rows.length; t++) { var i = $(e.rows[t]); s(i) } }; n.top.append('"), n.top.buttonset().click(function (e, t) { var i = n.top.buttonset().first()[0].childNodes[0].checked; i ? a() : r() }); var l = function (e, i) { if (o.CheckRequired(e, ["Name", "Type", "Purpose", "Parameter"], WorkflowDesignerConstants.FieldIsRequired) && o.CheckUnique(e, ["Name"], WorkflowDesignerConstants.FieldMustBeUnique)) { o.ClearTempField(e), t.SyncTable(t.designer.data.Parameters, e, n); for (var r = 0; r < t.designer.data.Parameters.length; r++) { var a = t.designer.data.Parameters[r].Type; t.designer.data.Parameters[r].Type = encodeURIComponent(a) } return !0 } return !1 }; o.showModal(l), r(), d() }, this.EditCodeActions = function () { var t = WorkflowDesignerConstants.CodeActionsFormLabel, i = { type: "table", title: t.Title, width: "800px", data: this.designer.data.CodeActions, datadefault: {}, elements: [{ name: t.Name, field: "Name", type: "input" }, { name: t.Type, field: "Type", type: "select", displayfield: "Name", datasource: [{ Name: "Action" }, { Name: "Condition" }, { Name: "RuleGet" }, { Name: "RuleCheck" }] }, { name: t.IsGlobal, field: "IsGlobal", type: "checkbox" }, { name: t.ActionCode, field: "ActionCode", type: "code" }], designer: e.designer }, n = new WorkflowDesignerForm(i), o = function (t, o) { if (n.CheckRequired(t, ["Name", "Type", "ActionCode.code"], WorkflowDesignerConstants.FieldIsRequired) && n.CheckUnique(t, ["Name", "Type"], WorkflowDesignerConstants.FieldMustBeUnique)) { n.ClearTempField(t), e.SyncTable(e.designer.data.CodeActions, t, i); for (var r = 0; r < e.designer.data.CodeActions.length; r++) { var a = e.designer.data.CodeActions[r].ActionCode; e.designer.data.CodeActions[r].ActionCode = encodeURIComponent(a.code), e.designer.data.CodeActions[r].Usings = encodeURIComponent(a.usings) } return !0 } return !1 }; n.showModal(o) }, this.EditCommands = function () { var e = WorkflowDesignerConstants.CommandFormLabel, t = this, i = function (e, i, n) { for (var o = void 0, r = void 0, a = e.getEditData(e.parameters), s = 0; s < a.length; s++) { var d = a[s]; if (void 0 != d.InputParameters) for (var l = 0; l < d.InputParameters.length; l++) if (d.InputParameters[l].control_DefaultValue.id === i.id) { r = d.InputParameters[l].Parameter.Name; break } } if (void 0 != r) for (var c = t.designer.data.Parameters, s = 0; s < c.length; s++) if (c[s].Name === r) { o = c[s].Type; break } void 0 != o && t.designer.designer.getemptytype(o, n) }, n = { type: "table", title: e.Title, width: "900px", data: this.designer.data.Commands, datadefault: {}, keyproperty: "Name", elements: [{ name: e.Name, field: "Name", type: "input" }, { name: e.InputParameters, field: "InputParameters", type: "table", elements: [{ name: e.InputParametersName, code: "ipname", field: "Name", type: "input" }, { name: e.InputParametersParameter, code: "ipparameter", field: "Parameter.Name", type: "select", displayfield: "Name", datasource: this.designer.getNonSystemParameters() }, { name: e.InputParametersIsRequired, code: "iisrequired", field: "IsRequired", type: "checkbox" }, { name: e.InputParametersDefaultValue, code: "idefaultvalue", field: "DefaultValue", type: "json", width: "40%", getemptytype: i }] }], designer: t.designer }, o = new WorkflowDesignerForm(n), r = function (e, t) { var i = !0; return i &= e.CheckRequired(t, ["Name"], WorkflowDesignerConstants.FieldIsRequired), i &= e.CheckUnique(t, ["Name"], WorkflowDesignerConstants.FieldMustBeUnique), t.forEach(function (t) { e.CheckRequired(t.InputParameters, ["Name", "Parameter.Name"], WorkflowDesignerConstants.FieldIsRequired) || (i = !1) }), i }, a = function (e) { return r(o, e) ? (o.ClearTempField(e), t.SyncTable(t.designer.data.Commands, e, n), WorkflowDesignerCommon.DataCorrection(t.designer.data), t.GraphRedrawAll(), !0) : !1 }; o.showModal(a) }, this.EditAdditionalParameters = function () { var e = WorkflowDesignerConstants.AdditionalParamsFormLabel, t = { type: "form", title: e.Title, width: "800px", data: this.designer.data.AdditionalParams, readonly: !0, elements: [{ name: e.IsObsolete, field: "IsObsolete", type: "checkbox" }, { name: e.DefiningParameters, field: "DefiningParameters", type: "textarea" }, { name: e.ProcessParameters, field: "ProcessParameters", type: "table", elements: [{ name: e.ProcessParametersName, field: "Name", type: "input" }, { name: e.ProcessParametersValue, field: "Value", type: "input" }] }] }, i = new WorkflowDesignerForm(t), n = function (e, t) { return !0 }; i.showModal(n) }, this.Items = [{ title: WorkflowDesignerConstants.ToolbarLabel.CreateActivity, img: "designer.tb.add.png", click: function () { e.CreateActivity() } }, { title: WorkflowDesignerConstants.ToolbarLabel.CopySelected, img: "designer.tb.copy.png", click: function () { e.CopySelected() } }, { title: WorkflowDesignerConstants.ButtonTextDelete, img: "designer.tb.delete.png", click: function () { e.designer.DeleteSelected() } }, { separator: !0 }, { title: WorkflowDesignerConstants.ToolbarLabel.Move, img: "designer.tb.move.png", code: "move", click: function () { e.ToolbarMovePress() } }, { title: WorkflowDesignerConstants.ToolbarLabel.ZoomIn, img: "designer.tb.zoomIn.png", click: function () { e.designer.GraphLayerScale(.1) } }, { title: WorkflowDesignerConstants.ToolbarLabel.ZoomOut, img: "designer.tb.zoomOut.png", click: function () { e.designer.GraphLayerScale(-.1) } }, { title: WorkflowDesignerConstants.ToolbarLabel.ZoomPositionDefault, img: "designer.tb.zoomnorm.png", click: function () { e.designer.GraphLayerScaleNorm() } }, { title: WorkflowDesignerConstants.ToolbarLabel.AutoArrangement, img: "designer.tb.arrangment.png", click: function () { e.AutoArrangement() } }, { separator: !0 }, { title: WorkflowDesignerConstants.ToolbarLabel.Actors, img: "designer.tb.actor.png", click: function () { e.EditActors() } }, { title: WorkflowDesignerConstants.ToolbarLabel.Commands, img: "designer.tb.command.png", click: function () { e.EditCommands() } }, { title: WorkflowDesignerConstants.ToolbarLabel.Parameters, img: "designer.tb.parameter.png", click: function () { e.EditParameters() } }, { title: WorkflowDesignerConstants.ToolbarLabel.Localization, img: "designer.tb.locale.png", click: function () { e.EditLocalization() } }, { title: WorkflowDesignerConstants.ToolbarLabel.Timers, img: "designer.tb.timer.png", click: function () { e.EditTimer() } }, { title: WorkflowDesignerConstants.ToolbarLabel.CodeActions, img: "designer.tb.codeactions.png", Hide: hideCodedActions, click: function () { e.EditCodeActions() } }, { title: WorkflowDesignerConstants.ToolbarLabel.AdditionalParameters, img: "designer.tb.additionalparameters.png", click: function () { e.EditAdditionalParameters() } }], this.GetItemByCode = function (e) { for (var t = 0; t < this.Items.length; t++) { var i = this.Items[t]; if (i.code == e) return i } }, this.SyncTable = function (e, t, i) { if (void 0 == i.keyproperty) { e.splice(0, e.length); for (var n = 0; n < t.length; n++) { var o = {}; i.elements.forEach(function (e) { o[e.field] = t[n][e.field] }), e.push(o) } } else { for (var n = e.length - 1; n >= 0; n--) { var r = $.grep(t, function (t) { return e[n][i.keyproperty] == t.keyproperty }); 0 == r.length ? e.splice(n, 1) : i.elements.forEach(function (t) { e[n][t.field] = r[0][t.field] }) } for (var n = 0; n < t.length; n++) { var r = $.grep(e, function (e) { return t[n][i.keyproperty] == e[i.keyproperty] }); if (0 == r.length) { var o = {}; i.elements.forEach(function (e) { o[e.field] = t[n][e.field] }), e.push(o) } } } } } function WorkflowDesignerTooltip(e, t, i, n) { var o = this; t.on("mouseover", function () { if (void 0 == t.ToolTip) { var o = new Kinetic.Label({ x: t.getX() + t.getWidth() / 2, y: t.getY() + 30, opacity: .75 }); o.add(new Kinetic.Tag({ fill: "black", pointerDirection: "up", pointerWidth: 10, pointerHeight: 10, lineJoin: "round", shadowColor: "black", shadowBlur: 10, shadowOffset: 10, shadowOpacity: .5 })), o.add(new Kinetic.Text({ text: i, fontFamily: "Calibri", fontSize: 12, padding: 5, fill: "white" })), n ? (o.attrs.x = 0, o.attrs.y = 15, t.add(o)) : e.add(o), t.ToolTip = o, e.batchDraw() } }), t.on("mouseleave", function () { o.Destroy(t), e.batchDraw() }), this.Destroy = function (e) { void 0 != e.ToolTip && (e.ToolTip.destroy(), e.ToolTip = void 0) } } function WorkflowDesignerTransition() { this.type = "WorkflowDesignerTransition", this.init = function (e) { this.designer = e, this.Layer = new Kinetic.Layer, this.designer.Stage.add(this.Layer), this.Layer.setZIndex(2), this.designer = e, this.APLayer = new Kinetic.Layer, this.designer.Stage.add(this.APLayer), this.APLayer.setZIndex(3), this.ImageDelete = new Image, this.ImageDelete.src = this.designer.Settings.imagefolder + "designer.delete.png" }, this.ItemControls = new Array, this.draw = function () { null != this.ItemControls && this.ItemControls.forEach(function (e) { e.destroy() }), this.ItemControls = new Array; var e = this; void 0 != this.designer.data.Transitions && this.designer.data.Transitions.forEach(function (t) { var i = e.designer.GetComponentByType("WorkflowDesignerActivity"), n = new WorkflowDesignerTransitionControl({ from: i.find(t.From), to: i.find(t.To), item: t, designer: e.designer, manager: e }); e.ItemControls.push(n), n.Draw() }), this.batchDraw() }, this.batchDraw = function () { this.Layer.batchDraw(), this.APLayer.batchDraw() }, this.getIntersectingActivity = function (e) { var t = this.designer.GetComponentByType("WorkflowDesignerActivity"); return t.getIntersectingActivity(e) }, this.LayerSetOffset = function (e, t) { this.Layer.setOffset(e, t), this.APLayer.setOffset(e, t) }, this.LayerScale = function (e) { this.Layer.setScale({ x: this.Layer.getScale().x + e, y: this.Layer.getScale().y + e }), this.APLayer.setScale({ x: this.APLayer.getScale().x + e, y: this.APLayer.getScale().y + e }) }, this.LayerScaleNorm = function (e) { this.Layer.setScale({ x: 1, y: 1 }), this.Layer.setOffset({ x: 0, y: 0 }), this.APLayer.setScale({ x: 1, y: 1 }), this.APLayer.setOffset({ x: 0, y: 0 }) }, this.DeselectAll = function () { this.ItemControls.forEach(function (e) { e.Deselect() }) }, this.GetSelected = function () { var e = new Array; return this.ItemControls.forEach(function (t) { t.selected && e.push(t) }), e }, this.SelectByPosition = function (e) { this.ItemControls.forEach(function (t) { t.getIntersectingRect(e) && t.Select() }) }, this.SelectByItem = function (e) { this.ItemControls.forEach(function (t) { t.item == e && t.Select() }) }, this.CreateNewTransition = function (e, t) { var i = this; if (void 0 == t) { var n = e.control.getX() + e.rectangle.attrs.width, o = e.control.getY() + e.rectangle.attrs.height / 2, r = { x: n, y: o }, a = new WorkflowDesignerTransitionTempControl({ x: r.x, y: r.y, manager: this }); a.Draw(r.x + 10, r.y), this.batchDraw(); var s = function (e) { var t = i.designer.CorrectPossition({ x: e.evt.layerX, y: e.evt.layerY }, i.Layer); a.Redraw(t), i.Layer.batchDraw() }, d = function (t) { var n = { x: t.evt.layerX, y: t.evt.layerY }, o = i.getIntersectingActivity(n); void 0 != o && i.CreateNewTransition(e, o), a.Delete(), i.designer.Stage.off("mousemove.WorkflowDesignerTransitionTempControl", s), i.designer.Stage.off("mouseup.WorkflowDesignerTransitionTempControl", d), i.batchDraw() }; return this.designer.Stage.on("mousemove.WorkflowDesignerTransitionTempControl", s), this.designer.Stage.on("mouseup.WorkflowDesignerTransitionTempControl", d), a } var l = { Name: this.GetDefaultName(e.GetName(), t.GetName()), From: e.item, To: t.item, Trigger: { Type: "Auto" }, Conditions: [{ Type: "Always" }], AllowConcatenationType: "And", RestrictConcatenationType: "And", ConditionsConcatenationType: "And", Classifier: "Direct", DesignerSettings: {} }, c = new WorkflowDesignerTransitionControl({ from: e, to: t, item: l, designer: i.designer, manager: i }); return i.ItemControls.push(c), this.designer.data.Transitions.push(l), c.Draw(), c }, this.GetDefaultName = function (e, t) { for (var i = e + "_" + t + "_", n = 1, o = 0; o < this.designer.data.Transitions.length; o++) { var r = this.designer.data.Transitions[o]; r.Name == i + n && (n++, o = -1) } return i + n } } function WorkflowDesignerTransitionControl(e) { var t = this; this.manager = e.manager, this.designer = e.designer, this.from = e.from, this.to = e.to, this.item = e.item, this.setFrom = function (e) { this.from = e, this.item.From = e.item }, this.setTo = function (e) { this.to = e, this.item.To = e.item }, this.GetName = function () { return this.item.Name }, this.SetName = function (e) { this.item.Name = e }, this.control = void 0, this.arrow = void 0, this.line = void 0, void 0 == this.item.DesignerSettings || void 0 == this.item.DesignerSettings.Bending ? this.bending = 0 : this.bending = this.item.DesignerSettings.Bending, this.from.RegisterTransition(this), this.to.RegisterTransition(this), this.start = void 0, this.end = void 0, this.middle = void 0, this.angle = void 0, this.lineAngle = void 0, this.activePoint = void 0, this.touchpoints = [], this._getCBPoint = function (e, t, i, n, o, r, a) { var s, d = o, l = r; s = d < Math.PI / 2 && d > 0 ? 1 : d >= Math.PI / 2 ? -1 : 0 >= d && d > -Math.PI / 2 ? -1 : 1, s = (d > 0 ? 1 : -1) * s; var c = a * l * s, h = (e + i) / 2, m = (t + n) / 2, g = h - c * Math.cos(Math.PI / 2 + d), u = m - c * Math.sin(Math.PI / 2 + d); return { x: g, y: u } }, this.DrawTransition = function (e, t) { var i, n, o, r, a = this.bending, s = 50, d = this.from.rectangle, l = this.to.rectangle; i = this.from.getX(), n = this.from.getY(), o = this.to.getX(), r = this.to.getY(); var c, h, m, g, u = i + d.attrs.width / 2, f = n + d.attrs.height / 2, p = o + l.attrs.width / 2, y = r + l.attrs.height / 2; p >= u - s - l.attrs.width / 2 && p <= u + s + l.attrs.width / 2 && y >= f ? (c = u, h = n + d.attrs.height, m = p, g = r) : p >= u - s - l.attrs.width / 2 && p <= u + s + l.attrs.width / 2 && f > y ? (c = u, h = n, m = p, g = r + l.attrs.height) : u > p ? (c = i, h = f, m = o + l.attrs.width, g = y) : (c = i + d.attrs.width, h = n + d.attrs.height / 2, m = o, g = r + l.attrs.height / 2), void 0 != e && (c = e.x, h = e.y), void 0 != t && (m = t.x, g = t.y); var v = Math.atan2(g - h, m - c), C = this._getLineLength(c, h, m, g), w = this._getCBPoint(c, h, m, g, v, C, a), T = w.x, A = w.y, S = .5, b = Math.atan2(g - A, m - T), D = Math.PI / 10 * (a > 0 ? 1 : 0 > a ? -1 : 0); Math.abs(v) >= Math.PI / 2 && (D = -D), b += D; var k = void 0 == this.item.Classifier ? "notspecified" : this.item.Classifier.toLowerCase(), I = "notspecified" == k ? "gray" : "direct" == k ? "green" : "red"; if (this.start = { x: c, y: h }, this.end = { x: m, y: g }, this.middle = { x: T, y: A }, this.angle = b, this.lineAngle = v, this.control) WorkflowDesignerCommon.updateArrowByAngle(this.arrow, m, g, b, 15, I), this.line.setPoints([c, h, T, A, m, g]), this.line.setTension(S); else { this.control = new Kinetic.Group({ x: 0, y: 0, rotationDeg: 0 }), this.arrow = WorkflowDesignerCommon.createArrowByAngle(m, g, b, 15, I); var x = { points: [c, h, T, A, m, g], stroke: I, strokeWidth: 1, lineCap: "round", lineJoin: "round", tension: S }; this.item.IsFork && (x.dash = [10, 10]), this.line = new Kinetic.Line(x), this.control.add(this.line), this.control.add(this.arrow), this.manager.Layer.add(this.control) } }, this.DrawActivePoint = function () { if (this.activePoint) this._moveActivePoint(this.middle.x, this.middle.y); else { var e = this._createActivePoint(this.middle.x, this.middle.y, this.control); t.manager.APLayer.add(e), this.activePoint = e } }, this.DrawTouchPoints = function () { var e = .1 * this._getLineLength(this.start.x, this.start.y, this.end.x, this.end.y); if (2 == this.touchpoints.length) this._moveTouchPoints(this.touchpoints[0], this.start.x, this.start.y, e, this.angle, this.lineAngle), this._moveTouchPoints(this.touchpoints[1], this.end.x, this.end.y, e, this.angle, this.lineAngle, !0); else { var i = this._createTouchPoint(this.start.x, this.start.y, e, this.angle, this.lineAngle, this.control), n = this._createTouchPoint(this.end.x, this.end.y, e, this.angle, this.lineAngle, this.control, !0); t.manager.APLayer.add(i), t.manager.APLayer.add(n), this.touchpoints = [i, n] } }, this.Draw = function (e, t) { this.DrawTransition(e, t), this.DrawActivePoint(), this.DrawTouchPoints() }, this.DeleteTouchPoint = function (e) { for (var t = 0; t < this.touchpoints.length; t++) this.touchpoints[t].isend == e && this.touchpoints[t].destroy() }, this.Delete = function () { this.from.UnregisterTransition(this), this.to.UnregisterTransition(this), this.control.destroy(), void 0 != this.activePoint.ToolTip && this.activePoint.ToolTip.destroy(), this.activePoint.destroy(); for (var e = 0; e < this.touchpoints.length; e++) this.touchpoints[e].destroy(); this.designer.data.Transitions.splice(this.designer.data.Transitions.indexOf(this.item), 1), this.manager.ItemControls.splice(this.manager.ItemControls.indexOf(this), 1) }, this._onDelete = function () { confirm(WorkflowDesignerConstants.DeleteConfirm) && (t.Delete(), t.designer.redrawAll()) }, this.Select = function () { this.oldstroke = this.line.getStroke(), this.line.setStroke(WorkflowDesignerConstants.SelectColor), this.line.setStrokeWidth(3), this.selected = !0 }, this.Deselect = function () { this.line.setStrokeWidth(1), void 0 != this.oldstroke && this.line.setStroke(this.oldstroke), this.selected = !1 }, this._moveTouchPoints = function (e, t, i, n, o, r, a) { var s = 180 * r / Math.PI; e.setPosition({ x: t, y: i }), e.setRotationDeg(s), e.circle.setPosition({ x: (a ? -1 : 1) * n * Math.cos(-(o - r)), y: n * Math.sin(-(o - r)) }) }, this._createTouchPoint = function (e, t, i, n, o, r, a) { var s = this, d = 180 * o / Math.PI, l = new Kinetic.Group({ x: e, y: t, rotationDeg: d, draggable: !0 }); l.isend = a; var c = new Kinetic.Circle({ x: (a ? -1 : 1) * i * Math.cos(-(n - o)), y: i * Math.sin(-(n - o)), radius: 5, fill: "lightgray" }); l.add(c), l.circle = c, l.transition = r; var h = function () { var e = s.designer.CorrectPossition(c.getAbsolutePosition(), s.manager.Layer); void 0 == s.oldbending && (s.oldbending = s.bending), s.bending = 0; var t = e; a ? s.DrawTransition(void 0, t) : s.DrawTransition(t, void 0), s.DrawActivePoint(), s.DeleteTouchPoint(!a), s.manager.batchDraw() }; return l.on("dragmove", function () { h() }), l.on("dragend", function () { var e = c.getAbsolutePosition(), t = s.manager.getIntersectingActivity(e); void 0 != t ? (s.oldbending = void 0, s.bending = 0, s.Sync(), a ? (s.to.UnregisterTransition(s), s.setTo(t), s.to.RegisterTransition(s)) : (s.from.UnregisterTransition(s), s.setFrom(t), s.from.RegisterTransition(s)), s.Draw()) : (s.bending = s.oldbending, s.oldbending = void 0, s.Draw()) }), l }, this._moveActivePoint = function (e, t) { this.activePoint.setPosition({ x: e, y: t }) }, this._createActivePoint = function (e, t, i) { var n = this, o = new Kinetic.Group({ x: e, y: t, rotationDeg: 0, draggable: !0 }), r = new Kinetic.Circle({ x: 0, y: 0, radius: 15, fill: "lightgray" }); o.add(r); var a = "", s = this.item.Trigger.Type.toLowerCase(); "auto" == s ? a += "A" : "command" == s ? a += "C" : "timer" == s && (a += "T"); var d = this.item.Conditions[0].Type.toLowerCase(); "always" == d ? a += "A" : "action" == d ? a += "C" : "otherwise" == d && (a += "O"); var l = new Kinetic.Text({ x: -12, y: -11, text: a, fontSize: 20, fontFamily: "Calibri", fill: "black", fontStyle: "bold" }); o.add(l); var c = new Kinetic.Image({ x: 12, y: -20, image: this.manager.ImageDelete, width: 10, height: 10 }); c.on("click", this._onDelete), o.add(c), o.transition = i; var h = function (e, t) { var i = o.getPosition(); t ? n.bending = 0 : n.bending = n._getBendingKoeff(n.start.x, n.start.y, n.end.x, n.end.y, i.x, i.y), Math.abs(n.bending) < .07 && (n.bending = 0), n.DrawTransition(), n.DrawTouchPoints(), e && (n.DrawActivePoint(), n.Sync()), n.manager.batchDraw() }; o.on("click", function (e) { var t = n.selected; e.evt.ctrlKey || n.designer.DeselectAll(), t ? n.Deselect() : n.Select(), n.manager.batchDraw() }), o.on("dblclick", function () { n.designer.DeselectAll(), n.Select(), n.manager.batchDraw(), n.ShowProperties() }), o.on("dragmove", function () { h(!1) }), o.on("dragend", function () { h(!0) }); var m = "Trigger: " + this.item.Trigger.Type; return void 0 != n.item.Trigger && void 0 != n.item.Trigger.Command && "Command" == n.item.Trigger.Type && (m += " " + n.item.Trigger.Command.Name), void 0 != n.item.Trigger && void 0 != n.item.Trigger.Timer && "Timer" == n.item.Trigger.Type && (m += " " + n.item.Trigger.Timer.Name), m += "\r\nCondition: " + this.item.Conditions[0].Type, void 0 != n.item.Conditions[0] && "Action" == n.item.Conditions[0].Type && (m += " " + n.item.Conditions[0].ActionName), WorkflowDesignerTooltip(n.manager.Layer, o, m, !0), o }, this._getLineLength = function (e, t, i, n) { return Math.sqrt(Math.pow(i - e, 2) + Math.pow(n - t, 2)) }, this._getBendingKoeff = function (e, t, i, n, o, r) { var a = t - n, s = i - e, d = e * n - i * t; 0 >= s && (a = -a, s = -s, d = -d); var l = -(d + a * o) / s, c = r > l ? -1 : 1, h = this._getLineLength(e, t, i, n), m = (e + i) / 2, g = (t + n) / 2, u = this._getLineLength(m, g, o, r), f = u / h * c; return 0 == s && (f = -f), f }, this.getIntersectingRect = function (e) { var t = this.activePoint.getAbsolutePosition(); return t.x >= e.xl && t.x < e.xr && t.y >= e.yl && t.y < e.yr ? !0 : !1 }, this.ShowProperties = function () { var e = WorkflowDesignerConstants.TransitionFormLabel, i = { type: "form", title: e.Title, width: "800px", data: this.item, elements: [{ name: e.Name, field: "Name", type: "input" }, { name: e.From, field: "From.Name", type: "select", displayfield: "Name", datasource: t.designer.data.Activities }, { name: e.To, field: "To.Name", type: "select", displayfield: "Name", datasource: t.designer.data.Activities }, { name: e.Classifier, field: "Classifier", type: "select", datasource: ["Direct", "Reverse", "NotSpecified"] }, { name: e.Restrictions, field: "Restrictions", code: "restrictions", type: "table", datadefault: { Type: "Allow" }, elements: [{ name: e.RestrictionsType, code: "resttype", field: "Type", type: "select", datasource: ["Allow", "Restrict"] }, { name: e.RestrictionsActor, code: "restactor", field: "Actor.Name", type: "select", displayfield: "Name", datasource: t.designer.data.Actors }] }, { name: e.AllowConcatenationType, field: "AllowConcatenationType", type: "select", datasource: ["And", "Or"] }, { name: e.RestrictConcatenationType, field: "RestrictConcatenationType", type: "select", datasource: ["And", "Or"] }, { name: e.Trigger, field: "Trigger", code: "trigger", type: "form", datadefault: { Type: "Command" }, elements: [{ name: e.TriggerType, code: "triggertype", field: "Type", type: "select", datasource: ["Auto", "Command", "Timer"] }, { name: e.TriggerCommand, code: "triggercommand", field: "Command.Name", type: "select", displayfield: "Name", datasource: t.designer.data.Commands }, { name: e.TriggerTimer, code: "triggertimer", field: "Timer.Name", type: "select", displayfield: "Name", datasource: t.designer.data.Timers }] }, { name: e.Condition, field: "Conditions", code: "condition", type: "table", datadefault: { Type: "Always", ResultOnPreExecution: "Null" }, elements: [{ name: e.ConditionType, code: "conditiontype", field: "Type", type: "select", datasource: ["Always", "Action", "Otherwise"] }, { name: e.ConditionAction, code: "conditionaction", field: "Action.ActionName", type: "select", datasource: t.designer.getConditionNames() }, { name: e.ConditionActionParameter, code: "conditionactionparameter", field: "Action.ActionParameter", type: "json" }, { name: e.ConditionInversion, code: "conditioninversion", field: "ConditionInversion", type: "checkbox" }, { name: e.ResultOnPreExecution, code: "conditionresult", field: "ResultOnPreExecution", type: "select", datasource: ["True", "False"] }], onrowadded: function (e) { var t = e.find("[name=conditiontype]"), i = e.find("[name=conditionaction]"), n = e.find("[name=conditionresult]"), o = e.find("[name=conditionactionparameter]").parent().parent(), r = e.find("[name=conditioninversion]"), a = function () { var e = t[0].value; "Action" == e ? (i.show(), n.show(), o.show(), r.show()) : (i.hide(), n.hide(), o.hide(), r.hide()) }; t.on("change", a), a() } }, { name: e.ConditionsConcatenationType, field: "ConditionsConcatenationType", type: "select", datasource: ["And", "Or"] }, { name: e.IsFork, field: "IsFork", code: "isfork", type: "checkbox" }, { name: e.MergeViaSetState, field: "MergeViaSetState", code: "mergeviasetstate", type: "checkbox" }, { name: e.DisableParentStateControl, field: "DisableParentStateControl", code: "disableparentstatecontrol", type: "checkbox" }], renderFinalFunc: function (e) { var t = e.find("[name=restrictions]").parent().parent(), i = e.find("[name=triggertype]"), n = e.find("[name=isfork]"), o = e.find("[name=triggercommand]").parent().parent(), r = e.find("[name=triggertimer]").parent().parent(), a = $(e.find("[name=AllowConcatenationType]").parent().parent()), s = $(e.find("[name=RestrictConcatenationType]").parent().parent()), d = $(e.find("[name=ConditionsConcatenationType]").parent().parent()), l = e.find("[name=mergeviasetstate]").parent().parent(), c = e.find("[name=disableparentstatecontrol]").parent().parent(), h = function () { var e = i[0].value; "Command" == e ? (o.show(), r.hide(), t.show()) : "Timer" == e ? (o.hide(), r.show(), t.hide(), a.hide(), s.hide()) : (o.hide(), r.hide(), t.hide(), a.hide(), s.hide()) }; i.on("change", h), h(); var m = function () { var e = n[0].checked; e ? (l.show(), c.show()) : (l.hide(), c.hide()) }; n.on("change", m), m(); var g = a.find("[name=AllowConcatenationType]")[0].value.toLowerCase(), u = s.find("[name=RestrictConcatenationType]")[0].value.toLowerCase(), f = d.find("[name=ConditionsConcatenationType]")[0].value.toLowerCase(); "and" === g && a.hide(), "and" === u && s.hide(), "and" === f && d.hide(); var p = $(e.find("[name=restrictions]").parent().parent().children()[0]), y = $("").button({ icons: { primary: "ui-icon-wrench" }, text: !1 }).on("click", function () { a.is(":visible") && "and" === g ? a.hide() : a.show(), s.is(":visible") && "and" === u ? s.hide() : s.show() }); p.append(" "), p.append(y); var v = $(e.find("[name=condition]").parent().parent().children()[0]), C = $("").button({ icons: { primary: "ui-icon-wrench" }, text: !1 }).on("click", function () { d.is(":visible") && "and" === f ? d.hide() : d.show() }); v.append(" "), v.append(C) }, designer: t.designer }, n = new WorkflowDesignerForm(i), o = function (e, i) { var n = !0; n &= e.CheckRequired([i], ["Name"], WorkflowDesignerConstants.FieldIsRequired); var o = ["Type"]; "Command" == i.Trigger.Type ? o.push("Command.Name") : "Timer" == i.Trigger.Type && o.push("Timer.Name"), n &= e.CheckRequired([i.Trigger], o, WorkflowDesignerConstants.FieldIsRequired), i.Conditions.forEach(function (t) { o = ["Type"], "Action" == t.Type && o.push("Action.ActionName"), n &= e.CheckRequired([t], o, WorkflowDesignerConstants.FieldIsRequired), "Always" == t.Type && i.Conditions.length > 1 ? (n = !1, e.ControlAddError(t.control_Type, WorkflowDesignerConstants.AlwaysConditionShouldBeSingle)) : "Otherwise" == t.Type && i.Conditions.length > 1 && (n = !1, e.ControlAddError(t.control_Type, WorkflowDesignerConstants.OtherwiseConditionShouldBeSingle)) }); var r = $(i.control_Conditions.parent().parent().children()[0]).children("label"); return !i.Conditions.length > 0 ? (r.attr("title", WorkflowDesignerConstants.TransitionFormLabel.ConditionsListShouldNotBeEmpty), r.css("color", "red"), n = !1) : (r.attr("title", void 0), r.css("color", "")), t.designer.data.Transitions.forEach(function (o) { o != t.item && o.Name == i.Name && (n = !1, e.ControlAddError(i.control_Name, WorkflowDesignerConstants.FieldMustBeUnique)) }), e.CheckRequired(i.Restrictions, ["Type", "Actor.Name"], WorkflowDesignerConstants.FieldIsRequired) || (n = !1), n }, r = function (e) { return o(n, e) ? (n.ClearTempField(e), t.item.Name = e.Name, t.item.From.Name = e.From.Name, t.item.To.Name = e.To.Name, t.item.Classifier = e.Classifier, t.item.Restrictions = e.Restrictions, t.item.Trigger = e.Trigger, t.item.Conditions = e.Conditions, t.item.IsFork = e.IsFork, t.item.MergeViaSetState = e.MergeViaSetState, t.item.DisableParentStateControl = e.DisableParentStateControl, t.item.ConditionsConcatenationType = e.ConditionsConcatenationType, t.item.AllowConcatenationType = e.AllowConcatenationType, t.item.RestrictConcatenationType = e.RestrictConcatenationType, WorkflowDesignerCommon.DataCorrection(t.designer.data), t.designer.Draw(t.designer.data), !0) : !1 }; n.showModal(r) }, this.Sync = function () { t.item.DesignerSettings.Bending = t.bending }, this.destroy = function () { this.control.destroy(), this.activePoint.destroy(), this.touchpoints.forEach(function (e) { e.destroy() }) } } function WorkflowDesignerTransitionTempControl(e) { this.x = e.x, this.y = e.y, this.manager = e.manager, this.control = void 0, this.Draw = function (e, t) { this.control = new Kinetic.Group({ x: 0, y: 0, rotationDeg: 0 }), this.line = new Kinetic.Line({ points: [this.x, this.y, e, t], stroke: "#FFCC99", strrokeWidth: 1 }); var i = Math.atan2(t - this.y, e - this.x); this.arrow = WorkflowDesignerCommon.createArrowByAngle(e, t, i, 20, "#FFCC99"), this.control.add(this.line), this.control.add(this.arrow), this.manager.Layer.add(this.control) }, this.Redraw = function (e) { this.line.setPoints([this.x, this.y, e.x, e.y]); var t = Math.atan2(e.y - this.y, e.x - this.x); WorkflowDesignerCommon.updateArrowByAngle(this.arrow, e.x, e.y, t, 20, "#FFCC99") }, this.Delete = function () { this.control.destroy() } } function WorkflowDesignerForm(e) { this.type = "WorkflowDesignerForm", this.parameters = e, this.id = WorkflowDesignerCommon.createUUID(), this.isReadOnly = function () { return this.parameters.readonly }, this.showModal = function (e) { var t = this; t.window = $("
"), t.window.id = this.id; var i = void 0; "table" === this.parameters.type ? i = this.generateTable(this.parameters) : "form" === this.parameters.type && (i = this.generateForm(this.parameters)), void 0 == i && (i = new Array), void 0 != t.parameters.top && i.unshift(t.parameters.top), void 0 != t.parameters.bottom && i.push(t.parameters.bottom), t.window.append(i), void 0 != this.parameters.renderFinalFunc && this.parameters.renderFinalFunc(i), t.window.dialog({ modal: !0, title: this.parameters.title, width: this.parameters.width, maxHeight: WorkflowDesignerConstants.FormMaxHeight, beforeClose: function (i, n) { if (t.ClearError(), void 0 != e && !t.isReadOnly()) { var o = t.getEditData(t.parameters); return e(o, t.parameters) } }, close: function (e, t) { $(this).dialog("destroy").remove() } }) }, this.getEditData = function (e) { var t, i = this; if ("form" == e.type) t = {}, e.elements.forEach(function (e) { t["control_" + e.field] = e.control, "table" == e.type || "form" == e.type ? t[e.field] = i.getEditData(e) : i.SetValueByPropertyName(t, e.field, i.getEasyControlValue(e)) }); else if ("table" == e.type) { t = []; var n = e.control; if (e.elements.forEach(function (e) { var o = i.getElementCode(e), r = "[name=" + o + "]", a = n.find(r); if (void 0 != a) for (var s = 0; s < a.length; s++) void 0 == t[s] && (t[s] = {}), t[s]["control_" + e.field] = a[s], "table" == e.type || "form" == e.type ? t[s][e.field] = i.getEditData({ type: e.type, control: $(a[s]), elements: e.elements }) : i.SetValueByPropertyName(t[s], e.field, i.getEasyControlValue({ type: e.type, control: a[s] })) }), e.keyproperty) for (var o = n.children("tbody").children("tr"), r = 0; r < o.length; r++) void 0 == t[r] && (t[r] = {}), t[r].keyproperty = $(o[r]).attr("keyproperty") } return t }, this.generateForm = function (e, t) { var i = this, n = $('
'); n.attr("name", i.getElementCode(e)); var o = new Array; return e.elements.forEach(function (n) { var r = $(""); void 0 == t && (t = ""); var a = t + "_" + n.field, s = $(""); if (s[0].innerHTML = n.name, r.append($("").append(s)), "table" == n.type) { n.fieldFunc ? n.data = n.fieldFunc(e.data) : n.data = e.data[n.field]; var d = i.generateTable(n, a); r.append($("").append(d)) } else if ("form" == n.type) { n.fieldFunc ? n.data = n.fieldFunc(e.data) : n.data = e.data[n.field]; var d = i.generateForm(n, a); r.append($("").append(d)) } else { var l = i.generateEasyControls(n, i.GetValueByPropertyName(e.data, n.field), a); s[0]["for"] = l[0].id, n.control = l[0], r.append($("").append(l[0])) } o.push(r) }), e.control = n, n.append(o), n }, this.generateTable = function (e, t) { var i = this, n = $('
'); n.attr("name", i.getElementCode(e)); var o = $(""), r = $(""); e.elements.forEach(function (e) { var t = $(""); t[0].innerHTML = e.name, void 0 != e.width && (t[0].width = e.width), r.append(t) }), this.isReadOnly() || r.append(""), o.append(r), n.append(o); var a = function (o) { void 0 != e.beforerowadded && e.beforerowadded(o); var r = $(""); e.keyproperty && r.attr("keyproperty", o[e.keyproperty]), void 0 == t && (t = ""); var a = t + WorkflowDesignerCommon.createUUID(); if (e.elements.forEach(function (e) { if ("table" == e.type) { e.fieldFunc ? e.data = e.fieldFunc(o) : e.data = o[e.field]; var t = i.generateTable(e, a); r.append($("").append(t)) } else { var n = i.generateEasyControls(e, i.GetValueByPropertyName(o, e.field), a, o); r.append($("").append(n)) } }), !i.isReadOnly()) { var s = $(''); s[0].innerHTML = WorkflowDesignerConstants.ButtonTextDelete, s[0].href = "#", s.on("click", function () { return r.remove(), !1 }), r.append($("").append(s)) } n.append(r), void 0 != e.onrowadded && e.onrowadded(r) }; void 0 != e.data && e.data.forEach(function (e) { a(e) }), e.control = n; var s = new Array; if (s.push(n), !this.isReadOnly()) { var d = $(''); d[0].innerHTML = WorkflowDesignerConstants.ButtonTextCreate, d[0].href = "#", d.on("click", function () { var t = {}; return e.datadefault && (t = e.datadefault), a(t), !1 }), s.push(d) } return s }, this.generateEasyControls = function (e, t, i, n) { var o = this; if ("input" == e.type) { var r = $(''); if (r[0].id = this.generateid(e.field, i), r[0].name = o.getElementCode(e), void 0 != t && (r[0].value = t), o.isReadOnly() && r.attr("readonly", !0), void 0 != e.datasource) { var a = { minLength: 0, autoFocus: !0, source: e.datasource, open: function (e, t) { $(this).autocomplete("option", "appendTo", r[0].id), r[0].acwasopened || ($(this).autocomplete("close"), r[0].acwasopened = !0, $(this).autocomplete("search", r[0].value)) } }; r.autocomplete(a), r.autocomplete("option", "appendTo", r[0].id) } return r } if ("json" == e.type) { var r = $(''); r[0].id = this.generateid(e.field, i), r[0].name = o.getElementCode(e), void 0 != t && (r[0].value = t), o.isReadOnly() && r.attr("readonly", !0); var s = $(''); s[0].id = r[0].id + "_button"; var d = $('
' + r[0].value + "
"); return d[0].id = r[0].id + "_form", s.on("click", function (t) { var i = d.dialog({ autoOpen: !1, height: WorkflowDesignerConstants.EditJSONSettings.Height, width: WorkflowDesignerConstants.EditJSONSettings.Width, modal: !0, buttons: {}, close: function () { var e = ace.edit(r[0].id + "_editor").getValue(); r[0].value = o.toCompactJSON(e) } }), n = d.dialog("option", "buttons"); r[0].readOnly || $.extend(n, { format: { text: WorkflowDesignerConstants.EditJSONLabel.Format, click: function () { var e = ace.edit(r[0].id + "_editor").getValue(); a.setValue(o.toPrettyJSON(e)), a.clearSelection() } } }), void 0 == e.getemptytype || r[0].readOnly || $.extend(n, { createemptytype: { text: WorkflowDesignerConstants.EditJSONLabel.CreateEmptyType, click: function () { var t = e; void 0 != t.getemptytype && t.getemptytype(o, r[0], function (e) { void 0 != e && "" != e && (a.setValue(o.toPrettyJSON(e)), a.clearSelection()) }) } } }), d.dialog("option", "buttons", n); var a = ace.edit(r[0].id + "_editor"); r[0].readOnly ? a.setOptions({ readOnly: !0 }) : a.setOptions({ readOnly: !1 }), a.getSession().setMode("ace/mode/json"), a.setValue(o.toPrettyJSON(r[0].value)), a.clearSelection(), i.dialog("open") }), $('
').append($('
').append(s)).append($('
').append(r)) } if ("code" == e.type) { void 0 == t && (t = ""); var r = $(""); r[0].id = this.generateid(e.field, i), r[0].name = o.getElementCode(e), r[0].code = {}, r[0].code.code = decodeURIComponent(t); var l = n.Usings; l = void 0 == l ? o.parameters.designer.data.AdditionalParams.Usings.join(";") + ";" : decodeURIComponent(l), r[0].code.usings = l; var d = $('

' + WorkflowDesignerConstants.EditCodeLabel.Usings + '

' + this.htmlEncode(r[0].code.code) + '
}
'); return d[0].id = r[0].id + "_form", o.isReadOnly() && r.attr("disabled", !0), r.on("click", function (e) { var t = d.dialog({ autoOpen: !1, height: WorkflowDesignerConstants.EditCodeSettings.Height, width: WorkflowDesignerConstants.EditCodeSettings.Width, modal: !0, buttons: { compile: { text: WorkflowDesignerConstants.EditCodeLabel.Compile, click: function () { for (var e = o.getEditData(o.parameters), t = void 0, i = 0; i < e.length; i++) if (e[i].control_ActionCode.id == r[0].id) { t = e[i]; break } if (void 0 != t) { t.ActionCode = encodeURIComponent(ace.edit(r[0].id + "_editor").getValue()), t.Usings = encodeURIComponent($("#" + r[0].id + "_usingsedit")[0].value.replace(/(\r\n|\n|\r)/gm, "")); var n = function (e) { $('
' + (e.Success ? WorkflowDesignerConstants.EditCodeLabel.CompileSucceeded : e.Message) + "
").dialog({ modal: !0, height: e.Success ? WorkflowDesignerConstants.EditCodeSettingsSuccessBoxHeight : WorkflowDesignerConstants.EditCodeSettings.MessageBoxHeight, width: e.Success ? WorkflowDesignerConstants.EditCodeSettings.SuccessBoxWidth : WorkflowDesignerConstants.EditCodeSettings.MessageBoxWidth, buttons: { ok: { text: WorkflowDesignerConstants.EditCodeLabel.OK, click: function () { $(this).dialog("close") } } } }) }; o.parameters.designer.designer.compile(t, n) } } } }, close: function () { r[0].code = {}, r[0].code.code = ace.edit(r[0].id + "_editor").getValue(), r[0].code.usings = $("#" + r[0].id + "_usingsedit")[0].value.replace(/(\r\n|\n|\r)/gm, "") } }); $("#" + r[0].id + "_usingsedit")[0].value = o.htmlEncode(o.modifyUsingString(r[0].code.usings)), $("#" + r[0].id + "_usings").accordion({ collapsible: !0, active: !1, heightStyle: "content" }); var n = $("#" + o.generateid("Type", i))[0].value.toLowerCase(), a = $("#" + o.generateid("Name", i))[0].value; "" === a && (a = "???"); var s = "{"; "action" === n && (s = "void " + a + " (ProcessInstance processInstance, WorkflowRuntime runtime, string parameter) {"), "condition" === n && (s = "bool " + a + " (ProcessInstance processInstance, WorkflowRuntime runtime, string parameter) {"), "ruleget" === n && (s = "IEnumerable<string> " + a + " (ProcessInstance processInstance, WorkflowRuntime runtime, string parameter) {"), "rulecheck" === n && (s = "bool " + a + " (ProcessInstance processInstance, WorkflowRuntime runtime, string identityId, string parameter) {"), $("#" + r[0].id + "_function_upper").html(s); var l = ace.edit(r[0].id + "_editor"); l.getSession().setMode("ace/mode/csharp"), t.dialog("open") }), r } if ("checkbox" == e.type) { var r = $(''); return r[0].type = "checkbox", r[0].id = this.generateid(e.field, i), r[0].checked = t, r[0].name = o.getElementCode(e), o.isReadOnly() && r.attr("disabled", "disabled"), r } if ("select" == e.type) { var r = $(''); return r[0].id = this.generateid(e.field, i), r[0].name = o.getElementCode(e), r.append($("")), void 0 != e.datasource && e.datasource.forEach(function (i) { var n = $(""); void 0 == e.displayfield ? (n[0].value = i, n[0].innerHTML = i) : (n[0].value = i[e.displayfield], n[0].innerHTML = i[e.displayfield]), n[0].value == t && (n[0].selected = "selected"), o.isReadOnly() && r.attr("readonly", !0), r.append(n) }), r } if ("textarea" == e.type) { var r = $(''); return r[0].id = o.generateid(e.field, i), r[0].name = o.getElementCode(e), void 0 != t && (r[0].value = t), this.isReadOnly() && r.attr("readonly", !0), r } }, this.modifyUsingString = function (e) { var t = e.substring(e.length - 1); return ";" === t && (e = e.substring(0, e.length - 1)), e.split(";").join(";\r\n") + ";" }, this.getEasyControlValue = function (e) { return "input" == e.type ? e.control.value : "json" == e.type ? e.control.value : "code" == e.type ? e.control.code : "checkbox" == e.type ? e.control.checked : "select" == e.type ? e.control.value : "textarea" == e.type ? e.control.value : void 0 }, this.generateid = function (e, t) { return t ? e + "_" + t + "_" + this.id : e + "_" + this.id }, this.GetValueByPropertyName = function (e, t) { if (void 0 != e) { if (t.indexOf(".") < 0) return e[t]; var i = e; return t.split(".").forEach(function (e) { void 0 != i && (i = i[e]) }), i } }, this.SetValueByPropertyName = function (e, t, i) { if (t.indexOf(".") < 0) return e[t] = i; for (var n = e, o = t.split("."), r = 0; r < o.length; r++) { var a = o[r]; r == o.length - 1 ? n[a] = i : (void 0 == n[a] && (n[a] = {}), n = n[a]) } }, this.ClearError = function () { var e = this.window.find(".field-validation-error"); e.attr("title", ""), e.removeClass("field-validation-error") }, this.ControlAddError = function (e, t) { var i = $(e); i.addClass("field-validation-error"), i.attr("title", t) }, this.CheckRequired = function (e, t, i) { var n = this, o = !0; return e.forEach(function (e) { t.forEach(function (t) { "" == n.GetValueByPropertyName(e, t) && (n.ControlAddError(e["control_" + t], i), o = !1) }) }), o }, this.CheckUnique = function (e, t, i) { for (var n = this, o = !0, r = 0; r < e.length; r++) for (var a = r + 1; a < e.length; a++) this._checkUniqueEquals(e[r], e[a], t) && (t.forEach(function (t) { n.ControlAddError(e[r]["control_" + t], i), n.ControlAddError(e[a]["control_" + t], i) }), o = !1); return o }, this._checkUniqueEquals = function (e, t, i) { for (var n = 0; n < i.length; n++) { var o = i[n]; if (e[o] != t[o]) return !1 } return !0 }; var t = this; this.ClearTempField = function (e, i) { void 0 != e && (void 0 == i && (i = this.parameters.elements), i.forEach(function (n) { $.isArray(e) ? e.forEach(function (e) { t.ClearTempField(e, i) }) : void 0 != e["control_" + n.field] && (e["control_" + n.field] = void 0), n.elements && t.ClearTempField(e[n.field], n.elements) })) }, this.getElementCode = function (e) { return void 0 != e.code ? e.code : e.field }, this.htmlEncode = function (e) { return $("
").text(e).html() }, this.htmlDecode = function (e) { return $("
").html(e).text() }, this.toCompactJSON = function (e) { try { return JSON.stringify(JSON.parse(e)) } catch (t) { try { return JSON5.stringify(JSON5.parse(e)) } catch (t) { return e } } }, this.toPrettyJSON = function (e) { try { return JSON.stringify(JSON.parse(e), null, " ") } catch (t) { try { return JSON5.stringify(JSON5.parse(e), null, " ") } catch (t) { return e } } } } function WorkflowGraph(e, t, i, n) { var o = this; o.container = e, o.designer = t, void 0 == i && (i = new Object), void 0 == i.Container && (i.Container = "container"), void 0 == i.graphwidth && (i.graphwidth = 1024), void 0 == i.graphheight && (i.graphheight = 768), void 0 == i.DefaultActivityWidth && (i.DefaultActivityWidth = 150), void 0 == i.DefaultActivityHeight && (i.DefaultActivityHeight = 75), void 0 == i.DefaultMoveStep && (i.DefaultMoveStep = 10), void 0 == i.imagefolder && (i.imagefolder = "/Content/images/WorkFlow/"), this.Settings = i, this.Settings.ContainerStage = this.container + "_stage", $("#" + this.container).append("
"), this.Stage = new Kinetic.Stage({ container: this.Settings.ContainerStage, width: this.Settings.graphwidth, height: this.Settings.graphheight, stroke: "black" }), this.Components = new Array, this.AddComponent = function (e) { var t = new e; return t.init(this), o.Components.push(t), t }, this.GetComponentByType = function (e) { for (var t = 0; t < this.Components.length; t++) if (this.Components[t].type == e) return this.Components[t] }, this.ComponentsExecute = function (e, t) { o.Components.forEach(function (i) { i[e] && i[e](t) }) }, n && n.forEach(function (e) { o.AddComponent(e) }), this.Draw = function (e) { o.data = e, o.ComponentsExecute("draw") }, this.GraphLayerSetOffset = function (e, t) { o.ComponentsExecute("LayerSetOffset", { x: e, y: t }), o.redrawAll() }, this.GraphLayerScale = function (e) { o.ComponentsExecute("LayerScale", e), o.redrawAll() }, this.GraphLayerScaleNorm = function (e) { o.ComponentsExecute("LayerScaleNorm", e), o.redrawAll() }, this.DeselectAll = function () { o.ComponentsExecute("DeselectAll"), o.redrawAll() }, this.redrawAll = function () { o.ComponentsExecute("GraphRedrawAll"), o.Stage.batchDraw() }, this.CorrectPossition = function (e, t) { return 0 == t.getScaleX() || 0 == t.getScaleY() ? { x: t.getOffsetX(), y: 0 } : { x: e.x / t.getScaleX() + t.getOffsetX(), y: e.y / t.getScaleY() + t.getOffsetY() } }, this.DeleteSelected = function () { var e = new Array; this.Components.forEach(function (t) { t.GetSelected && (e = e.concat(t.GetSelected())) }), e.length > 0 && confirm(WorkflowDesignerConstants.DeleteConfirm) && (e.forEach(function (e) { e.Delete() }), this.redrawAll()) }, this.destroy = function () { this.Stage.destroy() }, this.GetCurrentActivity = function () { if (void 0 != o.data && void 0 != o.data.AdditionalParams && void 0 != o.data.AdditionalParams.ProcessParameters) for (var e = 0; e < o.data.AdditionalParams.ProcessParameters.length; e++) { var t = o.data.AdditionalParams.ProcessParameters[e]; if ("CurrentActivity" == t.Name) return t.Value } }, this.getActionNames = function () { for (var e = this, t = new Array, i = 0; i < e.data.CodeActions.length; i++) { var n = e.data.CodeActions[i]; "action" === n.Type.toLowerCase() && t.push(n.Name) } return e.data.AdditionalParams.Actions.concat(t) }, this.getConditionNames = function () { for (var e = this, t = new Array, i = 0; i < e.data.CodeActions.length; i++) { var n = e.data.CodeActions[i]; "condition" === n.Type.toLowerCase() && t.push(n.Name) } return e.data.AdditionalParams.Actions.concat(t) }, this.getActorNames = function () { return this.Settings.WorkFlowRoles; }, this.getActorConditions = function () { for (var e = this, t = new Array, i = 0; i < e.data.CodeActions.length; i++) { var n = e.data.CodeActions[i]; ("ruleget" === n.Type.toLowerCase() || "rulecheck" === n.Type.toLowerCase()) && t.push(n.Name) } var rt = $.unique(e.data.AdditionalParams.Rules.concat(t)) return rt }, this.getTypeNames = function () { for (var e = this, t = new Array, i = 0; i < e.data.Parameters.length; i++) { var n = e.data.Parameters[i]; t.push(decodeURIComponent(n.Type)) } return $.unique(e.data.AdditionalParams.Types.concat(t)) }, this.getNonSystemParameters = function () { for (var e = this, t = new Array, i = 0; i < e.data.Parameters.length; i++) { var n = e.data.Parameters[i]; "system" != n.Purpose.toLowerCase() && t.push(n) } return t } } var hideCodedActions=false; var WorkflowDesignerConstants = { SelectColor: "yellow", ActivityColor: "#F2F2F2", ActivityInitialColor: "#CCCC99", ActivityFinalColor: "#CC9966", ActivityCurrentColor: "#00CCCC", DeleteConfirm: "Are you sure you want to delete selected item(s)?", FieldIsRequired: "Field is required!", FieldMustBeUnique: "Field must be unique!", ButtonTextDelete: "Delete", ButtonTextCreate: "Create", InfoBlockLabel: { Activity: "Activity: ", Transition: "Transition: ", Command: "Command: " }, ActivityNamePrefix: "Activity_", ActivityFormLabel: { Title: "Activity", Name: "Name", State: "State", IsInitial: "Initial", IsFinal: "Final", IsForSetState: "For set state", IsAutoSchemeUpdate: "Auto scheme update", Implementation: "Implementation", PreExecutionImplementation: "PreExecution Implementation", ImpOrder: "Order", ImpAction: "Action", ImpActionParameter: "Action parameter", AlwaysConditionShouldBeSingle: "Always condition should be single", OtherwiseConditionShouldBeSingle: "Otherwise condition should be single" }, TransitionFormLabel: { Title: "Transition", Name: "Name", From: "From activity", To: "To activity", Classifier: "Classifier", Restrictions: "Restrictions", RestrictionsType: "Type", RestrictionsActor: "Actor", Condition: "Condition", ConditionType: "Type", ConditionAction: "Action", ResultOnPreExecution: "Result on PreExecution", Trigger: "Trigger", TriggerType: "Type", TriggerCommand: "Command", TriggerTimer: "Timer", ConditionActionParameter: "Action parameter", ConditionInversion: "Invert action result", ConditionsConcatenationType: "Conditions concatenation type", AllowConcatenationType: "Concat allow as", RestrictConcatenationType: "Concat restrict as", ConditionsListShouldNotBeEmpty: "Conditions list should not be empty", IsFork: "Is fork", MergeViaSetState: "Merge subprocess via set state", DisableParentStateControl: "Disable parent process control" }, LocalizationFormLabel: { Title: "Localization", ObjectName: "ObjectName", Type: "Type", IsDefault: "IsDefault", Culture: "Culture", Value: "Value", Types: ["Command", "State", "Parameter"] }, TimerFormLabel: { Title: "Timers", Name: "Name", Type: "Type", Value: "Value", Types: ["Command", "State", "Parameter"], NotOverrideIfExists: "Do not override timer if exists" }, ParameterFormLabel: { Title: "Parameters", Name: "Name", Type: "Type", Purpose: "Purpose", Value: "Value", InitialValue: "InitialValue", ShowSystemParameters: "Show system parameters" }, ActorFormLabel: { Title: "Actors", Name: "Name", Rule: "Rule", Value: "Value" }, CommandFormLabel: { Title: "Command", Name: "Name", InputParameters: "Input Parameters", InputParametersName: "Name", InputParametersIsRequired: "Required", InputParametersParameter: "Parameter", InputParametersDefaultValue: "Default" }, AdditionalParamsFormLabel: { Title: "Additional Parameters", IsObsolete: "IsObsolete", DefiningParameters: "Defining parameters", ProcessParameters: "Process parameters", ProcessParametersName: "Name", ProcessParametersValue: "Value" }, CodeActionsFormLabel: { Title: "Code actions", Name: "Name", ActionCode: "Action code", IsGlobal: "Is global", Type: "Type" }, ToolbarLabel: { CreateActivity: "Create activity", CopySelected: "Copy selected", Undo: "Undo", Redo: "Redo", Move: "Move", ZoomIn: "Zoom In", ZoomOut: "Zoom Out", ZoomPositionDefault: "Zoom and position default set", AutoArrangement: "Auto arrangement", Actors: "Actors", Commands: "Commands", Parameters: "Parameters", Localization: "Localization", Timers: "Timers", AdditionalParameters: "Additional Parameters", CodeActions: "Code actions" }, ErrorActivityIsInitialCountText: "One element must be marked flag Initial", ErrorReadOnlySaveText: "The Designer in ReadOnly mode, you can't save it.", FormMaxHeight: 500, EditCodeSettings: { Height: 600, Width: 1e3, CodeHeight: 390, MessageBoxHeight: 400, MessageBoxWidth: 600, SuccessBoxHeight: 150, SuccessBoxWidth: 300 }, EditCodeLabel: { Title: "Edit code", EditCodeButton: "Edit code", Usings: "Usings", Compile: "Compile", CompileSucceeded: "Compilation succeeded.", Success: "Success", Error: "Error", OK: "OK" }, EditJSONSettings: { Height: 600, Width: 1e3, CodeHeight: 480 }, EditJSONLabel: { Title: "Edit value in JSON", CreateEmptyType: "Create", Format: "Format" } }, WorkflowDesignerCommon = { createArrowByAngle: function (e, t, i, n, o) { void 0 == o && (o = "red"); var r = new Kinetic.Wedge({ x: e, y: t, radius: n, angle: 40, fill: o, rotation: 180 * i / Math.PI - 200 }); return r }, updateArrowByAngle: function (e, t, i, n, o, r) { void 0 == r && (r = "red"), e.setPosition({ x: t, y: i }), e.setRadius(o), e.setFill(r), e.setRotation(180 * n / Math.PI - 200) }, createUUID: function () { for (var e = [], t = "0123456789abcdef", i = 0; 36 > i; i++) e[i] = t.substr(Math.floor(16 * Math.random()), 1); e[14] = "4", e[19] = t.substr(3 & e[19] | 8, 1), e[8] = e[13] = e[18] = e[23] = "-"; var n = e.join(""); return n }, DataCorrection: function (e) { void 0 == e.AdditionalParams && (e.AdditionalParams = {}), void 0 == e.AdditionalParams.Actions && (e.AdditionalParams.Actions = []), void 0 == e.AdditionalParams.Rules && (e.AdditionalParams.Rules = []); var t = function (e, t) { if (void 0 != e) { var i = $.grep(t, function (t) { return t == e }); 0 == i.length && t.push(e) } }, i = function (e, t, i) { if (void 0 != e && void 0 != t) { var n = $.grep(t, function (t) { return e == t[i] }); return n.length > 0 ? n[0] : void 0 } }; e.Activities.forEach(function (i) { void 0 != i.Implementation && (i.Implementation.forEach(function (i) { t(i.Name, e.AdditionalParams.Actions) }), i.PreExecutionImplementation.forEach(function (i) { t(i.Name, e.AdditionalParams.Actions) })) }), e.Transitions.forEach(function (n) { void 0 != n.From && (n.From = i(n.From.Name, e.Activities, "Name")), void 0 != n.To && (n.To = i(n.To.Name, e.Activities, "Name")), void 0 != n.Restrictions && n.Restrictions.forEach(function (t) { t.Actor = i(t.Actor.Name, e.Actors, "Name") }), void 0 != n.Condition && void 0 != n.Condition.Action && t(n.Condition.Action.Name, e.AdditionalParams.Actions), void 0 != n.Trigger && void 0 != n.Trigger.Command && (n.Trigger.Command = i(n.Trigger.Command.Name, e.Commands, "Name")), void 0 != n.Trigger && void 0 != n.Trigger.Timer && (n.Trigger.Timer = i(n.Trigger.Timer.Name, e.Timers, "Name")) }), e.Commands.forEach(function (t) { void 0 != t.InputParameters && t.InputParameters.forEach(function (t) { t.Parameter = i(t.Parameter.Name, e.Parameters, "Name") }) }), e.Actors.forEach(function (i) { void 0 != i.Rule && t(i.Rule, e.AdditionalParams.Rules) }) }, download: function (e, t, i) { if (e && t) { var n = new Array; t.forEach(function (e) { var t = $(''); t.attr("name", e.name), t.attr("value", e.value), n.push(t) }); var o = $('
'); o.append(n), o.appendTo("body").submit().remove() } } };