processmaker-builder
Version:
The gulp task runner for ProcessMaker building
1,321 lines (1,251 loc) • 55.3 kB
JavaScript
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.createElement("span"),
refreshControls = document.createElement("span"),
refreshNavBar = document.createElement("span");
minShapes.id = "minShapes";
minShapesLegend.id = "minShapesLegend";
refreshShapes.id = "resetShapes";
minControls.id = "minControls";
refreshControls.id = "resetControls";
refreshNavBar.id = "resetNavBar";
minShapes.className = "mafe-shapes-toggle";
minShapesLegend.className = "mafe-shapes-toggle";
refreshShapes.className = "mafe-shapes-refresh";
minControls.className = "mafe-shapes-toggle";
processObjects.className = "mafe-process-object";
refreshControls.className = "mafe-shapes-refresh";
refreshNavBar.className = "mafe-shapes-refresh";
minShapes.title = "Minimize".translate();
minShapesLegend.title = "Minimize".translate();
refreshShapes.title = "reset".translate();
minControls.title = "Minimize".translate();
refreshControls.title = "Reset to original position".translate();
refreshNavBar.title = "reset".translate();
jQuery(minShapes).tooltip({tooltipClass: "mafe-action-tooltip"});
jQuery(minShapesLegend).tooltip({tooltipClass: "mafe-action-tooltip"});
jQuery(refreshShapes).tooltip({tooltipClass: "mafe-action-tooltip"});
jQuery(minControls).tooltip({tooltipClass: "mafe-action-tooltip"});
jQuery(refreshControls).tooltip({tooltipClass: "mafe-action-tooltip"});
jQuery(refreshNavBar).tooltip({tooltipClass: "mafe-action-tooltip"});
refreshControls.style.backgroundPosition = '0px 0px';
processObjects.textContent = "Process Objects".translate();
minShapes.onclick = function () {
var i,
items = jQuery(".bpmn_shapes > ul");
if (items.length > 0) {
for (i = 0; i < items.length; i += 1) {
if (jQuery(items[i]).css("display").toLowerCase() !== "none") {
jQuery(items[i]).css({
display: 'none'
});
} else {
jQuery(items[i]).css({
display: 'block'
});
}
}
}
};
minShapesLegend.onclick = function () {
var i,
items = jQuery(".bpmn_shapes_legend").children();
for (i = 1; i < items.length; i += 1) {
if (jQuery(items[i]).css("display").toLowerCase() !== "none") {
jQuery(items[i]).css({
display: 'none'
});
} else {
jQuery(items[i]).css({
display: 'block'
});
}
}
};
refreshShapes.onclick = function () {
jQuery(".bpmn_shapes").removeAttr('style');
if (Modernizr.localstorage) {
PMDesigner.localStorage.remove("bpmn");
} else {
PMDesigner.cookie.remove("bpmn");
}
};
minControls.onclick = function () {
var i,
title = '',
items = jQuery(".content_controls > ul");
if (items.length > 0) {
for (i = 0; i < items.length; i += 1) {
if (jQuery(items[i]).css("display").toLowerCase() !== "none") {
jQuery(items[i]).css({
display: 'none'
});
title = "Maximize";
$('#minControls').removeClass('mafe-shapes-toggle');
$('#minControls').addClass('mafe-shapes-plus');
} else {
jQuery(items[i]).css({
display: 'block'
});
title = "Minimize";
$('#minControls').removeClass('mafe-shapes-plus');
$('#minControls').addClass('mafe-shapes-toggle');
}
}
}
jQuery(minControls).tooltip({content: title.translate()});
};
refreshControls.onclick = function () {
jQuery(".content_controls").css({
left: "auto",
right: "20px",
top: "90px"
});
if (Modernizr.localstorage) {
PMDesigner.localStorage.remove("controls");
} else {
PMDesigner.cookie.remove("controls");
}
};
refreshNavBar.onclick = function () {
jQuery(".navBar").removeAttr('style');
if (Modernizr.localstorage) {
PMDesigner.localStorage.remove("navbar");
} else {
PMDesigner.cookie.remove("navbar");
}
};
jQuery(".bpmn_shapes>div").append(minShapes);
jQuery(".bpmn_shapes>div").append(refreshShapes);
jQuery(".content_controls>div").append(processObjects);
jQuery(".content_controls>div").append(minControls);
jQuery(".content_controls>div").append(refreshControls);
jQuery(".navBar>div").append(refreshNavBar);
jQuery(".bpmn_shapes_legend>div").append(minShapesLegend);
jQuery(".bpmn_shapes, .content_controls").on("contextmenu", function (e) {
e.preventDefault();
});
PMDesigner.applyCanvasOptions();
};
/*----- End of Components from the Panels ------*/
/*=====================================================
= Get information about browser =
=====================================================*/
PMDesigner.getBrowser = function () {
var match,
ua = navigator.userAgent.toLowerCase();
if (ua) {
match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[1] || "",
version: match[2] || "0"
};
}
};
/*----- End of Get information about browser ------*/
PMDesigner.supportBrowser = function (functionality) {
var browser, el, module;
functionality = functionality.toLowerCase();
switch (functionality) {
case "fullscreen":
browser = PMDesigner.getBrowser();
if ((browser.browser === "msie") && (parseInt(browser.version, 10) <= 10)) {
try {
module = new ActiveXObject("WScript.Shell");
} catch (e) {
module = false;
}
} else {
el = document.documentElement;
module = el.requestFullScreen || el.webkitRequestFullScreen || el.mozRequestFullScreen || el.msRequestFullScreen;
if (!module) {
module = false;
}
}
break;
case "":
break;
}
return module;
};
/*============================================================
= Leave the current page Functionality =
============================================================*/
window.onbeforeunload = function (e) {
var message;
if (PMDesigner.project.isDirty()
&& PMDesigner.project.isClose == false
&& PMDesigner.project.isSave == false) {
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.verifyAndSave(true);
}
message = "There are unsaved changes, if you leave the editor some changes won't be saved.".translate();
e = e || window.event;
if (e) {
e.returnValue = message;
}
return message;
}
};
/*----- End of Leave the current page Functionality ------*/
/*=====================================================================
= Validating coordinates for create a new shape =
=====================================================================*/
PMUI.validCoordinatedToCreate = function (canvas, event, shape) {
var position, p, width, height, createElem = true, panels = [], message;
//navBar panel
position = jQuery(".navBar").offset();
width = jQuery(".navBar").width();
height = jQuery(".navBar").height();
element = {
x1: position.left,
y1: position.top,
x2: position.left + width,
y2: position.top + height
};
panels.push(element);
//BPMN panel
position = jQuery(".bpmn_shapes").offset();
width = jQuery(".bpmn_shapes").width();
height = jQuery(".bpmn_shapes").height();
element = {
x1: position.left,
y1: position.top,
x2: position.left + width,
y2: position.top + height
};
if (panels.length > 0) {
for (p = 0; p < panels.length; p += 1) {
if (((event.pageX >= panels[p].x1) && (event.pageX <= panels[p].x2))
&& ((event.pageY >= panels[p].y1) && (event.pageY <= panels[p].y2))) {
PMDesigner.msgFlash('Is not possible create the element in that area'.translate(), document.body, 'info', 3000, 5);
return false;
}
}
}
return true;
};
/*----- End of Validating coordinates for create a new shape ------*/
PMUI.pageCoordinatesToShapeCoordinates = function (shape, e, xCoord, yCoord, customShape) {
var coordinates,
x = (!xCoord) ? e.pageX : xCoord,
y = (!yCoord) ? e.pageY : yCoord,
orgX = (!xCoord) ? e.pageX : xCoord,
orgY = (!yCoord) ? e.pageY : yCoord,
canvas = shape.getCanvas();
x += canvas.getLeftScroll() - shape.getAbsoluteX() - canvas.getX();
y += canvas.getTopScroll() - shape.getAbsoluteY() - canvas.getY();
coordinates = new PMUI.util.Point(x, y);
return coordinates;
};
PMDesigner.msgFlash = function (text, container, severity, duration, zorder) {
var msg;
if (!PMDesigner.currentMsgFlash) {
msg = new PMUI.ui.FlashMessage({
id: '__msgFlashMessage',
severity: 'success'
});
} else {
msg = PMDesigner.currentMsgFlash;
}
if (msg.html)
jQuery(msg.html).remove();
msg.setMessage(text || "");
msg.setAppendTo(container || document.body);
msg.setSeverity(severity || "success");
msg.setDuration(duration || 3000);
msg.setZOrder(zorder || 100);
msg.show();
PMDesigner.currentMsgFlash = msg;
};
PMDesigner.msgWinError = function (text) {
var msgError;
if (!PMDesigner.currentWinError) {
msgError = new PMUI.ui.MessageWindow({
id: 'showMessageWindowFailure',
width: 490,
windowMessageType: 'error',
title: 'Error'.translate(),
footerItems: [
{
text: 'Ok'.translate(),
handler: function () {
msgError.close();
},
buttonType: "success"
}
]
});
} else {
msgError = PMDesigner.currentWinError;
}
msgError.setMessage(text || 'Error'.translate());
msgError.showFooter();
msgError.open();
PMDesigner.currentWinError = msgError;
};
PMDesigner.msgWinWarning = function (text) {
var msgWarning;
if (!PMDesigner.currentWinWarning) {
msgWarning = new PMUI.ui.MessageWindow({
id: 'showMessageWindowWarning',
windowMessageType: 'warning',
width: 490,
title: 'Warning'.translate(),
footerItems: [{
text: 'Ok'.translate(),
buttonType: "success", handler: function () {
msgWarning.close();
}
}]
});
} else {
msgWarning = PMDesigner.currentWinWarning;
}
msgWarning.setMessage(text || 'Warning'.translate());
msgWarning.showFooter();
msgWarning.open();
PMDesigner.currentWinWarning = msgWarning;
};
PMDesigner.modeReadOnly = function () {
var restClient;
if (prj_readonly === 'true') {
restClient = new PMRestClient({
typeRequest: 'post',
multipart: true,
data: {
calls: [{
url: 'cases/' + app_uid + '/tasks',
method: 'GET'
}
]
},
functionSuccess: function (xhr, response) {
var viewTaskInformation = new ViewTaskInformation();
viewTaskInformation.setData(response[0].response);
viewTaskInformation.setShapes();
viewTaskInformation.showViewLegendsInformation();
},
functionFailure: function (xhr, response) {
PMDesigner.msgWinError(response.error.message);
}
});
restClient.setBaseEndPoint('');
restClient.executeRestClient();
}
};
PMDesigner.reloadDataTable = function () {
$('.bpmn_validator').css('visibility', 'visible');
};
DataDictionary = function () {
};
DataDictionary.prototype.getColor = function (value) {
switch (value) {
case 'TASK_IN_PROGRESS':
return 'red';
case 'TASK_COMPLETED':
return 'green';
case 'TASK_PENDING_NOT_EXECUTED':
return 'silver';
case 'TASK_PARALLEL':
return 'orange';
default:
return 'white';
}
};
DataDictionary.prototype.getStatus = function (value) {
switch (value) {
case 'TASK_IN_PROGRESS':
return 'Task in Progress'.translate();
case 'TASK_COMPLETED':
return 'Completed Task'.translate();
case 'TASK_PENDING_NOT_EXECUTED':
return 'Pending Task / Not Executed'.translate();
case 'TASK_PARALLEL':
return 'Parallel Task'.translate();
default:
return value;
}
};
DataDictionary.prototype.getTasAssignType = function (value) {
switch (value) {
case 'BALANCED':
return 'Balanced'.translate();
case 'MANUAL':
return 'Manual'.translate();
case 'REPORT_TO':
return 'Report toO'.translate();
case 'EVALUATE':
return 'Evaluate'.translate();
case 'SELF_SERVICE':
return 'self Service'.translate();
case 'SELF_SERVICE_EVALUATE':
return 'Self Service Evaluate'.translate();
default:
return value;
}
};
DataDictionary.prototype.getTasType = function (value) {
switch (value) {
case 'NORMAL':
return 'Normal'.translate();
case 'SUBPROCESS':
return 'Sub Process'.translate();
default:
return value;
}
};
DataDictionary.prototype.getTasDerivation = function (value) {
switch (value) {
case 'NORMAL':
return 'Normal'.translate();
default:
return value;
}
};
ViewTaskInformation = function (settings) {
ViewTaskInformation.prototype.init.call(this, settings);
};
ViewTaskInformation.prototype.init = function () {
var that = this,
panelButton = new PMUI.core.Panel({
layout: 'hbox',
items: [
that.getButton('Information', function () {
that.showInformation();
}),
that.getButton('Delegations', function () {
that.showDelegations();
}),
that.getButton('Route', function () {
that.showRoute();
})
]
});
that.windowAbstract.showFooter();
that.windowAbstract.addItem(panelButton);
that.windowAbstract.addItem(that.panelvertical);
};
ViewTaskInformation.prototype.dataDictionary = new DataDictionary();
ViewTaskInformation.prototype.data = null;
ViewTaskInformation.prototype.shapeData = null;
ViewTaskInformation.prototype.panelvertical = new PMUI.core.Panel({layout: 'vbox', width: 400});
ViewTaskInformation.prototype.windowAbstract = new PMUI.ui.Window({id: 'windowAbstract', width: 500, height: 350});
ViewTaskInformation.prototype.setData = function (data) {
this.data = data;
};
ViewTaskInformation.prototype.setCursor = function (shape) {
shape.getHTML().onmouseover = function () {
this.style.cursor = 'pointer';
};
shape.getHTML().onmouseout = function () {
this.style.cursor = '';
};
};
ViewTaskInformation.prototype.setShapes = function () {
var that = this,
shape,
diagrams,
i,
j,
dt = that.data;
for (i = 0; i < dt.length; i += 1) {
diagrams = PMDesigner.project.diagrams.asArray();
for (j = 0; j < diagrams.length; j += 1) {
shape = diagrams[j].getCustomShapes().find('id', dt[i].tas_uid);
if (typeof shape !=