UNPKG

processmaker-builder

Version:

The gulp task runner for ProcessMaker building

1,345 lines (1,298 loc) 1.46 MB
/*----------------------------------********---------------------------------*/ /**features-begins**/ var defaultRules = { 'bpmn:StartEvent': [ { code: '105101', description: 'Start Event must have an outgoing sequence flow'.translate(), type: 'bpmnStartEvent', severity: 'Error', criteria: function (shape, error) { var ref = shape.businessObject.elem; if (ref && !(ref.outgoing && ref.outgoing.length === 1)) { //add error shape.addErrorLog(error); } } }, { code: '105102', description: "Can't connect start event to subprocess".translate(), type: 'bpmnStartEvent', severity: 'Error', criteria: function (shape, error) { var ref = shape.businessObject.elem, refArray = ref.outgoing; if (ref && refArray && refArray.length === 1) { if (refArray[0].targetRef.$type === "bpmn:SubProcess") { //add error shape.addErrorLog(error); } } } }, { code: '105103', description: 'Invalid Connection between elements'.translate(), type: 'bpmnStartEvent', severity: 'Error', criteria: function (shape, error) { if(!shape.ValidateConnections()) { //add error shape.addErrorLog(error); } } } ], 'bpmnActivity': [ { code: '105201', description: 'Activity must have an incoming sequence flow'.translate(), type: 'bpmnActivity', severity: 'Error', criteria: function (shape, error) { var ref = shape.businessObject.elem; if (ref && !(ref.incoming && ref.incoming.length > 0 )) { //add error shape.addErrorLog(error); } } }, { code: '105202', description: 'Activity must have an outgoing sequence flow'.translate(), type: 'bpmnActivity', severity: 'Error', criteria: function (shape, error) { var ref = shape.businessObject.elem; if (ref && !(ref.outgoing && ref.outgoing.length === 1)) { //add error shape.addErrorLog(error); } } }, { code: '105203', description: 'Invalid Connection between elements'.translate(), type: 'bpmnActivity', severity: 'Error', criteria: function (shape, error) { if(!shape.ValidateConnections()) { //add error shape.addErrorLog(error); } } } ], 'bpmn:EndEvent': [ { code: '105301', description: 'End event must have an incoming sequence flow'.translate(), type: 'bpmnEndEvent', severity: 'Error', criteria: function (shape, error) { var ref = shape.businessObject.elem; if (ref && !(ref.incoming && ref.incoming.length > 0)) { //add error shape.addErrorLog(error); } } }, { code: '105302', description: 'Invalid Connection between elements'.translate(), type: 'bpmnEndEvent', severity: 'Error', criteria: function (shape, error) { if(!shape.ValidateConnections()) { //add error shape.addErrorLog(error); } } } ], 'bpmnIntermediateEvent': [ { code: '105401', description: 'Intermediate event must have one or more incoming sequence flow'.translate(), type: 'bpmnIntermediateEvent', severity: 'Error', criteria: function (shape, error) { var ref = shape.businessObject.elem; if (ref && !(ref.incoming && ref.incoming.length >= 1)) { //add error shape.addErrorLog(error); } } }, { code: '105402', description: 'Intermediate event must have an outgoing sequence flow'.translate(), type: 'bpmnIntermediateEvent', severity: 'Error', criteria: function (shape, error) { var ref = shape.businessObject.elem; if (ref && !(ref.outgoing && ref.outgoing.length === 1)) { //add error shape.addErrorLog(error); } } }, { code: '105403', description: 'Invalid Connection between elements'.translate(), type: 'bpmnIntermediateEvent', severity: 'Error', criteria: function (shape, error) { if(!shape.ValidateConnections()) { //add error shape.addErrorLog(error); } } } ], 'bpmnGateway': [ { code: '105501', description: 'Diverging Gateway must have an incoming sequence flow'.translate(), type: 'bpmnGateway', severity: 'Error', criteria: function (shape, error) { if (shape.gat_direction === 'CONVERGING') { error.description = 'Converging Gateway must have two or more incoming sequence flow'.translate(); var ref = shape.businessObject.elem; if (ref && !(ref.incoming && ref.incoming.length > 1)) { shape.addErrorLog(error); } } else { var ref = shape.businessObject.elem; if (ref && !(ref.incoming && ref.incoming.length === 1)) { //add error shape.addErrorLog(error); } } } }, { code: '105502', description: 'Diverging Gateway must have two or more outgoing sequence flow'.translate(), type: 'bpmnGateway', severity: 'Error', criteria: function (shape, error) { if (shape.gat_direction === 'CONVERGING') { error.description = 'Converging Gateway must have a outgoing sequence flow'.translate(); var ref = shape.businessObject.elem; if (ref && !(ref.outgoing && ref.outgoing.length === 1)) { shape.addErrorLog(error); } } else { var ref = shape.businessObject.elem; if (ref && !(ref.outgoing && ref.outgoing.length > 1)) { //add error shape.addErrorLog(error); } } } }, { code: '105503', description: 'Invalid Connection between elements'.translate(), type: 'bpmnGateway', severity: 'Error', criteria: function (shape, error) { if(!shape.ValidateConnections()) { //add error shape.addErrorLog(error); } } } ], 'bpmnSubProcess': [ { code: '105601', description: 'SubProcess must have an incoming sequence flow'.translate(), type: 'bpmnSubProcess', severity: 'Error', criteria: function (shape, error) { var ref = shape.businessObject.elem; if (ref && !(ref.incoming && ref.incoming.length > 0)) { //add error shape.addErrorLog(error); } } }, { code: '105602', description: 'SubProcess must have an outgoing sequence flow'.translate(), type: 'bpmnSubProcess', severity: 'Error', criteria: function (shape, error) { var ref = shape.businessObject.elem; if (ref && !(ref.outgoing && ref.outgoing.length === 1)) { //add error shape.addErrorLog(error); } } }, { code: '105603', description: 'Invalid Connection between elements'.translate(), type: 'bpmnSubProcess', severity: 'Error', criteria: function (shape, error) { if(!shape.ValidateConnections()) { //add error shape.addErrorLog(error); } } } ] }; /**features-ends**/ /*----------------------------------********---------------------------------*/ var defaultCrown = { items: [ { id: "task", name: "Task".translate(), className: "mafe-corona-task", eventOnClick: function (item) { item.parent.hide(); }, eventOnMouseDown: function (item) { item.canvas.canCreateShape = true; item.canvas.canCreateShapeType = 'TASK'; item.canvas.canCreateShapeClass = 'mafe-toolbar-task'; item.canvas.connectStartShape = item.parent.parent; } }, { id: "gateway", name: 'Gateway'.translate(), className: 'mafe-corona-gateway-exclusive', eventOnClick: function (item) { item.parent.hide(); }, eventOnMouseDown: function (item) { item.canvas.canCreateShape = true; item.canvas.canCreateShapeType = 'EXCLUSIVE'; item.canvas.canCreateShapeClass = 'mafe-toolbar-gateway-exclusive'; item.canvas.connectStartShape = item.parent.parent; } }, { id: "intermediate", name: 'Intermediate'.translate(), className: 'mafe-corona-intermediate', eventOnClick: function (item) { item.parent.hide(); }, eventOnMouseDown: function (item) { item.canvas.canCreateShape = true; item.canvas.canCreateShapeType = 'INTERMEDIATE_EMAIL'; item.canvas.canCreateShapeClass = 'mafe-toolbar-intermediate-send-mesage'; item.canvas.connectStartShape = item.parent.parent; } }, { id: "end", name: 'End'.translate(), className: 'mafe-corona-end', eventOnClick: function (item) { item.parent.hide(); }, eventOnMouseDown: function (item) { item.canvas.canCreateShape = true; item.canvas.canCreateShapeType = 'END'; item.canvas.canCreateShapeClass = 'mafe-toolbar-end'; item.canvas.connectStartShape = item.parent.parent; } }, { id: "flow", name: 'Flow'.translate(), className: 'mafe-corona-flow', eventOnClick: function (item) { item.parent.hide(); item.parent.parent.canvas.hideAllFocusedLabels(); }, eventOnMouseDown: function (item) { item.canvas.canConnect = true; item.canvas.connectStartShape = item.parent.parent; } }, { id: "properties", name: 'Properties'.translate(), className: 'mafe-corona-settings', eventOnClick: function (item) { item.parent.hide(); PMDesigner.saveAndOpenSettings(item.parent.parent, PMDesigner.shapeProperties); } }, { id: "delete", name: 'Delete'.translate(), className: 'mafe-corona-delete', eventOnClick: function (item) { PMUI.getActiveCanvas().removeElements(); } } ] }; var configCrown = { 'PMActivity': { 'DEFAULT': { order: ["task", "gateway", "intermediate", "end", "flow", "properties", "delete"], rows: 3, cols: 3 } }, 'PMGateway': { 'PARALLEL': { order: ["task", "gateway", "end", "flow", "delete"], rows: 3, cols: 2 }, 'EXCLUSIVE': { order: ["task", "gateway", "end", "flow", "properties", "delete"], rows: 3, cols: 2 }, 'INCLUSIVE': { order: ["task", "gateway", "end", "flow", "properties", "delete"], rows: 3, cols: 2 } }, 'PMEvent': { 'START_EMPTY': { order: ["task", "gateway", "intermediate", "flow", "delete"], rows: 3, cols: 2 }, 'START_MESSAGECATCH': { order: ["task", "gateway", "intermediate", "flow", "properties", "delete"], rows: 3, cols: 2 }, 'START_TIMER': { order: ["task", "gateway", "intermediate", "flow", "properties", "delete"], rows: 3, cols: 2 }, 'START_CONDITIONAL': { order: ["task", "gateway", "intermediate", "flow", "delete"], rows: 3, cols: 2 }, 'START_SIGNALCATCH': { order: ["task", "gateway", "intermediate", "flow", "delete"], rows: 3, cols: 2 }, 'INTERMEDIATE_EMAIL': { order: ["task", "gateway", "end", "flow", "properties", "delete"], rows: 3, cols: 2 }, 'INTERMEDIATE_MESSAGETHROW': { order: ["task", "gateway", "end", "flow", "properties", "delete"], rows: 3, cols: 2 }, 'INTERMEDIATE_SIGNALTHROW': { order: ["task", "gateway", "end", "flow", "delete"], rows: 3, cols: 2 }, 'INTERMEDIATE_MESSAGECATCH': { order: ["task", "gateway", "end", "flow", "properties", "delete"], rows: 3, cols: 2 }, 'INTERMEDIATE_TIMER': { order: ["task", "gateway", "end", "flow", "properties", "delete"], rows: 3, cols: 2 }, 'INTERMEDIATE_CONDITIONAL': { order: ["task", "gateway", "end", "flow", "delete"], rows: 3, cols: 2 }, 'INTERMEDIATE_SIGNALCATCH': { order: ["task", "gateway", "end", "flow", "delete"], rows: 3, cols: 2 }, 'END_EMPTY': { order: ["flow", "delete"], rows: 2, cols: 1 }, 'END_EMAIL': { order: ["flow", "properties", "delete"], rows: 2, cols: 2 }, 'END_MESSAGETHROW': { order: ["flow", "properties", "delete"], rows: 2, cols: 2 }, 'END_ERRORTHROW': { order: ["flow", "delete"], rows: 2, cols: 1 }, 'END_SIGNALTHROW': { order: ["flow", "delete"], rows: 2, cols: 1 }, 'END_TERMINATETHROW': { order: ["flow", "delete"], rows: 2, cols: 1 } }, 'PMPool': { 'DEFAULT': { order: ["delete"], rows: 1, cols: 1 } }, 'PMParticipant': { 'DEFAULT': { order: ["flow", "delete"], rows: 2, cols: 1 } }, 'PMArtifact': { 'TEXT_ANNOTATION': { order: ["flow", "delete"], rows: 2, cols: 1 }, 'GROUP': { order: ["delete"], rows: 1, cols: 1 } }, 'PMData': { 'DATAOBJECT': { order: ["flow", "delete"], rows: 2, cols: 1 }, 'DATAINPUT': { order: ["flow", "delete"], rows: 2, cols: 1 }, 'DATAOUTPUT': { order: ["flow", "delete"], rows: 2, cols: 1 }, 'DATASTORE': { order: ["flow", "delete"], rows: 2, cols: 1 } } }; var PMDesigner = {}, LANG, WORKSPACE, SKIN, DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT, ENABLED_FEATURES, DataDictionary, enviromentVariables, resizingFrame, ViewTaskInformation; PMDesigner.defaultRules = window.defaultRules ? window.defaultRules : {}; PMDesigner.defaultCrown = window.defaultCrown ? defaultCrown : {}; PMDesigner.configCrown = window.configCrown ? configCrown : {}; PMDesigner.modelRules = new ModelRules(PMDesigner.defaultRules); PMDesigner.modelCrown = new ModelCrown(PMDesigner.defaultCrown); PMDesigner.remoteUrl = ""; PMDesigner.moddle = new BpmnModdle(); PMDesigner.bpmnFactory = new BpmnFactory(PMDesigner.moddle); PMDesigner.keyCodeF5 = 116; PMDesigner.shapeProperties = function (shape) { var typeShape = shape.type; switch (typeShape) { case "PMActivity": PMDesigner.activityProperties(shape); break; case "PMGateway": PMDesigner.gatewayProperties(shape); break; case "PMEvent": shape.eventProperties(); break; } }; /** * function to get the enviroment variables (WORKSPACE, LANG, SKIN) */ enviromentVariables = function (variable) { var url1, variables, WORKSPACE, LANG, SKIN; if (window.parent) { url1 = window.parent.location.pathname; variables = url1.split('/'); WORKSPACE = variables[1]; WORKSPACE = WORKSPACE.substring(3); LANG = variables[2]; SKIN = variables[3]; if (variable == 'WORKSPACE') { return WORKSPACE; } else if (variable == 'LANG') { return LANG; } else if (variable == 'SKIN') { return SKIN; } else { return null; } } }; LANG = (typeof SYS_LANG !== "undefined") ? SYS_LANG : enviromentVariables('LANG'); WORKSPACE = (typeof SYS_SYS !== "undefined") ? SYS_SYS : enviromentVariables('WORKSPACE'); SKIN = (typeof SYS_SKIN !== "undefined") ? SYS_SKIN : enviromentVariables('SKIN'); DEFAULT_WINDOW_WIDTH = 943; DEFAULT_WINDOW_HEIGHT = 520; ENABLED_FEATURES = []; if (LANG != 'en') { if (typeof __TRANSLATIONMAFE != "undefined" && typeof __TRANSLATIONMAFE[LANG] != 'undefined') { PMUI.loadLanguage(__TRANSLATIONMAFE.en, 'en'); PMUI.loadLanguage(__TRANSLATIONMAFE[LANG], LANG); PMUI.setDefaultLanguage('en'); PMUI.setCurrentLanguage(LANG); } } PMDesigner.resizeFrame = function () { if (parent.document.documentElement === document.documentElement) { jQuery(".content").css("height", parseInt(jQuery(window).height())); } else { jQuery(".content").css("height", document.body.clientHeight); } }; resizingFrame = PMDesigner.resizeFrame; PMDesigner.applyCanvasOptions = function () { list = new PMUI.control.DropDownListControl({ options: [], style: { cssClasses: [ "mafe-dropdown-zoom" ] }, width: 150, onChange: function (newValue, previous) { var canvas = PMDesigner.project.diagrams.find('id', newValue); PMUI.getActiveCanvas().getHTML().style.display = 'none'; PMUI.setActiveCanvas(canvas); canvas.getHTML().style.display = 'inline'; } }); //enable to support multidiagram //jQuery(jQuery(".navBar li")[6]).append(list.getHTML()); list.defineEvents(); PMDesigner.canvasList = list; }; //Zoom PMDesigner.ApplyOptionsZoom = function () { list = new PMUI.control.DropDownListControl({ id: '_idListZoom', options: [ { label: "50%", value: 1 }, { label: "75%", value: 2 }, { label: "100%", value: 3, selected: true }, { label: "125%", value: 4 }, { label: "150%", value: 5 } ], style: { cssClasses: [ "mafe-dropdown-zoom" ] }, onChange: function (newValue, previous) { var i; newValue = parseInt(newValue, 10); PMUI.getActiveCanvas().applyZoom(newValue); } }); //jQuery(jQuery(".navBar li")[4]).append(list.getHTML()); jQuery(jQuery(".mafe-zoom-options")).append(list.getHTML()); list.defineEvents(); }; /** * hides all requiered TinyControls */ PMDesigner.hideAllTinyEditorControls = function () { var control, i, max, j, mapMax, editor, controlMap = [ 'tinyeditor_fontselect', 'tinyeditor_fontsizeselect', 'tinyeditor_bullist', 'tinyeditor_numlist', 'tinyeditor_forecolor', 'tinyeditor_backcolor' ]; for (i = 0, max = tinymce.editors.length; i < max; i += 1) { editor = tinymce.editors[i]; jQuery.each(editor.controlManager.controls, function (index, val) { if (val && jQuery.isFunction(val.hideMenu)) { val.hideMenu(); } }); } }; jQuery(document).ready(function ($) { var setSaveButtonDisabled, s, sidebarCanvas, project, d, downloadLink, handlerExportNormal, handlerExportGranular, handler, validatosr, help, option, menu, elem; /*************************************************** * Defines the Process ***************************************************/ if (typeof prj_uid === "undefined") { prj_uid = ''; } if (typeof prj_readonly === "undefined") { prj_readonly = ''; } if (typeof credentials === "undefined") { credentials = ''; } else { credentials = RCBase64.decode(credentials); credentials = (credentials == '') ? "" : JSON.parse(credentials); } if (prj_readonly !== 'true') { $("#idContent").find(".content_controls").show(); $(".bpmn_shapes").show(); $('.bpmn_shapes_legend').hide(); $("#idNavBar").show().css('height', '33px'); } PMDesigner.createHTML(); setSaveButtonDisabled = function (that) { if (that.isDirty()) { if (document.getElementsByClassName("mafe-save-process").length > 0) { document.getElementsByClassName("mafe-save-process")[0].removeAttribute("style"); document.getElementsByClassName("mafe-save-process")[0].childNodes[0].style.color = "#FFF"; var mafebuttonMenu = document.getElementsByClassName("mafe-button-menu")[0]; mafebuttonMenu.style.backgroundColor = "#0C9778"; mafebuttonMenu.firstChild.src = "/lib/img/caret-down-w.png"; } } else { if (document.getElementsByClassName("mafe-save-process").length > 0) { document.getElementsByClassName("mafe-save-process")[0].style.backgroundColor = "#e8e8e8"; document.getElementsByClassName("mafe-save-process")[0].style.color = "#000"; document.getElementsByClassName("mafe-save-process")[0].childNodes[0].style.color = "#000"; document.getElementsByClassName("mafe-save-process")[0].childNodes[0].text = "Save".translate(); var mafebuttonMenu = document.getElementsByClassName("mafe-button-menu")[0]; mafebuttonMenu.style.backgroundColor = "#e8e8e8"; mafebuttonMenu.firstChild.src = "/lib/img/caret-down.png"; } } }; sidebarCanvas = []; for (s = 0; s < PMDesigner.sidebar.length; s += 1) { sidebarCanvas = sidebarCanvas.concat(PMDesigner.sidebar[s].getSelectors()); jQuery(".bpmn_shapes").append(PMDesigner.sidebar[s].getHTML()); } //Adding Sidebar to DOM firstAbsuluteX = jQuery("#div-layout-canvas").offset().left; project = new PMProject({ id: prj_uid, name: 'Untitled Process', keys: { access_token: credentials.access_token, expires_in: credentials.expires_in, token_type: credentials.token_type, scope: credentials.scope, refresh_token: credentials.refresh_token, client_id: credentials.client_id, client_secret: credentials.client_secret }, listeners: { create: function (self, element) { var sh, i, contDivergent = 0, contConvergent = 0; //Updating the background color for connections jQuery(".pmui-intersection > div > div").css("background-color", "black"); if (element.type == "Connection") { ///////////****************Changing the gatDirection*******************////////////////// if (element.relatedObject.srcPort.parent.gat_type === "PARALLEL" || element.relatedObject.srcPort.parent.gat_type === "INCLUSIVE" || element.relatedObject.destPort.parent.gat_type === "PARALLEL" || element.relatedObject.destPort.parent.gat_type === "INCLUSIVE") { if (element.relatedObject.srcPort.parent.gat_type !== undefined) { sh = element.relatedObject.srcPort.parent; } else { sh = element.relatedObject.destPort.parent; } if (sh.gat_direction === "DIVERGING") { for (i = 0; i < sh.ports.asArray().length; i += 1) { if (sh.ports.asArray()[i].connection.flo_element_origin_type === "bpmnActivity") { contDivergent += 1; } if (contDivergent > 1) { sh.gat_direction = "CONVERGING"; i = sh.ports.asArray().length; } } } if (sh.gat_direction === "CONVERGING") { for (i = 0; i < sh.ports.asArray().length; i += 1) { if (sh.ports.asArray()[i].connection.flo_element_origin_type === "bpmnGateway") { contConvergent += 1; } if (contConvergent > 1) { sh.gat_direction = "DIVERGING"; i = sh.ports.asArray().length; } } } } } setSaveButtonDisabled(self); }, update: function (self) { //Updating the background color for connections jQuery(".pmui-intersection > div > div").css("background-color", "black"); setSaveButtonDisabled(self); }, remove: function (self) { setSaveButtonDisabled(self); }, success: function (self, xhr, response) { var message; self.dirty = false; setSaveButtonDisabled(self); self.dirtyElements[0] = { laneset: {}, lanes: {}, activities: {}, events: {}, gateways: {}, flows: {}, artifacts: {}, lines: {}, data: {}, participants: {}, startMessageEvent: {}, startTimerEvent: {} }; self.updateIdentifiers(response); PMDesigner.connectValidator.bpmnValidator(); //if (PMDesigner.currentMsgFlash) { PMDesigner.msgFlash('The process was saved successfully.'.translate(), document.body, 'success', 3000, 5); PMDesigner.RoutingRuleSetOrder(); //} }, failure: function (self, xhr, response) { var message; if (response.error.code === 401) { /*message = new PMUI.ui.FlashMessage({ message: "It was not possible to establish a connection with the server".translate(), duration: 5000, appendTo: document.body, severity: 'info' }); message.show();*/ //self.remoteProxy.setUrl("/"+WORKSPACE+"/oauth2/token"); //self.setRefreshToken(); //self.remoteProxy.setUrl("/api/1.0/"+WORKSPACE+"/project/"+prj_uid); //self.save(); } else { PMDesigner.msgFlash('Error saving the process.'.translate(), document.body, 'error', 3000, 5); self.updateIdentifiers(response); } } } }); PMDesigner.project = project; //create a new restApi PMDesigner.restApi = RestApi.createRestApi({ serverUrl: '/rest/v10', keys: PMDesigner.project.keys }); systemRest = new PMRestClient({ typeRequest: 'post', multipart: true, data: { calls: [{ url: 'system/enabled-features', method: 'GET' } ] }, functionSuccess: function (xhr, response) { var result = response.pop(); ENABLED_FEATURES = result.response; navbarExportUpdate(); }, functionFailure: function (xhr, response) { ENABLED_FEATURES = []; } }).setBaseEndPoint('').executeRestClient(); PMDesigner.connectValidator = new ConnectValidator(); for (d = 0; d < PMDesigner.sidebar.length; d += 1) { PMDesigner.sidebar[d].activate(); } $('.bpmn_shapes_legend').hide(); project.remoteProxy.setUrl(HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + prj_uid); project.load(); /*=========================================== = ProcessMaker module = ===========================================*/ //Renders content controls PMDesigner.contentControl.show(); new PMAction({ selector: ".mafe-menu-eventmessages-create", label: { selector: ".mafe-menu-eventmessages-create span", text: "Create".translate() }, execute: true, handler: function () { PMDesigner.eventMessages.create(); } }); /*----- End of ProcessMaker module ------*/ /*======================================== = Designer buttons = ========================================*/ //Renders navBar Panel PMDesigner.navbarPanel.show(); // create Zoom options PMDesigner.ApplyOptionsZoom(); //the action to generate a .bpmn file with the export option. downloadLink = $('.mafe-button-export-bpmn-process'); downloadLink.click(function (e) { PMDesigner.moddle.toXML(PMDesigner.businessObject, function (err, xmlStrUpdated) { setEncoded(downloadLink, PMDesigner.project.projectName + '.bpmn', xmlStrUpdated); // xmlStrUpdated contains new id and the added process }); }); option = $("<div class='mafe-button-menu-option'>" + "Save as".translate() + "</div>"); /** * Add data tables */ $('body').append('<div class="bpmn_validator"><div class="validator_header"></div><div class="validator_body"></div></div>') $('.validator_header').append('<h2> Validator</h2>'); $('.validator_header').append('<a class="validator-close" href="#"><span class="mafe-validator-close" title=""></span></a>'); $('.validator_body').html('<table cellpadding="0" cellspacing="0" border="0" class="display" id="validator-table" width="100%"></table>'); PMDesigner.validTable = $('#validator-table').DataTable({ paging: false, scrollY: 100, searching: false, "info": false, scrollCollapse: true, "columns": [ { name: 'numrow', "title": "#", width: '5%', render: function (data, type, row, conf) { return conf.row + 1; } }, { name: 'id', className: 'never' }, { "title": "Type".translate(), width: '10%', name: 'severity', render: function (data, type, row, conf) { var clasMap = { Error: 'mafe-icon-error', Warning: 'mafe-icon-warning' }; if (type === 'display') { return ' <i class="' + clasMap[data] + '"></i> ' + data; } return data; } }, {name: 'element', "title": "Element".translate(), width: '15%'}, {name: 'element-type', "title": "Element Type".translate(), width: '15%'}, {name: 'description', "title": "Description".translate(), width: '45%'} ] }); jQuery('#validator-table tbody').on('click', 'tr', function () { var id = PMDesigner.validTable.row(this).data()[1], shape; if ($(this).hasClass('selected')) { $(this).removeClass('selected'); PMUI.getActiveCanvas().hideAllCoronas().emptyCurrentSelection(); } else { PMDesigner.validTable.$('tr.selected').removeClass('selected'); $(this).addClass('selected'); PMUI.getActiveCanvas().hideAllCoronas().emptyCurrentSelection(); shape = PMUI.getActiveCanvas().items.find('id', id); PMUI.getActiveCanvas().addToSelection(shape.relatedObject); } }); PMDesigner.validTable.columns([1]).visible(false); /********finish datatables********/ new PMAction({ selector: ".mafe-validator-close", tooltip: "Close Validator".translate(), execute: true, handler: function () { $('.bpmn_validator').css('visibility', 'hidden'); $('.mafe-toolbar-validation').css('background-color', 'rgb(233, 233, 233)'); PMDesigner.validator = false; } }); menu = $("<div class='mafe-button-menu-container'></div>"); menu.append(option); option.on("mouseout", function (e) { menu.hide(); }); option.on("click", function (e) { var saveas; menu.hide(); PMDesigner.project.remoteProxy.setUrl(HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id); PMDesigner.project.isSave = true; PMDesigner.project.save(true); saveas = new SaveAs(); saveas.open(); }); $(".mafe-button-menu").on("click", function (e) { e.stopPropagation(); $(".mafe-save-process").append(menu); menu.show(); }); /*----- End of Designer buttons ------*/ /*================================================= = Full screen functionality = =================================================*/ if (parent.document.documentElement === document.documentElement) { elem = document.documentElement; } else { elem = parent.document.getElementById("frameMain"); } PMDesigner.fullScreen = new FullScreen({ element: elem, onReadyScreen: function () { setTimeout(function () { PMDesigner.resizeFrame(); }, 500); }, onCancelScreen: function () { setTimeout(function () { PMDesigner.resizeFrame(); }, 500); } }); /*----- End of Full screen functionality ------*/ /*============================================= = Shapes and Controls Box = =============================================*/ PMDesigner.cookie = { name: "PMDesigner", object: {}, get: function (cname) { var name = cname + "=", i, c, ca = document.cookie.split(';'); for (i = 0; i < ca.length; i += 1) { c = ca[i].trim(); if (c.indexOf(name) == 0) return c.substring(name.length, c.length); } return ""; }, remove: function (cname) { jQuery.each(PMDesigner.cookie.object, function (index, val) { if (index === cname) { delete PMDesigner.cookie.object[cname]; PMDesigner.cookie.refresh(); } }); }, refresh: function () { document.cookie = PMDesigner.cookie.name + "=" + JSON.stringify(PMDesigner.cookie.object); } }; PMDesigner.localStorage = { prefix: "PM_" + WORKSPACE + "_" + prj_uid, object: {}, remove: function (cname) { var obj; obj = localStorage.getItem(PMDesigner.localStorage.prefix); obj = (obj === null) ? {} : JSON.parse(obj); if (obj[cname]) { delete obj[cname]; localStorage.setItem(PMDesigner.localStorage.prefix, JSON.stringify(obj)); } } }; if (Modernizr.localstorage) { var localDesigner = localStorage.getItem(PMDesigner.localStorage.prefix); localDesigner = (localDesigner === null) ? {} : JSON.parse(localDesigner); PMDesigner.panelsPosition = localDesigner; } else { if (PMDesigner.cookie.get(PMDesigner.cookie.name) !== "") { var positions, pLeft, pTop, html; positions = JSON.parse(PMDesigner.cookie.get(PMDesigner.cookie.name)); PMDesigner.cookie.object = positions; PMDesigner.panelsPosition = positions; } } if (typeof PMDesigner.panelsPosition === "object") { var pst = PMDesigner.panelsPosition; if (pst.navbar) { pLeft = pst.navbar.x; pTop = pst.navbar.y; html = document.getElementsByClassName("navBar")[0]; } if (pst.bpmn) { pLeft = 0; pTop = 0; html = document.getElementsByClassName("bpmn_shapes")[0]; html.style.left = pLeft + "px"; html.style.top = pTop + "px"; } if (pst.controls) { pLeft = pst.controls.x; pTop = pst.controls.y; html = document.getElementsByClassName("content_controls")[0]; html.style.left = pLeft + "px"; html.style.top = pTop + "px"; if (pTop > 503) { $("#idContent").find(".content_controls").css({'top': '', 'left': ''}); } } } jQuery(".bpmn_shapes").draggable({ handle: "div", start: function () { }, drag: function () { }, stop: function (event) { var pLeft, pTop, currentObj; pLeft = parseInt(event.target.style.left); pTop = parseInt(event.target.style.top); bpmn = { bpmn: { x: pLeft, y: pTop } }; if (Modernizr.localstorage) { currentObj = localStorage.getItem(PMDesigner.localStorage.prefix); currentObj = (currentObj === null) ? {} : JSON.parse(currentObj); jQuery.extend(true, currentObj, bpmn); localStorage.setItem(PMDesigner.localStorage.prefix, JSON.stringify(currentObj)); } else { jQuery.extend(true, PMDesigner.cookie.object, bpmn); document.cookie = PMDesigner.cookie.name + "=" + JSON.stringify(PMDesigner.cookie.object); } } }); jQuery(".content_controls").draggable({ handle: "div", start: function () { }, drag: function () { jQuery("html").css("overflow", "hidden"); }, stop: function (event) { jQuery("html").css("overflow", "auto"); if (jQuery(this).position().top > $(window).height()) { var x = $(window).height() - 30; jQuery(this).css({'top': x + 'px'}); } var pLeft, pTop, currentObj; pLeft = parseInt(event.target.style.left); pTop = parseInt(event.target.style.top); if (pTop < 90) pTop = 90; event.target.style.setProperty("top", pTop.toString() + "px"); controls = { controls: { x: pLeft, y: pTop } }; if (Modernizr.localstorage) { currentObj = localStorage.getItem(PMDesigner.localStorage.prefix); currentObj = (currentObj === null) ? {} : JSON.parse(currentObj); jQuery.extend(true, currentObj, controls); localStorage.setItem(PMDesigner.localStorage.prefix, JSON.stringify(currentObj)); } else { jQuery.extend(true, PMDesigner.cookie.object, controls); document.cookie = PMDesigner.cookie.name + "=" + JSON.stringify(PMDesigner.cookie.object); } } }); /*----- End of Shapes and Controls Box ------*/ //Resize window PMDesigner.resizeFrame(); /*============================================== = Autosave functionality = ==============================================*/ PMDesigner.project.setSaveInterval(40000); setInterval(function () { if (PMDesigner.project.isDirty()) { PMDesigner.project.remoteProxy.setUrl(HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + prj_uid); if (PMDesigner.project.isSave === true) { PMDesigner.msgFlash('Saving Process'.translate(), document.body, 'success', 5000, 5); } else { PMDesigner.project.isSave = true; PMDesigner.project.save(true); } } }, PMDesigner.project.saveInterval); /*----- End of Autosave functionality ------*/ //Reviewing functionalities if (!PMDesigner.supportBrowser("fullscreen")) { var li = document.getElementsByClassName("mafe-button-fullscreen"); if (li) { li[0].parentElement.style.display = "none"; } } jQuery('.mafe-zoom-options').attr('title', 'Zoom'.translate()).tooltip({tooltipClass: "mafe-action-tooltip"}); jQuery('.mafe-toolbar-lasso').mouseover(function (e) { $('.mafe-toolbar-lasso').css('cursor', 'pointer'); }); jQuery('.mafe-toolbar-validation').mouseover(function (e) { $('.mafe-toolbar-validation').css('cursor', 'pointer'); }); jQuery('.mafe-toolbar-lasso').click(function (e) { if (!PMUI.getActiveCanvas().lassoEnabled) { $('.mafe-toolbar-lasso').css('background-color', 'rgb(207, 207, 207)'); PMUI.getActiveCanvas().lassoEnabled = true; } else { $('.mafe-toolbar-lasso').css('background-color', 'rgb(233, 233, 233)'); PMUI.getActiveCanvas().lassoEnabled = false; } }); PMDesigner.helper = new IntroHelper({ tooltipClass: 'general', skipLabel: 'Quit'.translate(), nextLabel: 'Next &#8594;'.translate(), prevLabel: '&#8592; Back'.translate(), doneLabel: 'Done'.translate(), steps: [ { intro: '<div class="screencast"/>' }, { element: '#idNavBar', intro: 'The designer bar displays the process name and is used to control the process view (zoom, full screen view), the export, undo/redo and the save button.'.translate() }, { element: '.bpmn_shapes', intro: 'Drag and drop the process elements that you want to include in the process design.'.translate() + '<br /><img src="../../../lib/img/corona-task.png">' + ' Task: Add to include an action in your process.'.translate() + '<br /><img src="../../../lib/img/corona-gateway-exclusive.png"> <img src="../../../lib/img/corona-gateway-parallel.png"> <img src="../../../lib/img/corona-gateway-inclusive.png">' + ' Gateway: Selects a path or divides the process into multiple paths and joins them together.'.translate() + '<br /><img src="../../../lib/img/corona-start.png"> <img src="../../../lib/img/corona-start-message.png">' + ' Start Event: The process always begins with a start event.'.translate() + '<br /><img src="../../../lib/img/corona-intermediate-receive-message.png"> <img src="../../../lib/img/corona-intermediate-send-message.png">' + ' Intermediate Event: Used to define an event that happens in the middle of the process.'.translate() + '<br /><img src="../../../lib/img/corona-end.png"> <img src="../../../lib/img/corona-end-message.png">' + ' End Event: End the execution of the process.'.translate() + '<br /><img src="../../../lib/img/corona-pool.png">' + ' Pool: Place each process in a separate pool.'.translate() + '<br /><img src="../../../lib/img/corona-lane.png">' + ' Lane: Used to divide a process into different sections.'.translate() }, { element: '#div-layout-canvas', intro: "In the design area you can drop the process elements and order or arrange them to design your process.".translate() }, { element: '.content_controls', intro: '<p>' + 'The process objects are used to add execution features to the current process design.'.translate() + '<br/>Variables: Define the process data.'.translate() + '<br/>Dynaforms: Create dynamic forms.'.translate() + '<br/>Triggers: Create scripts.'.translate() + '<br/>Output documents: Generate documents with process data.'.translate() + '<br/>DB connections: Connect to external databases.'.translate() + '</p>', position: 'left' }, { intro: '<div class="startcoronahelp"></div><div>' + 'Select an element in the designer to display the quick toolbar with the list of the most used options available for that element.'.translate() + '</div>' } ], onExit: function () { var canvas = PMUI.getActiveCanvas(); if (canvas && canvas.getGridLine() && canvas.getHTML()) { canvas.getHTML().classList.add("pmui-pmcanvas"); } } }); jQuery('.mafe-toolbar-validation').click(function (e) { if (!PMDesigner.validator) { $('.mafe-toolbar-validation').css('background-color', 'rgb(207, 207, 207)'); PMDesigner.validator = true; } else { $('.bpmn_validator').css('visibility', 'hidden'); $('.mafe-toolbar-validation').css('background-color', 'rgb(233, 233, 233)'); PMDesigner.validator = false; } }); if (inArray("jXsSi94bkRUcVZyRStNVExlTXhEclVadGRRcG9xbjNvTWVFQUF3cklKQVBiVT0=", ENABLED_FEATURES)) { $("#idNavBar").find(".mafe-button-export-process").html( $("#idNavBar").find(".mafe-button-export-process").text() + " &#x25BC;" ); } function inArray(needle, haystack) { var i, length = haystack.length; for (i = 0; i < length; i += 1) { if (haystack[i] == needle) return true; } return false; } }); window.onload = function () { //Reset the scroll positions window.scrollBy(-window.scrollX, -window.scrollY); document.onkeydown = function (e) { if (e.keyCode === 8 && e.target === document.body) { e.stopPropagation(); return false; } }; }; /*================================================== = Components from the Panels = ==================================================*/ PMDesigner.createHTML = function () { var minShapes = document.createElement("span"), minShapesLegend = document.createElement("span"), refreshShapes = document.createElement("span"), minControls = document.createElement("span"), processObjects = document.creat