From 4de4f6c349cd772cfae3c53357e9005195c3b70c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Thu, 4 Oct 2018 10:28:36 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E6=B7=BB=E5=8A=A0=E6=96=B0?= =?UTF-8?q?=E7=89=B9=E6=80=A7=E3=80=82=20=E7=A7=9F=E6=88=B7ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/process/secno.bpmn | 104 ------- .../src/main/resources/process/secno.png | Bin 31891 -> 0 bytes .../main/resources/static/editor-app/app.js | 75 +++-- .../configuration/toolbar-default-actions.js | 14 +- .../static/editor-app/stencil-controller.js | 284 +++++++++--------- 5 files changed, 200 insertions(+), 277 deletions(-) delete mode 100644 pigx-visual/pigx-activiti/src/main/resources/process/secno.bpmn delete mode 100644 pigx-visual/pigx-activiti/src/main/resources/process/secno.png diff --git a/pigx-visual/pigx-activiti/src/main/resources/process/secno.bpmn b/pigx-visual/pigx-activiti/src/main/resources/process/secno.bpmn deleted file mode 100644 index cf7e89a0a..000000000 --- a/pigx-visual/pigx-activiti/src/main/resources/process/secno.bpmn +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pigx-visual/pigx-activiti/src/main/resources/process/secno.png b/pigx-visual/pigx-activiti/src/main/resources/process/secno.png deleted file mode 100644 index 620c051e05817988864b6d08cb49c5f5f1abbda3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31891 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 diff --git a/pigx-visual/pigx-activiti/src/main/resources/static/editor-app/app.js b/pigx-visual/pigx-activiti/src/main/resources/static/editor-app/app.js index f20bc54d5..9aa92005c 100644 --- a/pigx-visual/pigx-activiti/src/main/resources/static/editor-app/app.js +++ b/pigx-visual/pigx-activiti/src/main/resources/static/editor-app/app.js @@ -1,7 +1,7 @@ /* * Activiti Modeler component part of the Activiti project * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either @@ -24,7 +24,7 @@ var activitiModeler = angular.module('activitiModeler', [ 'ngSanitize', 'ngRoute', 'ngDragDrop', - 'mgcrea.ngStrap', + 'mgcrea.ngStrap', 'ngGrid', 'ngAnimate', 'pascalprecht.translate', @@ -41,7 +41,7 @@ activitiModeler angular.extend($selectProvider.defaults, { caretHtml: ' ' }); - + // Initialize angular-translate $translateProvider.useStaticFilesLoader({ prefix: './editor-app/i18n/', @@ -52,23 +52,23 @@ activitiModeler // remember language $translateProvider.useCookieStorage(); - + }]) .run(['$rootScope', '$timeout', '$modal', '$translate', '$location', '$window', '$http', '$q', function($rootScope, $timeout, $modal, $translate, $location, $window, $http, $q) { - + $rootScope.config = ACTIVITI.CONFIG; - + $rootScope.editorInitialized = false; - + $rootScope.editorFactory = $q.defer(); - + $rootScope.forceSelectionRefresh = false; - + $rootScope.ignoreChanges = false; // by default never ignore changes - + $rootScope.validationErrors = []; - + $rootScope.staticIncludeVersion = Date.now(); /** @@ -84,8 +84,8 @@ activitiModeler this.$apply(fn); } }; - - + + /** * Initialize the event bus: couple all Oryx events with a dispatch of the * event of the event bus. This way, it gets much easier to attach custom logic @@ -94,10 +94,19 @@ activitiModeler /* Helper method to fetch model from server (always needed) */ function fetchModel(modelId) { + var tenantId = 1 + if (sessionStorage.getItem('tenantId')) { + tenantId = sessionStorage.getItem('tenantId') + } var modelUrl = KISBPM.URL.getModel(modelId); - $http({method: 'GET', url: modelUrl}). + $http({method: 'GET', + url: modelUrl, + headers: { + 'TENANT_ID': tenantId + } + }). success(function (data, status, headers, config) { $rootScope.editor = new ORYX.Editor(data); $rootScope.modelData = angular.fromJson(data); @@ -128,7 +137,7 @@ activitiModeler $rootScope.orginalOryxButtonStyle = obj.style.display; obj.style.display = 'none'; }); - + jQuery('.resizer_southeast').each(function(i, obj) { $rootScope.orginalResizerSEStyle = obj.style.display; obj.style.display = 'none'; @@ -160,7 +169,7 @@ activitiModeler jQuery('.Oryx_button').each(function(i, obj) { handleDisplayProperty(obj); }); - + jQuery('.resizer_southeast').each(function(i, obj) { handleDisplayProperty(obj); }); @@ -178,21 +187,21 @@ activitiModeler if (!$rootScope.editorInitialized) { ORYX._loadPlugins(); - + var modelId = EDITOR.UTIL.getParameterByName('modelId'); fetchModel(modelId); - + $rootScope.window = {}; var updateWindowSize = function() { $rootScope.window.width = $window.innerWidth; $rootScope.window.height = $window.innerHeight; }; - + // Window resize hook angular.element($window).bind('resize', function() { $rootScope.safeApply(updateWindowSize()); }); - + $rootScope.$watch('window.forceRefresh', function(newValue) { if(newValue) { $timeout(function() { @@ -201,7 +210,7 @@ activitiModeler }); } }); - + updateWindowSize(); // Hook in resizing of main panels when window resizes @@ -219,18 +228,18 @@ activitiModeler || canvas === undefined || canvas === null || mainHeader === null) { return; } - + if ($rootScope.editor) { var selectedElements = $rootScope.editor.selection; var subSelectionElements = $rootScope.editor._subSelection; - + $rootScope.selectedElements = selectedElements; $rootScope.subSelectionElements = subSelectionElements; if (selectedElements && selectedElements.length > 0) { $rootScope.selectedElementBeforeScrolling = selectedElements[0]; - + $rootScope.editor.setSelection([]); // needed cause it checks for element changes and does nothing if the elements are the same $rootScope.editor.setSelection($rootScope.selectedElements, $rootScope.subSelectionElements); $rootScope.selectedElements = undefined; @@ -317,10 +326,10 @@ activitiModeler $this.data('scrollTimeout', setTimeout(callback,50,self)); }); }; - + // Always needed, cause the DOM element on which the scroll event listeners are attached are changed for every new model initScrollHandling(); - + $rootScope.editorInitialized = true; } }); @@ -348,7 +357,7 @@ activitiModeler KISBPM.eventBus.dispatch(eventMapping.kisBpmType, event); }); }); - + $rootScope.editor.registerOnEvent(ORYX.CONFIG.EVENT_SHAPEREMOVED, function (event) { var validateButton = document.getElementById(event.shape.resourceId + "-validate-button"); if (validateButton) @@ -362,12 +371,12 @@ activitiModeler KISBPM.eventBus.dispatch(KISBPM.eventBus.EVENT_TYPE_EDITOR_READY, {type : KISBPM.eventBus.EVENT_TYPE_EDITOR_READY}); }); - + // Alerts $rootScope.alerts = { queue: [] }; - + $rootScope.showAlert = function(alert) { if(alert.queue.length > 0) { alert.current = alert.queue.shift(); @@ -384,7 +393,7 @@ activitiModeler $rootScope.alerts.current = undefined; } }; - + $rootScope.addAlert = function(message, type) { var newAlert = {message: message, type: type}; if (!$rootScope.alerts.timeout) { @@ -395,7 +404,7 @@ activitiModeler $rootScope.alerts.queue.push(newAlert); } }; - + $rootScope.dismissAlert = function() { if (!$rootScope.alerts.timeout) { $rootScope.alerts.current = undefined; @@ -405,7 +414,7 @@ activitiModeler $rootScope.showAlert($rootScope.alerts); } }; - + $rootScope.addAlertPromise = function(promise, type) { if (promise) { promise.then(function(data) { @@ -413,7 +422,7 @@ activitiModeler }); } }; - + } ]) diff --git a/pigx-visual/pigx-activiti/src/main/resources/static/editor-app/configuration/toolbar-default-actions.js b/pigx-visual/pigx-activiti/src/main/resources/static/editor-app/configuration/toolbar-default-actions.js index 77b5a5b0c..ee07ca408 100644 --- a/pigx-visual/pigx-activiti/src/main/resources/static/editor-app/configuration/toolbar-default-actions.js +++ b/pigx-visual/pigx-activiti/src/main/resources/static/editor-app/configuration/toolbar-default-actions.js @@ -377,12 +377,20 @@ var SaveModelCtrl = [ '$rootScope', '$scope', '$http', '$route', '$location', description: $scope.saveDialog.description }; + var tenantId = 1 + if (sessionStorage.getItem('tenantId')) { + tenantId = sessionStorage.getItem('tenantId') + } + // Update - $http({ method: 'PUT', + $http({ method: 'PUT', data: params, ignoreErrors: true, - headers: {'Accept': 'application/json', - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', + 'TENANT_ID': tenantId + }, transformRequest: function (obj) { var str = []; for (var p in obj) { diff --git a/pigx-visual/pigx-activiti/src/main/resources/static/editor-app/stencil-controller.js b/pigx-visual/pigx-activiti/src/main/resources/static/editor-app/stencil-controller.js index a37abeed2..1eba2407b 100644 --- a/pigx-visual/pigx-activiti/src/main/resources/static/editor-app/stencil-controller.js +++ b/pigx-visual/pigx-activiti/src/main/resources/static/editor-app/stencil-controller.js @@ -1,7 +1,7 @@ /* * Activiti Modeler component part of the Activiti project * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either @@ -33,10 +33,10 @@ angular.module('activitiModeler') jQuery(window).trigger('resize'); }); }; - + // Code that is dependent on an initialised Editor is wrapped in a promise for the editor $scope.editorFactory.promise.then(function () { - + /* Build stencil item list */ // Build simple json representation of stencil set @@ -62,31 +62,41 @@ angular.module('activitiModeler') /* StencilSet items */ - $http({method: 'GET', url: KISBPM.URL.getStencilSet()}).success(function (data, status, headers, config) { + var tenantId = 1 + if (sessionStorage.getItem('tenantId')) { + tenantId = sessionStorage.getItem('tenantId') + } - var quickMenuDefinition = ['UserTask', 'EndNoneEvent', 'ExclusiveGateway', + $http({method: 'GET', + url: KISBPM.URL.getStencilSet(), + headers: { + 'TENANT_ID': tenantId + } + }).success(function (data, status, headers, config) { + + var quickMenuDefinition = ['UserTask', 'EndNoneEvent', 'ExclusiveGateway', 'CatchTimerEvent', 'ThrowNoneEvent', 'TextAnnotation', 'SequenceFlow', 'Association']; var ignoreForPaletteDefinition = ['SequenceFlow', 'MessageFlow', 'Association', 'DataAssociation', 'DataStore', 'SendTask']; var quickMenuItems = []; - + var morphRoles = []; - for (var i = 0; i < data.rules.morphingRules.length; i++) + for (var i = 0; i < data.rules.morphingRules.length; i++) { var role = data.rules.morphingRules[i].role; var roleItem = {'role': role, 'morphOptions': []}; morphRoles.push(roleItem); } - + // Check all received items - for (var stencilIndex = 0; stencilIndex < data.stencils.length; stencilIndex++) + for (var stencilIndex = 0; stencilIndex < data.stencils.length; stencilIndex++) { // Check if the root group is the 'diagram' group. If so, this item should not be shown. var currentGroupName = data.stencils[stencilIndex].groups[0]; if (currentGroupName === 'Diagram' || currentGroupName === 'Form') { continue; // go to next item } - + var removed = false; if (data.stencils[stencilIndex].removed) { removed = true; @@ -119,7 +129,7 @@ angular.module('activitiModeler') } } - + // Construct the stencil item var stencilItem = {'id': data.stencils[stencilIndex].id, 'name': data.stencils[stencilIndex].title, @@ -132,22 +142,22 @@ angular.module('activitiModeler') 'canConnect': false, 'canConnectTo': false, 'canConnectAssociation': false}; - + if (data.stencils[stencilIndex].customIconId && data.stencils[stencilIndex].customIconId > 0) { stencilItem.customIcon = true; stencilItem.icon = data.stencils[stencilIndex].customIconId; } - + if (!removed) { if (quickMenuDefinition.indexOf(stencilItem.id) >= 0) { quickMenuItems[quickMenuDefinition.indexOf(stencilItem.id)] = stencilItem; } } - + if (stencilItem.id === 'TextAnnotation' || stencilItem.id === 'BoundaryCompensationEvent') { stencilItem.canConnectAssociation = true; } - + for (var i = 0; i < data.stencils[stencilIndex].roles.length; i++) { var stencilRole = data.stencils[stencilIndex].roles[i]; if (stencilRole === 'sequence_start') { @@ -155,7 +165,7 @@ angular.module('activitiModeler') } else if (stencilRole === 'sequence_end') { stencilItem.canConnectTo = true; } - + for (var j = 0; j < morphRoles.length; j++) { if (stencilRole === morphRoles[j].role) { if (!removed) { @@ -181,38 +191,38 @@ angular.module('activitiModeler') } } } - - for (var i = 0; i < stencilItemGroups.length; i++) + + for (var i = 0; i < stencilItemGroups.length; i++) { if (stencilItemGroups[i].paletteItems && stencilItemGroups[i].paletteItems.length == 0) { stencilItemGroups[i].visible = false; } } - + $scope.stencilItemGroups = stencilItemGroups; var containmentRules = []; - for (var i = 0; i < data.rules.containmentRules.length; i++) + for (var i = 0; i < data.rules.containmentRules.length; i++) { var rule = data.rules.containmentRules[i]; containmentRules.push(rule); } $scope.containmentRules = containmentRules; - + // remove quick menu items which are not available anymore due to custom pallette var availableQuickMenuItems = []; - for (var i = 0; i < quickMenuItems.length; i++) + for (var i = 0; i < quickMenuItems.length; i++) { if (quickMenuItems[i]) { availableQuickMenuItems[availableQuickMenuItems.length] = quickMenuItems[i]; } } - + $scope.quickMenuItems = availableQuickMenuItems; $scope.morphRoles = morphRoles; }). - + error(function (data, status, headers, config) { console.log('Something went wrong when fetching stencil items:' + JSON.stringify(data)); }); @@ -231,13 +241,13 @@ angular.module('activitiModeler') var selectedShape = shapes.first(); var stencil = selectedShape.getStencil(); - + if ($rootScope.selectedElementBeforeScrolling && stencil.id().indexOf('BPMNDiagram') !== -1) { // ignore canvas event because of empty selection when scrolling stops return; } - + if ($rootScope.selectedElementBeforeScrolling && $rootScope.selectedElementBeforeScrolling.getId() === selectedShape.getId()) { $rootScope.selectedElementBeforeScrolling = null; @@ -246,7 +256,7 @@ angular.module('activitiModeler') // Store previous selection $scope.previousSelectedShape = $scope.selectedShape; - + // Only do something if another element is selected (Oryx fires this event multiple times) if ($scope.selectedShape !== undefined && $scope.selectedShape.getId() === selectedShape.getId()) { if ($rootScope.forceSelectionRefresh) { @@ -291,7 +301,7 @@ angular.module('activitiModeler') if (selectedShape.properties[key] === 'true') { selectedShape.properties[key] = true; } - + if (KISBPM.CONFIG.showRemovedProperties == false && property.isHidden()) { continue; @@ -305,7 +315,7 @@ angular.module('activitiModeler') 'hidden': property.isHidden(), 'value': selectedShape.properties[key] }; - + if ((currentProperty.type === 'complex' || currentProperty.type === 'multiplecomplex') && currentProperty.value && currentProperty.value.length > 0) { try { currentProperty.value = JSON.parse(currentProperty.value); @@ -352,23 +362,23 @@ angular.module('activitiModeler') }); } }); - + $scope.editor.registerOnEvent(ORYX.CONFIG.EVENT_SELECTION_CHANGED, function (event) { - + KISBPM.eventBus.dispatch(KISBPM.eventBus.EVENT_TYPE_HIDE_SHAPE_BUTTONS); var shapes = event.elements; - + if (shapes && shapes.length == 1) { var selectedShape = shapes.first(); - + var a = $scope.editor.getCanvas().node.getScreenCTM(); - + var absoluteXY = selectedShape.absoluteXY(); - + absoluteXY.x *= a.a; absoluteXY.y *= a.d; - + var additionalIEZoom = 1; if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) { var ua = navigator.userAgent; @@ -380,16 +390,16 @@ angular.module('activitiModeler') } } } - + if (additionalIEZoom === 1) { absoluteXY.y = absoluteXY.y - jQuery("#canvasSection").offset().top + 5; absoluteXY.x = absoluteXY.x - jQuery("#canvasSection").offset().left; - + } else { var canvasOffsetLeft = jQuery("#canvasSection").offset().left; var canvasScrollLeft = jQuery("#canvasSection").scrollLeft(); var canvasScrollTop = jQuery("#canvasSection").scrollTop(); - + var offset = a.e - (canvasOffsetLeft * additionalIEZoom); var additionaloffset = 0; if (offset > 10) { @@ -398,10 +408,10 @@ angular.module('activitiModeler') absoluteXY.y = absoluteXY.y - (jQuery("#canvasSection").offset().top * additionalIEZoom) + 5 + ((canvasScrollTop * additionalIEZoom) - canvasScrollTop); absoluteXY.x = absoluteXY.x - (canvasOffsetLeft * additionalIEZoom) + additionaloffset + ((canvasScrollLeft * additionalIEZoom) - canvasScrollLeft); } - + var bounds = new ORYX.Core.Bounds(a.e + absoluteXY.x, a.f + absoluteXY.y, a.e + absoluteXY.x + a.a*selectedShape.bounds.width(), a.f + absoluteXY.y + a.d*selectedShape.bounds.height()); var shapeXY = bounds.upperLeft(); - + var stencilItem = $scope.getStencilItemById(selectedShape.getStencil().idWithoutNs()); var morphShapes = []; if (stencilItem && stencilItem.morphRole) @@ -414,12 +424,12 @@ angular.module('activitiModeler') } } } - + var x = shapeXY.x; if (bounds.width() < 48) { x -= 24; } - + if (morphShapes && morphShapes.length > 0) { // In case the element is not wide enough, start the 2 bottom-buttons more to the left // to prevent overflow in the right-menu @@ -428,12 +438,12 @@ angular.module('activitiModeler') morphButton.style.left = x + 24 +'px'; morphButton.style.top = (shapeXY.y+bounds.height() + 2) + 'px'; } - + var deleteButton = document.getElementById('delete-button'); deleteButton.style.display = "block"; deleteButton.style.left = x + 'px'; deleteButton.style.top = (shapeXY.y+bounds.height() + 2) + 'px'; - + if (stencilItem && (stencilItem.canConnect || stencilItem.canConnectAssociation)) { var quickButtonCounter = 0; var quickButtonX = shapeXY.x+bounds.width() + 5; @@ -445,7 +455,7 @@ angular.module('activitiModeler') quickButtonX = shapeXY.x+bounds.width() + 5; quickButtonY += 24; quickButtonCounter = 1; - + } else if (quickButtonCounter > 1) { quickButtonX += 24; } @@ -457,7 +467,7 @@ angular.module('activitiModeler') } } }); - + if (!$rootScope.stencilInitialized) { KISBPM.eventBus.addListener(KISBPM.eventBus.EVENT_TYPE_HIDE_SHAPE_BUTTONS, function (event) { jQuery('.Oryx_button').each(function(i, obj) { @@ -481,13 +491,13 @@ angular.module('activitiModeler') || event.property.value.length == 0); } }); - + $rootScope.stencilInitialized = true; } - + $scope.morphShape = function() { $scope.safeApply(function () { - + var shapes = $rootScope.editor.getSelection(); if (shapes && shapes.length == 1) { @@ -517,19 +527,19 @@ angular.module('activitiModeler') } }); }; - + $scope.deleteShape = function() { KISBPM.TOOLBAR.ACTIONS.deleteItem({'$scope': $scope}); }; - + $scope.quickAddItem = function(newItemId) { $scope.safeApply(function () { - + var shapes = $rootScope.editor.getSelection(); if (shapes && shapes.length == 1) { $rootScope.currentSelectedShape = shapes.first(); - + var containedStencil = undefined; var stencilSets = $scope.editor.getStencilSets().values(); for (var i = 0; i < stencilSets.length; i++) @@ -545,21 +555,21 @@ angular.module('activitiModeler') } } } - + if (!containedStencil) return; - + var option = {type: $scope.currentSelectedShape.getStencil().namespace() + newItemId, namespace: $scope.currentSelectedShape.getStencil().namespace()}; option['connectedShape'] = $rootScope.currentSelectedShape; option['parent'] = $rootScope.currentSelectedShape.parent; option['containedStencil'] = containedStencil; - + var args = { sourceShape: $rootScope.currentSelectedShape, targetStencil: containedStencil }; var targetStencil = $scope.editor.getRules().connectMorph(args); if (!targetStencil){ return; }// Check if there can be a target shape option['connectingType'] = targetStencil.id(); var command = new KISBPM.CreateCommand(option, undefined, undefined, $scope.editor); - + $scope.editor.executeCommands([command]); } }); @@ -714,7 +724,7 @@ angular.module('activitiModeler') */ $scope.dropCallback = function (event, ui) { - + $scope.editor.handleEvents({ type: ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, highlightId: "shapeRepo.attached" @@ -723,20 +733,20 @@ angular.module('activitiModeler') type: ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, highlightId: "shapeRepo.added" }); - + $scope.editor.handleEvents({ type: ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, highlightId: "shapeMenu" }); - + KISBPM.eventBus.dispatch(KISBPM.eventBus.EVENT_TYPE_HIDE_SHAPE_BUTTONS); if ($scope.dragCanContain) { var item = $scope.getStencilItemById(ui.draggable[0].id); - + var pos = {x: event.pageX, y: event.pageY}; - + var additionalIEZoom = 1; if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) { var ua = navigator.userAgent; @@ -748,7 +758,7 @@ angular.module('activitiModeler') } } } - + var screenCTM = $scope.editor.getCanvas().node.getScreenCTM(); // Correcting the UpperLeft-Offset @@ -757,11 +767,11 @@ angular.module('activitiModeler') // Correcting the Zoom-Factor pos.x /= screenCTM.a; pos.y /= screenCTM.d; - + // Correcting the ScrollOffset pos.x -= document.documentElement.scrollLeft; pos.y -= document.documentElement.scrollTop; - + var parentAbs = $scope.dragCurrentParent.absoluteXY(); pos.x -= parentAbs.x; pos.y -= parentAbs.y; @@ -810,26 +820,26 @@ angular.module('activitiModeler') option.connectedShape = currentSelectedShape; option.parent = $scope.dragCurrentParent; option.containedStencil = containedStencil; - - // If the ctrl key is not pressed, - // snapp the new shape to the center + + // If the ctrl key is not pressed, + // snapp the new shape to the center // if it is near to the center of the other shape if (!event.ctrlKey){ // Get the center of the shape var cShape = currentSelectedShape.bounds.center(); - // Snapp +-20 Pixel horizontal to the center + // Snapp +-20 Pixel horizontal to the center if (20 > Math.abs(cShape.x - pos.x)){ pos.x = cShape.x; } - // Snapp +-20 Pixel vertical to the center + // Snapp +-20 Pixel vertical to the center if (20 > Math.abs(cShape.y - pos.y)){ pos.y = cShape.y; } } - + option.position = pos; - - if (containedStencil.idWithoutNs() !== 'SequenceFlow' && containedStencil.idWithoutNs() !== 'Association' && + + if (containedStencil.idWithoutNs() !== 'SequenceFlow' && containedStencil.idWithoutNs() !== 'Association' && containedStencil.idWithoutNs() !== 'MessageFlow' && containedStencil.idWithoutNs() !== 'DataAssociation') { var args = { sourceShape: currentSelectedShape, targetStencil: containedStencil }; @@ -837,9 +847,9 @@ angular.module('activitiModeler') if (!targetStencil){ return; }// Check if there can be a target shape option.connectingType = targetStencil.id(); } - + var command = new KISBPM.CreateCommand(option, $scope.dropTargetElement, pos, $scope.editor); - + $scope.editor.executeCommands([command]); } } @@ -951,18 +961,18 @@ angular.module('activitiModeler') ui.helper.addClass('stencil-item-dragged'); } }; - + $scope.startDragCallbackQuickMenu = function (event, ui) { $scope.dragModeOver = false; $scope.quickMenu = true; }; - + $scope.dragCallback = function (event, ui) { - + if ($scope.dragModeOver != false) { - + var coord = $scope.editor.eventCoordinatesXY(event.pageX, event.pageY); - + var additionalIEZoom = 1; if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) { var ua = navigator.userAgent; @@ -974,14 +984,14 @@ angular.module('activitiModeler') } } } - + if (additionalIEZoom !== 1) { coord.x = coord.x / additionalIEZoom; coord.y = coord.y / additionalIEZoom; } - + var aShapes = $scope.editor.getCanvas().getAbstractShapesAtPosition(coord); - + if (aShapes.length <= 0) { if (event.helper) { $scope.dragCanContain = false; @@ -1011,23 +1021,23 @@ angular.module('activitiModeler') }); return false; } - else + else { var item = $scope.getStencilItemById(event.target.id); - + var parentCandidate = aShapes.reverse().find(function (candidate) { return (candidate instanceof ORYX.Core.Canvas || candidate instanceof ORYX.Core.Node || candidate instanceof ORYX.Core.Edge); }); - + if (!parentCandidate) { $scope.dragCanContain = false; return false; } - + if (item.type === "node") { - + // check if the draggable is a boundary event and the parent an Activity var _canContain = false; var parentStencilId = parentCandidate.getStencil().id(); @@ -1049,7 +1059,7 @@ angular.module('activitiModeler') _canContain = true; } } - + if (_canContain) { $scope.editor.handleEvents({ @@ -1101,11 +1111,11 @@ angular.module('activitiModeler') $scope.dragCurrentParentId = parentCandidate.id; $scope.dragCurrentParentStencil = parentStencilId; $scope.dragCanContain = _canContain; - - } else { + + } else { var canvasCandidate = $scope.editor.getCanvas(); var canConnect = false; - + var targetStencil = $scope.getStencilItemById(parentCandidate.getStencil().idWithoutNs()); if (targetStencil) { var associationConnect = false; @@ -1114,18 +1124,18 @@ angular.module('activitiModeler') } else if (stencil.idWithoutNs() === 'DataAssociation' && curCan.getStencil().idWithoutNs() === 'DataStore') { associationConnect = true; } - + if (targetStencil.canConnectTo || associationConnect) { canConnect = true; } } - + //Edge $scope.dragCurrentParent = canvasCandidate; $scope.dragCurrentParentId = canvasCandidate.id; $scope.dragCurrentParentStencil = canvasCandidate.getStencil().id(); $scope.dragCanContain = canConnect; - + // Show Highlight $scope.editor.handleEvents({ type: ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW, @@ -1142,12 +1152,12 @@ angular.module('activitiModeler') } } }; - + $scope.dragCallbackQuickMenu = function (event, ui) { - + if ($scope.dragModeOver != false) { var coord = $scope.editor.eventCoordinatesXY(event.pageX, event.pageY); - + var additionalIEZoom = 1; if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) { var ua = navigator.userAgent; @@ -1159,14 +1169,14 @@ angular.module('activitiModeler') } } } - + if (additionalIEZoom !== 1) { coord.x = coord.x / additionalIEZoom; coord.y = coord.y / additionalIEZoom; } - + var aShapes = $scope.editor.getCanvas().getAbstractShapesAtPosition(coord); - + if (aShapes.length <= 0) { if (event.helper) { $scope.dragCanContain = false; @@ -1177,7 +1187,7 @@ angular.module('activitiModeler') if (aShapes[0] instanceof ORYX.Core.Canvas) { $scope.editor.getCanvas().setHightlightStateBasedOnX(coord.x); } - + var stencil = undefined; var stencilSets = $scope.editor.getStencilSets().values(); for (var i = 0; i < stencilSets.length; i++) @@ -1192,7 +1202,7 @@ angular.module('activitiModeler') break; } } - + if (!stencil) { var edges = stencilSet.edges(); @@ -1206,15 +1216,15 @@ angular.module('activitiModeler') } } } - + var candidate = aShapes.last(); - + var isValid = false; - if (stencil.type() === "node") + if (stencil.type() === "node") { //check containment rules var canContain = $scope.editor.getRules().canContain({containingShape:candidate, containedStencil:stencil}); - + var parentCandidate = aShapes.reverse().find(function (candidate) { return (candidate instanceof ORYX.Core.Canvas || candidate instanceof ORYX.Core.Node @@ -1225,28 +1235,28 @@ angular.module('activitiModeler') $scope.dragCanContain = false; return false; } - + $scope.dragCurrentParent = parentCandidate; $scope.dragCurrentParentId = parentCandidate.id; $scope.dragCurrentParentStencil = parentCandidate.getStencil().id(); $scope.dragCanContain = canContain; $scope.dropTargetElement = parentCandidate; isValid = canContain; - + } else { //Edge - + var shapes = $scope.editor.getSelection(); if (shapes && shapes.length == 1) { var currentSelectedShape = shapes.first(); var curCan = candidate; var canConnect = false; - + var targetStencil = $scope.getStencilItemById(curCan.getStencil().idWithoutNs()); if (targetStencil) { var associationConnect = false; - if (stencil.idWithoutNs() === 'Association' && (curCan.getStencil().idWithoutNs() === 'TextAnnotation' || curCan.getStencil().idWithoutNs() === 'BoundaryCompensationEvent')) + if (stencil.idWithoutNs() === 'Association' && (curCan.getStencil().idWithoutNs() === 'TextAnnotation' || curCan.getStencil().idWithoutNs() === 'BoundaryCompensationEvent')) { associationConnect = true; } @@ -1254,7 +1264,7 @@ angular.module('activitiModeler') { associationConnect = true; } - + if (targetStencil.canConnectTo || associationConnect) { while (!canConnect && curCan && !(curCan instanceof ORYX.Core.Canvas)) @@ -1262,28 +1272,28 @@ angular.module('activitiModeler') candidate = curCan; //check connection rules canConnect = $scope.editor.getRules().canConnect({ - sourceShape: currentSelectedShape, - edgeStencil: stencil, + sourceShape: currentSelectedShape, + edgeStencil: stencil, targetShape: curCan - }); + }); curCan = curCan.parent; } } } var parentCandidate = $scope.editor.getCanvas(); - + isValid = canConnect; $scope.dragCurrentParent = parentCandidate; $scope.dragCurrentParentId = parentCandidate.id; $scope.dragCurrentParentStencil = parentCandidate.getStencil().id(); $scope.dragCanContain = canConnect; $scope.dropTargetElement = candidate; - } - - } + } + + } $scope.editor.handleEvents({ - type: ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW, + type: ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW, highlightId:'shapeMenu', elements: [candidate], color: isValid ? ORYX.CONFIG.SELECTION_VALID_COLOR : ORYX.CONFIG.SELECTION_INVALID_COLOR @@ -1316,9 +1326,9 @@ KISBPM.CreateCommand = ORYX.Core.Command.extend({ this.parent = option.parent; this.currentReference = currentReference; this.shapeOptions = option.shapeOptions; - }, + }, execute: function(){ - + if (this.shape) { if (this.shape instanceof ORYX.Core.Node) { this.parent.add(this.shape); @@ -1329,9 +1339,9 @@ KISBPM.CreateCommand = ORYX.Core.Command.extend({ this.edge.dockers.last().setDockedShape(this.shape); this.edge.dockers.last().setReferencePoint(this.targetRefPos); } - + this.facade.setSelection([this.shape]); - + } else if (this.shape instanceof ORYX.Core.Edge) { this.facade.getCanvas().add(this.shape); this.shape.dockers.first().setDockedShape(this.connectedShape); @@ -1342,14 +1352,14 @@ KISBPM.CreateCommand = ORYX.Core.Command.extend({ this.shape = this.facade.createShape(this.option); this.edge = (!(this.shape instanceof ORYX.Core.Edge)) ? this.shape.getIncomingShapes().first() : undefined; } - + if (this.currentReference && this.position) { - + if (this.shape instanceof ORYX.Core.Edge) { - + if (!(this.currentReference instanceof ORYX.Core.Canvas)) { this.shape.dockers.last().setDockedShape(this.currentReference); - + if (this.currentReference.getStencil().idWithoutNs() === 'TextAnnotation') { var midpoint = {}; @@ -1367,7 +1377,7 @@ KISBPM.CreateCommand = ORYX.Core.Command.extend({ } this.sourceRefPos = this.shape.dockers.first().referencePoint; this.targetRefPos = this.shape.dockers.last().referencePoint; - + } else if (this.edge){ this.sourceRefPos = this.edge.dockers.first().referencePoint; this.targetRefPos = this.edge.dockers.last().referencePoint; @@ -1377,7 +1387,7 @@ KISBPM.CreateCommand = ORYX.Core.Command.extend({ var connectedShape = this.connectedShape; var bc = connectedShape.bounds; var bs = this.shape.bounds; - + var pos = bc.center(); if(containedStencil.defaultAlign()==="north") { pos.y -= (bc.height() / 2) + ORYX.CONFIG.SHAPEMENU_CREATE_OFFSET + (bs.height()/2); @@ -1400,26 +1410,26 @@ KISBPM.CreateCommand = ORYX.Core.Command.extend({ } else { pos.x += (bc.width() / 2) + ORYX.CONFIG.SHAPEMENU_CREATE_OFFSET + (bs.width()/2); } - + // Move shape to the new position this.shape.bounds.centerMoveTo(pos); - + // Move all dockers of a node to the position if (this.shape instanceof ORYX.Core.Node){ (this.shape.dockers||[]).each(function(docker){ docker.bounds.centerMoveTo(pos); }); } - + //this.shape.update(); this.position = pos; - + if (this.edge){ this.sourceRefPos = this.edge.dockers.first().referencePoint; this.targetRefPos = this.edge.dockers.last().referencePoint; } } - + this.facade.getCanvas().update(); this.facade.updateSelection();