processmaker-builder
Version:
The gulp task runner for ProcessMaker building
1,345 lines (1,298 loc) • 1.46 MB
JavaScript
/*----------------------------------********---------------------------------*/
/**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 →'.translate(),
prevLabel: '← 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() + " ▼"
);
}
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