+
+
+
+
+
+
diff --git a/len-activiti/src/main/resources/ftl/act/leave/leaveList.ftl b/len-activiti/src/main/resources/ftl/act/leave/leaveList.ftl
index 84dfb28..55a0afe 100644
--- a/len-activiti/src/main/resources/ftl/act/leave/leaveList.ftl
+++ b/len-activiti/src/main/resources/ftl/act/leave/leaveList.ftl
@@ -10,6 +10,7 @@
请假流程示例
<#include "/system/base/header.ftl">
+
@@ -183,17 +184,7 @@
if (obj.event === 'start') {
start(data.key);
} else if (obj.event === 'getProcImage') {
- layer.open({
- id: 'leave-image',
- type: 2,
- area: ['880px', '400px'],
- fix: false,
- maxmin: true,
- shadeClose: false,
- shade: 0.4,
- title: '流程图',
- content: '/leave/shinePics/' + data.processInstanceId
- });
+ activiti.img(data.processInstanceId);
} else if (obj.event === 'leaveDetail') {
layer.open({
id: 'leave-detail',
diff --git a/len-activiti/src/main/resources/ftl/act/leave/shinePics.ftl b/len-activiti/src/main/resources/ftl/act/leave/shinePics.ftl
deleted file mode 100644
index bde2af4..0000000
--- a/len-activiti/src/main/resources/ftl/act/leave/shinePics.ftl
+++ /dev/null
@@ -1,62 +0,0 @@
-<#--Created by IntelliJ IDEA.
-User: zxm
-Date: 2017/12/20
-Time: 10:00
-To change this template use File | Settings | File Templates.-->
-
-
-
-
-
-
-
流程图
-<#include "/system/base/header.ftl">
-
-
-
-
-
-
-
-
diff --git a/len-activiti/src/main/resources/ftl/actModelList.ftl b/len-activiti/src/main/resources/ftl/actModelList.ftl
index 807bf2d..e293250 100644
--- a/len-activiti/src/main/resources/ftl/actModelList.ftl
+++ b/len-activiti/src/main/resources/ftl/actModelList.ftl
@@ -145,16 +145,16 @@
}
});
}, add: function () {
- var index = layer.open({
+ var index = window.top.layer.open({
id: 'act-add',
type: 2,
- area: ['600px', '350px'],
+ area: [$(window).width()+'px',$(window).height()+'px'],
fix: false,
maxmin: true,
shadeClose: false,
shade: 0.4,
title: '添加流程',
- content: 'goActiviti'
+ content: '/act/goActiviti'
});
layer.full(index);
}
@@ -165,20 +165,19 @@
if (obj.event === 'open') {
open(data.id);
} else if (obj.event === 'update') {
- var index = layer.open({
+ var index = window.top.layer.open({
id: 'act-update',
type: 2,
- area: ['600px', '350px'],
+ area: [$(window).width()+'px',$(window).height()+'px'],
fix: false,
maxmin: true,
shadeClose: false,
shade: 0.4,
title: '编辑流程',
- content: 'actUpdate/' + data.id
+ content: '/act/actUpdate/' + data.id
});
- layer.full(index);
} else if (obj.event === 'del') {
- layer.confirm('确定删除[' + data.name + ']?', {
+ layer.confirm('确定删除[' + data.name + ']?', {
btn: ['确定', '取消'] //按钮
}, function () {
del(data.id);
@@ -212,13 +211,14 @@
}
function syncdata() {
+ var index= layer.load(2);
$.ajax({
url: "syncdata",
type: "post",
dataType: "json", traditional: true,
success: function (data) {
+ layer.close(index)
layer.msg(data.msg, {icon: 6});
- //layui.table.reload('actModeltList');
}
});
}
diff --git a/len-activiti/src/main/resources/mapper/UserLeaveMapper.xml b/len-activiti/src/main/resources/mapper/UserLeaveMapper.xml
index 8bcc43e..d6a1a8e 100644
--- a/len-activiti/src/main/resources/mapper/UserLeaveMapper.xml
+++ b/len-activiti/src/main/resources/mapper/UserLeaveMapper.xml
@@ -32,5 +32,6 @@
+ order by create_date desc
\ No newline at end of file
diff --git a/len-activiti/src/main/resources/plugin/activiti.js b/len-activiti/src/main/resources/plugin/activiti.js
new file mode 100644
index 0000000..aa0038c
--- /dev/null
+++ b/len-activiti/src/main/resources/plugin/activiti.js
@@ -0,0 +1,29 @@
+var activiti = {
+
+ /**
+ *
+ * @param processInstanceId 流程实例ID
+ * @param w 宽
+ * @param h 高
+ */
+ img: function (processInstanceId, w, h) {
+ if (typeof w==='undefined') {
+ w = $(window).width();
+ }
+ if (typeof h==='undefined') {
+ h = $(window).height();
+ }
+ window.parent.layer.open({
+ id: Math.floor(Math.random() * 1000),
+ type: 2,
+ area: [w + 'px', h + 'px'],
+ fix: false,
+ maxmin: true,
+ shadeClose: false,
+ shade: 0.4,
+ title: '流程图',
+ content: '/act/shinePics/' + processInstanceId
+ });
+ }
+
+};
\ No newline at end of file
diff --git a/len-activiti/src/main/resources/static/editor-app/configuration/properties-assignment-controller.js b/len-activiti/src/main/resources/static/editor-app/configuration/properties-assignment-controller.js
index 0ed69ae..8aa39d7 100644
--- a/len-activiti/src/main/resources/static/editor-app/configuration/properties-assignment-controller.js
+++ b/len-activiti/src/main/resources/static/editor-app/configuration/properties-assignment-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,11 +33,11 @@ var KisBpmAssignmentCtrl = [ '$scope', '$modal','$http', function($scope, $modal
}];
var KisBpmAssignmentPopupCtrl = [ '$scope','$modal', function($scope, $modal) {
-
+
// Put json representing assignment on scope
if ($scope.property.value !== undefined && $scope.property.value !== null
&& $scope.property.value.assignment !== undefined
- && $scope.property.value.assignment !== null)
+ && $scope.property.value.assignment !== null)
{
$scope.assignment = $scope.property.value.assignment;
} else {
@@ -46,7 +46,7 @@ var KisBpmAssignmentPopupCtrl = [ '$scope','$modal', function($scope, $modal) {
if ($scope.assignment.candidateUsers == undefined || $scope.assignment.candidateUsers.length == 0)
{
- $scope.assignment.candidateUsers = [{value: ''}];
+ $scope.assignment.candidateUsers = [{value: ''}];
}
@@ -54,7 +54,7 @@ var KisBpmAssignmentPopupCtrl = [ '$scope','$modal', function($scope, $modal) {
{
$scope.assignment.assignee = '';
}
-
+
// Click handler for + button after enum value
var userValueIndex = 1;
$scope.addCandidateUserValue = function(index) {
@@ -65,12 +65,12 @@ var KisBpmAssignmentPopupCtrl = [ '$scope','$modal', function($scope, $modal) {
$scope.removeCandidateUserValue = function(index) {
$scope.assignment.candidateUsers.splice(index, 1);
};
-
+
if ($scope.assignment.candidateGroups == undefined || $scope.assignment.candidateGroups.length == 0)
{
- $scope.assignment.candidateGroups = [{value: ''}];
+ $scope.assignment.candidateGroups = [{value: ''}];
}
-
+
var groupValueIndex = 1;
$scope.addCandidateGroupValue = function(index) {
$scope.assignment.candidateGroups.splice(index + 1, 0, {value: 'value ' + groupValueIndex++});
@@ -108,72 +108,72 @@ var KisBpmAssignmentPopupCtrl = [ '$scope','$modal', function($scope, $modal) {
$scope.property.value = {};
handleAssignmentInput($scope);
$scope.property.value.assignment = $scope.assignment;
-
+
$scope.updatePropertyInModel($scope.property);
$scope.close();
};
// Close button handler
$scope.close = function() {
- handleAssignmentInput($scope);
- $scope.property.mode = 'read';
- $scope.$hide();
+ handleAssignmentInput($scope);
+ $scope.property.mode = 'read';
+ $scope.$hide();
};
-
+
var handleAssignmentInput = function($scope) {
- if ($scope.assignment.candidateUsers)
- {
- var emptyUsers = true;
- var toRemoveIndexes = [];
- for (var i = 0; i < $scope.assignment.candidateUsers.length; i++)
- {
- if ($scope.assignment.candidateUsers[i].value != '')
- {
- emptyUsers = false;
- }
- else
- {
- toRemoveIndexes[toRemoveIndexes.length] = i;
- }
- }
-
- for (var i = 0; i < toRemoveIndexes.length; i++)
- {
- $scope.assignment.candidateUsers.splice(toRemoveIndexes[i], 1);
- }
-
- if (emptyUsers)
- {
- $scope.assignment.candidateUsers = undefined;
- }
- }
-
- if ($scope.assignment.candidateGroups)
- {
- var emptyGroups = true;
- var toRemoveIndexes = [];
- for (var i = 0; i < $scope.assignment.candidateGroups.length; i++)
- {
- if ($scope.assignment.candidateGroups[i].value != '')
- {
- emptyGroups = false;
- }
- else
- {
- toRemoveIndexes[toRemoveIndexes.length] = i;
- }
- }
-
- for (var i = 0; i < toRemoveIndexes.length; i++)
- {
- $scope.assignment.candidateGroups.splice(toRemoveIndexes[i], 1);
- }
-
- if (emptyGroups)
- {
- $scope.assignment.candidateGroups = undefined;
- }
- }
+ if ($scope.assignment.candidateUsers)
+ {
+ var emptyUsers = true;
+ var toRemoveIndexes = [];
+ for (var i = 0; i < $scope.assignment.candidateUsers.length; i++)
+ {
+ if ($scope.assignment.candidateUsers[i].value != '')
+ {
+ emptyUsers = false;
+ }
+ else
+ {
+ toRemoveIndexes[toRemoveIndexes.length] = i;
+ }
+ }
+
+ for (var i = 0; i < toRemoveIndexes.length; i++)
+ {
+ $scope.assignment.candidateUsers.splice(toRemoveIndexes[i], 1);
+ }
+
+ if (emptyUsers)
+ {
+ $scope.assignment.candidateUsers = undefined;
+ }
+ }
+
+ if ($scope.assignment.candidateGroups)
+ {
+ var emptyGroups = true;
+ var toRemoveIndexes = [];
+ for (var i = 0; i < $scope.assignment.candidateGroups.length; i++)
+ {
+ if ($scope.assignment.candidateGroups[i].value != '')
+ {
+ emptyGroups = false;
+ }
+ else
+ {
+ toRemoveIndexes[toRemoveIndexes.length] = i;
+ }
+ }
+
+ for (var i = 0; i < toRemoveIndexes.length; i++)
+ {
+ $scope.assignment.candidateGroups.splice(toRemoveIndexes[i], 1);
+ }
+
+ if (emptyGroups)
+ {
+ $scope.assignment.candidateGroups = undefined;
+ }
+ }
};
//因新打开的界面上选定的数据要传输到当前modal中,所以使用此方式,这是angular.js中不同控制器之间传输数据的方式
@@ -181,11 +181,24 @@ var KisBpmAssignmentPopupCtrl = [ '$scope','$modal', function($scope, $modal) {
var infos = data.split(",");
var nameInfos =nameData.split(",");
// $scope.assignment.candidateUsers= [];
- for(var i=0;i
-
\ No newline at end of file
diff --git a/len-activiti/src/main/resources/static/editor-app/configuration/properties/assignment-popup-popup.html b/len-activiti/src/main/resources/static/editor-app/configuration/properties/assignment-popup-popup.html
index f66c317..b405a44 100644
--- a/len-activiti/src/main/resources/static/editor-app/configuration/properties/assignment-popup-popup.html
+++ b/len-activiti/src/main/resources/static/editor-app/configuration/properties/assignment-popup-popup.html
@@ -29,22 +29,22 @@
|
- 工号 |
+ 用户名 |
姓名 |
-
+
|
-
+
-
+
-
|
{{account.code}} |
diff --git a/len-activiti/src/main/resources/static/editor-app/css/style-common.css b/len-activiti/src/main/resources/static/editor-app/css/style-common.css
index 9eb9ebd..9ef77eb 100644
--- a/len-activiti/src/main/resources/static/editor-app/css/style-common.css
+++ b/len-activiti/src/main/resources/static/editor-app/css/style-common.css
@@ -77,8 +77,8 @@ body {
}
.simple-list li >.actions a {
- padding: 4px 4px 0 4px;
- }
+ padding: 4px 4px 0 4px;
+}
.simple-list li >.actions a:hover {
background-color: #ffffff;
@@ -164,7 +164,8 @@ label {
/** Buttons **/
button.btn, a.btn {
- background-color: #36a7c4;
+ /*background-color: #36a7c4;*/
+ background-color: #6dc469;
color: #ffffff;
border-color: #ffffff;
font-size: 15px;
@@ -266,7 +267,8 @@ button.btn.btn-danger {
}
.dropdown-menu > li > a:hover, .dropdown-menu > ul > li > a:hover {
- background: #36a7c4;
+ /*background: #36a7c4;*/
+ background: #6dc469;
color: #ffffff;
}
@@ -298,7 +300,8 @@ a.dropdown-toggle {
}
.open a.dropdown-toggle, a.dropdown-toggle:hover {
- color: #36a7c4;
+ /*color: #36a7c4;*/
+ color: #6dc469;
}
.btn-group.open .dropdown-toggle {
@@ -310,35 +313,35 @@ a.dropdown-toggle {
/** Subtle dropdown (eg. sort) */
.dropdown-subtle {
- margin-right: 5px;
- color: #606b7d;
+ margin-right: 5px;
+ color: #606b7d;
}
.dropdown-subtle .btn {
- background: transparent;
- line-height: 36px;
- color: #606b7d;
- padding: 0;
- font-size: 14px;
- border: none;
- box-shadow: none;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
+ background: transparent;
+ line-height: 36px;
+ color: #606b7d;
+ padding: 0;
+ font-size: 14px;
+ border: none;
+ box-shadow: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
}
.dropdown-subtle .btn-group.open .dropdown-toggle {
- box-shadow: none;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
+ box-shadow: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
}
.dropdown-subtle .btn:hover, .dropdown-subtle .btn:focus {
- background: transparent;
- color: #333333;
+ background: transparent;
+ color: #333333;
}
.dropdown-subtle a {
- cursor: pointer;
+ cursor: pointer;
}
/** Popovers */
@@ -354,7 +357,7 @@ a.dropdown-toggle {
.popover.bottom-left, .popover.bottom-right {
margin-top: 10px;
}
- .popover>.arrow, .popover>.arrow {
+.popover>.arrow, .popover>.arrow {
margin-left: -11px;
border-top-width: 0;
border-bottom-color: #999;
@@ -526,13 +529,15 @@ a.dropdown-toggle {
.navbar-nav > li.active > a {
- color: #36a7c4;
+ /*color: #36a7c4;*/
+ color: #6dc469;
}
/* Sub header */
.subheader {
- background-color: #e8edf1;
- min-height: 60px;
+ background-color: #ffffff;
+ /*background-color: #e8edf1;*/
+ min-height: 50px;
border-bottom: 1px solid #a4acb9;
}
@@ -551,7 +556,8 @@ a.dropdown-toggle {
.subheader .version {
font-weight: bold;
- color: #36a7c4;
+ /*color: #36a7c4;*/
+ color: #6dc469;
font-size: 110%;
padding-left: 5px;
line-height: 1;
@@ -690,7 +696,7 @@ a.dropdown-toggle {
}
.icon-pencil:before {
- content: "\270f";
+ content: "\270f";
}
.icon-caret-up:before {
@@ -885,7 +891,7 @@ a.dropdown-toggle {
.alert.ng-hide-remove {
opacity: 1;
display:block!important;
- }
+}
.alert.ng-hide {
@@ -937,7 +943,7 @@ a.dropdown-toggle {
}
.wrapper.full {
- padding: 40px 0px 0px 0px;
+ /*padding: 40px 0px 0px 0px;*/
overflow: hidden;
max-width: 100%;
min-width: 100%;
@@ -1198,7 +1204,7 @@ button.selection:active, button.selection:focus {
}
.list-wrapper {
- overflow: auto;
+ overflow: auto;
}
@@ -1220,7 +1226,8 @@ button.selection:active, button.selection:focus {
}
.list-header .summary .filter-action:hover {
- color: #36a7c4;
+ /*color: #36a7c4;*/
+ color: #6dc469;
}
.main-list .list-subheader {
@@ -1265,7 +1272,8 @@ button.selection:active, button.selection:focus {
padding-right: 0;
border-radius: 3px;
background-color: #e8edf1;
- color: #36a7c4;
+ /*color: #36a7c4;*/
+ color: #6dc469;
background-color: transparent;
font-weight: normal;
@@ -1292,7 +1300,8 @@ button.selection:active, button.selection:focus {
}
.full-list li.active > div {
- border-left-color: #36a7c4;
+ /*border-left-color: #36a7c4;*/
+ border-left-color: #6dc469;
}
.full-list li .title {
@@ -1361,7 +1370,7 @@ button.selection:active, button.selection:focus {
color: #ffffff;
}
- .modal-header .label, .header .label {
+.modal-header .label, .header .label {
padding: 0 3px 0 15px;
color: #1a1a1a;
font-weight: normal;
@@ -1378,7 +1387,8 @@ button.selection:active, button.selection:focus {
}
.header .detail a:hover {
- color: #36a7c4;
+ /*color: #36a7c4;*/
+ color: #6dc469;
text-decoration: underline;
}
@@ -1410,7 +1420,8 @@ button.selection:active, button.selection:focus {
.jumpers li.selected {
color: white;
- background-color: #36a7c4;
+ /*background-color: #36a7c4;*/
+ background-color: #6dc469;
}
diff --git a/len-activiti/src/main/resources/static/editor-app/css/style-editor.css b/len-activiti/src/main/resources/static/editor-app/css/style-editor.css
index bce6fa7..3e62e43 100644
--- a/len-activiti/src/main/resources/static/editor-app/css/style-editor.css
+++ b/len-activiti/src/main/resources/static/editor-app/css/style-editor.css
@@ -1,6 +1,6 @@
/**
Colors:
-
+
- Header: #333333
- Subheader: #e8edf1
- Subheader border: #a4acb9
@@ -17,12 +17,12 @@
}
.subtle-select .glyphicon {
- visibility: hidden;
- padding-left: 5px;
+ visibility: hidden;
+ padding-left: 5px;
}
a.subtle-select:hover .glyphicon {
- visibility: visible;
+ visibility: visible;
}
.full {
@@ -31,30 +31,30 @@ a.subtle-select:hover .glyphicon {
}
.inline {
- display: inline;
+ display: inline;
}
.greyish {
- color: #afafaf;
+ color: #afafaf;
}
.roweditor-canvas {
- margin-top: 50px;
+ margin-top: 50px;
}
.no-pad {
margin: 0;
max-width: 1300px;
- min-width: 1100px;
+ min-width: 1100px;
}
.content.no-pad {
- max-width: 100%;
- min-width: 100%;
+ max-width: 100%;
+ min-width: 100%;
}
.inset .col-sm-3 {
- margin-left: -15px;
+ margin-left: -15px;
}
.no-pad > div{
padding: 0;
@@ -73,14 +73,14 @@ h1 {
line-height: 40px;
border: none;
color: #ffffff;
- font-family: 'Lato', sans-serif;
+ font-family: 'Lato', sans-serif;
}
.truncate, .truncate > span {
- white-space: nowrap;
- width: 100%;
- overflow: hidden;
- text-overflow: ellipsis;
+ white-space: nowrap;
+ width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
.subheader .details .counter {
@@ -99,7 +99,7 @@ h1 {
.btn .icon-and-label {
padding-right: 5px;
-}
+}
.dropdown-menu .title {
margin: 5px 10px 0px 10px;
@@ -121,7 +121,7 @@ h1 {
.filter-wrapper {
min-height: 400px;
margin-top: 10px;
- margin-left: -15px;
+ margin-left: -15px;
}
ul.filter-list {
@@ -140,9 +140,11 @@ ul.filter-list li a {
}
ul.filter-list li.current a {
- color: #36a7c4;
+ /*color: #36a7c4;*/
+ color: #6dc469;
padding-left: 5px;
- border-left: 4px solid #36a7c4;
+ /*border-left: 4px solid #36a7c4;*/
+ border-left: 4px solid #6dc469;
}
ul.filter-list li a:hover, ul.filter-list li a:focus {
@@ -152,7 +154,8 @@ ul.filter-list li a:hover, ul.filter-list li a:focus {
ul.filter-list li.current a:hover, ul.filter-list li.current a:focus {
background-color: transparent;
- color: #36a7c4;
+ /*color: #36a7c4;*/
+ color: #6dc469;
cursor: default;
text-decoration: none;
}
@@ -173,7 +176,7 @@ ul.filter-list li.current a:hover, ul.filter-list li.current a:focus {
color: #606b7d;
}
.item-wrapper .message span {
- font-size: 14px;
+ font-size: 14px;
}
.item-wrapper .item {
@@ -183,12 +186,12 @@ ul.filter-list li.current a:hover, ul.filter-list li.current a:focus {
float: left;
}
-.item-wrapper .item .btn-default.disabled,
+.item-wrapper .item .btn-default.disabled,
.item-wrapper .item .btn-default[disabled],
.item-wrapper .item .btn-default[disabled]:active,
.item-wrapper .item .btn-default[disabled]:hover {
border-color: #ffffff;
- cursor: default;
+ cursor: default;
}
.item-wrapper .item .item-box {
@@ -200,18 +203,18 @@ ul.filter-list li.current a:hover, ul.filter-list li.current a:focus {
background-repeat: no-repeat;
background-position: center 20px;
background-size: auto;
- position: relative;
+ position: relative;
}
.item-box .details {
- position: relative;
+ position: relative;
background-color: #e8edf1;
height: 160px;
margin-top: 120px;
padding: 5px;
color: #373e48;
font-size: 13px;
-
+
transition: margin-top .5s ease;
-moz-transition: margin-top .5s ease;
-webkit-transition: margin-top .5s ease;
@@ -274,7 +277,7 @@ ul.filter-list li.current a:hover, ul.filter-list li.current a:focus {
color: #1a1a1a;
text-align: center;
margin-bottom: 20px;
-}
+}
.create-inline .glyphicon {
margin-right: 10px;
@@ -303,36 +306,36 @@ ul.filter-list li.current a:hover, ul.filter-list li.current a:focus {
}
.content-canvas-wrapper {
- -moz-box-shadow: inset 0 3px 3px -4px #ababab;
- -webkit-box-shadow: inset 0 3px 3px -4px #ababab;
- box-shadow: inset 0 3px 3px -4px #ababab;
- margin: 15px 7px 0 7px;
- z-index: 0;
+ -moz-box-shadow: inset 0 3px 3px -4px #ababab;
+ -webkit-box-shadow: inset 0 3px 3px -4px #ababab;
+ box-shadow: inset 0 3px 3px -4px #ababab;
+ margin: 15px 7px 0 7px;
+ z-index: 0;
}
.content-canvas {
- background-color: #f9f9f9;
- margin: 0 3px 0 3px;
+ background-color: #f9f9f9;
+ margin: 0 3px 0 3px;
- -moz-box-shadow: inset 0 3px 3px -4px #ababab;
- -webkit-box-shadow: inset 0 3px 3px -4px #ababab;
- box-shadow: inset 0 3px 3px -4px #ababab;
+ -moz-box-shadow: inset 0 3px 3px -4px #ababab;
+ -webkit-box-shadow: inset 0 3px 3px -4px #ababab;
+ box-shadow: inset 0 3px 3px -4px #ababab;
- padding: 20px;
+ padding: 20px;
}
.content-canvas h3 {
- margin-bottom: 5px;
+ margin-bottom: 5px;
}
.content-canvas .no-results{
- color: #999999;
- font-size: 16px;
- margin: 10px 0px;
+ color: #999999;
+ font-size: 16px;
+ margin: 10px 0px;
}
.content-canvas .item-wrapper {
- margin: 5px 10px;
+ margin: 5px 10px;
}
/* History */
@@ -342,11 +345,11 @@ table.history {
}
.subheader table.history {
- min-width: 250px;
+ min-width: 250px;
}
table.history td {
- vertical-align: middle;
+ vertical-align: middle;
}
table.history tr td:last-child {
@@ -365,16 +368,17 @@ table.history tr.current:hover {
table.history a:hover {
text-decoration: none;
-
+
}
table.history .version {
font-size: 30px;
display: inline-block;
- color: #36a7c4;
+ /*color: #36a7c4;*/
+ color: #6dc469;
padding: 5px 10px;
vertical-align:middle;
- color: #36a7c4;
+ /*color: #36a7c4;*/
}
table.history .detail {
@@ -398,11 +402,11 @@ table.history tr.current td {
border-top: 1px solid #eeeeee;
margin-top: 5px;
max-height: 350px;
- overflow: auto;
+ overflow: auto;
}
.comment {
- margin: 10px 0px 20px 0px;
+ margin: 10px 0px 20px 0px;
font-size: 12px;
}
@@ -412,20 +416,21 @@ table.history tr.current td {
}
.comment .author {
- color: #36a7c4;
+ /*color: #36a7c4;*/
+ color: #6dc469;
font-size: 18px;
}
.comment p {
- word-wrap: break-word;
+ word-wrap: break-word;
}
.modal.modal-wide .modal-dialog {
- width: 1000px;
+ width: 1000px;
}
.modal-dialog.modal-wide {
- width: 1000px;
+ width: 1000px;
}
.modal-body p {
@@ -438,202 +443,202 @@ table.history tr.current td {
}
.form-group .inline-help {
- font-size: 11px;
- color: #666666;
- margin-top: 5px;
+ font-size: 11px;
+ color: #666666;
+ margin-top: 5px;
}
.form-group .message {
- color: #1a1a1a;
- font-size: 14px;
+ color: #1a1a1a;
+ font-size: 14px;
}
.people-select > .selection {
- width: 100%;
- text-align: left;
+ width: 100%;
+ text-align: left;
}
.popup-wrapper .people-select {
- max-height: 160px;
+ max-height: 160px;
}
.people-select .nothing-to-see {
- padding: 5px 0;
+ padding: 5px 0;
- color: #999999;
+ color: #999999;
}
.inline-people-select {
- max-height: 120px;
- overflow: auto;
+ max-height: 120px;
+ overflow: auto;
}
/** Center tabbed pane */
.center-pane {
- overflow: auto;
- padding-bottom: 20px;
+ overflow: auto;
+ padding-bottom: 20px;
}
.center-pane .content {
- overflow: hidden;
+ overflow: hidden;
}
.center-pane .tab-actions {
- padding: 8px;
+ padding: 8px;
}
.center-pane .tabs-wrapper > .pull-right {
- margin-right: 5px;
+ margin-right: 5px;
}
.center-pane .content {
- padding: 10px;
+ padding: 10px;
}
.center-pane.content {
- padding: 0;
+ padding: 0;
}
.center-pane .content .tabs, .center-pane.content .tabs {
- padding-left: 15px;
+ padding-left: 15px;
}
.center-pane .content .tabs > li a, .center-pane.content .tabs > li a {
- padding: 8px 30px;
+ padding: 8px 30px;
}
.center-pane .header h1 {
- font-size: 30px;
- margin: 0;
- padding:0;
+ font-size: 30px;
+ margin: 0;
+ padding:0;
}
.center-pane .header h2 {
- font-size: 24px;
- margin: 0 0 5px 0;
- padding:0;
+ font-size: 24px;
+ margin: 0 0 5px 0;
+ padding:0;
}
.center-pane .header {
- padding: 5px 10px 25px 10px;
+ padding: 5px 10px 25px 10px;
}
.center-pane .header.compact {
- padding-bottom: 5px;
+ padding-bottom: 5px;
}
.center-pane .well {
- -moz-border-radius: 0px;
- -webkit-border-radius: px;
- border-radius: 0px;
- background-color: #f9f9f9;
- padding: 12px 10px;
- margin: 15px 0 0 0;
- border: 1px solid #eeeeee;
+ -moz-border-radius: 0px;
+ -webkit-border-radius: px;
+ border-radius: 0px;
+ background-color: #f9f9f9;
+ padding: 12px 10px;
+ margin: 15px 0 0 0;
+ border: 1px solid #eeeeee;
}
/** General button styling */
.btn.btn-clean {
- border: none;
- background-color: transparent;
- font-size: 24px;
- padding: 2px 6px;
- color: #444444;
+ border: none;
+ background-color: transparent;
+ font-size: 24px;
+ padding: 2px 6px;
+ color: #444444;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
}
.btn-clean:hover .icon-remove {
- color: #a02828;
+ color: #a02828;
}
.btn-clean:focus, .btn-clean:hover {
- color: #5f8dd3;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
+ color: #5f8dd3;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
}
.btn-clean:active {
- color: #2c5aa0;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
+ color: #2c5aa0;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
}
/* Show list in popup */
ul.list {
- list-style: none inside;
- padding: 0px;
- margin-bottom: 3px;
+ list-style: none inside;
+ padding: 0px;
+ margin-bottom: 3px;
}
ul.list>li {
- line-height: 30px;
- margin: 0;
- padding: 4px;
- cursor: pointer;
+ line-height: 30px;
+ margin: 0;
+ padding: 4px;
+ cursor: pointer;
}
.popup-wrapper ul.list>li {
- border-top: 1px solid #eeeeee;
+ border-top: 1px solid #eeeeee;
}
.popup-wrapper ul.list>li:last-child {
- border-bottom: 1px solid #eeeeee;
+ border-bottom: 1px solid #eeeeee;
}
ul.list>li:hover, ul.list>li.active {
- background-color: #f2f2f2;
+ background-color: #f2f2f2;
}
ul.list >li .actions {
- float:right;
- margin: 0px 0px 0px 5px;
- visibility: hidden;
+ float:right;
+ margin: 0px 0px 0px 5px;
+ visibility: hidden;
}
ul.list>li:hover .actions {
- visibility: inherit;
+ visibility: inherit;
}
/** Animations **/
-.fadein.ng-enter,
+.fadein.ng-enter,
.fadein.ng-move {
- -webkit-transition: 0.5s linear opacity;
- transition: 0.5s linear all;
+ -webkit-transition: 0.5s linear opacity;
+ transition: 0.5s linear all;
}
.fadein.ng-enter {
- opacity:0;
+ opacity:0;
}
.fadein.ng-enter.ng-enter-active {
- opacity:1;
+ opacity:1;
}
.fadein.ng-move {
- opacity:0.5;
+ opacity:0.5;
}
.fadein.ng-move.ng-move-active {
- opacity:1;
+ opacity:1;
}
.popup-error {
- color: red;
- padding: 0 5px 8px 0;
+ color: red;
+ padding: 0 5px 8px 0;
}
/** Passwords */
.password-field {
- width: 320px;
+ width: 320px;
}
/** LOADING */
.message .loading {
line-height: 40px;
- margin-left: 0px;
+ margin-left: 0px;
}
\ No newline at end of file
diff --git a/len-activiti/src/main/resources/static/editor-app/editor.html b/len-activiti/src/main/resources/static/editor-app/editor.html
index d8defb7..1ad4102 100644
--- a/len-activiti/src/main/resources/static/editor-app/editor.html
+++ b/len-activiti/src/main/resources/static/editor-app/editor.html
@@ -14,15 +14,6 @@
-
@@ -48,7 +39,7 @@
data-drag="true"
jqyoui-draggable="{onStart:'startDragCallback', onDrag:'dragCallback'}"
data-jqyoui-options="{revert: 'invalid', helper: 'clone', opacity : 0.5}">
-
+
![]()
{{item.name}}
@@ -57,21 +48,21 @@
-
+ jqyoui-droppable="{onDrop:'dropCallback',onOver: 'overCallback', onOut: 'outCallback'}">
-
-
{{'ELEMENT.AUTHOR' | translate}}: {{selectedItem.auditData.author}}
@@ -117,7 +108,7 @@
ng-click="propertyClicked($index)" ng-class="{'clear' : $index%2 == 0}">
{{ property.title }} :
{{ property.title }} ({{'PROPERTY.REMOVED' | translate}}) :
-
+
-
-
+
+
diff --git a/len-activiti/src/main/resources/static/editor-app/editor/oryx.debug.js b/len-activiti/src/main/resources/static/editor-app/editor/oryx.debug.js
index 6ce4343..da2e3ed 100644
--- a/len-activiti/src/main/resources/static/editor-app/editor/oryx.debug.js
+++ b/len-activiti/src/main/resources/static/editor-app/editor/oryx.debug.js
@@ -10,7 +10,7 @@ ORYX.Utils = {
* General helper method for parsing a param out of current location url
* @example
* // Current url in Browser => "http://oryx.org?param=value"
- * ORYX.Utils.getParamFromUrl("param") // => "value"
+ * ORYX.Utils.getParamFromUrl("param") // => "value"
* @param {Object} name
*/
getParamFromUrl: function(name){
@@ -25,17 +25,17 @@ ORYX.Utils = {
return results[1];
}
},
-
+
adjustLightness: function(){
- return arguments[0];
+ return arguments[0];
},
-
+
adjustGradient: function(gradient, reference){
-
+
if (ORYX.CONFIG.DISABLE_GRADIENT && gradient){
-
+
var col = reference.getAttributeNS(null, "stop-color") || "#ffffff";
-
+
$A(gradient.getElementsByTagName("stop")).each(function(stop){
if (stop == reference){ return; }
stop.setAttributeNS(null, "stop-color", col);
@@ -152,7 +152,7 @@ var ERDF = {
log: undefined,
init: function(callback) {
-
+
// init logging.
//ERDF.log = Log4js.getLogger("oryx");
//ERDF.log.setLevel(Log4js.Level.ALL);
@@ -175,12 +175,12 @@ var ERDF = {
// do the work.
return ERDF._checkProfile() && ERDF.parse();
},
-
+
parse: function() {
-
+
//(ERDF.log.isDebugEnabled())
// ERDF.log.debug("Begin parsing document metadata.");
-
+
// time measuring
ERDF.__startTime = new Date();
@@ -189,16 +189,16 @@ var ERDF = {
var result = ERDF._parseDocumentMetadata() &&
ERDF._parseFromTag(bodies[0], subject);
-
+
// time measuring
ERDF.__stopTime = new Date();
var duration = (ERDF.__stopTime - ERDF.__startTime)/1000.;
//alert('ERDF parsing took ' + duration + ' s.');
-
+
return result;
},
-
+
_parseDocumentMetadata: function() {
// get links from head element.
@@ -211,12 +211,12 @@ var ERDF = {
var properties = link.getAttribute('rel');
var reversedProperties = link.getAttribute('rev');
var value = link.getAttribute('href');
-
+
ERDF._parseTriplesFrom(
ERDF.RESOURCE, '',
properties,
ERDF.RESOURCE, value);
-
+
ERDF._parseTriplesFrom(
ERDF.RESOURCE, value,
reversedProperties,
@@ -227,7 +227,7 @@ var ERDF = {
$A(metas).each(function(meta) {
var property = meta.getAttribute('name');
var value = meta.getAttribute('content');
-
+
ERDF._parseTriplesFrom(
ERDF.RESOURCE, '',
property,
@@ -236,12 +236,12 @@ var ERDF = {
return true;
},
-
+
_parseFromTag: function(node, subject, depth) {
-
+
// avoid parsing non-xhtml content.
if(!node || !node.namespaceURI || node.namespaceURI != XMLNS.XHTML) { return; }
-
+
// housekeeping.
if(!depth) depth=0;
var id = node.getAttribute('id');
@@ -251,9 +251,9 @@ var ERDF = {
// ERDF.log.trace(">".times(depth) + " Parsing " + node.nodeName + " ("+node.nodeType+") for data on " +
// ((subject.type == ERDF.RESOURCE) ? ('<' + subject.value + '>') : '') +
// ((subject.type == ERDF.LITERAL) ? '"' + subject.value + '"' : ''));
-
+
/* triple finding! */
-
+
// in a-tags...
if(node.nodeName.endsWith(':a') || node.nodeName == 'a') {
var properties = node.getAttribute('rel');
@@ -269,7 +269,7 @@ var ERDF = {
ERDF.RESOURCE, value,
function(triple) {
var label = title? title : content;
-
+
// label triples
ERDF._parseTriplesFrom(
triple.object.type, triple.object.value,
@@ -282,7 +282,7 @@ var ERDF = {
subject.type, subject.value,
reversedProperties,
ERDF.RESOURCE, '');
-
+
// type triples
ERDF._parseTypeTriplesFrom(
subject.type, subject.value,
@@ -300,7 +300,7 @@ var ERDF = {
ERDF.RESOURCE, value,
function(triple) {
var label = alt;
-
+
// label triples
ERDF._parseTriplesFrom(
triple.object.type, triple.object.value,
@@ -309,13 +309,13 @@ var ERDF = {
});
}
-
+
// in every tag
var properties = node.getAttribute('class');
var title = node.getAttribute('title');
var content = node.textContent;
var label = title ? title : content;
-
+
// regular triples
ERDF._parseTriplesFrom(
subject.type, subject.value,
@@ -323,7 +323,7 @@ var ERDF = {
ERDF.LITERAL, label);
if(id) subject = {type: ERDF.RESOURCE, value: ERDF.HASH+id};
-
+
// type triples
ERDF._parseTypeTriplesFrom(
subject.type, subject.value,
@@ -335,13 +335,13 @@ var ERDF = {
if(_node.nodeType == _node.ELEMENT_NODE)
ERDF._parseFromTag(_node, subject, depth+1); });
},
-
+
_parseTriplesFrom: function(subjectType, subject, properties,
objectType, object, callback) {
-
+
if(!properties) return;
properties.toLowerCase().split(' ').each( function(property) {
-
+
//if(ERDF.log.isTraceEnabled())
// ERDF.log.trace("Going for property " + property);
@@ -350,7 +350,7 @@ var ERDF = {
return property.startsWith(schema.prefix + delimiter);
});
});
-
+
if(schema && object) {
property = property.substring(
schema.prefix.length+1, property.length);
@@ -360,26 +360,26 @@ var ERDF = {
(objectType == ERDF.RESOURCE) ?
new ERDF.Resource(object) :
new ERDF.Literal(object));
-
+
if(callback) callback(triple);
}
});
},
-
+
_parseTypeTriplesFrom: function(subjectType, subject, properties, callback) {
-
+
if(!properties) return;
properties.toLowerCase().split(' ').each( function(property) {
-
+
//if(ERDF.log.isTraceEnabled())
// ERDF.log.trace("Going for property " + property);
-
+
var schema = ERDF.schemas.find( function(schema) {
return false || ERDF.DELIMITERS.find( function(delimiter) {
return property.startsWith(ERDF.HYPHEN + schema.prefix + delimiter);
});
});
-
+
if(schema && subject) {
property = property.substring(schema.prefix.length+2, property.length);
var triple = ERDF.registerTriple(
@@ -392,7 +392,7 @@ var ERDF = {
}
});
},
-
+
/**
* Checks for ERDF profile declaration in head of document.
*/
@@ -410,50 +410,50 @@ var ERDF = {
//if(ERDF.log.isTraceEnabled())
// ERDF.log.trace("Found ERDF profile " + XMLNS.ERDF);
return true;
-
+
} else {
-
+
// otherwise fail check.
//if(ERDF.log.isFatalEnabled())
// ERDF.log.fatal("No ERDF profile found.");
return false;
}
},
-
+
__stripHashes: function(s) {
return (s && (typeof s.substring == 'function') && s.substring(0, 1)=='#') ? s.substring(1, s.length) : s;
},
-
+
registerSchema: function(prefix, namespace) {
-
+
// TODO check whether already registered, if so, complain.
ERDF.schemas.push({
prefix: prefix,
namespace: namespace
});
-
+
//if(ERDF.log.isDebugEnabled())
// ERDF.log.debug("Prefix '"+prefix+"' for '"+namespace+"' registered.");
},
-
+
registerTriple: function(subject, predicate, object) {
-
+
// if prefix is schema, this is a schema definition.
if(predicate.prefix.toLowerCase() == 'schema')
this.registerSchema(predicate.name, object.value);
-
+
var triple = new ERDF.Triple(subject, predicate, object);
ERDF.callback(triple);
-
+
//if(ERDF.log.isInfoEnabled())
// ERDF.log.info(triple)
-
+
// return the registered triple.
return triple;
},
-
+
__enhanceObject: function() {
-
+
/* Resource state querying methods */
this.isResource = function() {
return this.type == ERDF.RESOURCE };
@@ -461,7 +461,7 @@ var ERDF = {
return this.isResource() && this.value.startsWith('#') };
this.isCurrentDocument = function() {
return this.isResource() && (this.value == '') };
-
+
/* Resource getter methods.*/
this.getId = function() {
return this.isLocal() ? ERDF.__stripHashes(this.value) : false; };
@@ -470,9 +470,9 @@ var ERDF = {
this.isLiteral = function() {
return this.type == ERDF.LIITERAL };
},
-
+
serialize: function(literal) {
-
+
if(!literal){
return "";
}else if(literal.constructor == String) {
@@ -487,13 +487,13 @@ var ERDF = {
ERDF.Triple = function(subject, predicate, object) {
-
+
this.subject = subject;
this.predicate = predicate;
this.object = object;
-
+
this.toString = function() {
-
+
return "[ERDF.Triple] " +
this.subject.toString() + ' ' +
this.predicate.prefix + ':' + this.predicate.name + ' ' +
@@ -502,19 +502,19 @@ ERDF.Triple = function(subject, predicate, object) {
};
ERDF.Resource = function(uri) {
-
+
this.type = ERDF.RESOURCE;
this.value = uri;
ERDF.__enhanceObject.apply(this);
-
+
this.toString = function() {
return '<' + this.value + '>';
}
-
+
};
ERDF.Literal = function(literal) {
-
+
this.type = ERDF.LITERAL;
this.value = ERDF.serialize(literal);
ERDF.__enhanceObject.apply(this);
@@ -604,7 +604,7 @@ var PROCESSDATA_REF = 'processdata';
* @class DataManager
*/
var DataManager = {
-
+
/**
* The init method should be called once in the DataManagers lifetime.
* It causes the DataManager to initialize itself, the erdf parser, do all
@@ -616,12 +616,12 @@ var DataManager = {
ERDF.init(DataManager._registerTriple);
DataManager.__synclocal();
},
-
+
/**
* This triple array is meant to be the whole knowledge of the DataManager.
*/
_triples: [],
-
+
/**
* This method is meant for callback from erdf parsing. It is not to be
* used in another way than to add triples to the triple store.
@@ -630,7 +630,7 @@ var DataManager = {
_registerTriple: function(triple) {
DataManager._triples.push(triple)
},
-
+
/**
* The __synclocal method is for internal usage only.
* It performs synchronization with the local document, that is, the triple
@@ -641,7 +641,7 @@ var DataManager = {
DataManager._triples = [];
ERDF.run();
},
-
+
/**
* Makes the shape passed into this method synchronize itself with the DOM.
* This method returns the shapes resource object for further manipulation.
@@ -654,7 +654,7 @@ var DataManager = {
// store all serialize values
serialize.each( function(ser) {
-
+
var resource = (ser.type == 'resource');
var _triple = new ERDF.Triple(
new ERDF.Resource(shape.resourceId),
@@ -665,38 +665,38 @@ var DataManager = {
);
DataManager.setObject(_triple);
});
-
+
return r;
},
__storeShape: function(shape) {
-
+
// first synchronize the shape,
var resource = DataManager.__synchronizeShape(shape);
-
+
// then save the synchronized dom.
resource.save();
},
-
+
__forceExistance: function(shape) {
-
+
if(!$(shape.resourceId)) {
-
+
if(!$$('.' + PROCESSDATA_REF)[0])
DataManager.graft(XMLNS.XHTML,
document.getElementsByTagNameNS(XMLNS.XHTML, 'body').item(0), ['div', {'class': PROCESSDATA_REF, 'style':'display:none;'}]);
-
+
// object is literal
DataManager.graft(XMLNS.XHTML,
$$('.' + PROCESSDATA_REF)[0], [
-
+
'div', {
'id': shape.resourceId,
//This should be done in a more dynamic way!!!!!
'class': (shape instanceof ORYX.Core.Canvas) ? "-oryx-canvas" : undefined
}
]);
-
+
} else {
var resource = $(shape.resourceId)
var children = $A(resource.childNodes)
@@ -705,12 +705,12 @@ var DataManager = {
});
};
},
-
+
__persistShape: function(shape) {
// a shape serialization.
var shapeData = shape.serialize();
-
+
// initialize a triple array and construct a shape resource
// to be used in triple generation.
var triplesArray = [];
@@ -736,35 +736,35 @@ var DataManager = {
));
});
},
-
+
__persistDOM: function(facade) {
// getChildShapes gets all shapes (nodes AND edges), deep flag
// makes it return a flattened child hierarchy.
-
+
var canvas = facade.getCanvas();
var shapes = canvas.getChildShapes(true);
var result = '';
-
+
// persist all shapes.
shapes.each( function(shape) {
DataManager.__forceExistance(shape);
});
//DataManager.__synclocal();
-
+
DataManager.__renderCanvas(facade);
result += DataManager.serialize(
$(ERDF.__stripHashes(facade.getCanvas().resourceId)), true);
-
+
shapes.each( function(shape) {
-
+
DataManager.__persistShape(shape);
result += DataManager.serialize(
$(ERDF.__stripHashes(shape.resourceId)), true);
});
-
+
//result += DataManager.__renderCanvas(facade);
-
+
return result;
},
@@ -773,11 +773,11 @@ var DataManager = {
var canvas = facade.getCanvas();
var stencilSets = facade.getStencilSets();
var shapes = canvas.getChildShapes(true);
-
+
DataManager.__forceExistance(canvas);
-
+
DataManager.__persistShape(canvas);
-
+
var shapeResource = new ERDF.Resource(canvas.resourceId);
// remove all triples for this particular shape's resource
@@ -802,13 +802,13 @@ var DataManager = {
{prefix: "oryx", name: "stencilset"},
new ERDF.Resource(stencilset.source().replace(/&/g, "%26"))
));
-
+
DataManager.addTriple( new ERDF.Triple(
shapeResource,
{prefix: "oryx", name: "ssnamespace"},
new ERDF.Resource(stencilset.namespace())
));
-
+
stencilset.extensions().keys().each(function(extension) {
DataManager.addTriple( new ERDF.Triple(
shapeResource,
@@ -817,7 +817,7 @@ var DataManager = {
));
});
});
-
+
shapes.each(function(shape) {
DataManager.addTriple( new ERDF.Triple(
shapeResource,
@@ -829,23 +829,23 @@ var DataManager = {
__counter: 0,
__provideId: function() {
-
+
while($(RESOURCE_ID_PREFIX+DataManager.__counter))
DataManager.__counter++;
-
+
return RESOURCE_ID_PREFIX+DataManager.__counter;
},
-
+
serializeDOM: function(facade) {
-
+
return DataManager.__persistDOM(facade);
},
-
+
syncGlobal: function(facade) {
-
+
return DataManager.__syncglobal(facade);
},
-
+
/**
* This method is used to synchronize local DOM with remote resources.
* Local changes are commited to the server, and remote changes are
@@ -857,7 +857,7 @@ var DataManager = {
// getChildShapes gets all shapes (nodes AND edges), deep flag
// makes it return a flattened child hierarchy.
-
+
var canvas = facade.getCanvas();
var shapes = canvas.getChildShapes(true);
@@ -874,7 +874,7 @@ var DataManager = {
// create new resources for them.
if(USE_ARESS_WORKAROUNDS) {
-
+
/*
* This is a workaround due to a bug in aress. Resources are
* ignoring changes to raziel:type property once they are
@@ -882,28 +882,28 @@ var DataManager = {
* being created using a randomly guessed id, this temporary id
* is then used in references and the appropriate div is being
* populated with properties.
- *
+ *
* AFTER THIS PHASE THE DATA IS INCONSISTENT AS REFERENCES POINT
* TO IDS THAT ARE UNKNOWN TO THE BACK END.
- *
+ *
* After the resource is actually created in aress, it gets an id
* that is persistent. All shapes are then being populated with the
* correct id references and stored on the server.
- *
+ *
* AFTER THE SAVE PROCESS HAS RETURNED, THE DATA IS CONSISTENT
* REGARDING THE ID REFERENCES AGAIN.
*/
-
+
var razielType = shape.properties['raziel-type'];
-
+
var div = '' +
''+razielType+'
';
var r = ResourceManager.__createResource(div);
shape.resourceId = r.id();
-
+
} else {
-
+
var r = ResourceManager.__createResource();
shape.resourceId = r.id();
}
@@ -911,12 +911,12 @@ var DataManager = {
});
shapes.each( function(shape) {
-
+
// store all shapes.
DataManager.__storeShape(shape);
});
},
-
+
/**
* This method serializes a single div into a string that satisfies the
* client/server communication protocol. It ingnores all elements that have
@@ -930,7 +930,7 @@ var DataManager = {
if (node.nodeType == node.ELEMENT_NODE) {
// serialize an element node.
-
+
var children = $A(node.childNodes);
var attributes = $A(node.attributes);
var clazz = new String(node.getAttribute('class'));
@@ -942,28 +942,28 @@ var DataManager = {
return '';
// start serialization.
-
+
var result = '<' + node.nodeName;
-
+
// preserve namespace?
- if(!preserveNamespace)
+ if(!preserveNamespace)
result += ' xmlns="' + (node.namespaceURI ? node.namespaceURI : XMLNS.XHTML) + '" xmlns:oryx="http://oryx-editor.org"';
-
+
// add all attributes.
-
+
attributes.each(function(attribute) {
result += ' ' + attribute.nodeName + '="' +
attribute.nodeValue + '"';});
-
+
// close if no children.
-
+
if(children.length == 0)
result += '/>';
-
+
else {
-
+
// serialize all children.
-
+
result += '>';
children.each(function(_node) {
result += DataManager.serialize(_node, true)});
@@ -971,13 +971,13 @@ var DataManager = {
}
return result;
-
+
} else if (node.nodeType == node.TEXT_NODE) {
-
+
// serialize a text node.
return node.nodeValue;
}
-
+
//TODO serialize cdata areas also.
//TODO work on namespace awareness.
},
@@ -985,15 +985,15 @@ var DataManager = {
addTriple: function(triple) {
// assert the subject is a resource
-
+
if(!triple.subject.type == ERDF.LITERAL)
throw 'Cannot add the triple ' + triple.toString() +
' because the subject is not a resource.'
-
+
// get the element which represents this triple's subject.
var elementId = ERDF.__stripHashes(triple.subject.value);
var element = $(elementId);
-
+
// assert the subject is inside this document.
if(!element)
throw 'Cannot add the triple ' + triple.toString() +
@@ -1006,7 +1006,7 @@ var DataManager = {
'span', {'class': (triple.predicate.prefix + "-" +
triple.predicate.name)}, triple.object.value.escapeHTML()
]);
-
+
else {
// object is resource
@@ -1014,12 +1014,12 @@ var DataManager = {
'a', {'rel': (triple.predicate.prefix + "-" +
triple.predicate.name), 'href': triple.object.value}
]);
-
+
}
return true;
},
-
+
removeTriples: function(triples) {
// alert('Removing ' +triples.length+' triples.');
@@ -1028,19 +1028,19 @@ var DataManager = {
var removed = triples.select(
function(triple) {
-
+
// TODO remove also from triple store.
// ... that were actually removed.
return DataManager.__removeTriple(triple);
});
-
+
// sync and return removed triples.
// DataManager.__synclocal();
return removed;
},
-
+
removeTriple: function(triple) {
-
+
// remember whether the triple was actually removed.
var result = DataManager.__removeTriple(triple);
@@ -1050,10 +1050,10 @@ var DataManager = {
},
__removeTriple: function(triple) {
-
+
// assert the subject is a resource
if(!triple.subject.type == ERDF.LITERAL)
-
+
throw 'Cannot remove the triple ' + triple.toString() +
' because the subject is not a resource.';
@@ -1063,39 +1063,39 @@ var DataManager = {
// assert the subject is inside this document.
if(!element)
-
+
throw 'Cannot remove the triple ' + triple.toString() +
' because the subject is not in the document.';
-
+
if(triple.object.type == ERDF.LITERAL) {
-
+
// continue searching actively for the triple.
var result = DataManager.__removeTripleRecursively(triple, element);
return result;
}
},
- __removeTripleRecursively: function(triple, continueFrom) {
+ __removeTripleRecursively: function(triple, continueFrom) {
// return when this node is not an element node.
if(continueFrom.nodeType != continueFrom.ELEMENT_NODE)
return false;
-
+
var classes = new String(continueFrom.getAttribute('class'));
var children = $A(continueFrom.childNodes);
-
+
if(classes.include(triple.predicate.prefix + '-' + triple.predicate.name)) {
-
+
var content = continueFrom.textContent;
if( (triple.object.type == ERDF.LITERAL) &&
(triple.object.value == content))
continueFrom.parentNode.removeChild(continueFrom);
-
+
return true;
-
+
} else {
-
+
children.each(function(_node) {
DataManager.__removeTripleRecursively(triple, _node)});
return false;
@@ -1121,7 +1121,7 @@ var DataManager = {
* @param {Object} doc the document in which grafting is performed.
*/
graft: function(namespace, parent, t, doc) {
-
+
doc = (doc || (parent && parent.ownerDocument) || document);
var e;
if(t === undefined) {
@@ -1142,12 +1142,12 @@ var DataManager = {
e = doc.createElementNS(namespace, snared[1]); // but no class
continue;
}
-
+
// Otherwise:
e = doc.createElementNS(namespace, "span");
e.setAttribute(null, "class", "namelessFromLOL" );
}
-
+
if( t[i] === undefined ) {
echo("Can't graft an undefined value in a list!");
} else if( t[i].constructor == String || t[i].constructor == Array) {
@@ -1163,9 +1163,9 @@ var DataManager = {
throw "Object " + t[i] + " is inscrutable as an graft arglet.";
}
}
-
+
if(parent) parent.appendChild(e);
-
+
return Element.extend(e); // return the topmost created node
},
@@ -1182,14 +1182,14 @@ var DataManager = {
triple.predicate,
undefined
);
-
+
DataManager.removeTriples(triples);
DataManager.addTriple(triple);
return true;
},
-
+
query: function(subject, predicate, object) {
/*
@@ -1197,10 +1197,10 @@ var DataManager = {
* {value: subject, type: subjectType},
* {prefix: schema.prefix, name: property},
* {value: object, type: objectType});
- */
-
+ */
+
return DataManager._triples.select(function(triple) {
-
+
var select = ((subject) ?
(triple.subject.type == subject.type) &&
(triple.subject.value == subject.value) : true);
@@ -1223,18 +1223,18 @@ Kickstart.register(DataManager.init);
function assert(expr, m) { if(!expr) throw m; };
function DMCommand(action, triple) {
-
+
// store action and triple.
this.action = action;
this.triple = triple;
-
+
this.toString = function() {
return 'Command('+action+', '+triple+')';
};
}
function DMCommandHandler(nextHandler) {
-
+
/**
* Private method to set the next handler in the Chain of Responsibility
* (see http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern for
@@ -1256,7 +1256,7 @@ function DMCommandHandler(nextHandler) {
this.__invokeNext = function(command) {
return this.__next ? this.__next.handle(command) : false;
};
-
+
/**
* Handles a command. The abstract method process() is called with the
* command object that has been passed. If the process method catches the
@@ -1268,7 +1268,7 @@ function DMCommandHandler(nextHandler) {
this.handle = function(command) {
return this.process(command) ? true : this.__invokeNext(command);
}
-
+
/**
* Empty process() method returning false. If javascript knew abstract
* class members, this would be one.
@@ -1283,12 +1283,12 @@ function DMCommandHandler(nextHandler) {
* @param {DMCommandHandler} next The handler that is next in the chain.
*/
function MetaTagHandler(next) {
-
+
DMCommandHandler.apply(this, [next]);
this.process = function(command) {
-
+
with(command.triple) {
-
+
/* assert prerequisites */
if( !(
(subject instanceof ERDF.Resource) &&
@@ -1296,7 +1296,7 @@ function MetaTagHandler(next) {
(object instanceof ERDF.Literal)
)) return false;
}
-
+
};
};
@@ -1313,12 +1313,12 @@ if(chain.handle(command))
*/
ResourceManager = {
-
+
__corrupt: false,
__latelyCreatedResource: undefined,
__listeners: $H(),
__token: 1,
-
+
addListener: function(listener, mask) {
if(!(listener instanceof Function))
@@ -1329,30 +1329,30 @@ ResourceManager = {
// construct controller and token.
var controller = {listener: listener, mask: mask};
var token = ResourceManager.__token++;
-
+
// add new listener.
ResourceManager.__listeners[token] = controller;
-
+
// return the token generated.
return token;
},
-
+
removeListener: function(token) {
-
+
// remove the listener with the token and return it.
return ResourceManager.__listners.remove(token);
},
-
+
__Event: function(action, resourceId) {
this.action = action;
this.resourceId = resourceId;
},
-
+
__dispatchEvent: function(event) {
-
+
// get all listeners. for each listener, ...
ResourceManager.__listeners.values().each(function(controller) {
-
+
// .. if listener subscribed to this type of event ...
if(event.action & controller.mask)
return controller.listener(event);
@@ -1385,7 +1385,7 @@ ResourceManager = {
},
__createResource: function(alternativeDiv) {
-
+
var collectionUrls = DataManager.query(
new ERDF.Resource(''),
// TODO This will become raziel:collection in near future.
@@ -1394,50 +1394,50 @@ ResourceManager = {
);
// check for consistency.
-
+
if( (collectionUrls.length == 1) &&
(collectionUrls[0].object.isResource())) {
// get the collection url.
-
+
var collectionUrl = collectionUrls[0].object.value;
var resource = undefined;
-
+
// if there is an old id, serialize the dummy div from there,
// otherwise create a dummy div on the fly.
-
- var serialization = alternativeDiv? alternativeDiv :
+
+ var serialization = alternativeDiv? alternativeDiv :
'';
-
+
ResourceManager.__request(
'POST', collectionUrl, serialization,
// on success
function() {
-
+
// get div and id that have been generated by the server.
-
+
var response = (this.responseXML);
var div = response.childNodes[0];
var id = div.getAttribute('id');
-
+
// store div in DOM
if(!$$('.' + PROCESSDATA_REF)[0])
DataManager.graft(XMLNS.XHTML,
document.getElementsByTagNameNS(XMLNS.XHTML, 'body').item(0), ['div', {'class': PROCESSDATA_REF, 'style':'display:none;'}]);
-
+
$$('.' + PROCESSDATA_REF)[0].appendChild(div.cloneNode(true));
// parse local erdf data once more.
-
+
DataManager.__synclocal();
-
+
// get new resource object.
resource = new ResourceManager.getResource(id);
// set up an action informing of the creation.
-
+
ResourceManager.__resourceActionSucceeded(
this, RESOURCE_CREATED, undefined);
},
@@ -1446,44 +1446,44 @@ ResourceManager = {
this, RESOURCE_CREATED, undefined);},
false
);
-
+
return resource;
}
-
+
// else
throw 'Could not create resource! raziel:collection URL is missing!';
return false;
},
-
+
__Resource: function(id, url) {
-
+
this.__id = id;
this.__url = url;
-
+
/*
* Process URL is no longer needed to refer to the shape element on the
* canvas. AReSS uses the id's to gather information on fireing
* behaviour now.
*/
-
-// // find the process url.
+
+// // find the process url.
// var processUrl = undefined;
-//
+//
// var urls = DataManager.query(
// new ERDF.Resource('#'+this.__id),
// {prefix: 'raziel', name: 'process'},
// undefined
// );
-//
+//
// if(urls.length == 0) { throw 'The resource with the id ' +id+ ' has no process url.'};
-//
+//
// urls.each( function(triple) {
-//
+//
// // if there are more urls, use the last one.
// processUrl = triple.object.value;
// });
-//
+//
// this.__processUrl = processUrl;
//
// // convenience function for getting the process url.
@@ -1501,7 +1501,7 @@ ResourceManager = {
this.url = function() {
return this.__url;
}
-
+
this.reload = function() {
var _url = this.__url;
var _id = this.__id;
@@ -1514,7 +1514,7 @@ ResourceManager = {
USE_ASYNCHRONOUS_REQUESTS
);
};
-
+
this.save = function(synchronize) {
var _url = this.__url;
var _id = this.__id;
@@ -1528,7 +1528,7 @@ ResourceManager = {
USE_ASYNCHRONOUS_REQUESTS
);
};
-
+
this.remove = function() {
var _url = this.__url;
var _id = this.__id;
@@ -1552,29 +1552,29 @@ ResourceManager = {
};
Object.extend(options, requestOptions || {});
-
+
var params = Hash.toQueryString(options.parameters);
- if (params)
+ if (params)
url += (url.include('?') ? '&' : '?') + params;
-
+
return ResourceManager.__request(
- options.method,
- url,
- options.data,
- (options.onSuccess instanceof Function ? function() { options.onSuccess(this); } : undefined ),
- (options.onFailure instanceof Function ? function() { options.onFailure(this); } : undefined ),
+ options.method,
+ url,
+ options.data,
+ (options.onSuccess instanceof Function ? function() { options.onSuccess(this); } : undefined ),
+ (options.onFailure instanceof Function ? function() { options.onFailure(this); } : undefined ),
options.asynchronous && USE_ASYNCHRONOUS_REQUESTS,
options.headers);
},
-
+
__request: function(method, url, data, success, error, async, headers) {
-
+
// get a request object
var httpRequest = Try.these(
/* do the Mozilla/Safari/Opera stuff */
function() { return new XMLHttpRequest(); },
-
+
/* do the IE stuff */
function() { return new ActiveXObject("Msxml2.XMLHTTP"); },
function() { return new ActiveXObject("Microsoft.XMLHTTP") }
@@ -1587,23 +1587,23 @@ ResourceManager = {
this.__corrupt = true;
return false;
}
-
+
if(success instanceof Function)
httpRequest.onload = success;
if(error instanceof Function) {
httpRequest.onerror = error;
}
-
+
var h = $H(headers)
h.keys().each(function(key) {
-
+
httpRequest.setRequestHeader(key, h[key]);
- });
-
+ });
+
try {
if(SHOW_DEBUG_ALERTS_WHEN_SAVING)
-
+
alert(method + ' ' + url + '\n' +
SHOW_EXTENDED_DEBUG_INFORMATION ? data : '');
@@ -1611,7 +1611,7 @@ ResourceManager = {
// handles asynchronous requests without failure.
httpRequest.open(method, url, !async?false:true);
httpRequest.send(data);
-
+
} catch(e) {
return false;
}
@@ -1619,10 +1619,10 @@ ResourceManager = {
},
__resourceActionSucceeded: function(transport, action, id) {
-
+
var status = transport.status;
var response = transport.responseText;
-
+
if(SHOW_DEBUG_ALERTS_WHEN_SAVING)
alert(status + ' ' + url + '\n' +
@@ -1633,14 +1633,14 @@ ResourceManager = {
throw 'The server responded with an error: ' + status + '\n' + (SHOW_EXTENDED_DEBUG_INFORMATION ? + data : 'If you need additional information here, including the data sent by the server, consider setting SHOW_EXTENDED_DEBUG_INFORMATION to true.');
switch(action) {
-
+
case RESOURCE_REMOVED:
// get div and id
var response = (transport.responseXML);
var div = response.childNodes[0];
var id = div.getAttribute('id');
-
+
// remove the resource from DOM
var localDiv = document.getElementById(id);
localDiv.parentNode.removeChild(localDiv);
@@ -1650,7 +1650,7 @@ ResourceManager = {
// nothing remains to be done.
break;
-
+
case RESOURCE_SAVED | RESOURCE_SYNCHRONIZED:
DataManager.__synclocal();
@@ -1661,21 +1661,21 @@ ResourceManager = {
break;
case RESOURCE_RELOADED:
-
+
// get div and id
var response = (transport.responseXML);
var div = response.childNodes[0];
var id = div.getAttribute('id');
-
+
// remove the local resource representation from DOM
var localDiv = document.getElementById(id)
localDiv.parentNode.removeChild(localDiv);
-
+
// store div in DOM
if(!$$(PROCESSDATA_REF)[0])
DataManager.graft(XMLNS.XHTML,
document.getElementsByTagNameNS(XMLNS.XHTML, 'body').item(0), ['div', {'class': PROCESSDATA_REF, 'style':'display:none;'}]);
-
+
$$(PROCESSDATA_REF)[0].appendChild(div.cloneNode(true));
DataManager.__synclocal();
break;
@@ -1684,7 +1684,7 @@ ResourceManager = {
DataManager.__synclocal();
}
-
+
// dispatch to all listeners ...
ResourceManager.__dispatchEvent(
@@ -1746,20 +1746,20 @@ Clazz.extend = function(def) {
var classDef = function() {
if (arguments[0] !== Clazz) { this.construct.apply(this, arguments); }
};
-
+
var proto = new this(Clazz);
var superClass = this.prototype;
-
+
for (var n in def) {
- var item = def[n];
+ var item = def[n];
if (item instanceof Function) item.$ = superClass;
proto[n] = item;
}
classDef.prototype = proto;
-
- //Give this new class the same static extend method
- classDef.extend = this.extend;
+
+ //Give this new class the same static extend method
+ classDef.extend = this.extend;
return classDef;
};/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
@@ -1785,11 +1785,11 @@ ORYX.CONFIG.LIBS_PATH = "libs";
/**
* Regular Config
- */
+ */
ORYX.CONFIG.SERVER_HANDLER_ROOT = "service";
ORYX.CONFIG.SERVER_EDITOR_HANDLER = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/editor";
ORYX.CONFIG.SERVER_MODEL_HANDLER = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/model";
-ORYX.CONFIG.STENCILSET_HANDLER = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/editor_stencilset?embedsvg=true&url=true&namespace=";
+ORYX.CONFIG.STENCILSET_HANDLER = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/editor_stencilset?embedsvg=true&url=true&namespace=";
ORYX.CONFIG.STENCIL_SETS_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/editor_stencilset";
ORYX.CONFIG.PLUGINS_CONFIG = "editor-app/plugins.xml";
@@ -1810,8 +1810,8 @@ ORYX.CONFIG.VARIABLEDEF_ELEMENT_LIST_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/
ORYX.CONFIG.VALIDATOR_LIST_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/validators";
ORYX.CONFIG.SS_EXTENSIONS_FOLDER = ORYX.CONFIG.ROOT_PATH + "stencilsets/extensions/";
-ORYX.CONFIG.SS_EXTENSIONS_CONFIG = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/editor_ssextensions";
-ORYX.CONFIG.ORYX_NEW_URL = "/new";
+ORYX.CONFIG.SS_EXTENSIONS_CONFIG = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/editor_ssextensions";
+ORYX.CONFIG.ORYX_NEW_URL = "/new";
ORYX.CONFIG.BPMN_LAYOUTER = ORYX.CONFIG.ROOT_PATH + "bpmnlayouter";
ORYX.CONFIG.EXPRESSION_METADATA_URL = ORYX.CONFIG.SERVER_HANDLER_ROOT + "/expression-metadata";
@@ -1850,7 +1850,7 @@ ORYX.CONFIG.SHOW_GRIDLINE = true;
/* Editor-Mode */
ORYX.CONFIG.MODE_READONLY = "readonly";
ORYX.CONFIG.MODE_FULLSCREEN = "fullscreen";
-ORYX.CONFIG.WINDOW_HEIGHT = 800;
+ORYX.CONFIG.WINDOW_HEIGHT = 800;
ORYX.CONFIG.PREVENT_LOADINGMASK_AT_READY = false;
/* Plugins */
@@ -1864,7 +1864,7 @@ ORYX.CONFIG.NAMESPACE_ORYX = "http://www.b3mn.org/oryx";
ORYX.CONFIG.NAMESPACE_SVG = "http://www.w3.org/2000/svg";
/* UI */
-ORYX.CONFIG.CANVAS_WIDTH = 1200;
+ORYX.CONFIG.CANVAS_WIDTH = 1200;
ORYX.CONFIG.CANVAS_HEIGHT = 1050;
ORYX.CONFIG.CANVAS_RESIZE_INTERVAL = 100;
ORYX.CONFIG.CANVAS_MIN_WIDTH = 800;
@@ -1883,7 +1883,7 @@ ORYX.CONFIG.OFFSET_EDGE_LABEL_TOP = 8;
ORYX.CONFIG.OFFSET_EDGE_LABEL_BOTTOM = 8;
ORYX.CONFIG.OFFSET_EDGE_BOUNDS = 5;
ORYX.CONFIG.COPY_MOVE_OFFSET = 30;
-
+
ORYX.CONFIG.BORDER_OFFSET = 14;
ORYX.CONFIG.MAX_NUM_SHAPES_NO_GROUP = 20; // Updated so the form editor shows all elements at once
@@ -1930,7 +1930,7 @@ ORYX.CONFIG.TYPE_DATASOURCE = "datasource";
ORYX.CONFIG.TYPE_DATASOURCE_MINIMAL = "datasource-minimal";
ORYX.CONFIG.TYPE_VALIDATORS = "validators";
-
+
/* Vertical line distance of multiline labels */
ORYX.CONFIG.LABEL_LINE_DISTANCE = 2;
ORYX.CONFIG.LABEL_DEFAULT_LINE_HEIGHT = 12;
@@ -1960,7 +1960,7 @@ ORYX.CONFIG.EVENT_KEYUP = "keyup";
ORYX.CONFIG.EVENT_LOADED = "editorloaded";
ORYX.CONFIG.EVENT_SAVED = "editorSaved";
-
+
ORYX.CONFIG.EVENT_EXECUTE_COMMANDS = "executeCommands";
ORYX.CONFIG.EVENT_STENCIL_SET_LOADED = "stencilSetLoaded";
ORYX.CONFIG.EVENT_SELECTION_CHANGED = "selectionchanged";
@@ -2001,18 +2001,18 @@ ORYX.CONFIG.EVENT_GLOSSARY_SHOW = "glossary.show.info";
ORYX.CONFIG.EVENT_GLOSSARY_NEW = "glossary.show.new";
ORYX.CONFIG.EVENT_DOCKERDRAG = "dragTheDocker";
ORYX.CONFIG.EVENT_CANVAS_SCROLL = "canvas.scroll";
-
+
ORYX.CONFIG.EVENT_SHOW_PROPERTYWINDOW = "propertywindow.show";
ORYX.CONFIG.EVENT_ABOUT_TO_SAVE = "file.aboutToSave";
-
+
/* Selection Shapes Highlights */
ORYX.CONFIG.SELECTION_HIGHLIGHT_SIZE = 5;
ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR = "#4444FF";
ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR2 = "#9999FF";
-
+
ORYX.CONFIG.SELECTION_HIGHLIGHT_STYLE_CORNER = "corner";
ORYX.CONFIG.SELECTION_HIGHLIGHT_STYLE_RECTANGLE = "rectangle";
-
+
ORYX.CONFIG.SELECTION_VALID_COLOR = "#00FF00";
ORYX.CONFIG.SELECTION_INVALID_COLOR = "#FF0000";
@@ -2020,7 +2020,7 @@ ORYX.CONFIG.SELECTION_INVALID_COLOR = "#FF0000";
ORYX.CONFIG.DOCKER_DOCKED_COLOR = "#00FF00";
ORYX.CONFIG.DOCKER_UNDOCKED_COLOR = "#FF0000";
ORYX.CONFIG.DOCKER_SNAP_OFFSET = 10;
-
+
/* Copy & Paste */
ORYX.CONFIG.EDIT_OFFSET_PASTE = 10;
@@ -2044,7 +2044,7 @@ ORYX.CONFIG.KEY_Code_top = 38;
ORYX.CONFIG.KEY_Code_bottom = 40;
/* Supported Meta Keys */
-
+
ORYX.CONFIG.META_KEY_META_CTRL = "metactrl";
ORYX.CONFIG.META_KEY_ALT = "alt";
ORYX.CONFIG.META_KEY_SHIFT = "shift";
@@ -2066,7 +2066,7 @@ ORYX.CONFIG.FORM_ELEMENT_TYPE_ROOT = 'http://b3mn.org/stencilset/xforms#XFor
ORYX.CONFIG.FORM_ELEMENT_TYPE_GROUP = 'http://b3mn.org/stencilset/xforms#Group';
ORYX.CONFIG.FORM_ELEMENT_TYPE_REPEATING_GROUP = 'http://b3mn.org/stencilset/xforms#RepeatingGroup';
ORYX.CONFIG.FORM_ELEMENT_TYPE_LABEL_FIELD = 'http://b3mn.org/stencilset/xforms#LabelField';
-
+
/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
* License rights for this program may be obtained from Alfresco Software, Ltd.
@@ -2078,7 +2078,7 @@ ORYX.CONFIG.FORM_ELEMENT_TYPE_LABEL_FIELD = 'http://b3mn.org/stencilset/xforms
*/
function printf() {
-
+
var result = arguments[0];
for (var i=1; i= ORYX_LOGLEVEL_TRACE)
ORYX.Log.__log('TRACE', arguments); },
debug: function() { if(ORYX_LOGLEVEL >= ORYX_LOGLEVEL_DEBUG)
@@ -2141,18 +2141,18 @@ ORYX = Object.extend(ORYX, {
ORYX.Log.__log('ERROR', arguments); },
fatal: function() { if(ORYX_LOGLEVEL >= ORYX_LOGLEVEL_FATAL)
ORYX.Log.__log('FATAL', arguments); },
-
+
__log: function(prefix, messageParts) {
-
+
messageParts[0] = (new Date()).getTime() + " "
+ prefix + " " + messageParts[0];
var message = printf.apply(null, messageParts);
-
+
ORYX.Log.__appenders.each(function(appender) {
appender.append(message);
});
},
-
+
addAppender: function(appender) {
ORYX.Log.__appenders.push(appender);
}
@@ -2167,9 +2167,9 @@ ORYX = Object.extend(ORYX, {
* preliminary condition is not met has to fail with an error.
*/
load: function() {
-
+
ORYX.Log.debug("Oryx begins loading procedure.");
-
+
// check for prototype
if( (typeof Prototype=='undefined') ||
(typeof Element == 'undefined') ||
@@ -2178,7 +2178,7 @@ ORYX = Object.extend(ORYX, {
Prototype.Version.split(".")[1]) < 1.5)
throw("Application requires the Prototype JavaScript framework >= 1.5.3");
-
+
ORYX.Log.debug("Prototype > 1.5 found.");
// continue loading.
@@ -2197,43 +2197,43 @@ ORYX = Object.extend(ORYX, {
/*
// if configuration not there already,
if(!(ORYX.CONFIG)) {
-
+
// if this is the first attempt...
if(ORYX.configrationRetries == 0) {
-
+
// get the path and filename.
var configuration = ORYX.PATH + ORYX.CONFIGURATION;
-
+
ORYX.Log.debug("Configuration not found, loading from '%0'.",
configuration);
-
+
// require configuration file.
Kickstart.require(configuration);
-
+
// else if attempts exceeded ...
} else if(ORYX.configrationRetries >= ORYX_CONFIGURATION_WAIT_ATTEMPTS) {
-
+
throw "Tried to get configuration" +
ORYX_CONFIGURATION_WAIT_ATTEMPTS +
" times from '" + configuration + "'. Giving up."
-
+
} else if(ORYX.configrationRetries > 0){
-
+
// point out how many attempts are left...
ORYX.Log.debug("Waiting once more (%0 attempts left)",
(ORYX_CONFIGURATION_WAIT_ATTEMPTS -
ORYX.configrationRetries));
}
-
+
// any case: continue in a moment with increased retry count.
ORYX.configrationRetries++;
window.setTimeout(ORYX._load, ORYX_CONFIGURATION_DELAY);
return;
}
-
+
ORYX.Log.info("Configuration loaded.");
-
+
// load necessary scripts.
ORYX.URLS.each(function(url) {
ORYX.Log.debug("Requireing '%0'", url);
@@ -2250,7 +2250,7 @@ ORYX = Object.extend(ORYX, {
* initialized.
*/
loadPlugins: function() {
-
+
// load plugins if enabled.
if(ORYX.CONFIG.PLUGINS_ENABLED)
ORYX._loadPlugins()
@@ -2260,14 +2260,14 @@ ORYX = Object.extend(ORYX, {
// init the editor instances.
init();
},
-
+
_loadPlugins: function() {
// load plugin configuration file.
var source = ORYX.CONFIG.PLUGINS_CONFIG;
ORYX.Log.debug("Loading plugin configuration from '%0'.", source);
-
+
new Ajax.Request(source, {
asynchronous: false,
method: 'get',
@@ -2279,12 +2279,12 @@ ORYX = Object.extend(ORYX, {
* file has to be processed and the contents need to be
* considered for further plugin requireation.
*/
-
+
ORYX.Log.info("Plugin configuration file loaded.");
-
+
// get plugins.xml content
var resultXml = result.responseXML;
-
+
// TODO: Describe how properties are handled.
// Get the globale Properties
var globalProperties = [];
@@ -2293,27 +2293,27 @@ ORYX = Object.extend(ORYX, {
var props = $A(p.childNodes);
props.each( function(prop) {
- var property = new Hash();
-
+ var property = new Hash();
+
// get all attributes from the node and set to global properties
var attributes = $A(prop.attributes)
- attributes.each(function(attr){property[attr.nodeName] = attr.nodeValue});
- if(attributes.length > 0) { globalProperties.push(property) };
+ attributes.each(function(attr){property[attr.nodeName] = attr.nodeValue});
+ if(attributes.length > 0) { globalProperties.push(property) };
});
});
-
+
// TODO Why are we using XML if we don't respect structure anyway?
// for each plugin element in the configuration..
var plugin = resultXml.getElementsByTagName("plugin");
$A(plugin).each( function(node) {
-
+
// get all element's attributes.
// TODO: What about: var pluginData = $H(node.attributes) !?
var pluginData = new Hash();
$A(node.attributes).each( function(attr){
- pluginData[attr.nodeName] = attr.nodeValue});
-
+ pluginData[attr.nodeName] = attr.nodeValue});
+
// ensure there's a name attribute.
if(!pluginData['name']) {
ORYX.Log.error("A plugin is not providing a name. Ingnoring this plugin.");
@@ -2325,40 +2325,40 @@ ORYX = Object.extend(ORYX, {
ORYX.Log.error("Plugin with name '%0' doesn't provide a source attribute.", pluginData['name']);
return;
}
-
+
// Get all private Properties
var propertyNodes = node.getElementsByTagName("property");
var properties = [];
$A(propertyNodes).each(function(prop) {
- var property = new Hash();
-
- // Get all Attributes from the Node
+ var property = new Hash();
+
+ // Get all Attributes from the Node
var attributes = $A(prop.attributes)
- attributes.each(function(attr){property[attr.nodeName] = attr.nodeValue});
- if(attributes.length > 0) { properties.push(property) };
-
+ attributes.each(function(attr){property[attr.nodeName] = attr.nodeValue});
+ if(attributes.length > 0) { properties.push(property) };
+
});
-
+
// Set all Global-Properties to the Properties
properties = properties.concat(globalProperties);
-
+
// Set Properties to Plugin-Data
pluginData['properties'] = properties;
-
+
// Get the RequieredNodes
var requireNodes = node.getElementsByTagName("requires");
var requires;
- $A(requireNodes).each(function(req) {
+ $A(requireNodes).each(function(req) {
var namespace = $A(req.attributes).find(function(attr){ return attr.name == "namespace"})
if( namespace && namespace.nodeValue ){
if( !requires ){
requires = {namespaces:[]}
}
-
+
requires.namespaces.push(namespace.nodeValue)
- }
- });
-
+ }
+ });
+
// Set Requires to the Plugin-Data, if there is one
if( requires ){
pluginData['requires'] = requires;
@@ -2368,37 +2368,37 @@ ORYX = Object.extend(ORYX, {
// Get the RequieredNodes
var notUsesInNodes = node.getElementsByTagName("notUsesIn");
var notUsesIn;
- $A(notUsesInNodes).each(function(not) {
+ $A(notUsesInNodes).each(function(not) {
var namespace = $A(not.attributes).find(function(attr){ return attr.name == "namespace"})
if( namespace && namespace.nodeValue ){
if( !notUsesIn ){
notUsesIn = {namespaces:[]}
}
-
+
notUsesIn.namespaces.push(namespace.nodeValue)
- }
- });
-
+ }
+ });
+
// Set Requires to the Plugin-Data, if there is one
if( notUsesIn ){
pluginData['notUsesIn'] = notUsesIn;
- }
-
-
+ }
+
+
var url = ORYX.PATH + ORYX.CONFIG.PLUGINS_FOLDER + pluginData['source'];
-
+
ORYX.Log.debug("Requireing '%0'", url);
-
+
// Add the Script-Tag to the Site
//Kickstart.require(url);
-
+
ORYX.Log.info("Plugin '%0' successfully loaded.", pluginData['name']);
-
+
// Add the Plugin-Data to all available Plugins
ORYX.availablePlugins.push(pluginData);
-
+
});
-
+
},
onFailure:this._loadPluginsOnFails
});
@@ -2432,31 +2432,31 @@ if(!ORYX.Core.SVG) {ORYX.Core.SVG = {};}
/**
* EditPathHandler
- *
+ *
* Edit SVG paths' coordinates according to specified from-to movement and
- * horizontal and vertical scaling factors.
+ * horizontal and vertical scaling factors.
* The resulting path's d attribute is stored in instance variable d.
- *
+ *
* @constructor
*/
ORYX.Core.SVG.EditPathHandler = Clazz.extend({
-
+
construct: function() {
arguments.callee.$.construct.apply(this, arguments);
-
+
this.x = 0;
this.y = 0;
this.oldX = 0;
this.oldY = 0;
this.deltaWidth = 1;
this.deltaHeight = 1;
-
+
this.d = "";
},
-
+
/**
* init
- *
+ *
* @param {float} x Target point's x-coordinate
* @param {float} y Target point's y-coordinate
* @param {float} oldX Reference point's x-coordinate
@@ -2471,13 +2471,13 @@ ORYX.Core.SVG.EditPathHandler = Clazz.extend({
this.oldY = oldY;
this.deltaWidth = deltaWidth;
this.deltaHeight = deltaHeight;
-
+
this.d = "";
},
/**
* editPointsAbs
- *
+ *
* @param {Array} points Array of absolutePoints
*/
editPointsAbs: function(points) {
@@ -2491,16 +2491,16 @@ ORYX.Core.SVG.EditPathHandler = Clazz.extend({
newPoints.push(x);
newPoints.push(y);
}
-
+
return newPoints;
} else {
//TODO error
}
},
-
+
/**
* editPointsRel
- *
+ *
* @param {Array} points Array of absolutePoints
*/
editPointsRel: function(points) {
@@ -2514,7 +2514,7 @@ ORYX.Core.SVG.EditPathHandler = Clazz.extend({
newPoints.push(x);
newPoints.push(y);
}
-
+
return newPoints;
} else {
//TODO error
@@ -2523,7 +2523,7 @@ ORYX.Core.SVG.EditPathHandler = Clazz.extend({
/**
* arcAbs - A
- *
+ *
* @param {Number} rx
* @param {Number} ry
* @param {Number} xAxisRotation
@@ -2535,16 +2535,16 @@ ORYX.Core.SVG.EditPathHandler = Clazz.extend({
arcAbs: function(rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y) {
var pointsAbs = this.editPointsAbs([x, y]);
var pointsRel = this.editPointsRel([rx, ry]);
-
- this.d = this.d.concat(" A" + pointsRel[0] + " " + pointsRel[1] +
- " " + xAxisRotation + " " + largeArcFlag +
+
+ this.d = this.d.concat(" A" + pointsRel[0] + " " + pointsRel[1] +
+ " " + xAxisRotation + " " + largeArcFlag +
" " + sweepFlag + " " + pointsAbs[0] + " " +
- pointsAbs[1] + " ");
+ pointsAbs[1] + " ");
},
/**
* arcRel - a
- *
+ *
* @param {Number} rx
* @param {Number} ry
* @param {Number} xAxisRotation
@@ -2555,16 +2555,16 @@ ORYX.Core.SVG.EditPathHandler = Clazz.extend({
*/
arcRel: function(rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y) {
var pointsRel = this.editPointsRel([rx, ry, x, y]);
-
- this.d = this.d.concat(" a" + pointsRel[0] + " " + pointsRel[1] +
- " " + xAxisRotation + " " + largeArcFlag +
+
+ this.d = this.d.concat(" a" + pointsRel[0] + " " + pointsRel[1] +
+ " " + xAxisRotation + " " + largeArcFlag +
" " + sweepFlag + " " + pointsRel[2] + " " +
- pointsRel[3] + " ");
+ pointsRel[3] + " ");
},
/**
* curvetoCubicAbs - C
- *
+ *
* @param {Number} x1
* @param {Number} y1
* @param {Number} x2
@@ -2574,15 +2574,15 @@ ORYX.Core.SVG.EditPathHandler = Clazz.extend({
*/
curvetoCubicAbs: function(x1, y1, x2, y2, x, y) {
var pointsAbs = this.editPointsAbs([x1, y1, x2, y2, x, y]);
-
- this.d = this.d.concat(" C" + pointsAbs[0] + " " + pointsAbs[1] +
- " " + pointsAbs[2] + " " + pointsAbs[3] +
- " " + pointsAbs[4] + " " + pointsAbs[5] + " ");
+
+ this.d = this.d.concat(" C" + pointsAbs[0] + " " + pointsAbs[1] +
+ " " + pointsAbs[2] + " " + pointsAbs[3] +
+ " " + pointsAbs[4] + " " + pointsAbs[5] + " ");
},
/**
* curvetoCubicRel - c
- *
+ *
* @param {Number} x1
* @param {Number} y1
* @param {Number} x2
@@ -2592,73 +2592,73 @@ ORYX.Core.SVG.EditPathHandler = Clazz.extend({
*/
curvetoCubicRel: function(x1, y1, x2, y2, x, y) {
var pointsRel = this.editPointsRel([x1, y1, x2, y2, x, y]);
-
- this.d = this.d.concat(" c" + pointsRel[0] + " " + pointsRel[1] +
- " " + pointsRel[2] + " " + pointsRel[3] +
- " " + pointsRel[4] + " " + pointsRel[5] + " ");
+
+ this.d = this.d.concat(" c" + pointsRel[0] + " " + pointsRel[1] +
+ " " + pointsRel[2] + " " + pointsRel[3] +
+ " " + pointsRel[4] + " " + pointsRel[5] + " ");
},
/**
* linetoHorizontalAbs - H
- *
+ *
* @param {Number} x
*/
linetoHorizontalAbs: function(x) {
var pointsAbs = this.editPointsAbs([x, 0]);
-
- this.d = this.d.concat(" H" + pointsAbs[0] + " ");
+
+ this.d = this.d.concat(" H" + pointsAbs[0] + " ");
},
/**
* linetoHorizontalRel - h
- *
+ *
* @param {Number} x
*/
linetoHorizontalRel: function(x) {
var pointsRel = this.editPointsRel([x, 0]);
-
- this.d = this.d.concat(" h" + pointsRel[0] + " ");
+
+ this.d = this.d.concat(" h" + pointsRel[0] + " ");
},
/**
* linetoAbs - L
- *
+ *
* @param {Number} x
* @param {Number} y
*/
linetoAbs: function(x, y) {
var pointsAbs = this.editPointsAbs([x, y]);
-
+
this.d = this.d.concat(" L" + pointsAbs[0] + " " + pointsAbs[1] + " ");
},
/**
* linetoRel - l
- *
+ *
* @param {Number} x
* @param {Number} y
*/
linetoRel: function(x, y) {
var pointsRel = this.editPointsRel([x, y]);
-
+
this.d = this.d.concat(" l" + pointsRel[0] + " " + pointsRel[1] + " ");
},
/**
* movetoAbs - M
- *
+ *
* @param {Number} x
* @param {Number} y
*/
movetoAbs: function(x, y) {
var pointsAbs = this.editPointsAbs([x, y]);
-
+
this.d = this.d.concat(" M" + pointsAbs[0] + " " + pointsAbs[1] + " ");
},
/**
* movetoRel - m
- *
+ *
* @param {Number} x
* @param {Number} y
*/
@@ -2669,13 +2669,13 @@ ORYX.Core.SVG.EditPathHandler = Clazz.extend({
} else {
pointsRel = this.editPointsRel([x, y]);
}
-
+
this.d = this.d.concat(" m" + pointsRel[0] + " " + pointsRel[1] + " ");
},
/**
* curvetoQuadraticAbs - Q
- *
+ *
* @param {Number} x1
* @param {Number} y1
* @param {Number} x
@@ -2683,14 +2683,14 @@ ORYX.Core.SVG.EditPathHandler = Clazz.extend({
*/
curvetoQuadraticAbs: function(x1, y1, x, y) {
var pointsAbs = this.editPointsAbs([x1, y1, x, y]);
-
+
this.d = this.d.concat(" Q" + pointsAbs[0] + " " + pointsAbs[1] + " " +
pointsAbs[2] + " " + pointsAbs[3] + " ");
},
/**
* curvetoQuadraticRel - q
- *
+ *
* @param {Number} x1
* @param {Number} y1
* @param {Number} x
@@ -2698,14 +2698,14 @@ ORYX.Core.SVG.EditPathHandler = Clazz.extend({
*/
curvetoQuadraticRel: function(x1, y1, x, y) {
var pointsRel = this.editPointsRel([x1, y1, x, y]);
-
+
this.d = this.d.concat(" q" + pointsRel[0] + " " + pointsRel[1] + " " +
pointsRel[2] + " " + pointsRel[3] + " ");
},
/**
* curvetoCubicSmoothAbs - S
- *
+ *
* @param {Number} x2
* @param {Number} y2
* @param {Number} x
@@ -2713,14 +2713,14 @@ ORYX.Core.SVG.EditPathHandler = Clazz.extend({
*/
curvetoCubicSmoothAbs: function(x2, y2, x, y) {
var pointsAbs = this.editPointsAbs([x2, y2, x, y]);
-
+
this.d = this.d.concat(" S" + pointsAbs[0] + " " + pointsAbs[1] + " " +
pointsAbs[2] + " " + pointsAbs[3] + " ");
},
/**
* curvetoCubicSmoothRel - s
- *
+ *
* @param {Number} x2
* @param {Number} y2
* @param {Number} x
@@ -2728,54 +2728,54 @@ ORYX.Core.SVG.EditPathHandler = Clazz.extend({
*/
curvetoCubicSmoothRel: function(x2, y2, x, y) {
var pointsRel = this.editPointsRel([x2, y2, x, y]);
-
+
this.d = this.d.concat(" s" + pointsRel[0] + " " + pointsRel[1] + " " +
pointsRel[2] + " " + pointsRel[3] + " ");
},
/**
* curvetoQuadraticSmoothAbs - T
- *
+ *
* @param {Number} x
* @param {Number} y
*/
curvetoQuadraticSmoothAbs: function(x, y) {
var pointsAbs = this.editPointsAbs([x, y]);
-
+
this.d = this.d.concat(" T" + pointsAbs[0] + " " + pointsAbs[1] + " ");
},
/**
* curvetoQuadraticSmoothRel - t
- *
+ *
* @param {Number} x
* @param {Number} y
*/
curvetoQuadraticSmoothRel: function(x, y) {
var pointsRel = this.editPointsRel([x, y]);
-
+
this.d = this.d.concat(" t" + pointsRel[0] + " " + pointsRel[1] + " ");
},
/**
* linetoVerticalAbs - V
- *
+ *
* @param {Number} y
*/
linetoVerticalAbs: function(y) {
var pointsAbs = this.editPointsAbs([0, y]);
-
+
this.d = this.d.concat(" V" + pointsAbs[1] + " ");
},
/**
* linetoVerticalRel - v
- *
+ *
* @param {Number} y
*/
linetoVerticalRel: function(y) {
var pointsRel = this.editPointsRel([0, y]);
-
+
this.d = this.d.concat(" v" + pointsRel[1] + " ");
},
@@ -2806,30 +2806,30 @@ if(!ORYX.Core.SVG) {ORYX.Core.SVG = {};}
/**
* MinMaxPathHandler
- *
+ *
* Determine the minimum and maximum of a SVG path's absolute coordinates.
* For relative coordinates the absolute value is computed for consideration.
* The values are stored in attributes minX, minY, maxX, and maxY.
- *
+ *
* @constructor
*/
ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
-
+
construct: function() {
arguments.callee.$.construct.apply(this, arguments);
-
+
this.minX = undefined;
this.minY = undefined;
this.maxX = undefined;
this.maxY = undefined;
-
+
this._lastAbsX = undefined;
this._lastAbsY = undefined;
},
/**
* Store minimal and maximal coordinates of passed points to attributes minX, maxX, minY, maxY
- *
+ *
* @param {Array} points Array of absolutePoints
*/
calculateMinMax: function(points) {
@@ -2839,12 +2839,12 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
x = parseFloat(points[i]);
i++;
y = parseFloat(points[i]);
-
+
this.minX = (this.minX !== undefined) ? Math.min(this.minX, x) : x;
this.maxX = (this.maxX !== undefined) ? Math.max(this.maxX, x) : x;
this.minY = (this.minY !== undefined) ? Math.min(this.minY, y) : y;
this.maxY = (this.maxY !== undefined) ? Math.max(this.maxY, y) : y;
-
+
this._lastAbsX = x;
this._lastAbsY = y;
}
@@ -2855,7 +2855,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* arcAbs - A
- *
+ *
* @param {Number} rx
* @param {Number} ry
* @param {Number} xAxisRotation
@@ -2870,7 +2870,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* arcRel - a
- *
+ *
* @param {Number} rx
* @param {Number} ry
* @param {Number} xAxisRotation
@@ -2885,7 +2885,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* curvetoCubicAbs - C
- *
+ *
* @param {Number} x1
* @param {Number} y1
* @param {Number} x2
@@ -2899,7 +2899,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* curvetoCubicRel - c
- *
+ *
* @param {Number} x1
* @param {Number} y1
* @param {Number} x2
@@ -2915,7 +2915,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* linetoHorizontalAbs - H
- *
+ *
* @param {Number} x
*/
linetoHorizontalAbs: function(x) {
@@ -2924,7 +2924,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* linetoHorizontalRel - h
- *
+ *
* @param {Number} x
*/
linetoHorizontalRel: function(x) {
@@ -2933,7 +2933,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* linetoAbs - L
- *
+ *
* @param {Number} x
* @param {Number} y
*/
@@ -2943,7 +2943,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* linetoRel - l
- *
+ *
* @param {Number} x
* @param {Number} y
*/
@@ -2953,7 +2953,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* movetoAbs - M
- *
+ *
* @param {Number} x
* @param {Number} y
*/
@@ -2963,7 +2963,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* movetoRel - m
- *
+ *
* @param {Number} x
* @param {Number} y
*/
@@ -2977,7 +2977,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* curvetoQuadraticAbs - Q
- *
+ *
* @param {Number} x1
* @param {Number} y1
* @param {Number} x
@@ -2989,7 +2989,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* curvetoQuadraticRel - q
- *
+ *
* @param {Number} x1
* @param {Number} y1
* @param {Number} x
@@ -3001,7 +3001,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* curvetoCubicSmoothAbs - S
- *
+ *
* @param {Number} x2
* @param {Number} y2
* @param {Number} x
@@ -3013,7 +3013,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* curvetoCubicSmoothRel - s
- *
+ *
* @param {Number} x2
* @param {Number} y2
* @param {Number} x
@@ -3025,7 +3025,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* curvetoQuadraticSmoothAbs - T
- *
+ *
* @param {Number} x
* @param {Number} y
*/
@@ -3035,7 +3035,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* curvetoQuadraticSmoothRel - t
- *
+ *
* @param {Number} x
* @param {Number} y
*/
@@ -3045,7 +3045,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* linetoVerticalAbs - V
- *
+ *
* @param {Number} y
*/
linetoVerticalAbs: function(y) {
@@ -3054,7 +3054,7 @@ ORYX.Core.SVG.MinMaxPathHandler = Clazz.extend({
/**
* linetoVerticalRel - v
- *
+ *
* @param {Number} y
*/
linetoVerticalRel: function(y) {
@@ -3088,27 +3088,27 @@ if(!ORYX.Core.SVG) {ORYX.Core.SVG = {};}
/**
* PathHandler
- *
- * Determine absolute points of a SVG path. The coordinates are stored
+ *
+ * Determine absolute points of a SVG path. The coordinates are stored
* sequentially in the attribute points (x-coordinates at even indices,
* y-coordinates at odd indices).
- *
+ *
* @constructor
*/
ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
-
+
construct: function() {
arguments.callee.$.construct.apply(this, arguments);
-
+
this.points = [];
-
+
this._lastAbsX = undefined;
this._lastAbsY = undefined;
},
/**
* addPoints
- *
+ *
* @param {Array} points Array of absolutePoints
*/
addPoints: function(points) {
@@ -3118,11 +3118,11 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
x = parseFloat(points[i]);
i++;
y = parseFloat(points[i]);
-
+
this.points.push(x);
this.points.push(y);
//this.points.push({x:x, y:y});
-
+
this._lastAbsX = x;
this._lastAbsY = y;
}
@@ -3133,7 +3133,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* arcAbs - A
- *
+ *
* @param {Number} rx
* @param {Number} ry
* @param {Number} xAxisRotation
@@ -3148,7 +3148,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* arcRel - a
- *
+ *
* @param {Number} rx
* @param {Number} ry
* @param {Number} xAxisRotation
@@ -3163,7 +3163,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* curvetoCubicAbs - C
- *
+ *
* @param {Number} x1
* @param {Number} y1
* @param {Number} x2
@@ -3177,7 +3177,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* curvetoCubicRel - c
- *
+ *
* @param {Number} x1
* @param {Number} y1
* @param {Number} x2
@@ -3191,7 +3191,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* linetoHorizontalAbs - H
- *
+ *
* @param {Number} x
*/
linetoHorizontalAbs: function(x) {
@@ -3200,7 +3200,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* linetoHorizontalRel - h
- *
+ *
* @param {Number} x
*/
linetoHorizontalRel: function(x) {
@@ -3209,7 +3209,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* linetoAbs - L
- *
+ *
* @param {Number} x
* @param {Number} y
*/
@@ -3219,7 +3219,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* linetoRel - l
- *
+ *
* @param {Number} x
* @param {Number} y
*/
@@ -3229,7 +3229,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* movetoAbs - M
- *
+ *
* @param {Number} x
* @param {Number} y
*/
@@ -3239,7 +3239,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* movetoRel - m
- *
+ *
* @param {Number} x
* @param {Number} y
*/
@@ -3253,7 +3253,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* curvetoQuadraticAbs - Q
- *
+ *
* @param {Number} x1
* @param {Number} y1
* @param {Number} x
@@ -3265,7 +3265,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* curvetoQuadraticRel - q
- *
+ *
* @param {Number} x1
* @param {Number} y1
* @param {Number} x
@@ -3277,7 +3277,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* curvetoCubicSmoothAbs - S
- *
+ *
* @param {Number} x2
* @param {Number} y2
* @param {Number} x
@@ -3289,7 +3289,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* curvetoCubicSmoothRel - s
- *
+ *
* @param {Number} x2
* @param {Number} y2
* @param {Number} x
@@ -3301,7 +3301,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* curvetoQuadraticSmoothAbs - T
- *
+ *
* @param {Number} x
* @param {Number} y
*/
@@ -3311,7 +3311,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* curvetoQuadraticSmoothRel - t
- *
+ *
* @param {Number} x
* @param {Number} y
*/
@@ -3321,7 +3321,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* linetoVerticalAbs - V
- *
+ *
* @param {Number} y
*/
linetoVerticalAbs: function(y) {
@@ -3330,7 +3330,7 @@ ORYX.Core.SVG.PointsPathHandler = Clazz.extend({
/**
* linetoVerticalRel - v
- *
+ *
* @param {Number} y
*/
linetoVerticalRel: function(y) {
@@ -3415,7 +3415,7 @@ ORYX.Core.SVG.SVGMarker = Clazz.extend({
}
this.id = this.element.getAttributeNS(null, "id");
-
+
//init svg marker attributes
var refXValue = this.element.getAttributeNS(null, "refX");
if(refXValue) {
@@ -3535,7 +3535,7 @@ ORYX.Core.SVG.SVGMarker = Clazz.extend({
this.oldMarkerWidth = this.markerWidth;
this.oldMarkerHeight = this.markerHeight;
},
-
+
toString: function() { return (this.element) ? "SVGMarker " + this.element.id : "SVGMarker " + this.element;}
});/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
@@ -3598,7 +3598,7 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
this.anchorRight = false;
this.anchorTop = false;
this.anchorBottom = false;
-
+
//attributes of path elements of edge objects
this.allowDockers = true;
this.resizeMarkerMid = false;
@@ -3617,7 +3617,7 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
/**initialize position and size*/
if(ORYX.Editor.checkClassType(this.element, SVGRectElement) || ORYX.Editor.checkClassType(this.element, SVGImageElement)) {
this.type = "Rect";
-
+
var xAttr = this.element.getAttributeNS(null, "x");
if(xAttr) {
this.oldX = parseFloat(xAttr);
@@ -3645,7 +3645,7 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
} else if(ORYX.Editor.checkClassType(this.element, SVGCircleElement)) {
this.type = "Circle";
-
+
var cx = undefined;
var cy = undefined;
//var r = undefined;
@@ -3676,7 +3676,7 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
} else if(ORYX.Editor.checkClassType(this.element, SVGEllipseElement)) {
this.type = "Ellipse";
-
+
var cx = undefined;
var cy = undefined;
//var rx = undefined;
@@ -3712,7 +3712,7 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
} else if(ORYX.Editor.checkClassType(this.element, SVGLineElement)) {
this.type = "Line";
-
+
var x1 = undefined;
var y1 = undefined;
var x2 = undefined;
@@ -3748,7 +3748,7 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
} else if(ORYX.Editor.checkClassType(this.element, SVGPolylineElement) || ORYX.Editor.checkClassType(this.element, SVGPolygonElement)) {
this.type = "Polyline";
-
+
var pointsArray = [];
if (this.element.points&&this.element.points.numberOfItems){
for(var i=0, size=this.element.points.numberOfItems; i 1) {
var minX = parseFloat(pointsArray[0]);
@@ -3791,11 +3791,11 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
} else if(ORYX.Editor.checkClassType(this.element, SVGPathElement)) {
this.type = "Path";
-
+
this.editPathParser = new PathParser();
this.editPathHandler = new ORYX.Core.SVG.EditPathHandler();
this.editPathParser.setHandler(this.editPathHandler);
-
+
var parser = new PathParser();
var handler = new ORYX.Core.SVG.MinMaxPathHandler();
parser.setHandler(handler);
@@ -3837,7 +3837,7 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
if(anchorAttr) {
anchorAttr = anchorAttr.replace("/,/g", " ");
var anchors = anchorAttr.split(" ").without("");
-
+
for(var i = 0; i < anchors.length; i++) {
switch(anchors[i].toLowerCase()) {
case "left":
@@ -3855,28 +3855,28 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
}
}
}
-
+
//allowDockers and resizeMarkerMid
if(ORYX.Editor.checkClassType(this.element, SVGPathElement)) {
- var allowDockersAttr = this.element.getAttributeNS(NAMESPACE_ORYX, "allowDockers");
+ var allowDockersAttr = this.element.getAttributeNS(NAMESPACE_ORYX, "allowDockers");
if(allowDockersAttr) {
if(allowDockersAttr.toLowerCase() === "no") {
- this.allowDockers = false;
+ this.allowDockers = false;
} else {
this.allowDockers = true;
}
}
-
- var resizeMarkerMidAttr = this.element.getAttributeNS(NAMESPACE_ORYX, "resizeMarker-mid");
+
+ var resizeMarkerMidAttr = this.element.getAttributeNS(NAMESPACE_ORYX, "resizeMarker-mid");
if(resizeMarkerMidAttr) {
if(resizeMarkerMidAttr.toLowerCase() === "yes") {
- this.resizeMarkerMid = true;
+ this.resizeMarkerMid = true;
} else {
this.resizeMarkerMid = false;
}
}
- }
-
+ }
+
this.x = this.oldX;
this.y = this.oldY;
this.width = this.oldWidth;
@@ -3887,7 +3887,7 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
* Writes the changed values into the SVG element.
*/
update: function() {
-
+
if(this.x !== this.oldX || this.y !== this.oldY || this.width !== this.oldWidth || this.height !== this.oldHeight) {
switch(this.type) {
case "Rect":
@@ -3904,7 +3904,7 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
// } else {
this.radiusX = ((this.width < this.height) ? this.width : this.height)/2.0;
//}
-
+
this.element.setAttributeNS(null, "cx", this.x + this.width/2.0);
this.element.setAttributeNS(null, "cy", this.y + this.height/2.0);
this.element.setAttributeNS(null, "r", this.radiusX);
@@ -3912,7 +3912,7 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
case "Ellipse":
this.radiusX = this.width/2;
this.radiusY = this.height/2;
-
+
this.element.setAttributeNS(null, "cx", this.x + this.radiusX);
this.element.setAttributeNS(null, "cy", this.y + this.radiusY);
this.element.setAttributeNS(null, "rx", this.radiusX);
@@ -3921,13 +3921,13 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
case "Line":
if(this.x !== this.oldX)
this.element.setAttributeNS(null, "x1", this.x);
-
+
if(this.y !== this.oldY)
this.element.setAttributeNS(null, "y1", this.y);
-
+
if(this.x !== this.oldX || this.width !== this.oldWidth)
this.element.setAttributeNS(null, "x2", this.x + this.width);
-
+
if(this.y !== this.oldY || this.height !== this.oldHeight)
this.element.setAttributeNS(null, "y2", this.y + this.height);
break;
@@ -3935,13 +3935,13 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
var points = this.element.getAttributeNS(null, "points");
if(points) {
points = points.replace(/,/g, " ").split(" ").without("");
-
+
if(points && points.length && points.length > 1) {
-
+
//TODO what if oldWidth == 0?
var widthDelta = (this.oldWidth === 0) ? 0 : this.width / this.oldWidth;
var heightDelta = (this.oldHeight === 0) ? 0 : this.height / this.oldHeight;
-
+
var updatedPoints = "";
for(var i = 0; i < points.length; i++) {
var x = (parseFloat(points[i])-this.oldX)*widthDelta + this.x;
@@ -3962,11 +3962,11 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
//TODO what if oldWidth == 0?
var widthDelta = (this.oldWidth === 0) ? 0 : this.width / this.oldWidth;
var heightDelta = (this.oldHeight === 0) ? 0 : this.height / this.oldHeight;
-
+
//use path parser to edit each point of the path
this.editPathHandler.init(this.x, this.y, this.oldX, this.oldY, widthDelta, heightDelta);
this.editPathParser.parsePath(this.element);
-
+
//change d attribute of path
this.element.setAttributeNS(null, "d", this.editPathHandler.d);
break;
@@ -3977,12 +3977,12 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
this.oldWidth = this.width;
this.oldHeight = this.height;
}
-
+
// Remove cached variables
delete this.visible;
delete this.handler;
},
-
+
isPointIncluded: function(pointX, pointY) {
// Check if there are the right arguments and if the node is visible
@@ -4006,28 +4006,28 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
return ORYX.Core.Math.isPointInEllipse(pointX, pointY, this.x + this.width/2.0, this.y + this.height/2.0, this.radiusX, this.radiusX);
break;
case "Ellipse":
- return ORYX.Core.Math.isPointInEllipse(pointX, pointY, this.x + this.radiusX, this.y + this.radiusY, this.radiusX, this.radiusY);
+ return ORYX.Core.Math.isPointInEllipse(pointX, pointY, this.x + this.radiusX, this.y + this.radiusY, this.radiusX, this.radiusY);
break;
case "Line":
return ORYX.Core.Math.isPointInLine(pointX, pointY, this.x, this.y, this.x + this.width, this.y + this.height);
break;
case "Polyline":
var points = this.element.getAttributeNS(null, "points");
-
+
if(points) {
points = points.replace(/,/g , " ").split(" ").without("");
-
+
points = points.collect(function(n) {
return parseFloat(n);
});
-
+
return ORYX.Core.Math.isPointInPolygone(pointX, pointY, points);
} else {
return false;
}
break;
case "Path":
-
+
// Cache Path handler
if (!this.handler) {
var parser = new PathParser();
@@ -4035,7 +4035,7 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
parser.setHandler(this.handler);
parser.parsePath(this.element);
}
-
+
return ORYX.Core.Math.isPointInPolygone(pointX, pointY, this.handler.points);
break;
@@ -4050,20 +4050,20 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
* @return boolean
*/
isVisible: function(elem) {
-
+
if (this.visible !== undefined){
return this.visible;
}
-
+
if (!elem) {
elem = this.element;
}
var hasOwnerSVG = false;
- try {
+ try {
hasOwnerSVG = !!elem.ownerSVGElement;
} catch(e){}
-
+
// Is SVG context
if ( hasOwnerSVG ) {
// IF G-Element
@@ -4084,7 +4084,7 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
var attr = elem.getAttributeNS(null, "display");
if(!attr)
this.visible = this.isVisible(elem.parentNode);
- else if (attr == "none")
+ else if (attr == "none")
this.visible = false;
else
this.visible = true;
@@ -4092,7 +4092,7 @@ ORYX.Core.SVG.SVGShape = Clazz.extend({
} else {
this.visible = true;
}
-
+
return this.visible;
},
@@ -4116,10 +4116,10 @@ if(!ORYX.Core.SVG) {ORYX.Core.SVG = {};}
/**
* @classDescription Class for adding text to a shape.
- *
+ *
*/
ORYX.Core.SVG.Label = Clazz.extend({
-
+
_characterSets:[
"%W",
"@",
@@ -4140,52 +4140,52 @@ ORYX.Core.SVG.Label = Clazz.extend({
* Constructor
* @param options {Object} :
* textElement
- *
+ *
*/
construct: function(options) {
arguments.callee.$.construct.apply(this, arguments);
-
+
if(!options.textElement) {
- throw "Label: No parameter textElement."
+ throw "Label: No parameter textElement."
} else if (!ORYX.Editor.checkClassType( options.textElement, SVGTextElement ) ) {
- throw "Label: Parameter textElement is not an SVGTextElement."
+ throw "Label: Parameter textElement is not an SVGTextElement."
}
-
+
this.invisibleRenderPoint = -5000;
-
+
this.node = options.textElement;
-
-
+
+
this.node.setAttributeNS(null, 'stroke-width', '0pt');
this.node.setAttributeNS(null, 'letter-spacing', '-0.01px');
-
+
this.shapeId = options.shapeId;
-
+
this.id;
-
+
this.fitToElemId;
-
+
this.edgePosition;
-
+
this.x;
this.y;
this.oldX;
this.oldY;
-
+
this.isVisible = true;
-
+
this._text;
this._verticalAlign;
this._horizontalAlign;
this._rotate;
this._rotationPoint;
-
+
//this.anchors = [];
this.anchorLeft;
this.anchorRight;
this.anchorTop;
this.anchorBottom;
-
+
this._isChanged = true;
//if the text element already has an id, don't change it.
@@ -4193,21 +4193,21 @@ ORYX.Core.SVG.Label = Clazz.extend({
if(_id) {
this.id = _id;
}
-
- //initialization
-
+
+ //initialization
+
//set referenced element the text is fit to
this.fitToElemId = this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'fittoelem');
if(this.fitToElemId)
this.fitToElemId = this.shapeId + this.fitToElemId;
-
- //set alignment
+
+ //set alignment
var alignValues = this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'align');
if(alignValues) {
alignValues = alignValues.replace(/,/g, " ");
alignValues = alignValues.split(" ");
alignValues = alignValues.without("");
-
+
alignValues.each((function(alignValue) {
switch (alignValue) {
case 'top':
@@ -4223,27 +4223,27 @@ ORYX.Core.SVG.Label = Clazz.extend({
}
}).bind(this));
}
-
+
//set edge position (only in case the label belongs to an edge)
this.edgePosition = this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'edgePosition');
if(this.edgePosition) {
this.originEdgePosition = this.edgePosition = this.edgePosition.toLowerCase();
}
-
-
+
+
//get offset top
this.offsetTop = this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'offsetTop') || ORYX.CONFIG.OFFSET_EDGE_LABEL_TOP;
if(this.offsetTop) {
this.offsetTop = parseInt(this.offsetTop);
}
-
+
//get offset top
this.offsetBottom = this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'offsetBottom') || ORYX.CONFIG.OFFSET_EDGE_LABEL_BOTTOM;
if(this.offsetBottom) {
this.offsetBottom = parseInt(this.offsetBottom);
}
-
-
+
+
//set rotation
var rotateValue = this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'rotate');
if(rotateValue) {
@@ -4255,13 +4255,13 @@ ORYX.Core.SVG.Label = Clazz.extend({
} else {
this._rotate = 0;
}
-
+
//anchors
var anchorAttr = this.node.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "anchors");
if(anchorAttr) {
anchorAttr = anchorAttr.replace("/,/g", " ");
var anchors = anchorAttr.split(" ").without("");
-
+
for(var i = 0; i < anchors.length; i++) {
switch(anchors[i].toLowerCase()) {
case "left":
@@ -4279,7 +4279,7 @@ ORYX.Core.SVG.Label = Clazz.extend({
}
}
}
-
+
//if no alignment defined, set default alignment
if(!this._verticalAlign) { this._verticalAlign = 'bottom'; }
if(!this._horizontalAlign) { this._horizontalAlign = 'left'; }
@@ -4290,22 +4290,22 @@ ORYX.Core.SVG.Label = Clazz.extend({
} else {
//TODO error
}
-
+
var yValue = this.node.getAttributeNS(null, 'y');
if(yValue) {
this.oldY = this.y = parseFloat(yValue);
} else {
//TODO error
}
-
+
//set initial text
this.text(this.node.textContent);
},
-
+
/**
* Reset the anchor position to the original value
* which was specified in the stencil set
- *
+ *
*/
resetAnchorPosition: function(){
this.anchorLeft = this.originAnchorLeft || false;
@@ -4313,18 +4313,18 @@ ORYX.Core.SVG.Label = Clazz.extend({
this.anchorTop = this.originAnchorTop || false;
this.anchorBottom = this.originAnchorBottom || false;
},
-
+
isOriginAnchorLeft: function(){ return this.originAnchorLeft || false; },
isOriginAnchorRight: function(){ return this.originAnchorRight || false; },
isOriginAnchorTop: function(){ return this.originAnchorTop || false; },
isOriginAnchorBottom: function(){ return this.originAnchorBottom || false; },
-
-
+
+
isAnchorLeft: function(){ return this.anchorLeft || false; },
isAnchorRight: function(){ return this.anchorRight || false; },
isAnchorTop: function(){ return this.anchorTop || false; },
isAnchorBottom: function(){ return this.anchorBottom || false; },
-
+
/**
* Returns the x coordinate
* @return {number}
@@ -4342,15 +4342,15 @@ ORYX.Core.SVG.Label = Clazz.extend({
return this.x;
}
},
-
+
setX: function(x){
if (this.position)
this.position.x = x;
- else
+ else
this.setOriginX(x);
},
-
-
+
+
/**
* Returns the y coordinate
* @return {number}
@@ -4362,23 +4362,23 @@ ORYX.Core.SVG.Label = Clazz.extend({
return this.y;
}
},
-
+
setY: function(y){
if (this.position)
this.position.y = y;
- else
+ else
this.setOriginY(y);
},
-
+
setOriginX: function(x){
this.x = x;
},
-
+
setOriginY: function(y){
this.y = y;
},
-
+
/**
* Returns the width of the label
* @return {number}
@@ -4405,7 +4405,7 @@ ORYX.Core.SVG.Label = Clazz.extend({
return 0;
}
},
-
+
getOriginUpperLeft: function(){
var x = this.x, y = this.y;
switch (this._horizontalAlign){
@@ -4426,7 +4426,7 @@ ORYX.Core.SVG.Label = Clazz.extend({
}
return {x:x, y:y};
},
-
+
/**
* Returns the height of the label
* @return {number}
@@ -4438,9 +4438,9 @@ ORYX.Core.SVG.Label = Clazz.extend({
return 0;
}
},
-
+
/**
- * Returns the relative center position of the label
+ * Returns the relative center position of the label
* to its parent shape.
* @return {Object}
*/
@@ -4450,7 +4450,7 @@ ORYX.Core.SVG.Label = Clazz.extend({
up.y += this.getHeight()/2;
return up;
},
-
+
/**
* Sets the position of a label relative to the parent.
* @param {Object} position
@@ -4461,23 +4461,23 @@ ORYX.Core.SVG.Label = Clazz.extend({
} else {
this.position = position;
}
-
+
if (this.position){
delete this._referencePoint;
delete this.edgePosition;
}
-
+
this._isChanged = true;
this.update();
},
-
+
/**
* Return the position
*/
getPosition: function(){
return this.position;
},
-
+
setReferencePoint: function(ref){
if (ref) {
this._referencePoint = ref;
@@ -4488,15 +4488,15 @@ ORYX.Core.SVG.Label = Clazz.extend({
delete this.position;
}
},
-
+
getReferencePoint: function(){
return this._referencePoint || undefined;
},
-
+
changed: function() {
this._isChanged = true;
},
-
+
/**
* Register a callback which will be called if the label
* was rendered.
@@ -4510,7 +4510,7 @@ ORYX.Core.SVG.Label = Clazz.extend({
this.changeCallbacks.push(fn);
}
},
-
+
/**
* Unregister the callback for changes.
* @param {Object} fn
@@ -4520,40 +4520,40 @@ ORYX.Core.SVG.Label = Clazz.extend({
this.changeCallbacks = this.changeCallbacks.without(fn);
}
},
-
+
/**
* Returns TRUE if the labe is currently in
* the update mechanism.
* @return {Boolean}
*/
isUpdating: function(){
- return !!this._isUpdating;
+ return !!this._isUpdating;
},
-
-
+
+
getOriginEdgePosition: function(){
- return this.originEdgePosition;
+ return this.originEdgePosition;
},
-
+
/**
* Returns the edgeposition.
- *
- * @return {String} "starttop", "startmiddle", "startbottom",
+ *
+ * @return {String} "starttop", "startmiddle", "startbottom",
* "midtop", "midbottom", "endtop", "endbottom" or null
*/
getEdgePosition: function(){
- return this.edgePosition || null;
+ return this.edgePosition || null;
},
-
+
/**
* Set the edge position, must be one of the valid
* edge positions (see getEdgePosition).
* Removes the reference point and the absolute position as well.
- *
+ *
* @param {Object} position
*/
setEdgePosition: function(position){
- if (["starttop", "startmiddle", "startbottom",
+ if (["starttop", "startmiddle", "startbottom",
"midtop", "midbottom", "endtop", "endbottom"].include(position)){
this.edgePosition = position;
delete this.position;
@@ -4562,53 +4562,53 @@ ORYX.Core.SVG.Label = Clazz.extend({
delete this.edgePosition;
}
},
-
+
/**
* Update the SVG text element.
*/
update: function(force) {
-
+
var x = this.x, y = this.y;
if (this.position){
x = this.position.x;
y = this.position.y;
}
x = Math.floor(x); y = Math.floor(y);
-
+
if(this._isChanged || x !== this.oldX || y !== this.oldY || force === true) {
if (this.isVisible) {
this._isChanged = false;
this._isUpdating = true;
-
+
this.node.setAttributeNS(null, 'x', x);
this.node.setAttributeNS(null, 'y', y);
this.node.removeAttributeNS(null, "fill-opacity");
-
+
//this.node.setAttributeNS(null, 'font-size', this._fontSize);
//this.node.setAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, 'align', this._horizontalAlign + " " + this._verticalAlign);
-
+
this.oldX = x;
this.oldY = y;
-
+
//set rotation
if (!this.position && !this.getReferencePoint()) {
if (this._rotate !== undefined) {
- if (this._rotationPoint)
+ if (this._rotationPoint)
this.node.setAttributeNS(null, 'transform', 'rotate(' + this._rotate + ' ' + Math.floor(this._rotationPoint.x) + ' ' + Math.floor(this._rotationPoint.y) + ')');
- else
+ else
this.node.setAttributeNS(null, 'transform', 'rotate(' + this._rotate + ' ' + Math.floor(x) + ' ' + Math.floor(y) + ')');
}
} else {
this.node.removeAttributeNS(null, 'transform');
}
-
+
var textLines = this._text.split("\n");
- while (textLines.last() == "")
+ while (textLines.last() == "")
textLines.pop();
-
-
+
+
if (this.node.ownerDocument) {
- // Only reset the tspans if the text
+ // Only reset the tspans if the text
// has changed or has to be wrapped
if (this.fitToElemId || this._textHasChanged){
this.node.textContent = ""; // Remove content
@@ -4619,7 +4619,7 @@ ORYX.Core.SVG.Label = Clazz.extend({
tspan.setAttributeNS(null, 'x', this.invisibleRenderPoint);
tspan.setAttributeNS(null, 'y', this.invisibleRenderPoint);
}
-
+
/*
* Chrome's getBBox() method fails, if a text node contains an empty tspan element.
* So, we add a whitespace to such a tspan element.
@@ -4627,19 +4627,19 @@ ORYX.Core.SVG.Label = Clazz.extend({
if(tspan.textContent === "") {
tspan.textContent = " ";
}
-
+
//append tspan to text node
this.node.appendChild(tspan);
}).bind(this));
delete this._textHasChanged;
delete this.indices;
}
-
+
//Work around for Mozilla bug 293581
if (this.isVisible && this.fitToElemId) {
this.node.setAttributeNS(null, 'visibility', 'hidden');
}
-
+
if (this.fitToElemId) {
window.setTimeout(this._checkFittingToReferencedElem.bind(this), 0);
//this._checkFittingToReferencedElem();
@@ -4654,41 +4654,41 @@ ORYX.Core.SVG.Label = Clazz.extend({
}
}
},
-
+
_checkFittingToReferencedElem: function() {
try {
var tspans = $A(this.node.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'tspan'));
-
+
//only do this in firefox 3. all other browsers do not support word wrapping!!!!!
//if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent) && new Number(RegExp.$1)>=3) {
var newtspans = [];
-
+
var refNode = this.node.ownerDocument.getElementById(this.fitToElemId);
-
+
if (refNode) {
var refbb = refNode.getBBox();
-
+
var fontSize = this.getFontSize();
-
+
for (var j = 0; j < tspans.length; j++) {
var tspan = tspans[j];
-
+
var textLength = this._getRenderedTextLength(tspan, undefined, undefined, fontSize);
-
- var refBoxLength = (this._rotate != 0
- && this._rotate % 180 != 0
- && this._rotate % 90 == 0 ?
+
+ var refBoxLength = (this._rotate != 0
+ && this._rotate % 180 != 0
+ && this._rotate % 90 == 0 ?
refbb.height : refbb.width);
-
+
if (textLength > refBoxLength) {
-
+
var startIndex = 0;
var lastSeperatorIndex = 0;
-
+
var numOfChars = this.getTrimmedTextLength(tspan.textContent);
for (var i = 0; i < numOfChars; i++) {
var sslength = this._getRenderedTextLength(tspan, startIndex, i-startIndex, fontSize);
-
+
if (sslength > refBoxLength - 2) {
var newtspan = this.node.ownerDocument.createElementNS(ORYX.CONFIG.NAMESPACE_SVG, 'tspan');
if (lastSeperatorIndex <= startIndex) {
@@ -4699,14 +4699,14 @@ ORYX.Core.SVG.Label = Clazz.extend({
else {
newtspan.textContent = tspan.textContent.slice(startIndex, ++lastSeperatorIndex).trim();
}
-
+
newtspan.setAttributeNS(null, 'x', this.invisibleRenderPoint);
newtspan.setAttributeNS(null, 'y', this.invisibleRenderPoint);
-
+
//insert tspan to text node
//this.node.insertBefore(newtspan, tspan);
newtspans.push(newtspan);
-
+
startIndex = lastSeperatorIndex;
}
else {
@@ -4721,16 +4721,16 @@ ORYX.Core.SVG.Label = Clazz.extend({
}
}
}
-
+
tspan.textContent = tspan.textContent.slice(startIndex).trim();
}
-
+
newtspans.push(tspan);
}
-
- while (this.node.hasChildNodes())
+
+ while (this.node.hasChildNodes())
this.node.removeChild(this.node.childNodes[0]);
-
+
while (newtspans.length > 0) {
this.node.appendChild(newtspans.shift());
}
@@ -4742,37 +4742,37 @@ ORYX.Core.SVG.Label = Clazz.extend({
window.setTimeout(this._positionText.bind(this), 0);
//this._positionText();
},
-
+
/**
* This is a work around method for Mozilla bug 293581.
* Before the method getComputedTextLength works, the text has to be rendered.
*/
_positionText: function() {
try {
-
+
var tspans = this.node.childNodes;
-
- var fontSize = this.getFontSize(this.node);
-
+
+ var fontSize = this.getFontSize(this.node);
+
var invalidTSpans = [];
-
+
var x = this.x, y = this.y;
if (this.position){
x = this.position.x;
y = this.position.y;
}
x = Math.floor(x); y = Math.floor(y);
-
- var i = 0, indic = []; // Cache indices if the _positionText is called again, before update is called
+
+ var i = 0, indic = []; // Cache indices if the _positionText is called again, before update is called
var is =(this.indices || $R(0,tspans.length-1).toArray());
var length = is.length;
is.each((function(index){
if ("undefined" == typeof index){
return;
}
-
+
var tspan = tspans[i++];
-
+
if(tspan.textContent.trim() === "") {
invalidTSpans.push(tspan);
} else {
@@ -4792,21 +4792,21 @@ ORYX.Core.SVG.Label = Clazz.extend({
break;
}
tspan.setAttributeNS(null, 'dy', Math.floor(dy));
-
+
tspan.setAttributeNS(null, 'x', x);
tspan.setAttributeNS(null, 'y', y);
indic.push(index);
}
-
+
}).bind(this));
-
+
indic.length = tspans.length;
this.indices = this.indices || indic;
-
+
invalidTSpans.each(function(tspan) {
this.node.removeChild(tspan)
}.bind(this));
-
+
//set horizontal alignment
switch (this._horizontalAlign) {
case 'left':
@@ -4819,28 +4819,28 @@ ORYX.Core.SVG.Label = Clazz.extend({
this.node.setAttributeNS(null, 'text-anchor', 'end');
break;
}
-
+
} catch(e) {
//console.log(e);
this._isChanged = true;
}
-
-
+
+
if(this.isVisible) {
this.node.removeAttributeNS(null, 'visibility');
- }
-
-
+ }
+
+
// Finished
delete this._isUpdating;
-
+
// Raise change event
(this.changeCallbacks||[]).each(function(fn){
fn.apply(fn);
})
-
+
},
-
+
/**
* Returns the text length of the text content of an SVG tspan element.
* For all browsers but Firefox 3 the values are estimated.
@@ -4867,7 +4867,7 @@ ORYX.Core.SVG.Label = Clazz.extend({
}
}*/
},
-
+
/**
* Estimates the text width for a string.
* Used for word wrapping in all browser but FF3.
@@ -4878,10 +4878,10 @@ ORYX.Core.SVG.Label = Clazz.extend({
for(var i = 0; i < text.length; i++) {
sum += this._estimateCharacterWidth(text.charAt(i));
}
-
+
return sum*(fontSize/14.0);
},
-
+
/**
* Estimates the width of a single character for font size 14.
* Used for word wrapping in all browser but FF3.
@@ -4892,27 +4892,27 @@ ORYX.Core.SVG.Label = Clazz.extend({
if(this._characterSets[i].indexOf(character) >= 0) {
return this._characterSetValues[i];
}
- }
+ }
return 9;
},
-
+
getReferencedElementWidth: function() {
var refNode = this.node.ownerDocument.getElementById(this.fitToElemId);
-
+
if(refNode) {
var refbb = refNode.getBBox();
-
+
if(refbb) {
- return (this._rotate != 0
- && this._rotate % 180 != 0
- && this._rotate % 90 == 0 ?
+ return (this._rotate != 0
+ && this._rotate % 180 != 0
+ && this._rotate % 90 == 0 ?
refbb.height : refbb.width);
}
}
-
+
return undefined;
},
-
+
/**
* If no parameter is provided, this method returns the current text.
* @param text {String} Optional. Replaces the old text with this one.
@@ -4922,7 +4922,7 @@ ORYX.Core.SVG.Label = Clazz.extend({
case 0:
return this._text
break;
-
+
case 1:
var oldText = this._text;
if(arguments[0]) {
@@ -4939,17 +4939,17 @@ ORYX.Core.SVG.Label = Clazz.extend({
this._textHasChanged = true;
}
break;
-
- default:
+
+ default:
//TODO error
break;
}
},
-
+
getOriginVerticalAlign: function(){
return this._originVerticalAlign;
},
-
+
verticalAlign: function() {
switch(arguments.length) {
case 0:
@@ -4963,17 +4963,17 @@ ORYX.Core.SVG.Label = Clazz.extend({
}
}
break;
-
+
default:
//TODO error
break;
}
},
-
+
getOriginHorizontalAlign: function(){
return this._originHorizontalAlign;
},
-
+
horizontalAlign: function() {
switch(arguments.length) {
case 0:
@@ -4984,16 +4984,16 @@ ORYX.Core.SVG.Label = Clazz.extend({
this._horizontalAlign = arguments[0];
if(this._horizontalAlign !== oldValue) {
this._isChanged = true;
- }
+ }
}
break;
-
+
default:
//TODO error
break;
}
},
-
+
rotate: function() {
switch(arguments.length) {
case 0:
@@ -5013,17 +5013,17 @@ ORYX.Core.SVG.Label = Clazz.extend({
this._rotationPoint = arguments[1];
this._isChanged = true;
}
-
+
}
},
-
+
hide: function() {
if(this.isVisible) {
this.isVisible = false;
this._isChanged = true;
}
},
-
+
show: function() {
if(!this.isVisible) {
this.isVisible = true;
@@ -5034,7 +5034,7 @@ ORYX.Core.SVG.Label = Clazz.extend({
this._textHasChanged = true;
}
},
-
+
/**
* iterates parent nodes till it finds a SVG font-size
* attribute.
@@ -5043,7 +5043,7 @@ ORYX.Core.SVG.Label = Clazz.extend({
getInheritedFontSize: function(node) {
if(!node || !node.getAttributeNS)
return;
-
+
var attr = node.getAttributeNS(null, "font-size");
if(attr) {
return parseFloat(attr);
@@ -5051,14 +5051,14 @@ ORYX.Core.SVG.Label = Clazz.extend({
return this.getInheritedFontSize(node.parentNode);
}
},
-
+
getFontSize: function(node) {
var tspans = this.node.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'tspan');
-
+
//trying to get an inherited font-size attribute
//NO CSS CONSIDERED!
- var fontSize = this.getInheritedFontSize(this.node);
-
+ var fontSize = this.getInheritedFontSize(this.node);
+
if (!fontSize) {
//because this only works in firefox 3, all other browser use the default line height
if (tspans[0] && /Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent) && new Number(RegExp.$1) >= 3) {
@@ -5067,19 +5067,19 @@ ORYX.Core.SVG.Label = Clazz.extend({
else {
fontSize = ORYX.CONFIG.LABEL_DEFAULT_LINE_HEIGHT;
}
-
+
//handling of unsupported method in webkit
if (fontSize <= 0) {
fontSize = ORYX.CONFIG.LABEL_DEFAULT_LINE_HEIGHT;
}
}
-
+
if(fontSize)
this.node.setAttribute("oryx:fontSize", fontSize);
-
+
return fontSize;
},
-
+
/**
* Get trimmed text length for use with
* getExtentOfChar and getSubStringLength.
@@ -5087,7 +5087,7 @@ ORYX.Core.SVG.Label = Clazz.extend({
*/
getTrimmedTextLength: function(text) {
text = text.strip().gsub(' ', ' ');
-
+
var oldLength;
do {
oldLength = text.length;
@@ -5096,36 +5096,36 @@ ORYX.Core.SVG.Label = Clazz.extend({
return text.length;
},
-
+
/**
* Returns the offset from
- * edge to the label which is
+ * edge to the label which is
* positioned under the edge
* @return {int}
*/
getOffsetBottom: function(){
return this.offsetBottom;
},
-
-
+
+
/**
* Returns the offset from
- * edge to the label which is
+ * edge to the label which is
* positioned over the edge
* @return {int}
*/
getOffsetTop: function(){
return this.offsetTop;
},
-
+
/**
- *
+ *
* @param {Object} obj
*/
deserialize: function(obj, shape){
- if (obj && "undefined" != typeof obj.x && "undefined" != typeof obj.y){
+ if (obj && "undefined" != typeof obj.x && "undefined" != typeof obj.y){
this.setPosition({x:obj.x, y:obj.y});
-
+
if ("undefined" != typeof obj.distance){
var from = shape.dockers[obj.from];
var to = shape.dockers[obj.to];
@@ -5146,25 +5146,25 @@ ORYX.Core.SVG.Label = Clazz.extend({
})
}
}
-
+
if (obj.left) this.anchorLeft = true;
if (obj.right) this.anchorRight = true;
if (obj.top) this.anchorTop = true;
if (obj.bottom) this.anchorBottom = true;
if (obj.valign) this.verticalAlign(obj.valign);
if (obj.align) this.horizontalAlign(obj.align);
-
+
} else if (obj && "undefined" != typeof obj.edge){
this.setEdgePosition(obj.edge);
}
},
/**
- *
+ *
* @return {Object}
*/
serialize: function(){
-
+
// On edge position
if (this.getEdgePosition()){
if (this.getOriginEdgePosition() !== this.getEdgePosition()){
@@ -5173,7 +5173,7 @@ ORYX.Core.SVG.Label = Clazz.extend({
return null;
}
}
-
+
// On self defined position
if (this.position){
var pos = {x: this.position.x, y: this.position.y};
@@ -5189,17 +5189,17 @@ ORYX.Core.SVG.Label = Clazz.extend({
if (this.isAnchorBottom() && this.isAnchorBottom() !== this.isOriginAnchorBottom()){
pos.bottom = true;
}
-
+
if (this.getOriginVerticalAlign() !== this.verticalAlign()){
pos.valign = this.verticalAlign();
}
if (this.getOriginHorizontalAlign() !== this.horizontalAlign()){
pos.align = this.horizontalAlign();
}
-
+
return pos;
}
-
+
// On reference point which is interesting for edges
if (this.getReferencePoint()){
var ref = this.getReferencePoint();
@@ -5216,7 +5216,7 @@ ORYX.Core.SVG.Label = Clazz.extend({
}
return null;
},
-
+
toString: function() { return "Label " + this.id }
});/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
@@ -5234,7 +5234,7 @@ ORYX.Core.SVG.Label = Clazz.extend({
if(!ORYX) {var ORYX = {};}
if(!ORYX.Core) {ORYX.Core = {};}
if(!ORYX.Core.Math) {ORYX.Core.Math = {};}
-
+
/**
* Calculate the middle point between two given points
* @param {x:double, y:double} point1
@@ -5247,12 +5247,12 @@ ORYX.Core.Math.midPoint = function(point1, point2) {
y: (point1.y + point2.y) / 2.0
}
}
-
+
/**
* Returns a TRUE if the point is over a line (defined by
* point1 and point 2). In Addition a threshold can be set,
* which defines the weight of those line.
- *
+ *
* @param {int} pointX - Point X
* @param {int} pointY - Point Y
* @param {int} lPoint1X - Line first Point X
@@ -5265,7 +5265,7 @@ ORYX.Core.Math.midPoint = function(point1, point2) {
ORYX.Core.Math.isPointInLine = function (pointX, pointY, lPoint1X, lPoint1Y, lPoint2X, lPoint2Y, offset) {
offset = offset ? Math.abs(offset) : 1;
-
+
// Check if the edge is vertical
if(Math.abs(lPoint1X-lPoint2X)<=offset && Math.abs(pointX-lPoint1X)<=offset && pointY-Math.max(lPoint1Y, lPoint2Y)<=offset && Math.min(lPoint1Y, lPoint2Y)-pointY<=offset) {
return true
@@ -5283,28 +5283,28 @@ ORYX.Core.Math.isPointInLine = function (pointX, pointY, lPoint1X, lPoint1Y, lPo
if(pointY > Math.max(lPoint1Y, lPoint2Y) || pointY < Math.min(lPoint1Y, lPoint2Y)) {
return false
}
-
+
var s = (lPoint1Y - lPoint2Y) / (lPoint1X - lPoint2X);
-
+
return Math.abs(pointY - ((s * pointX) + lPoint1Y - s * lPoint1X)) < offset
}
/**
* Get a boolean if the point is in the polygone
- *
+ *
*/
ORYX.Core.Math.isPointInEllipse = function (pointX, pointY, cx, cy, rx, ry) {
if(cx === undefined || cy === undefined || rx === undefined || ry === undefined) {
throw "ORYX.Core.Math.isPointInEllipse needs a ellipse with these properties: x, y, radiusX, radiusY"
- }
-
+ }
+
var tx = (pointX - cx) / rx;
var ty = (pointY - cy) / ry;
-
+
return tx * tx + ty * ty < 1.0;
}
-
+
/**
* Get a boolean if the point is in the polygone
* @param {int} pointX
@@ -5316,18 +5316,18 @@ ORYX.Core.Math.isPointInPolygone = function(pointX, pointY, polygone){
if (arguments.length < 3) {
throw "ORYX.Core.Math.isPointInPolygone needs two arguments"
}
-
+
var lastIndex = polygone.length-1;
-
+
if (polygone[0] !== polygone[lastIndex - 1] || polygone[1] !== polygone[lastIndex]) {
polygone.push(polygone[0]);
polygone.push(polygone[1]);
}
-
+
var crossings = 0;
var x1, y1, x2, y2, d;
-
+
for (var i = 0; i < polygone.length - 3; ) {
x1=polygone[i];
y1=polygone[++i];
@@ -5347,9 +5347,9 @@ ORYX.Core.Math.isPointInPolygone = function(pointX, pointY, polygone){
}
/**
- * Calculates the distance between a point and a line. It is also testable, if
+ * Calculates the distance between a point and a line. It is also testable, if
* the distance orthogonal to the line, matches the segment of the line.
- *
+ *
* @param {float} lineP1
* The starting point of the line segment
* @param {float} lineP2
@@ -5360,27 +5360,27 @@ ORYX.Core.Math.isPointInPolygone = function(pointX, pointY, polygone){
* Flag to signal if only the segment of the line shell be evaluated.
*/
ORYX.Core.Math.distancePointLinie = function(
- lineP1,
- lineP2,
- point,
+ lineP1,
+ lineP2,
+ point,
toSegmentOnly) {
-
- var intersectionPoint =
- ORYX.Core.Math.getPointOfIntersectionPointLine(lineP1,
- lineP2,
- point,
+
+ var intersectionPoint =
+ ORYX.Core.Math.getPointOfIntersectionPointLine(lineP1,
+ lineP2,
+ point,
toSegmentOnly);
-
+
if(!intersectionPoint) {
return null;
}
-
+
return ORYX.Core.Math.getDistancePointToPoint(point, intersectionPoint);
};
/**
* Calculates the distance between two points.
- *
+ *
* @param {point} point1
* @param {point} point2
*/
@@ -5390,7 +5390,7 @@ ORYX.Core.Math.getDistancePointToPoint = function(point1, point2) {
/**
* Calculates the relative distance of a point which is between two other points.
- *
+ *
* @param {point} between1
* @param {point} between2
* @param {point} point
@@ -5404,13 +5404,13 @@ ORYX.Core.Math.getDistanceBetweenTwoPoints = function(between1, between2, point)
/**
* Returns true, if the point is of the left hand
* side of the regarding the line.
- *
+ *
* @param {point} lineP1 Line first point
* @param {point} lineP2 Line second point
* @param {point} point
*/
ORYX.Core.Math.pointIsLeftOfLine = function(lineP1, lineP2, point){
-
+
var vec1 = ORYX.Core.Math.getVector(lineP1, lineP2);
var vec2 = ORYX.Core.Math.getVector(lineP1, point);
// if the cross produkt is more than 0
@@ -5419,20 +5419,20 @@ ORYX.Core.Math.pointIsLeftOfLine = function(lineP1, lineP2, point){
/**
* Calculates the a point which is relatively between two other points.
- *
+ *
* @param {point} point1
* @param {point} point2
* @param {number} relative Relative which is between 0 and 1
*/
ORYX.Core.Math.getPointBetweenTwoPoints = function(point1, point2, relative) {
relative = Math.max(Math.min(relative || 0, 1), 0);
-
+
if (relative === 0){
return point1;
} else if (relative === 1){
return point2;
}
-
+
return {
x: point1.x + ((point2.x - point1.x) * relative),
y: point1.y + ((point2.y - point1.y) * relative)
@@ -5454,20 +5454,20 @@ ORYX.Core.Math.getVector = function(point1, point2){
}
/**
- * Returns the an identity vector of the given vector,
+ * Returns the an identity vector of the given vector,
* which has the length ot one.
*
* @param {point} vector
- * or
+ * or
* @param {point} point1
* @param {point} point2
*/
ORYX.Core.Math.getIdentityVector = function(vector){
-
+
if (arguments.length == 2){
vector = ORYX.Core.Math.getVector(arguments[0], arguments[1]);
}
-
+
var length = Math.sqrt((vector.x*vector.x)+(vector.y*vector.y))
return {
x: vector.x / (length || 1),
@@ -5488,7 +5488,7 @@ ORYX.Core.Math.getOrthogonalIdentityVector = function(point1, point2){
/**
* Returns the intersection point of a line and a point that defines a line
* orthogonal to the given line.
- *
+ *
* @param {float} lineP1
* The starting point of the line segment
* @param {float} lineP2
@@ -5499,42 +5499,42 @@ ORYX.Core.Math.getOrthogonalIdentityVector = function(point1, point2){
* Flag to signal if only the segment of the line shell be evaluated.
*/
ORYX.Core.Math.getPointOfIntersectionPointLine = function(
- lineP1,
- lineP2,
- point,
+ lineP1,
+ lineP2,
+ point,
onSegmentOnly) {
- /*
+ /*
* [P3 - P1 - u(P2 - P1)] dot (P2 - P1) = 0
* u =((x3-x1)(x2-x1)+(y3-y1)(y2-y1))/(p2-p1)??
*/
- var denominator = Math.pow(lineP2.x - lineP1.x, 2)
+ var denominator = Math.pow(lineP2.x - lineP1.x, 2)
+ Math.pow(lineP2.y - lineP1.y, 2);
if(denominator == 0) {
return undefined;
}
-
- var u = ((point.x - lineP1.x) * (lineP2.x - lineP1.x)
+
+ var u = ((point.x - lineP1.x) * (lineP2.x - lineP1.x)
+ (point.y - lineP1.y) * (lineP2.y - lineP1.y))
/ denominator;
-
+
if(onSegmentOnly) {
if (!(0 <= u && u <= 1)) {
return undefined;
}
}
-
+
pointOfIntersection = new Object();
pointOfIntersection.x = lineP1.x + u * (lineP2.x - lineP1.x);
- pointOfIntersection.y = lineP1.y + u * (lineP2.y - lineP1.y);
-
- return pointOfIntersection;
+ pointOfIntersection.y = lineP1.y + u * (lineP2.y - lineP1.y);
+
+ return pointOfIntersection;
};
/**
* Translated the point with the given matrix.
* @param {Point} point
- * @param {Matrix} matrix
+ * @param {Matrix} matrix
* @return {Object} Includes x, y
*/
ORYX.Core.Math.getTranslatedPoint = function(point, matrix){
@@ -5579,7 +5579,7 @@ ORYX.Core.Math.getDeterminant = function(m){
}
/**
- * Returns the bounding box of the given node. Translates the
+ * Returns the bounding box of the given node. Translates the
* origin bounding box with the tranlation matrix.
* @param {SVGElement} node
* @return {Object} Includes x, y, width, height
@@ -5591,7 +5591,7 @@ ORYX.Core.Math.getTranslatedBoundingBox = function(node){
var ll = ORYX.Core.Math.getTranslatedPoint({x:bb.x, y:bb.y+bb.height}, matrix);
var ur = ORYX.Core.Math.getTranslatedPoint({x:bb.x+bb.width, y:bb.y}, matrix);
var lr = ORYX.Core.Math.getTranslatedPoint({x:bb.x+bb.width, y:bb.y+bb.height}, matrix);
-
+
var minPoint = {
x: Math.min(ul.x, ll.x, ur.x, lr.x),
y: Math.min(ul.y, ll.y, ur.y, lr.y)
@@ -5622,7 +5622,7 @@ ORYX.Core.Math.getAngle = function(p1, p2){
var angle = Math.asin(Math.sqrt(Math.pow(p1.y-p2.y, 2))
/(Math.sqrt(Math.pow(p2.x-p1.x, 2)+Math.pow(p1.y-p2.y, 2))))
*180/Math.PI;
-
+
if(p2.x >= p1.x && p2.y <= p1.y)
return angle;
else if(p2.x < p1.x && p2.y <= p1.y)
@@ -5638,9 +5638,9 @@ ORYX.Core.Math.getAngle = function(p1, p2){
* Implementation of the cohen-sutherland algorithm
*/
new function(){
-
+
var RIGHT = 2, TOP = 8, BOTTOM = 4, LEFT = 1;
-
+
function computeOutCode (x, y, xmin, ymin, xmax, ymax) {
var code = 0;
if (y > ymax)
@@ -5653,7 +5653,7 @@ new function(){
code |= LEFT;
return code;
}
-
+
/**
* Returns TRUE if the rectangle is over the edge and has intersection points or includes it
* @param {Object} x1 Point A of the line
@@ -5668,11 +5668,11 @@ new function(){
ORYX.Core.Math.isRectOverLine = function(x1, y1, x2, y2, xmin, ymin, xmax, ymax){
return !!ORYX.Core.Math.clipLineOnRect.apply(ORYX.Core.Math, arguments);
}
-
+
/**
- * Returns the clipped line on the given rectangle. If there is
+ * Returns the clipped line on the given rectangle. If there is
* no intersection, it will return NULL.
- *
+ *
* @param {Object} x1 Point A of the line
* @param {Object} y1
* @param {Object} x2 Point B of the line
@@ -5686,11 +5686,11 @@ new function(){
//Outcodes for P0, P1, and whatever point lies outside the clip rectangle
var outcode0, outcode1, outcodeOut, hhh = 0;
var accept = false, done = false;
-
+
//compute outcodes
outcode0 = computeOutCode(x1, y1, xmin, ymin, xmax, ymax);
outcode1 = computeOutCode(x2, y2, xmin, ymin, xmax, ymax);
-
+
do {
if ((outcode0 | outcode1) == 0 ){
accept = true;
@@ -5718,7 +5718,7 @@ new function(){
y = y1 + (y2 - y1) * (xmin - x1)/(x2 - x1);
x = xmin;
}
-
+
//Now we move outside point to intersection point to clip
//and get ready for next pass.
if (outcodeOut == outcode0) {
@@ -5733,7 +5733,7 @@ new function(){
}
hhh ++;
} while (done != true && hhh < 5000);
-
+
if(accept) {
return {a:{x:x1, y:y1}, b:{x:x2, y:y2}};
}
@@ -5763,7 +5763,7 @@ if(!ORYX.Core.StencilSet) {ORYX.Core.StencilSet = {};}
* Class Stencil
* uses Prototpye 1.5.0
* uses Inheritance
- *
+ *
* This class represents one stencil of a stencil set.
*/
ORYX.Core.StencilSet.Stencil = {
@@ -5773,29 +5773,29 @@ ORYX.Core.StencilSet.Stencil = {
*/
construct: function(jsonStencil, namespace, source, stencilSet, propertyPackages, defaultPosition) {
arguments.callee.$.construct.apply(this, arguments); // super();
-
+
// check arguments and set defaults.
if(!jsonStencil) throw "Stencilset seems corrupt.";
if(!namespace) throw "Stencil does not provide namespace.";
if(!source) throw "Stencil does not provide SVG source.";
if(!stencilSet) throw "Fatal internal error loading stencilset.";
//if(!propertyPackages) throw "Fatal internal error loading stencilset.";
-
+
this._source = source;
this._jsonStencil = jsonStencil;
this._stencilSet = stencilSet;
this._namespace = namespace;
this._propertyPackages = propertyPackages;
-
- if(defaultPosition && !this._jsonStencil.position)
+
+ if(defaultPosition && !this._jsonStencil.position)
this._jsonStencil.position = defaultPosition;
-
+
this._view;
this._properties = new Hash();
// check stencil consistency and set defaults.
/*with(this._jsonStencil) {
-
+
if(!type) throw "Stencil does not provide type.";
if((type != "edge") && (type != "node"))
throw "Stencil type must be 'edge' or 'node'.";
@@ -5809,7 +5809,7 @@ ORYX.Core.StencilSet.Stencil = {
// add id of stencil to its roles
roles.push(id);
}*/
-
+
//init all JSON values
if(!this._jsonStencil.type || !(this._jsonStencil.type === "edge" || this._jsonStencil.type === "node")) {
throw "ORYX.Core.StencilSet.Stencil(construct): Type is not defined.";
@@ -5824,7 +5824,7 @@ ORYX.Core.StencilSet.Stencil = {
if(!this._jsonStencil.description) { this._jsonStencil.description = ""; };
if(!this._jsonStencil.groups) { this._jsonStencil.groups = []; }
if(!this._jsonStencil.roles) { this._jsonStencil.roles = []; }
-
+
//add id of stencil to its roles
this._jsonStencil.roles.push(this._jsonStencil.id);
@@ -5840,39 +5840,39 @@ ORYX.Core.StencilSet.Stencil = {
this._jsonStencil.id = namespace + this._jsonStencil.id;
this.postProcessProperties();
-
+
// init serialize callback
if(!this._jsonStencil.serialize) {
this._jsonStencil.serialize = {};
//this._jsonStencil.serialize = function(shape, data) { return data;};
}
-
+
// init deserialize callback
if(!this._jsonStencil.deserialize) {
this._jsonStencil.deserialize = {};
//this._jsonStencil.deserialize = function(shape, data) { return data;};
}
-
+
// init layout callback
if(!this._jsonStencil.layout) {
this._jsonStencil.layout = []
//this._jsonStencil.layout = function() {return true;}
}
-
+
//TODO does not work correctly, if the url does not exist
//How to guarantee that the view is loaded correctly before leaving the constructor???
var url = source + "view/" + jsonStencil.view;
// override content type when this is webkit.
-
+
if(this._jsonStencil.view.trim().match(/)) {
- var parser = new DOMParser();
+ var parser = new DOMParser();
var xml = parser.parseFromString( this._jsonStencil.view ,"text/xml");
-
+
//check if result is a SVG document
if( ORYX.Editor.checkClassType( xml.documentElement, SVGSVGElement )) {
-
+
this._view = xml.documentElement;
-
+
} else {
throw "ORYX.Core.StencilSet.Stencil(_loadSVGOnSuccess): The response is not a SVG document."
}
@@ -5890,20 +5890,20 @@ ORYX.Core.StencilSet.Stencil = {
// init property packages
if(this._jsonStencil.propertyPackages && this._jsonStencil.propertyPackages instanceof Array) {
-
+
this._jsonStencil.propertyPackages.each((function(ppId) {
var pp = this._propertyPackages[ppId];
-
+
if(pp) {
pp.each((function(prop){
var oProp = new ORYX.Core.StencilSet.Property(prop, this._namespace, this);
this._properties[oProp.prefix() + "-" + oProp.id()] = oProp;
-
+
}).bind(this));
}
}).bind(this));
}
-
+
// init properties
if(this._jsonStencil.properties && this._jsonStencil.properties instanceof Array) {
this._jsonStencil.properties.each((function(prop) {
@@ -5937,7 +5937,7 @@ ORYX.Core.StencilSet.Stencil = {
id: function() {
return this._jsonStencil.id;
},
-
+
idWithoutNs: function(){
return this.id().replace(this.namespace(),"");
},
@@ -5949,11 +5949,11 @@ ORYX.Core.StencilSet.Stencil = {
description: function() {
return ORYX.Core.StencilSet.getTranslation(this._jsonStencil, "description");
},
-
+
groups: function() {
return ORYX.Core.StencilSet.getTranslation(this._jsonStencil, "groups");
},
-
+
position: function() {
return (isNaN(this._jsonStencil.position) ? 0 : this._jsonStencil.position);
},
@@ -5965,20 +5965,20 @@ ORYX.Core.StencilSet.Stencil = {
icon: function() {
return this._jsonStencil.icon;
},
-
+
fixedAspectRatio: function() {
return this._jsonStencil.fixedAspectRatio === true;
},
-
+
hasMultipleRepositoryEntries: function() {
return (this.getRepositoryEntries().length > 0);
},
-
+
getRepositoryEntries: function() {
return (this._jsonStencil.repositoryEntries) ?
$A(this._jsonStencil.repositoryEntries) : $A([]);
},
-
+
properties: function() {
return this._properties.values();
},
@@ -5990,7 +5990,7 @@ ORYX.Core.StencilSet.Stencil = {
roles: function() {
return this._jsonStencil.roles;
},
-
+
defaultAlign: function() {
if(!this._jsonStencil.defaultAlign)
return "east";
@@ -6001,12 +6001,12 @@ ORYX.Core.StencilSet.Stencil = {
return this._jsonStencil.serialize;
//return this._jsonStencil.serialize(shape, data);
},
-
+
deserialize: function(shape, data) {
return this._jsonStencil.deserialize;
//return this._jsonStencil.deserialize(shape, data);
},
-
+
// in which case is targetShape used?
// layout: function(shape, targetShape) {
// return this._jsonStencil.layout(shape, targetShape);
@@ -6015,14 +6015,14 @@ ORYX.Core.StencilSet.Stencil = {
layout: function(shape) {
return this._jsonStencil.layout
},
-
+
addProperty: function(property, namespace) {
if(property && namespace) {
var oProp = new ORYX.Core.StencilSet.Property(property, namespace, this);
this._properties[oProp.prefix() + "-" + oProp.id()] = oProp;
}
},
-
+
removeProperty: function(propertyId) {
if(propertyId) {
var oProp = this._properties.values().find(function(prop) {
@@ -6034,24 +6034,24 @@ ORYX.Core.StencilSet.Stencil = {
},
_loadSVGOnSuccess: function(result) {
-
+
var xml = null;
-
+
/*
* We want to get a dom object for the requested file. Unfortunately,
* safari has some issues here. this is meant as a fallback for all
* browsers that don't recognize the svg mimetype as XML but support
* data: urls on Ajax calls.
*/
-
+
// responseXML != undefined.
// if(!(result.responseXML))
-
+
// get the dom by data: url.
// xml = _evenMoreEvilHack(result.responseText, 'text/xml');
-
+
// else
-
+
// get it the usual way.
xml = result.responseXML;
@@ -6059,7 +6059,7 @@ ORYX.Core.StencilSet.Stencil = {
if( ORYX.Editor.checkClassType( xml.documentElement, SVGSVGElement )) {
this._view = xml.documentElement;
-
+
} else {
throw "ORYX.Core.StencilSet.Stencil(_loadSVGOnSuccess): The response is not a SVG document."
}
@@ -6081,12 +6081,12 @@ ORYX.Core.StencilSet.Stencil = Clazz.extend(ORYX.Core.StencilSet.Stencil);
* @param {Object} contentType
*/
function _evenMoreEvilHack(str, contentType) {
-
+
/*
* This even more evil hack was taken from
* http://web-graphics.com/mtarchive/001606.php#chatty004999
*/
-
+
if (window.ActiveXObject) {
var d = new ActiveXObject("MSXML.DomDocument");
d.loadXML(str);
@@ -6109,27 +6109,27 @@ function _evenMoreEvilHack(str, contentType) {
* @param {Object} result the xml document object.
*/
function _evilSafariHack(serializedXML) {
-
+
/*
* The Dave way. Taken from:
* http://web-graphics.com/mtarchive/001606.php
- *
+ *
* There is another possibility to parse XML in Safari, by implementing
* the DOMParser in javascript. However, in the latest nightlies of
* WebKit, DOMParser is already available, but still buggy. So, this is
* the best compromise for the time being.
- */
-
+ */
+
var xml = serializedXML;
var url = "data:text/xml;charset=utf-8," + encodeURIComponent(xml);
var dom = null;
-
+
// your standard AJAX stuff
var req = new XMLHttpRequest();
req.open("GET", url);
req.onload = function() { dom = req.responseXML; }
req.send(null);
-
+
return dom;
}
/*
@@ -6167,23 +6167,23 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
*/
construct: function(jsonProp, namespace, stencil){
arguments.callee.$.construct.apply(this, arguments);
-
+
this._jsonProp = jsonProp || ORYX.Log.error("Parameter jsonProp is not defined.");
this._namespace = namespace || ORYX.Log.error("Parameter namespace is not defined.");
this._stencil = stencil || ORYX.Log.error("Parameter stencil is not defined.");
-
+
this._items = {};
this._complexItems = {};
-
- // Flag to indicate whether or not the property should be hidden
+
+ // Flag to indicate whether or not the property should be hidden
// This can be for example when the stencil set is upgraded, but the model
// has a value for that specific property filled in which we still want to show.
// If the value is missing, the property can simply be not shown.
this._hidden = false;
-
+
jsonProp.id = jsonProp.id || ORYX.Log.error("ORYX.Core.StencilSet.Property(construct): Id is not defined.");
jsonProp.id = jsonProp.id.toLowerCase();
-
+
if (!jsonProp.type) {
ORYX.Log.info("Type is not defined for stencil '%0', id '%1'. Falling back to 'String'.", stencil, jsonProp.id);
jsonProp.type = "string";
@@ -6191,14 +6191,14 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
else {
jsonProp.type = jsonProp.type.toLowerCase();
}
-
+
jsonProp.prefix = jsonProp.prefix || "oryx";
jsonProp.title = jsonProp.title || "";
jsonProp.value = jsonProp.value || "";
jsonProp.description = jsonProp.description || "";
jsonProp.readonly = jsonProp.readonly || false;
jsonProp.optional = jsonProp.optional !== false;
-
+
//init refToView
if (this._jsonProp.refToView) {
if (!(this._jsonProp.refToView instanceof Array)) {
@@ -6208,75 +6208,75 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
else {
this._jsonProp.refToView = [];
}
-
+
var globalMin = this.getMinForType(jsonProp.type);
if (jsonProp.min === undefined || jsonProp.min === null) {
jsonProp.min =globalMin;
} else if (jsonProp.min < globalMin) {
jsonProp.min = globalMin;
}
-
+
var globalMax = this.getMaxForType(jsonProp.type);
if (jsonProp.max === undefined || jsonProp.max === null) {
jsonProp.max = globalMax;
} else if (jsonProp.max > globalMax) {
jsonProp.min = globalMax;
}
-
+
if (!jsonProp.fillOpacity) {
jsonProp.fillOpacity = false;
}
-
+
if ("number" != typeof jsonProp.lightness) {
jsonProp.lightness = 1;
} else {
jsonProp.lightness = Math.max(0, Math.min(1, jsonProp.lightness));
}
-
+
if (!jsonProp.strokeOpacity) {
jsonProp.strokeOpacity = false;
}
-
+
if (jsonProp.length === undefined || jsonProp.length === null) {
jsonProp.length = Number.MAX_VALUE;
}
-
+
if (!jsonProp.wrapLines) {
jsonProp.wrapLines = false;
}
-
+
if (!jsonProp.dateFormat) {
jsonProp.dateFormat = ORYX.I18N.PropertyWindow.dateFormat || "m/d/y";
}
-
+
if (!jsonProp.fill) {
jsonProp.fill = false;
}
-
+
if (!jsonProp.stroke) {
jsonProp.stroke = false;
}
-
+
if(!jsonProp.inverseBoolean) {
jsonProp.inverseBoolean = false;
}
-
+
if(!jsonProp.directlyEditable && jsonProp.directlyEditable != false) {
jsonProp.directlyEditable = true;
}
-
+
if(jsonProp.visible !== false) {
jsonProp.visible = true;
}
-
+
if(jsonProp.isList !== true) {
jsonProp.isList = false;
-
+
if(!jsonProp.list || !(jsonProp.list instanceof Array)) {
jsonProp.list = [];
- }
+ }
}
-
+
if(!jsonProp.category) {
if (jsonProp.popular) {
jsonProp.category = "popular";
@@ -6284,11 +6284,11 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
jsonProp.category = "others";
}
}
-
+
if(!jsonProp.alwaysAppearInMultiselect) {
jsonProp.alwaysAppearInMultiselect = false;
}
-
+
if (jsonProp.type === ORYX.CONFIG.TYPE_CHOICE) {
if (jsonProp.items && jsonProp.items instanceof Array) {
jsonProp.items.each((function(jsonItem){
@@ -6301,7 +6301,7 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
}
// extended by Kerstin (start)
}
- else
+ else
if (jsonProp.type === ORYX.CONFIG.TYPE_COMPLEX || jsonProp.type == ORYX.CONFIG.TYPE_MULTIPLECOMPLEX) {
if (jsonProp.complexItems && jsonProp.complexItems instanceof Array) {
jsonProp.complexItems.each((function(jsonComplexItem){
@@ -6311,14 +6311,14 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
}
// extended by Kerstin (end)
},
-
+
getMinForType : function(type) {
if (type.toLowerCase() == ORYX.CONFIG.TYPE_INTEGER) {
return -Math.pow(2,31)
} else {
return -Number.MAX_VALUE+1;
}
- },
+ },
getMaxForType : function(type) {
if (type.toLowerCase() == ORYX.CONFIG.TYPE_INTEGER) {
return Math.pow(2,31)-1
@@ -6326,7 +6326,7 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
return Number.MAX_VALUE;
}
},
-
+
/**
* @param {ORYX.Core.StencilSet.Property} property
* @return {Boolean} True, if property has the same namespace and id.
@@ -6335,67 +6335,67 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
return (this._namespace === property.namespace() &&
this.id() === property.id()) ? true : false;
},
-
+
namespace: function(){
return this._namespace;
},
-
+
stencil: function(){
return this._stencil;
},
-
+
id: function(){
return this._jsonProp.id;
},
-
+
prefix: function(){
return this._jsonProp.prefix;
},
-
+
type: function(){
return this._jsonProp.type;
},
-
+
inverseBoolean: function() {
return this._jsonProp.inverseBoolean;
},
-
+
category: function() {
return this._jsonProp.category;
},
-
+
setCategory: function(value) {
this._jsonProp.category = value;
},
-
+
directlyEditable: function() {
return this._jsonProp.directlyEditable;
},
-
+
visible: function() {
return this._jsonProp.visible;
},
-
+
title: function(){
return ORYX.Core.StencilSet.getTranslation(this._jsonProp, "title");
},
-
+
value: function(){
return this._jsonProp.value;
},
-
+
readonly: function(){
return this._jsonProp.readonly;
},
-
+
optional: function(){
return this._jsonProp.optional;
},
-
+
description: function(){
return ORYX.Core.StencilSet.getTranslation(this._jsonProp, "description");
},
-
+
/**
* An optional link to a SVG element so that the property affects the
* graphical representation of the stencil.
@@ -6403,21 +6403,21 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
refToView: function(){
return this._jsonProp.refToView;
},
-
+
/**
* If type is integer or float, min is the lower bounds of value.
*/
min: function(){
return this._jsonProp.min;
},
-
+
/**
* If type ist integer or float, max is the upper bounds of value.
*/
max: function(){
return this._jsonProp.max;
},
-
+
/**
* If type is float, this method returns if the fill-opacity property should
* be set.
@@ -6426,7 +6426,7 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
fillOpacity: function(){
return this._jsonProp.fillOpacity;
},
-
+
/**
* If type is float, this method returns if the stroke-opacity property should
* be set.
@@ -6435,7 +6435,7 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
strokeOpacity: function(){
return this._jsonProp.strokeOpacity;
},
-
+
/**
* If type is string or richtext, length is the maximum length of the text.
* TODO how long can a string be.
@@ -6443,11 +6443,11 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
length: function(){
return this._jsonProp.length ? this._jsonProp.length : Number.MAX_VALUE;
},
-
+
wrapLines: function(){
return this._jsonProp.wrapLines;
},
-
+
/**
* If type is date, dateFormat specifies the format of the date. The format
* specification of the ext library is used:
@@ -6488,7 +6488,7 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
dateFormat: function(){
return this._jsonProp.dateFormat;
},
-
+
/**
* If type is color, this method returns if the fill property should
* be set.
@@ -6497,7 +6497,7 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
fill: function(){
return this._jsonProp.fill;
},
-
+
/**
* Lightness defines the satiation of the color
* 0 is the pure color
@@ -6507,7 +6507,7 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
lightness: function(){
return this._jsonProp.lightness;
},
-
+
/**
* If type is color, this method returns if the stroke property should
* be set.
@@ -6516,7 +6516,7 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
stroke: function(){
return this._jsonProp.stroke;
},
-
+
/**
* If type is choice, items is a hash map with all alternative values
* (PropertyItem objects) with id as keys.
@@ -6524,7 +6524,7 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
items: function(){
return $H(this._items).values();
},
-
+
item: function(value){
if (value) {
return this._items[value.toLowerCase()];
@@ -6532,66 +6532,66 @@ ORYX.Core.StencilSet.Property = Clazz.extend({
return null;
}
},
-
+
toString: function(){
return "Property " + this.title() + " (" + this.id() + ")";
},
-
+
complexItems: function(){
return $H(this._complexItems).values();
},
-
+
complexItem: function(id){
if(id) {
return this._complexItems[id.toLowerCase()];
} else {
return null;
}
-
+
},
-
+
complexAttributeToView: function(){
return this._jsonProp.complexAttributeToView || "";
},
-
+
isList: function() {
return !!this._jsonProp.isList;
},
-
+
getListItems: function() {
return this._jsonProp.list;
},
-
+
/**
- * If type is glossary link, the
+ * If type is glossary link, the
* type of category can be defined where
* the link only can go to.
- * @return {String} The glossary category id
+ * @return {String} The glossary category id
*/
linkableType: function(){
return this._jsonProp.linkableType || "";
},
-
+
alwaysAppearInMultiselect : function() {
return this._jsonProp.alwaysAppearInMultiselect;
},
-
+
popular: function() {
return this._jsonProp.popular || false;
},
-
+
setPopular: function() {
this._jsonProp.popular = true;
},
-
+
hide: function() {
this._hidden = true;
},
-
+
isHidden: function() {
return this._hidden;
}
-
+
});
/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
@@ -6632,16 +6632,16 @@ ORYX.Core.StencilSet.PropertyItem = Clazz.extend({
if(!property) {
throw "ORYX.Core.StencilSet.PropertyItem(construct): Parameter property is not defined.";
}
-
+
this._jsonItem = jsonItem;
this._namespace = namespace;
this._property = property;
-
+
//init all values
if(!jsonItem.value) {
throw "ORYX.Core.StencilSet.PropertyItem(construct): Value is not defined.";
}
-
+
if(this._jsonItem.refToView) {
if(!(this._jsonItem.refToView instanceof Array)) {
this._jsonItem.refToView = [this._jsonItem.refToView];
@@ -6671,7 +6671,7 @@ ORYX.Core.StencilSet.PropertyItem = Clazz.extend({
value: function() {
return this._jsonItem.value;
},
-
+
title: function() {
return ORYX.Core.StencilSet.getTranslation(this._jsonItem, "title");
},
@@ -6679,7 +6679,7 @@ ORYX.Core.StencilSet.PropertyItem = Clazz.extend({
refToView: function() {
return this._jsonItem.refToView;
},
-
+
icon: function() {
return (this._jsonItem.icon) ? this.property().stencil()._source + "icons/" + this._jsonItem.icon : "";
},
@@ -6724,24 +6724,24 @@ ORYX.Core.StencilSet.ComplexPropertyItem = Clazz.extend({
if(!property) {
throw "ORYX.Core.StencilSet.ComplexPropertyItem(construct): Parameter property is not defined.";
}
-
+
this._jsonItem = jsonItem;
this._namespace = namespace;
this._property = property;
this._items = new Hash();
this._complexItems = new Hash();
-
+
//init all values
if(!jsonItem.name) {
throw "ORYX.Core.StencilSet.ComplexPropertyItem(construct): Name is not defined.";
}
-
+
if(!jsonItem.type) {
throw "ORYX.Core.StencilSet.ComplexPropertyItem(construct): Type is not defined.";
} else {
jsonItem.type = jsonItem.type.toLowerCase();
}
-
+
if(jsonItem.type === ORYX.CONFIG.TYPE_CHOICE) {
if(jsonItem.items && jsonItem.items instanceof Array) {
jsonItem.items.each((function(item) {
@@ -6781,35 +6781,35 @@ ORYX.Core.StencilSet.ComplexPropertyItem = Clazz.extend({
name: function() {
return ORYX.Core.StencilSet.getTranslation(this._jsonItem, "name");
},
-
+
id: function() {
return this._jsonItem.id;
},
-
+
type: function() {
return this._jsonItem.type;
},
-
+
optional: function() {
return this._jsonItem.optional;
},
-
+
width: function() {
return this._jsonItem.width;
},
-
+
value: function() {
return this._jsonItem.value;
},
-
+
items: function() {
return this._items.values();
},
-
+
complexItems: function() {
return this._complexItems.values();
},
-
+
disable: function() {
return this._jsonItem.disable;
}
@@ -6832,7 +6832,7 @@ if(!ORYX.Core.StencilSet) {ORYX.Core.StencilSet = {};}
/**
* Class Rules uses Prototpye 1.5.0 uses Inheritance
- *
+ *
* This class implements the API to check the stencil sets' rules.
*/
ORYX.Core.StencilSet.Rules = {
@@ -6846,7 +6846,7 @@ ORYX.Core.StencilSet.Rules = {
this._stencilSets = [];
this._stencils = [];
this._containerStencils = [];
-
+
this._cachedConnectSET = new Hash();
this._cachedConnectSE = new Hash();
this._cachedConnectTE = new Hash();
@@ -6854,23 +6854,23 @@ ORYX.Core.StencilSet.Rules = {
this._cachedCardTE = new Hash();
this._cachedContainPC = new Hash();
this._cachedMorphRS = new Hash();
-
+
this._connectionRules = new Hash();
this._cardinalityRules = new Hash();
this._containmentRules = new Hash();
this._morphingRules = new Hash();
this._layoutRules = new Hash();
},
-
+
/**
* Call this method to initialize the rules for a stencil set and all of its
* active extensions.
- *
+ *
* @param {Object}
* stencilSet
*/
initializeRules: function(stencilSet) {
-
+
var existingSS = this._stencilSets.find(function(ss) {
return (ss.namespace() == stencilSet.namespace());
});
@@ -6879,11 +6879,11 @@ ORYX.Core.StencilSet.Rules = {
var stencilsets = this._stencilSets.clone();
stencilsets = stencilsets.without(existingSS);
stencilsets.push(stencilSet);
-
+
this._stencilSets = [];
this._stencils = [];
this._containerStencils = [];
-
+
this._cachedConnectSET = new Hash();
this._cachedConnectSE = new Hash();
this._cachedConnectTE = new Hash();
@@ -6891,13 +6891,13 @@ ORYX.Core.StencilSet.Rules = {
this._cachedCardTE = new Hash();
this._cachedContainPC = new Hash();
this._cachedMorphRS = new Hash();
-
+
this._connectionRules = new Hash();
this._cardinalityRules = new Hash();
this._containmentRules = new Hash();
this._morphingRules = new Hash();
this._layoutRules = new Hash();
-
+
stencilsets.each(function(ss){
this.initializeRules(ss);
}.bind(this));
@@ -6905,11 +6905,11 @@ ORYX.Core.StencilSet.Rules = {
}
else {
this._stencilSets.push(stencilSet);
-
+
var jsonRules = new Hash(stencilSet.jsonRules());
var namespace = stencilSet.namespace();
var stencils = stencilSet.stencils();
-
+
stencilSet.extensions().values().each(function(extension) {
if(extension.rules) {
if(extension.rules.connectionRules)
@@ -6921,12 +6921,12 @@ ORYX.Core.StencilSet.Rules = {
if(extension.rules.morphingRules)
jsonRules.morphingRules = jsonRules.morphingRules.concat(extension.rules.morphingRules);
}
- if(extension.stencils)
+ if(extension.stencils)
stencils = stencils.concat(extension.stencils);
});
-
+
this._stencils = this._stencils.concat(stencilSet.stencils());
-
+
// init connection rules
var cr = this._connectionRules;
if (jsonRules.connectionRules) {
@@ -6937,10 +6937,10 @@ ORYX.Core.StencilSet.Rules = {
}
}
else {
- if (!cr[namespace + rules.role])
+ if (!cr[namespace + rules.role])
cr[namespace + rules.role] = new Hash();
}
-
+
rules.connects.each((function(connect){
var toRoles = [];
if (connect.to) {
@@ -6956,27 +6956,27 @@ ORYX.Core.StencilSet.Rules = {
}
}).bind(this));
}
-
+
var role, from;
- if (this._isRoleOfOtherNamespace(rules.role))
+ if (this._isRoleOfOtherNamespace(rules.role))
role = rules.role;
- else
+ else
role = namespace + rules.role;
-
- if (this._isRoleOfOtherNamespace(connect.from))
+
+ if (this._isRoleOfOtherNamespace(connect.from))
from = connect.from;
- else
+ else
from = namespace + connect.from;
-
- if (!cr[role][from])
+
+ if (!cr[role][from])
cr[role][from] = toRoles;
- else
+ else
cr[role][from] = cr[role][from].concat(toRoles);
-
+
}).bind(this));
}).bind(this));
}
-
+
// init cardinality rules
var cardr = this._cardinalityRules;
if (jsonRules.cardinalityRules) {
@@ -6988,14 +6988,14 @@ ORYX.Core.StencilSet.Rules = {
else {
cardrKey = namespace + rules.role;
}
-
+
if (!cardr[cardrKey]) {
cardr[cardrKey] = {};
for (i in rules) {
cardr[cardrKey][i] = rules[i];
}
}
-
+
var oe = new Hash();
if (rules.outgoingEdges) {
rules.outgoingEdges.each((function(rule){
@@ -7022,7 +7022,7 @@ ORYX.Core.StencilSet.Rules = {
cardr[cardrKey].incomingEdges = ie;
}).bind(this));
}
-
+
// init containment rules
var conr = this._containmentRules;
if (jsonRules.containmentRules) {
@@ -7048,7 +7048,7 @@ ORYX.Core.StencilSet.Rules = {
}).bind(this));
}).bind(this));
}
-
+
// init morphing rules
var morphr = this._morphingRules;
if (jsonRules.morphingRules) {
@@ -7074,11 +7074,11 @@ ORYX.Core.StencilSet.Rules = {
}).bind(this));
}).bind(this));
}
-
+
// init layouting rules
var layoutRules = this._layoutRules;
if (jsonRules.layoutRules) {
-
+
var getDirections = function(o){
return {
"edgeRole":o.edgeRole||undefined,
@@ -7088,7 +7088,7 @@ ORYX.Core.StencilSet.Rules = {
"l": o["l"]||1
}
}
-
+
jsonRules.layoutRules.each(function(rules){
var layoutKey;
if (this._isRoleOfOtherNamespace(rules.role)) {
@@ -7113,145 +7113,145 @@ ORYX.Core.StencilSet.Rules = {
layoutRules[layoutKey]["outs"] = (rules["outs"]||[]).map(function(e){ return getDirections(e) })
}
}.bind(this));
- }
+ }
}
},
-
+
_getStencilById: function(id) {
return this._stencils.find(function(stencil) {
return stencil.id()==id;
});
},
-
+
_cacheConnect: function(args) {
result = this._canConnect(args);
-
+
if (args.sourceStencil && args.targetStencil) {
var source = this._cachedConnectSET[args.sourceStencil.id()];
-
+
if(!source) {
source = new Hash();
this._cachedConnectSET[args.sourceStencil.id()] = source;
}
-
+
var edge = source[args.edgeStencil.id()];
-
+
if(!edge) {
edge = new Hash();
source[args.edgeStencil.id()] = edge;
}
-
+
edge[args.targetStencil.id()] = result;
-
+
} else if (args.sourceStencil) {
var source = this._cachedConnectSE[args.sourceStencil.id()];
-
+
if(!source) {
source = new Hash();
this._cachedConnectSE[args.sourceStencil.id()] = source;
}
-
+
source[args.edgeStencil.id()] = result;
} else {
var target = this._cachedConnectTE[args.targetStencil.id()];
-
+
if(!target) {
target = new Hash();
this._cachedConnectTE[args.targetStencil.id()] = target;
}
-
+
target[args.edgeStencil.id()] = result;
}
-
+
return result;
},
-
+
_cacheCard: function(args) {
-
+
if(args.sourceStencil) {
var source = this._cachedCardSE[args.sourceStencil.id()]
-
+
if(!source) {
source = new Hash();
this._cachedCardSE[args.sourceStencil.id()] = source;
}
-
+
var max = this._getMaximumNumberOfOutgoingEdge(args);
if(max == undefined)
max = -1;
-
+
source[args.edgeStencil.id()] = max;
- }
-
+ }
+
if(args.targetStencil) {
var target = this._cachedCardTE[args.targetStencil.id()]
-
+
if(!target) {
target = new Hash();
this._cachedCardTE[args.targetStencil.id()] = target;
}
-
+
var max = this._getMaximumNumberOfIncomingEdge(args);
if(max == undefined)
max = -1;
-
+
target[args.edgeStencil.id()] = max;
}
},
-
+
_cacheContain: function(args) {
-
- var result = [this._canContain(args),
+
+ var result = [this._canContain(args),
this._getMaximumOccurrence(args.containingStencil, args.containedStencil)]
-
- if(result[1] == undefined)
+
+ if(result[1] == undefined)
result[1] = -1;
-
+
var children = this._cachedContainPC[args.containingStencil.id()];
-
+
if(!children) {
children = new Hash();
this._cachedContainPC[args.containingStencil.id()] = children;
}
-
+
children[args.containedStencil.id()] = result;
-
+
return result;
},
-
+
/**
* Returns all stencils belonging to a morph group. (calculation result is
* cached)
*/
_cacheMorph: function(role) {
-
+
var morphs = this._cachedMorphRS[role];
-
+
if(!morphs) {
morphs = [];
-
+
if(this._morphingRules.keys().include(role)) {
morphs = this._stencils.select(function(stencil) {
return stencil.roles().include(role);
});
}
-
+
this._cachedMorphRS[role] = morphs;
}
return morphs;
},
-
+
/** Begin connection rules' methods */
-
+
/**
- *
+ *
* @param {Object}
* args sourceStencil: ORYX.Core.StencilSet.Stencil | undefined
* sourceShape: ORYX.Core.Shape | undefined
- *
+ *
* At least sourceStencil or sourceShape has to be specified
- *
+ *
* @return {Array} Array of stencils of edges that can be outgoing edges of
* the source.
*/
@@ -7260,14 +7260,14 @@ ORYX.Core.StencilSet.Rules = {
if(!args.sourceShape && !args.sourceStencil) {
return [];
}
-
+
// init arguments
if(args.sourceShape) {
args.sourceStencil = args.sourceShape.getStencil();
}
-
+
var _edges = [];
-
+
// test each edge, if it can connect to source
this._stencils.each((function(stencil) {
if(stencil.type() === "edge") {
@@ -7283,13 +7283,13 @@ ORYX.Core.StencilSet.Rules = {
},
/**
- *
+ *
* @param {Object}
* args targetStencil: ORYX.Core.StencilSet.Stencil | undefined
* targetShape: ORYX.Core.Shape | undefined
- *
+ *
* At least targetStencil or targetShape has to be specified
- *
+ *
* @return {Array} Array of stencils of edges that can be incoming edges of
* the target.
*/
@@ -7298,14 +7298,14 @@ ORYX.Core.StencilSet.Rules = {
if(!args.targetShape && !args.targetStencil) {
return [];
}
-
+
// init arguments
if(args.targetShape) {
args.targetStencil = args.targetShape.getStencil();
}
-
+
var _edges = [];
-
+
// test each edge, if it can connect to source
this._stencils.each((function(stencil) {
if(stencil.type() === "edge") {
@@ -7319,38 +7319,38 @@ ORYX.Core.StencilSet.Rules = {
return _edges;
},
-
+
/**
- *
+ *
* @param {Object}
* args edgeStencil: ORYX.Core.StencilSet.Stencil | undefined
* edgeShape: ORYX.Core.Edge | undefined targetStencil:
* ORYX.Core.StencilSet.Stencil | undefined targetShape:
* ORYX.Core.Node | undefined
- *
+ *
* At least edgeStencil or edgeShape has to be specified!!!
- *
+ *
* @return {Array} Returns an array of stencils that can be source of the
* specified edge.
*/
sourceStencils: function(args) {
// check arguments
- if(!args ||
+ if(!args ||
!args.edgeShape && !args.edgeStencil) {
return [];
}
-
+
// init arguments
if(args.targetShape) {
args.targetStencil = args.targetShape.getStencil();
}
-
+
if(args.edgeShape) {
args.edgeStencil = args.edgeShape.getStencil();
}
-
+
var _sources = [];
-
+
// check each stencil, if it can be a source
this._stencils.each((function(stencil) {
var newArgs = Object.clone(args);
@@ -7362,38 +7362,38 @@ ORYX.Core.StencilSet.Rules = {
return _sources;
},
-
+
/**
- *
+ *
* @param {Object}
* args edgeStencil: ORYX.Core.StencilSet.Stencil | undefined
* edgeShape: ORYX.Core.Edge | undefined sourceStencil:
* ORYX.Core.StencilSet.Stencil | undefined sourceShape:
* ORYX.Core.Node | undefined
- *
+ *
* At least edgeStencil or edgeShape has to be specified!!!
- *
+ *
* @return {Array} Returns an array of stencils that can be target of the
* specified edge.
*/
targetStencils: function(args) {
// check arguments
- if(!args ||
+ if(!args ||
!args.edgeShape && !args.edgeStencil) {
return [];
}
-
+
// init arguments
if(args.sourceShape) {
args.sourceStencil = args.sourceShape.getStencil();
}
-
+
if(args.edgeShape) {
args.edgeStencil = args.edgeShape.getStencil();
}
-
+
var _targets = [];
-
+
// check stencil, if it can be a target
this._stencils.each((function(stencil) {
var newArgs = Object.clone(args);
@@ -7407,7 +7407,7 @@ ORYX.Core.StencilSet.Rules = {
},
/**
- *
+ *
* @param {Object}
* args edgeStencil: ORYX.Core.StencilSet.Stencil edgeShape:
* ORYX.Core.Edge |undefined sourceStencil:
@@ -7415,20 +7415,20 @@ ORYX.Core.StencilSet.Rules = {
* ORYX.Core.Node |undefined targetStencil:
* ORYX.Core.StencilSet.Stencil | undefined targetShape:
* ORYX.Core.Node |undefined
- *
+ *
* At least source or target has to be specified!!!
- *
+ *
* @return {Boolean} Returns, if the edge can connect source and target.
*/
- canConnect: function(args) {
+ canConnect: function(args) {
// check arguments
if(!args ||
(!args.sourceShape && !args.sourceStencil &&
!args.targetShape && !args.targetStencil) ||
!args.edgeShape && !args.edgeStencil) {
- return false;
+ return false;
}
-
+
// init arguments
if(args.sourceShape) {
args.sourceStencil = args.sourceShape.getStencil();
@@ -7439,12 +7439,12 @@ ORYX.Core.StencilSet.Rules = {
if(args.edgeShape) {
args.edgeStencil = args.edgeShape.getStencil();
}
-
+
var result;
-
+
if(args.sourceStencil && args.targetStencil) {
var source = this._cachedConnectSET[args.sourceStencil.id()];
-
+
if(!source)
result = this._cacheConnect(args);
else {
@@ -7452,7 +7452,7 @@ ORYX.Core.StencilSet.Rules = {
if(!edge)
result = this._cacheConnect(args);
- else {
+ else {
var target = edge[args.targetStencil.id()];
if(target == undefined)
@@ -7461,14 +7461,14 @@ ORYX.Core.StencilSet.Rules = {
result = target;
}
}
- } else if (args.sourceStencil) {
+ } else if (args.sourceStencil) {
var source = this._cachedConnectSE[args.sourceStencil.id()];
-
+
if(!source)
result = this._cacheConnect(args);
else {
var edge = source[args.edgeStencil.id()];
-
+
if(edge == undefined)
result = this._cacheConnect(args);
else
@@ -7476,40 +7476,40 @@ ORYX.Core.StencilSet.Rules = {
}
} else { // args.targetStencil
var target = this._cachedConnectTE[args.targetStencil.id()];
-
+
if(!target)
result = this._cacheConnect(args);
else {
var edge = target[args.edgeStencil.id()];
-
+
if(edge == undefined)
result = this._cacheConnect(args);
else
result = edge;
}
- }
-
+ }
+
// check cardinality
if (result) {
if(args.sourceShape) {
var source = this._cachedCardSE[args.sourceStencil.id()];
-
+
if(!source) {
this._cacheCard(args);
source = this._cachedCardSE[args.sourceStencil.id()];
}
-
+
var max = source[args.edgeStencil.id()];
-
+
if(max == undefined) {
this._cacheCard(args);
}
-
+
max = source[args.edgeStencil.id()];
-
+
if(max != -1) {
result = args.sourceShape.getOutgoingShapes().all(function(cs) {
- if((cs.getStencil().id() === args.edgeStencil.id()) &&
+ if((cs.getStencil().id() === args.edgeStencil.id()) &&
((args.edgeShape) ? cs !== args.edgeShape : true)) {
max--;
return (max > 0) ? true : false;
@@ -7518,24 +7518,24 @@ ORYX.Core.StencilSet.Rules = {
}
});
}
- }
-
+ }
+
if (args.targetShape) {
var target = this._cachedCardTE[args.targetStencil.id()];
-
+
if(!target) {
this._cacheCard(args);
target = this._cachedCardTE[args.targetStencil.id()];
}
-
+
var max = target[args.edgeStencil.id()];
-
+
if(max == undefined) {
this._cacheCard(args);
}
-
+
max = target[args.edgeStencil.id()];
-
+
if(max != -1) {
result = args.targetShape.getIncomingShapes().all(function(cs){
if ((cs.getStencil().id() === args.edgeStencil.id()) &&
@@ -7550,12 +7550,12 @@ ORYX.Core.StencilSet.Rules = {
}
}
}
-
+
return result;
},
-
+
/**
- *
+ *
* @param {Object}
* args edgeStencil: ORYX.Core.StencilSet.Stencil edgeShape:
* ORYX.Core.Edge |undefined sourceStencil:
@@ -7563,9 +7563,9 @@ ORYX.Core.StencilSet.Rules = {
* ORYX.Core.Node |undefined targetStencil:
* ORYX.Core.StencilSet.Stencil | undefined targetShape:
* ORYX.Core.Node |undefined
- *
+ *
* At least source or target has to be specified!!!
- *
+ *
* @return {Boolean} Returns, if the edge can connect source and target.
*/
_canConnect: function(args) {
@@ -7574,9 +7574,9 @@ ORYX.Core.StencilSet.Rules = {
(!args.sourceShape && !args.sourceStencil &&
!args.targetShape && !args.targetStencil) ||
!args.edgeShape && !args.edgeStencil) {
- return false;
+ return false;
}
-
+
// init arguments
if(args.sourceShape) {
args.sourceStencil = args.sourceShape.getStencil();
@@ -7590,7 +7590,7 @@ ORYX.Core.StencilSet.Rules = {
// 1. check connection rules
var resultCR;
-
+
// get all connection rules for this edge
var edgeRules = this._getConnectionRulesOfEdgeStencil(args.edgeStencil);
@@ -7604,7 +7604,7 @@ ORYX.Core.StencilSet.Rules = {
var targetRoles = edgeRules[sourceRole];
if(!targetRoles) {return false;}
-
+
if(args.targetStencil) {
return (targetRoles.any(function(targetRole) {
return args.targetStencil.roles().member(targetRole);
@@ -7621,7 +7621,7 @@ ORYX.Core.StencilSet.Rules = {
});
}
}
-
+
return resultCR;
},
@@ -7635,7 +7635,7 @@ ORYX.Core.StencilSet.Rules = {
},
/**
- *
+ *
* @param {Object}
* args containingStencil: ORYX.Core.StencilSet.Stencil
* containingShape: ORYX.Core.AbstractShape containedStencil:
@@ -7647,30 +7647,30 @@ ORYX.Core.StencilSet.Rules = {
!args.containedStencil && !args.containedShape) {
return false;
}
-
+
// init arguments
if(args.containedShape) {
args.containedStencil = args.containedShape.getStencil();
}
-
+
if(args.containingShape) {
args.containingStencil = args.containingShape.getStencil();
}
-
+
//if(args.containingStencil.type() == 'edge' || args.containedStencil.type() == 'edge')
// return false;
- if(args.containedStencil.type() == 'edge')
+ if(args.containedStencil.type() == 'edge')
return false;
-
+
var childValues;
-
+
var parent = this._cachedContainPC[args.containingStencil.id()];
-
+
if(!parent)
childValues = this._cacheContain(args);
else {
childValues = parent[args.containedStencil.id()];
-
+
if(!childValues)
childValues = this._cacheContain(args);
}
@@ -7695,9 +7695,9 @@ ORYX.Core.StencilSet.Rules = {
}
}
},
-
+
/**
- *
+ *
* @param {Object}
* args containingStencil: ORYX.Core.StencilSet.Stencil
* containingShape: ORYX.Core.AbstractShape containedStencil:
@@ -7709,16 +7709,16 @@ ORYX.Core.StencilSet.Rules = {
!args.containedStencil && !args.containedShape) {
return false;
}
-
+
// init arguments
if(args.containedShape) {
args.containedStencil = args.containedShape.getStencil();
}
-
+
if(args.containingShape) {
args.containingStencil = args.containingShape.getStencil();
}
-
+
// if(args.containingShape) {
// if(args.containingShape instanceof ORYX.Core.Edge) {
// // edges cannot contain other shapes
@@ -7726,9 +7726,9 @@ ORYX.Core.StencilSet.Rules = {
// }
// }
-
+
var result;
-
+
// check containment rules
result = args.containingStencil.roles().any((function(role) {
var roles = this._containmentRules[role];
@@ -7740,24 +7740,24 @@ ORYX.Core.StencilSet.Rules = {
return false;
}
}).bind(this));
-
+
return result;
},
-
+
/** End containment rules' methods */
-
-
+
+
/** Begin morphing rules' methods */
-
+
/**
- *
+ *
* @param {Object}
- * args
- * stencil: ORYX.Core.StencilSet.Stencil | undefined
+ * args
+ * stencil: ORYX.Core.StencilSet.Stencil | undefined
* shape: ORYX.Core.Shape | undefined
- *
+ *
* At least stencil or shape has to be specified
- *
+ *
* @return {Array} Array of stencils that the passed stencil/shape can be
* transformed to (including the current stencil itself)
*/
@@ -7766,12 +7766,12 @@ ORYX.Core.StencilSet.Rules = {
if(!args.stencil && !args.shape) {
return [];
}
-
+
// init arguments
if(args.shape) {
args.stencil = args.shape.getStencil();
}
-
+
var _morphStencils = [];
args.stencil.roles().each(function(role) {
this._cacheMorph(role).each(function(stencil) {
@@ -7785,7 +7785,7 @@ ORYX.Core.StencilSet.Rules = {
_morphStencils = _morphStencils.uniq().sort(function(a,b){ return baseMorphs.include(a)&&!baseMorphs.include(b) ? -1 : (baseMorphs.include(b)&&!baseMorphs.include(a) ? 1 : 0)})
return _morphStencils;
},
-
+
/**
* @return {Array} An array of all base morph stencils
*/
@@ -7798,40 +7798,40 @@ ORYX.Core.StencilSet.Rules = {
});
return _baseMorphs;
},
-
+
/**
* Returns true if there are morphing rules defines
- * @return {boolean}
+ * @return {boolean}
*/
containsMorphingRules: function(){
return this._stencilSets.any(function(ss){ return !!ss.jsonRules().morphingRules});
},
-
+
/**
- *
+ *
* @param {Object}
- * args
+ * args
* sourceStencil:
- * ORYX.Core.StencilSet.Stencil | undefined
+ * ORYX.Core.StencilSet.Stencil | undefined
* sourceShape:
- * ORYX.Core.Node |undefined
+ * ORYX.Core.Node |undefined
* targetStencil:
- * ORYX.Core.StencilSet.Stencil | undefined
+ * ORYX.Core.StencilSet.Stencil | undefined
* targetShape:
* ORYX.Core.Node |undefined
- *
- *
- * @return {Stencil} Returns, the stencil for the connecting edge
+ *
+ *
+ * @return {Stencil} Returns, the stencil for the connecting edge
* or null if connection is not possible
*/
- connectMorph: function(args) {
+ connectMorph: function(args) {
// check arguments
if(!args ||
(!args.sourceShape && !args.sourceStencil &&
!args.targetShape && !args.targetStencil)) {
- return false;
+ return false;
}
-
+
// init arguments
if(args.sourceShape) {
args.sourceStencil = args.sourceShape.getStencil();
@@ -7839,21 +7839,21 @@ ORYX.Core.StencilSet.Rules = {
if(args.targetShape) {
args.targetStencil = args.targetShape.getStencil();
}
-
+
var incoming = this.incomingEdgeStencils(args);
var outgoing = this.outgoingEdgeStencils(args);
-
+
var edgeStencils = incoming.select(function(e) { return outgoing.member(e); }); // intersection of sets
var baseEdgeStencils = this.baseMorphs().select(function(e) { return edgeStencils.member(e); }); // again: intersection of sets
-
+
if(baseEdgeStencils.size()>0)
return baseEdgeStencils[0]; // return any of the possible base morphs
else if(edgeStencils.size()>0)
return edgeStencils[0]; // return any of the possible stencils
-
+
return null; //connection not possible
},
-
+
/**
* Return true if the stencil should be located in the shape menu
* @param {ORYX.Core.StencilSet.Stencil} morph
@@ -7864,28 +7864,28 @@ ORYX.Core.StencilSet.Rules = {
return this._stencilSets.any(function(ss){
return ss.jsonRules().morphingRules
.any(function(r){
- return stencil.roles().include(ss.namespace() + r.role)
+ return stencil.roles().include(ss.namespace() + r.role)
&& r.showInShapeMenu !== false;
})
});
},
-
+
preserveBounds: function(stencil) {
return this._stencilSets.any(function(ss) {
return ss.jsonRules().morphingRules.any(function(r) {
-
-
- return stencil.roles().include(ss.namespace() + r.role)
+
+
+ return stencil.roles().include(ss.namespace() + r.role)
&& r.preserveBounds;
})
})
},
-
+
/** End morphing rules' methods */
/** Begin layouting rules' methods */
-
+
/**
* Returns a set on "in" and "out" layouting rules for a given shape
* @param {Object} shape
@@ -7893,11 +7893,11 @@ ORYX.Core.StencilSet.Rules = {
* @return {Object} "in" and "out" with a default value of {"t":1, "r":1, "b":1, "r":1} if not specified in the json
*/
getLayoutingRules : function(shape, edgeShape){
-
+
if (!shape||!(shape instanceof ORYX.Core.Shape)){ return }
-
+
var layout = {"in":{},"out":{}};
-
+
var parseValues = function(o, v){
if (o && o[v]){
["t","r","b","l"].each(function(d){
@@ -7915,7 +7915,7 @@ ORYX.Core.StencilSet.Rules = {
}.bind(this));
}
}.bind(this)
-
+
// For each role
shape.getStencil().roles().each(function(role) {
// check if there are layout information
@@ -7925,7 +7925,7 @@ ORYX.Core.StencilSet.Rules = {
parseValues(this._layoutRules[role], "out");
}
}.bind(this));
-
+
// Make sure, that every attribute has an value,
// otherwise set 1
["in","out"].each(function(v){
@@ -7933,31 +7933,31 @@ ORYX.Core.StencilSet.Rules = {
layout[v][d]=layout[v][d]!==undefined?layout[v][d]:1;
});
})
-
+
return layout;
},
-
+
/** End layouting rules' methods */
-
+
/** Helper methods */
/**
- * Checks wether a shape contains the given role or the role is equal the stencil id
+ * Checks wether a shape contains the given role or the role is equal the stencil id
* @param {ORYX.Core.Shape} shape
* @param {String} role
*/
_hasRole: function(shape, role){
if (!(shape instanceof ORYX.Core.Shape)||!role){ return }
var isRole = shape.getStencil().roles().any(function(r){ return r == role});
-
+
return isRole || shape.getStencil().id() == (shape.getStencil().namespace()+role);
},
/**
- *
+ *
* @param {String}
* role
- *
+ *
* @return {Array} Returns an array of stencils that can act as role.
*/
_stencilsWithRole: function(role) {
@@ -7965,12 +7965,12 @@ ORYX.Core.StencilSet.Rules = {
return (stencil.roles().member(role)) ? true : false;
});
},
-
+
/**
- *
+ *
* @param {String}
* role
- *
+ *
* @return {Array} Returns an array of stencils that can act as role and
* have the type 'edge'.
*/
@@ -7979,12 +7979,12 @@ ORYX.Core.StencilSet.Rules = {
return (stencil.roles().member(role) && stencil.type() === "edge") ? true : false;
});
},
-
+
/**
- *
+ *
* @param {String}
* role
- *
+ *
* @return {Array} Returns an array of stencils that can act as role and
* have the type 'node'.
*/
@@ -7995,12 +7995,12 @@ ORYX.Core.StencilSet.Rules = {
},
/**
- *
+ *
* @param {ORYX.Core.StencilSet.Stencil}
* parent
* @param {ORYX.Core.StencilSet.Stencil}
* child
- *
+ *
* @returns {Boolean} Returns the maximum occurrence of shapes of the
* stencil's type inside the parent.
*/
@@ -8022,11 +8022,11 @@ ORYX.Core.StencilSet.Rules = {
/**
- *
+ *
* @param {Object}
* args sourceStencil: ORYX.Core.Node edgeStencil:
* ORYX.Core.StencilSet.Stencil
- *
+ *
* @return {Boolean} Returns, the maximum number of outgoing edges of the
* type specified by edgeStencil of the sourceShape.
*/
@@ -8036,7 +8036,7 @@ ORYX.Core.StencilSet.Rules = {
!args.edgeStencil) {
return false;
}
-
+
var max;
args.sourceStencil.roles().each((function(role) {
var cardRule = this._cardinalityRules[role];
@@ -8058,13 +8058,13 @@ ORYX.Core.StencilSet.Rules = {
return max;
},
-
+
/**
- *
+ *
* @param {Object}
* args targetStencil: ORYX.Core.StencilSet.Stencil edgeStencil:
* ORYX.Core.StencilSet.Stencil
- *
+ *
* @return {Boolean} Returns the maximum number of incoming edges of the
* type specified by edgeStencil of the targetShape.
*/
@@ -8074,7 +8074,7 @@ ORYX.Core.StencilSet.Rules = {
!args.edgeStencil) {
return false;
}
-
+
var max;
args.targetStencil.roles().each((function(role) {
var cardRule = this._cardinalityRules[role];
@@ -8094,12 +8094,12 @@ ORYX.Core.StencilSet.Rules = {
return max;
},
-
+
/**
- *
+ *
* @param {ORYX.Core.StencilSet.Stencil}
* edgeStencil
- *
+ *
* @return {Hash} Returns a hash map of all connection rules for
* edgeStencil.
*/
@@ -8116,10 +8116,10 @@ ORYX.Core.StencilSet.Rules = {
});
}
}).bind(this));
-
+
return edgeRules;
},
-
+
_isRoleOfOtherNamespace: function(role) {
return (role.indexOf("#") > 0);
},
@@ -8164,36 +8164,36 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
*/
construct: function(source, modelMetaData, editorId){
arguments.callee.$.construct.apply(this, arguments);
-
+
if (!source) {
throw "ORYX.Core.StencilSet.StencilSet(construct): Parameter 'source' is not defined.";
}
-
+
if (source.endsWith("/")) {
source = source.substr(0, source.length - 1);
}
-
+
this._extensions = new Hash();
-
+
this._source = source;
this._baseUrl = source.substring(0, source.lastIndexOf("/") + 1);
-
+
this._jsonObject = {};
-
+
this._stencils = new Hash();
this._availableStencils = new Hash();
-
+
if(ORYX.CONFIG.BACKEND_SWITCH) {
this._baseUrl = "editor/stencilsets/bpmn2.0/";
this._source = "stencilsets/bpmn2.0/bpmn2.0.json";
-
+
new Ajax.Request(ACTIVITI.CONFIG.contextRoot + '/editor/stencilset?version=' + Date.now(), {
asynchronous: false,
method: 'get',
onSuccess: this._init.bind(this),
onFailure: this._cancelInit.bind(this)
});
-
+
} else {
new Ajax.Request(source, {
asynchronous: false,
@@ -8202,23 +8202,23 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
onFailure: this._cancelInit.bind(this)
});
}
-
- if (this.errornous)
+
+ if (this.errornous)
throw "Loading stencil set " + source + " failed.";
},
-
+
/**
* Finds a root stencil in this stencil set. There may be many of these. If
* there are, the first one found will be used. In Firefox, this is the
* topmost definition in the stencil set description file.
*/
findRootStencilName: function(){
-
+
// find any stencil that may be root.
var rootStencil = this._stencils.values().find(function(stencil){
return stencil._jsonStencil.mayBeRoot
});
-
+
// if there is none, just guess the first.
if (!rootStencil) {
ORYX.Log.warn("Did not find any stencil that may be root. Taking a guess.");
@@ -8228,7 +8228,7 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
// return its id.
return rootStencil.id();
},
-
+
/**
* @param {ORYX.Core.StencilSet.StencilSet} stencilSet
* @return {Boolean} True, if stencil set has the same namespace.
@@ -8236,9 +8236,9 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
equals: function(stencilSet){
return (this.namespace() === stencilSet.namespace());
},
-
+
/**
- *
+ *
* @param {Oryx.Core.StencilSet.Stencil} rootStencil If rootStencil is defined, it only returns stencils
* that could be (in)direct child of that stencil.
*/
@@ -8247,9 +8247,9 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
var stencils = this._availableStencils.values();
var containers = [rootStencil];
var checkedContainers = [];
-
+
var result = [];
-
+
while (containers.size() > 0) {
var container = containers.pop();
checkedContainers.push(container);
@@ -8267,26 +8267,26 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
}
result = result.concat(children).uniq();
}
-
+
// Sort the result to the origin order
result = result.sortBy(function(stencil) {
return stencils.indexOf(stencil);
});
-
-
+
+
if(sortByGroup) {
result = result.sortBy(function(stencil) {
return stencil.groups().first();
});
}
-
+
var edges = stencils.findAll(function(stencil) {
return stencil.type() == "edge";
});
result = result.concat(edges);
-
+
return result;
-
+
} else {
if(sortByGroup) {
return this._availableStencils.values().sortBy(function(stencil) {
@@ -8297,49 +8297,49 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
}
}
},
-
+
nodes: function(){
return this._availableStencils.values().findAll(function(stencil){
return (stencil.type() === 'node')
});
},
-
+
edges: function(){
return this._availableStencils.values().findAll(function(stencil){
return (stencil.type() === 'edge')
});
},
-
+
stencil: function(id){
return this._stencils[id];
},
-
+
title: function(){
return ORYX.Core.StencilSet.getTranslation(this._jsonObject, "title");
},
-
+
description: function(){
return ORYX.Core.StencilSet.getTranslation(this._jsonObject, "description");
},
-
+
namespace: function(){
return this._jsonObject ? this._jsonObject.namespace : null;
},
-
+
jsonRules: function(){
return this._jsonObject ? this._jsonObject.rules : null;
},
-
+
source: function(){
return this._source;
},
-
+
extensions: function() {
return this._extensions;
},
-
+
addExtension: function(url) {
-
+
new Ajax.Request(url, {
method: 'GET',
asynchronous: false,
@@ -8352,10 +8352,10 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
onException: (function(transport) {
ORYX.Log.debug("Loading stencil set extension file failed. The request returned an error." + transport);
}).bind(this)
-
+
});
},
-
+
addExtensionDirectly: function(str){
try {
@@ -8363,28 +8363,28 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
if(!(jsonExtension["extends"].endsWith("#")))
jsonExtension["extends"] += "#";
-
+
if(jsonExtension["extends"] == this.namespace()) {
this._extensions[jsonExtension.namespace] = jsonExtension;
-
+
var defaultPosition = this._stencils.keys().size();
//load new stencils
if(jsonExtension.stencils) {
$A(jsonExtension.stencils).each(function(stencil) {
defaultPosition++;
- var oStencil = new ORYX.Core.StencilSet.Stencil(stencil, this.namespace(), this._baseUrl, this, undefined, defaultPosition);
+ var oStencil = new ORYX.Core.StencilSet.Stencil(stencil, this.namespace(), this._baseUrl, this, undefined, defaultPosition);
this._stencils[oStencil.id()] = oStencil;
this._availableStencils[oStencil.id()] = oStencil;
}.bind(this));
}
-
+
//load additional properties
if (jsonExtension.properties) {
var stencils = this._stencils.values();
-
+
stencils.each(function(stencil){
var roles = stencil.roles();
-
+
jsonExtension.properties.each(function(prop){
prop.roles.any(function(role){
role = jsonExtension["extends"] + role;
@@ -8392,16 +8392,16 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
prop.properties.each(function(property){
stencil.addProperty(property, jsonExtension.namespace);
});
-
+
return true;
}
- else
+ else
return false;
})
})
}.bind(this));
}
-
+
//remove stencil properties
if(jsonExtension.removeproperties) {
jsonExtension.removeproperties.each(function(remprop) {
@@ -8413,7 +8413,7 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
}
}.bind(this));
}
-
+
//remove stencils
if(jsonExtension.removestencils) {
$A(jsonExtension.removestencils).each(function(remstencil) {
@@ -8423,29 +8423,29 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
}
} catch (e) {
ORYX.Log.debug("StencilSet.addExtension: Something went wrong when initialising the stencil set extension. " + e);
- }
+ }
},
-
+
removeExtension: function(namespace) {
var jsonExtension = this._extensions[namespace];
if(jsonExtension) {
-
+
//unload extension's stencils
if(jsonExtension.stencils) {
$A(jsonExtension.stencils).each(function(stencil) {
- var oStencil = new ORYX.Core.StencilSet.Stencil(stencil, this.namespace(), this._baseUrl, this);
+ var oStencil = new ORYX.Core.StencilSet.Stencil(stencil, this.namespace(), this._baseUrl, this);
delete this._stencils[oStencil.id()]; // maybe not ??
delete this._availableStencils[oStencil.id()];
}.bind(this));
}
-
+
//unload extension's properties
if (jsonExtension.properties) {
var stencils = this._stencils.values();
-
+
stencils.each(function(stencil){
var roles = stencil.roles();
-
+
jsonExtension.properties.each(function(prop){
prop.roles.any(function(role){
role = jsonExtension["extends"] + role;
@@ -8453,16 +8453,16 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
prop.properties.each(function(property){
stencil.removeProperty(property.id);
});
-
+
return true;
}
- else
+ else
return false;
})
})
}.bind(this));
}
-
+
//restore removed stencil properties
if(jsonExtension.removeproperties) {
jsonExtension.removeproperties.each(function(remprop) {
@@ -8476,7 +8476,7 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
}
}.bind(this));
}
-
+
//restore removed stencils
if(jsonExtension.removestencils) {
$A(jsonExtension.removestencils).each(function(remstencil) {
@@ -8487,44 +8487,44 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
}
delete this._extensions[namespace];
},
-
+
__handleStencilset: function(response){
-
+
try {
// using eval instead of prototype's parsing,
// since there are functions in this JSON.
eval("this._jsonObject =" + response.responseText);
- }
+ }
catch (e) {
throw "Stenciset corrupt: " + e;
}
-
+
// assert it was parsed.
if (!this._jsonObject) {
throw "Error evaluating stencilset. It may be corrupt.";
}
-
+
with (this._jsonObject) {
-
+
// assert there is a namespace.
- if (!namespace || namespace === "")
+ if (!namespace || namespace === "")
throw "Namespace definition missing in stencilset.";
-
- if (!(stencils instanceof Array))
+
+ if (!(stencils instanceof Array))
throw "Stencilset corrupt.";
-
+
// assert namespace ends with '#'.
- if (!namespace.endsWith("#"))
+ if (!namespace.endsWith("#"))
namespace = namespace + "#";
-
+
// assert title and description are strings.
- if (!title)
+ if (!title)
title = "";
- if (!description)
+ if (!description)
description = "";
}
},
-
+
/**
* This method is called when the HTTP request to get the requested stencil
* set succeeds. The response is supposed to be a JSON representation
@@ -8533,37 +8533,37 @@ ORYX.Core.StencilSet.StencilSet = Clazz.extend({
* stencil set specification.
*/
_init: function(response){
-
+
// init and check consistency.
this.__handleStencilset(response);
-
+
var pps = new Hash();
-
+
// init property packages
if(this._jsonObject.propertyPackages) {
$A(this._jsonObject.propertyPackages).each((function(pp) {
pps[pp.name] = pp.properties;
}).bind(this));
}
-
+
var defaultPosition = 0;
-
+
// init each stencil
$A(this._jsonObject.stencils).each((function(stencil){
defaultPosition++;
-
+
// instantiate normally.
- var oStencil = new ORYX.Core.StencilSet.Stencil(stencil, this.namespace(), this._baseUrl, this, pps, defaultPosition);
+ var oStencil = new ORYX.Core.StencilSet.Stencil(stencil, this.namespace(), this._baseUrl, this, pps, defaultPosition);
this._stencils[oStencil.id()] = oStencil;
this._availableStencils[oStencil.id()] = oStencil;
-
+
}).bind(this));
},
-
+
_cancelInit: function(response){
this.errornous = true;
},
-
+
toString: function(){
return "StencilSet " + this.title() + " (" + this.namespace() + ")";
}
@@ -8596,7 +8596,7 @@ if(!ORYX.Core.StencilSet) {ORYX.Core.StencilSet = {};}
ORYX.Core.StencilSet._stencilSetsByNamespace = new Hash();
//storage for stencil sets by url
-ORYX.Core.StencilSet._stencilSetsByUrl = new Hash();
+ORYX.Core.StencilSet._stencilSetsByUrl = new Hash();
//storage for stencil set namespaces by editor instances
ORYX.Core.StencilSet._StencilSetNSByEditorInstance = new Hash();
@@ -8605,9 +8605,9 @@ ORYX.Core.StencilSet._StencilSetNSByEditorInstance = new Hash();
ORYX.Core.StencilSet._rulesByEditorInstance = new Hash();
/**
- *
+ *
* @param {String} editorId
- *
+ *
* @return {Hash} Returns a hash map with all stencil sets that are loaded by
* the editor with the editorId.
*/
@@ -8624,12 +8624,12 @@ ORYX.Core.StencilSet.stencilSets = function(editorId) {
};
/**
- *
+ *
* @param {String} namespace
- *
+ *
* @return {ORYX.Core.StencilSet.StencilSet} Returns the stencil set with the specified
* namespace.
- *
+ *
* The method can handle namespace strings like
* http://www.example.org/stencilset
* http://www.example.org/stencilset#
@@ -8647,11 +8647,11 @@ ORYX.Core.StencilSet.stencilSet = function(namespace) {
};
/**
- *
+ *
* @param {String} id
- *
+ *
* @return {ORYX.Core.StencilSet.Stencil} Returns the stencil specified by the id.
- *
+ *
* The id must be unique and contains the namespace of the stencil's stencil set.
* e.g. http://www.example.org/stencilset#ANode
*/
@@ -8668,9 +8668,9 @@ ORYX.Core.StencilSet.stencil = function(id) {
};
/**
- *
+ *
* @param {String} editorId
- *
+ *
* @return {ORYX.Core.StencilSet.Rules} Returns the rules object for the editor
* specified by its editor id.
*/
@@ -8682,33 +8682,33 @@ ORYX.Core.StencilSet.rules = function(editorId) {
};
/**
- *
+ *
* @param {String} url
* @param {String} editorId
- *
+ *
* Loads a stencil set from url, if it is not already loaded.
- * It also stores which editor instance loads the stencil set and
+ * It also stores which editor instance loads the stencil set and
* initializes the Rules object for the editor instance.
*/
ORYX.Core.StencilSet.loadStencilSet = function(url, modelMetaData, editorId) {
-
+
// Alfresco: disable cache, because stencil sets are now flexible
-
+
//var stencilSet = ORYX.Core.StencilSet._stencilSetsByUrl[url];
//if(!stencilSet) {
//load stencil set
stencilSet = new ORYX.Core.StencilSet.StencilSet(url, modelMetaData, editorId);
-
+
//store stencil set
ORYX.Core.StencilSet._stencilSetsByNamespace[stencilSet.namespace()] = stencilSet;
-
+
//store stencil set by url
ORYX.Core.StencilSet._stencilSetsByUrl[url] = stencilSet;
//}
-
+
var namespace = stencilSet.namespace();
-
+
//store which editorInstance loads the stencil set
if(ORYX.Core.StencilSet._StencilSetNSByEditorInstance[editorId]) {
ORYX.Core.StencilSet._StencilSetNSByEditorInstance[editorId].push(namespace);
@@ -8732,17 +8732,17 @@ ORYX.Core.StencilSet.loadStencilSet = function(url, modelMetaData, editorId) {
*/
ORYX.Core.StencilSet.getTranslation = function(jsonObject, name) {
var lang = ORYX.I18N.Language.toLowerCase();
-
+
var result = jsonObject[name + "_" + lang];
-
+
if(result)
return result;
-
+
result = jsonObject[name + "_" + lang.substr(0, 2)];
-
+
if(result)
return result;
-
+
return jsonObject[name];
};
/*
@@ -8773,16 +8773,16 @@ ORYX.Core.Command = Clazz.extend({
construct: function() {
},
-
+
execute: function(){
throw "Command.execute() has to be implemented!"
},
-
+
rollback: function(){
throw "Command.rollback() has to be implemented!"
}
-
-
+
+
});/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
* License rights for this program may be obtained from Alfresco Software, Ltd.
@@ -8816,7 +8816,7 @@ ORYX.Core.Bounds = {
this.suspendChange = false;
this.changedWhileSuspend = false;
},
-
+
/**
* Calls all registered callbacks.
*/
@@ -8829,17 +8829,17 @@ ORYX.Core.Bounds = {
} else
this.changedWhileSuspend = true;
},
-
+
/**
* Registers a callback that is called, if the bounds changes.
* @param callback {Function} The callback function.
*/
registerCallback: function(callback) {
if(!this._changedCallbacks.member(callback)) {
- this._changedCallbacks.push(callback);
+ this._changedCallbacks.push(callback);
}
},
-
+
/**
* Unregisters a callback.
* @param callback {Function} The callback function.
@@ -8847,18 +8847,18 @@ ORYX.Core.Bounds = {
unregisterCallback: function(callback) {
this._changedCallbacks = this._changedCallbacks.without(callback);
},
-
+
/**
* Sets position and size of the shape dependent of four coordinates
* (set(ax, ay, bx, by);), two points (set({x: ax, y: ay}, {x: bx, y: by});)
* or one bound (set({a: {x: ax, y: ay}, b: {x: bx, y: by}});).
*/
set: function() {
-
+
var changed = false;
-
+
switch (arguments.length) {
-
+
case 1:
if(this.a.x !== arguments[0].a.x) {
changed = true;
@@ -8877,7 +8877,7 @@ ORYX.Core.Bounds = {
this.b.y = arguments[0].b.y;
}
break;
-
+
case 2:
var ax = Math.min(arguments[0].x, arguments[1].x);
var ay = Math.min(arguments[0].y, arguments[1].y);
@@ -8900,7 +8900,7 @@ ORYX.Core.Bounds = {
this.b.y = by;
}
break;
-
+
case 4:
var ax = Math.min(arguments[0], arguments[2]);
var ay = Math.min(arguments[1], arguments[3]);
@@ -8924,12 +8924,12 @@ ORYX.Core.Bounds = {
}
break;
}
-
+
if(changed) {
this._changed(true);
}
},
-
+
/**
* Moves the bounds so that the point p will be the new upper left corner.
* @param {Point} p
@@ -8938,7 +8938,7 @@ ORYX.Core.Bounds = {
* @param {Number} y
*/
moveTo: function() {
-
+
var currentPosition = this.upperLeft();
switch (arguments.length) {
case 1:
@@ -8956,20 +8956,20 @@ ORYX.Core.Bounds = {
default:
//TODO error
}
-
+
},
-
+
/**
* Moves the bounds relatively by p.
* @param {Point} p
* or
* @param {Number} x
* @param {Number} y
- *
+ *
*/
moveBy: function() {
var changed = false;
-
+
switch (arguments.length) {
case 1:
var p = arguments[0];
@@ -8980,7 +8980,7 @@ ORYX.Core.Bounds = {
this.a.y += p.y;
this.b.y += p.y;
}
- break;
+ break;
case 2:
var x = arguments[0];
var y = arguments[1];
@@ -8991,54 +8991,54 @@ ORYX.Core.Bounds = {
this.a.y += y;
this.b.y += y;
}
- break;
+ break;
default:
//TODO error
}
-
+
if(changed) {
this._changed();
}
},
-
+
/***
* Includes the bounds b into the current bounds.
* @param {Bounds} b
*/
include: function(b) {
-
+
if( (this.a.x === undefined) && (this.a.y === undefined) &&
(this.b.x === undefined) && (this.b.y === undefined)) {
return b;
};
-
+
var cx = Math.min(this.a.x,b.a.x);
var cy = Math.min(this.a.y,b.a.y);
-
+
var dx = Math.max(this.b.x,b.b.x);
var dy = Math.max(this.b.y,b.b.y);
-
+
this.set(cx, cy, dx, dy);
},
-
+
/**
* Relatively extends the bounds by p.
* @param {Point} p
*/
extend: function(p) {
-
+
if(p.x !== 0 || p.y !== 0) {
// this is over cross for the case that a and b have same coordinates.
//((this.a.x > this.b.x) ? this.a : this.b).x += p.x;
//((this.b.y > this.a.y) ? this.b : this.a).y += p.y;
this.b.x += p.x;
this.b.y += p.y;
-
+
this._changed(true);
}
},
-
+
/**
* Widens the scope of the bounds by x.
* @param {Number} x
@@ -9054,7 +9054,7 @@ ORYX.Core.Bounds = {
}
}
},
-
+
/**
* Returns the upper left corner's point regardless of the
* bound delimiter points.
@@ -9065,7 +9065,7 @@ ORYX.Core.Bounds = {
result.y = this.a.y;
return result;
},
-
+
/**
* Returns the lower Right left corner's point regardless of the
* bound delimiter points.
@@ -9076,78 +9076,78 @@ ORYX.Core.Bounds = {
result.y = this.b.y;
return result;
},
-
+
/**
* @return {Number} Width of bounds.
*/
width: function() {
return this.b.x - this.a.x;
},
-
+
/**
* @return {Number} Height of bounds.
*/
height: function() {
return this.b.y - this.a.y;
},
-
+
/**
* @return {Point} The center point of this bounds.
*/
center: function() {
var center = {};
- center.x =(this.a.x + this.b.x)/2.0;
+ center.x =(this.a.x + this.b.x)/2.0;
center.y =(this.a.y + this.b.y)/2.0;
return center;
},
-
+
/**
* @return {Point} The center point of this bounds relative to upperLeft.
*/
midPoint: function() {
-
+
var midpoint = {};
- midpoint.x = (this.b.x - this.a.x)/2.0;
+ midpoint.x = (this.b.x - this.a.x)/2.0;
midpoint.y = (this.b.y - this.a.y)/2.0;
return midpoint;
},
-
+
/**
* Moves the center point of this bounds to the new position.
- * @param p {Point}
+ * @param p {Point}
* or
* @param x {Number}
* @param y {Number}
*/
centerMoveTo: function() {
var currentPosition = this.center();
-
+
switch (arguments.length) {
-
+
case 1:
this.moveBy(arguments[0].x - currentPosition.x,
arguments[0].y - currentPosition.y);
break;
-
+
case 2:
this.moveBy(arguments[0] - currentPosition.x,
arguments[1] - currentPosition.y);
break;
}
},
-
+
isIncluded: function(point, offset) {
-
+
var pointX, pointY, offset;
- // Get the the two Points
+ // Get the the two Points
switch(arguments.length) {
case 1:
pointX = arguments[0].x;
pointY = arguments[0].y;
offset = 0;
-
+
break;
case 2:
if(arguments[0].x && arguments[0].y) {
@@ -9168,39 +9168,39 @@ ORYX.Core.Bounds = {
default:
throw "isIncluded needs one, two or three arguments";
}
-
+
var ul = this.upperLeft();
var lr = this.lowerRight();
-
- if(pointX >= ul.x - offset
- && pointX <= lr.x + offset && pointY >= ul.y - offset
+
+ if(pointX >= ul.x - offset
+ && pointX <= lr.x + offset && pointY >= ul.y - offset
&& pointY <= lr.y + offset)
return true;
- else
+ else
return false;
},
-
+
/**
* @return {Bounds} A copy of this bounds.
*/
clone: function() {
-
+
//Returns a new bounds object without the callback
// references of the original bounds
return new ORYX.Core.Bounds(this);
},
-
+
toString: function() {
-
+
return "( "+this.a.x+" | "+this.a.y+" )/( "+this.b.x+" | "+this.b.y+" )";
},
-
+
serializeForERDF: function() {
return this.a.x+","+this.a.y+","+this.b.x+","+this.b.y;
}
};
-
+
ORYX.Core.Bounds = Clazz.extend(ORYX.Core.Bounds);/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
* License rights for this program may be obtained from Alfresco Software, Ltd.
@@ -9227,30 +9227,30 @@ ORYX.Core.UIObject = {
/**
* Constructor of the UIObject class.
*/
- construct: function(options) {
-
+ construct: function(options) {
+
this.isChanged = true; //Flag, if UIObject has been changed since last update.
this.isResized = true;
this.isVisible = true; //Flag, if UIObject's display attribute is set to 'inherit' or 'none'
this.isSelectable = false; //Flag, if UIObject is selectable.
this.isResizable = false; //Flag, if UIObject is resizable.
this.isMovable = false; //Flag, if UIObject is movable.
-
+
this.id = ORYX.Editor.provideId(); //get unique id
this.parent = undefined; //parent is defined, if this object is added to another uiObject.
this.node = undefined; //this is a reference to the SVG representation, either locally or in DOM.
this.children = []; //array for all add uiObjects
-
+
this.bounds = new ORYX.Core.Bounds(); //bounds with undefined values
this._changedCallback = this._changed.bind(this); //callback reference for calling _changed
this.bounds.registerCallback(this._changedCallback); //set callback in bounds
-
+
if(options && options.eventHandlerCallback) {
this.eventHandlerCallback = options.eventHandlerCallback;
}
},
-
+
/**
* Sets isChanged flag to true. Callback for the bounds object.
*/
@@ -9259,7 +9259,7 @@ ORYX.Core.UIObject = {
if(this.bounds == bounds)
this.isResized = isResized || this.isResized;
},
-
+
/**
* If something changed, this method calls the refresh method that must be implemented by subclasses.
*/
@@ -9267,28 +9267,28 @@ ORYX.Core.UIObject = {
if(this.isChanged) {
this.refresh();
this.isChanged = false;
-
+
//call update of all children
this.children.each(function(value) {
value.update();
});
}
},
-
+
/**
* Is called in update method, if isChanged is set to true. Sub classes should call the super class method.
*/
refresh: function() {
-
+
},
-
+
/**
* @return {Array} Array of all child UIObjects.
*/
getChildren: function() {
return this.children.clone();
},
-
+
/**
* @return {Array} Array of all parent UIObjects.
*/
@@ -9301,11 +9301,11 @@ ORYX.Core.UIObject = {
}
return parents;
},
-
+
/**
* Returns TRUE if the given parent is one of the UIObjects parents or the UIObject themselves, otherwise FALSE.
* @param {UIObject} parent
- * @return {Boolean}
+ * @return {Boolean}
*/
isParent: function(parent){
var cparent = this;
@@ -9317,19 +9317,19 @@ ORYX.Core.UIObject = {
}
return false;
},
-
+
/**
* @return {String} Id of this UIObject
*/
getId: function() {
return this.id;
},
-
+
/**
* Method for accessing child uiObjects by id.
* @param {String} id
* @param {Boolean} deep
- *
+ *
* @return {UIObject} If found, it returns the UIObject with id.
*/
getChildById: function(id, deep) {
@@ -9346,7 +9346,7 @@ ORYX.Core.UIObject = {
}
});
},
-
+
/**
* Adds an UIObject to this UIObject and sets the parent of the
* added UIObject. It is also added to the SVG representation of this
@@ -9360,16 +9360,16 @@ ORYX.Core.UIObject = {
if(uiObject.parent) {
uiObject.remove(uiObject);
}
-
+
//add uiObject to children
this.children.push(uiObject);
-
+
//set parent reference
uiObject.parent = this;
-
+
//add uiObject.node to this.node
uiObject.node = this.node.appendChild(uiObject.node);
-
+
//register callback to get informed, if child is changed
uiObject.bounds.registerCallback(this._changedCallback);
@@ -9378,7 +9378,7 @@ ORYX.Core.UIObject = {
ORYX.Log.info("add: ORYX.Core.UIObject is already a child of this object.");
}
},
-
+
/**
* Removes UIObject from this UIObject. The SVG representation will also
* be removed from this UIObject's SVG representation.
@@ -9389,21 +9389,21 @@ ORYX.Core.UIObject = {
if (this.children.member(uiObject)) {
//remove uiObject from children
this.children = this._uiObjects.without(uiObject);
-
+
//delete parent reference of uiObject
uiObject.parent = undefined;
-
+
//delete uiObject.node from this.node
uiObject.node = this.node.removeChild(uiObject.node);
-
+
//unregister callback to get informed, if child is changed
uiObject.bounds.unregisterCallback(this._changedCallback);
} else {
ORYX.Log.info("remove: ORYX.Core.UIObject is not a child of this object.");
}
-
+
},
-
+
/**
* Calculates absolute bounds of this UIObject.
*/
@@ -9441,12 +9441,12 @@ ORYX.Core.UIObject = {
*/
absoluteCenterXY: function() {
if(this.parent) {
- var pXY = this.parent.absoluteXY();
+ var pXY = this.parent.absoluteXY();
var result = {};
result.x = pXY.x + this.bounds.center().x;
result.y = pXY.y + this.bounds.center().y;
return result;
-
+
} else {
var result = {};
result.x = this.bounds.center().x;
@@ -9454,7 +9454,7 @@ ORYX.Core.UIObject = {
return result;
}
},
-
+
/**
* Hides this UIObject and all its children.
*/
@@ -9462,10 +9462,10 @@ ORYX.Core.UIObject = {
this.node.setAttributeNS(null, 'display', 'none');
this.isVisible = false;
this.children.each(function(uiObj) {
- uiObj.hide();
+ uiObj.hide();
});
},
-
+
/**
* Enables visibility of this UIObject and all its children.
*/
@@ -9473,28 +9473,28 @@ ORYX.Core.UIObject = {
this.node.setAttributeNS(null, 'display', 'inherit');
this.isVisible = true;
this.children.each(function(uiObj) {
- uiObj.show();
- });
+ uiObj.show();
+ });
},
-
+
addEventHandlers: function(node) {
-
+
node.addEventListener(ORYX.CONFIG.EVENT_MOUSEDOWN, this._delegateEvent.bind(this), false);
- node.addEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this._delegateEvent.bind(this), false);
+ node.addEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this._delegateEvent.bind(this), false);
node.addEventListener(ORYX.CONFIG.EVENT_MOUSEUP, this._delegateEvent.bind(this), false);
node.addEventListener(ORYX.CONFIG.EVENT_MOUSEOVER, this._delegateEvent.bind(this), false);
node.addEventListener(ORYX.CONFIG.EVENT_MOUSEOUT, this._delegateEvent.bind(this), false);
node.addEventListener('click', this._delegateEvent.bind(this), false);
node.addEventListener(ORYX.CONFIG.EVENT_DBLCLICK, this._delegateEvent.bind(this), false);
-
+
},
-
+
_delegateEvent: function(event) {
if(this.eventHandlerCallback) {
this.eventHandlerCallback(event, this);
}
},
-
+
toString: function() { return "UIObject " + this.id }
};
ORYX.Core.UIObject = Clazz.extend(ORYX.Core.UIObject);/*
@@ -9526,11 +9526,11 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
* Constructor
*/
construct: function(options, stencil, facade) {
-
+
arguments.callee.$.construct.apply(this, arguments);
-
+
this.resourceId = ORYX.Editor.provideId(); //Id of resource in DOM
-
+
// stencil reference
this._stencil = stencil;
// if the stencil defines a super stencil that should be used for its instances, set it.
@@ -9540,23 +9540,23 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
stencilSet = this._stencil.stencilSet();
this._stencil = stencilSet.stencil(superStencilId);
}
-
+
//Hash map for all properties. Only stores the values of the properties.
this.properties = new Hash();
this.propertiesChanged = new Hash();
- // List of properties which are not included in the stencilset,
+ // List of properties which are not included in the stencilset,
// but which gets (de)serialized
this.hiddenProperties = new Hash();
-
-
+
+
//Initialization of property map and initial value.
this._stencil.properties().each((function(property) {
var key = property.prefix() + "-" + property.id();
this.properties[key] = property.value();
this.propertiesChanged[key] = true;
}).bind(this));
-
+
// if super stencil was defined, also regard stencil's properties:
if (stencil._jsonStencil.superId) {
stencil.properties().each((function(property) {
@@ -9571,8 +9571,8 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
//window.setTimeout( function(){
this._delegateEvent({
- type : ORYX.CONFIG.EVENT_PROPERTY_CHANGED,
- name : key,
+ type : ORYX.CONFIG.EVENT_PROPERTY_CHANGED,
+ name : key,
value : value,
oldValue: oldValue
});
@@ -9587,28 +9587,28 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
layout: function() {
},
-
+
/**
* Returns the stencil object specifiing the type of the shape.
*/
getStencil: function() {
return this._stencil;
},
-
+
/**
- *
+ *
* @param {Object} resourceId
*/
getChildShapeByResourceId: function(resourceId) {
resourceId = ERDF.__stripHashes(resourceId);
-
+
return this.getChildShapes(true).find(function(shape) {
return shape.resourceId == resourceId
});
},
/**
- *
+ *
* @param {Object} deep
* @param {Object} iterator
*/
@@ -9623,13 +9623,13 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
result.push(uiObject);
if(deep) {
result = result.concat(uiObject.getChildShapes(deep, iterator));
- }
+ }
}
});
return result;
},
-
+
/**
* @param {Object} shape
* @return {boolean} true if any of shape's childs is given shape
@@ -9639,9 +9639,9 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
return (child === shape) || child.hasChildShape(shape);
});
},
-
+
/**
- *
+ *
* @param {Object} deep
* @param {Object} iterator
*/
@@ -9664,9 +9664,9 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
return result;
},
-
+
/**
- *
+ *
* @param {Object} deep
* @param {Object} iterator
*/
@@ -9689,7 +9689,7 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
return result;
},
-
+
/**
* Returns a sorted array of ORYX.Core.Node objects.
* Ordered in z Order, the last object has the highest z Order.
@@ -9715,15 +9715,15 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
var result = [];
result.push(this);
- //check, if one child is at that position
-
-
+ //check, if one child is at that position
+
+
var childNodes = this.getChildNodes();
var childEdges = this.getChildEdges();
-
+
[childNodes, childEdges].each(function(ne){
var nodesAtPosition = new Hash();
-
+
ne.each(function(node) {
if(!node.isVisible){ return }
var candidates = node.getAbstractShapesAtPosition( x , y );
@@ -9733,21 +9733,21 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
nodesAtPosition[zOrderIndex] = candidates;
}
});
-
+
nodesAtPosition.keys().sort().each(function(key) {
result = result.concat(nodesAtPosition[key]);
});
});
-
+
return result;
-
+
} else {
return [];
}
},
-
+
/**
- *
+ *
* @param key {String} Must be 'prefix-id' of property
* @param value {Object} Can be of type String or Number according to property type.
*/
@@ -9757,27 +9757,27 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
this.properties[key] = value;
this.propertiesChanged[key] = true;
this._changed();
-
+
// Raise an event, to show that the property has changed
//window.setTimeout( function(){
if (!this._isInSetProperty) {
this._isInSetProperty = true;
-
+
this._delegateEvent({
- type : ORYX.CONFIG.EVENT_PROPERTY_CHANGED,
+ type : ORYX.CONFIG.EVENT_PROPERTY_CHANGED,
elements : [this],
- name : key,
+ name : key,
value : value,
oldValue: oldValue
});
-
+
delete this._isInSetProperty;
}
//}.bind(this), 10)
}
},
-
+
/**
* Returns TRUE if one of the properties is flagged as dirty
* @return {boolean}
@@ -9787,7 +9787,7 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
},
/**
- *
+ *
* @param {String} Must be 'prefix-id' of property
* @param {Object} Can be of type String or Number according to property type.
*/
@@ -9809,9 +9809,9 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
isPointIncluded: function(pointX, pointY, absoluteBounds) {
var absBounds = absoluteBounds ? absoluteBounds : this.absoluteBounds();
return absBounds.isIncluded(pointX, pointY);
-
+
},
-
+
/**
* Get the serialized object
* return Array with hash-entrees (prefix, name, value)
@@ -9821,58 +9821,58 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
*/
serialize: function() {
var serializedObject = [];
-
+
// Add the type
- serializedObject.push({name: 'type', prefix:'oryx', value: this.getStencil().id(), type: 'literal'});
-
+ serializedObject.push({name: 'type', prefix:'oryx', value: this.getStencil().id(), type: 'literal'});
+
// Add hidden properties
this.hiddenProperties.each(function(prop){
serializedObject.push({name: prop.key.replace("oryx-", ""), prefix: "oryx", value: prop.value, type: 'literal'});
}.bind(this));
-
+
// Add all properties
this.getStencil().properties().each((function(property){
-
+
var prefix = property.prefix(); // Get prefix
var name = property.id(); // Get name
-
+
//if(typeof this.properties[prefix+'-'+name] == 'boolean' || this.properties[prefix+'-'+name] != "")
serializedObject.push({name: name, prefix: prefix, value: this.properties[prefix+'-'+name], type: 'literal'});
}).bind(this));
-
+
return serializedObject;
},
-
-
+
+
deserialize: function(serialize){
// Search in Serialize
var initializedDocker = 0;
-
+
// Sort properties so that the hidden properties are first in the list
serialize = serialize.sort(function(a,b){ a = Number(this.properties.keys().member(a.prefix+"-"+a.name)); b = Number(this.properties.keys().member(b.prefix+"-"+b.name)); return a > b ? 1 : (a < b ? -1 : 0) }.bind(this));
-
+
serialize.each((function(obj){
-
+
var name = obj.name;
var prefix = obj.prefix;
var value = obj.value;
-
+
// Complex properties can be real json objects, encode them to a string
if (Object.prototype.toString.call(value) === "Object") value = JSON.stringify(value);
switch(prefix + "-" + name){
- case 'raziel-parent':
+ case 'raziel-parent':
// Set parent
if(!this.parent) {break};
-
+
// Set outgoing Shape
var parent = this.getCanvas().getChildShapeByResourceId(value);
if(parent) {
parent.add(this);
}
-
- break;
+
+ break;
default:
// If list, eval as an array
var prop = this.getStencil().property(prefix+"-"+name);
@@ -9881,20 +9881,20 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
value = "[\""+value.strip()+"\"]";
value = ((value||"").strip()||"[]").evalJSON();
}
-
+
// Set property
if(this.properties.keys().member(prefix+"-"+name)) {
this.setProperty(prefix+"-"+name, value);
} else if(!(name === "bounds"||name === "parent"||name === "target"||name === "dockers"||name === "docker"||name === "outgoing"||name === "incoming")) {
this.setHiddenProperty(prefix+"-"+name, value);
}
-
+
}
}).bind(this));
},
-
+
toString: function() { return "ORYX.Core.AbstractShape " + this.id },
-
+
/**
* Converts the shape to a JSON representation.
* @return {Object} A JSON object with included ORYX.Core.AbstractShape.JSONHelper and getShape() method.
@@ -9905,26 +9905,26 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
properties: jQuery.extend({}, this.properties, this.hiddenProperties).inject({}, function(props, prop){
var key = prop[0];
var value = prop[1];
-
+
//If complex property, value should be a json object
if ( this.getStencil().property(key)
- && this.getStencil().property(key).type() === ORYX.CONFIG.TYPE_COMPLEX
+ && this.getStencil().property(key).type() === ORYX.CONFIG.TYPE_COMPLEX
&& Object.prototype.toString.call(value) === "String"){
-
+
try {value = JSON.parse(value);} catch(error){}
//try {value = JSON.parse(value);} catch(error){}
-
+
// Parse date
} else if (value instanceof Date&&this.getStencil().property(key)){
try {
value = value.format(this.getStencil().property(key).dateFormat());
} catch(e){}
}
-
+
//Takes "my_property" instead of "oryx-my_property" as key
key = key.replace(/^[\w_]+-/, "");
props[key] = value;
-
+
return props;
}.bind(this)),
stencil: {
@@ -9934,7 +9934,7 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
return shape.toJSON();
})
};
-
+
if(this.getOutgoingShapes){
json.outgoing = this.getOutgoingShapes().map(function(shape){
return {
@@ -9942,14 +9942,14 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
};
});
}
-
+
if(this.bounds){
- json.bounds = {
- lowerRight: this.bounds.lowerRight(),
- upperLeft: this.bounds.upperLeft()
+ json.bounds = {
+ lowerRight: this.bounds.lowerRight(),
+ upperLeft: this.bounds.upperLeft()
};
}
-
+
if(this.dockers){
json.dockers = this.dockers.map(function(docker){
var d = docker.getDockedShape() && docker.referencePoint ? docker.referencePoint : docker.bounds.center();
@@ -9957,19 +9957,19 @@ ORYX.Core.AbstractShape = ORYX.Core.UIObject.extend(
return d;
});
}
-
+
jQuery.extend(json, ORYX.Core.AbstractShape.JSONHelper);
-
+
// do not pollute the json attributes (for serialization), so put the corresponding
// shape is encapsulated in a method
json.getShape = function(){
return this;
}.bind(this);
-
+
return json;
}
});
-
+
/**
* @namespace Collection of methods which can be used on a shape json object (ORYX.Core.AbstractShape#toJSON()).
* @example
@@ -9982,7 +9982,7 @@ ORYX.Core.AbstractShape.JSONHelper = {
* @param {boolean} [deep=false] Iterate recursively (childShapes of childShapes)
* @param {boolean} [modify=false] If true, the result of the iterator function is taken as new shape, return false to delete it. This enables modifying the object while iterating through the child shapes.
* @example
- * // Increases the lowerRight x value of each direct child shape by one.
+ * // Increases the lowerRight x value of each direct child shape by one.
* myShapeAsJson.eachChild(function(shape, parentShape){
* shape.bounds.lowerRight.x = shape.bounds.lowerRight.x + 1;
* return shape;
@@ -9990,28 +9990,28 @@ ORYX.Core.AbstractShape.JSONHelper = {
*/
eachChild: function(iterator, deep, modify){
if(!this.childShapes) return;
-
+
var newChildShapes = []; //needed if modify = true
-
+
this.childShapes.each(function(shape){
if (!(shape.eachChild instanceof Function)){
jQuery.extend(shape, ORYX.Core.AbstractShape.JSONHelper);
}
var res = iterator(shape, this);
if(res) newChildShapes.push(res); //if false is returned, and modify = true, current shape is deleted.
-
+
if(deep) shape.eachChild(iterator, deep, modify);
}.bind(this));
-
+
if(modify) this.childShapes = newChildShapes;
},
-
+
getShape: function(){
return null;
},
getChildShapes: function(deep){
var allShapes = this.childShapes;
-
+
if(deep){
this.eachChild(function(shape){
if (!(shape.getChildShapes instanceof Function)){
@@ -10020,10 +10020,10 @@ ORYX.Core.AbstractShape.JSONHelper = {
allShapes = allShapes.concat(shape.getChildShapes(deep));
}, true);
}
-
+
return allShapes;
},
-
+
/**
* @return {String} Serialized JSON object
*/
@@ -10072,29 +10072,29 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
arguments.callee.$.construct.apply(this, arguments);
if(!(options && options.width && options.height)) {
-
+
ORYX.Log.fatal("Canvas is missing mandatory parameters options.width and options.height.");
return;
}
- this.facade = facade;
+ this.facade = facade;
//TODO: set document resource id
this.resourceId = options.id;
this.nodes = [];
-
+
this.edges = [];
-
+
// Row highlighting states
this.colHighlightState = 0;
-
- this.colHighlightEnabled = false;
-
+
+ this.colHighlightEnabled = false;
+
//init svg document
this.rootNode = ORYX.Editor.graft("http://www.w3.org/2000/svg", options.parentNode,
['svg', {id: this.id, width: options.width, height: options.height},
['defs', {}]
]);
-
+
this.rootNode.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink");
this.rootNode.setAttribute("xmlns:svg", "http://www.w3.org/2000/svg");
@@ -10104,14 +10104,14 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
// Additional SVG-node BELOW the stencils to allow underlays (if that is even a word) by plugins
this.underlayNode = ORYX.Editor.graft("http://www.w3.org/2000/svg", this.rootNode,
['svg', {id: "underlay-container"}]);
-
+
// Create 2 svg-elements in the svg-container
this.columnHightlight1 = ORYX.Editor.graft("http://www.w3.org/2000/svg", this.underlayNode,
['rect', {x: 0, width: ORYX.CONFIG.FORM_ROW_WIDTH + 35, height: "100%", style: "fill: #fff6d5", visibility: "hidden"}]);
-
+
this.columnHightlight2 = ORYX.Editor.graft("http://www.w3.org/2000/svg", this.underlayNode,
['rect', {x: ORYX.CONFIG.FORM_ROW_WIDTH + 35, width: ORYX.CONFIG.FORM_ROW_WIDTH + 25, height: "100%", style: "fill: #fff6d5", visibility: "hidden"}]);
-
+
this.node = ORYX.Editor.graft("http://www.w3.org/2000/svg", this.rootNode,
['g', {},
['g', {"class": "stencils"},
@@ -10121,7 +10121,7 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
],
['g', {"class":"svgcontainer"}]
]);
-
+
/*
var off = 2 * ORYX.CONFIG.GRID_DISTANCE;
var size = 3;
@@ -10129,11 +10129,11 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
for(var i = 0; i <= options.width; i += off)
for(var j = 0; j <= options.height; j += off)
d = d + "M" + (i - size) + " " + j + " l" + (2*size) + " 0 m" + (-size) + " " + (-size) + " l0 " + (2*size) + " m0" + (-size) + " ";
-
+
ORYX.Editor.graft("http://www.w3.org/2000/svg", this.node.firstChild.firstChild,
['path', {d:d , stroke:'#000000', 'stroke-width':'0.15px'},]);
*/
-
+
//Global definition of default font for shapes
//Definitions in the SVG definition of a stencil will overwrite these settings for
// that stencil.
@@ -10148,7 +10148,7 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
this.node.setAttributeNS(null, 'font-family', 'Verdana');
this.node.setAttributeNS(null, 'font-size', ORYX.CONFIG.LABEL_DEFAULT_LINE_HEIGHT);
}*/
-
+
this.node.setAttributeNS(null, 'stroke', 'none');
this.node.setAttributeNS(null, 'font-family', 'Verdana, sans-serif');
this.node.setAttributeNS(null, 'font-size-adjust', 'none');
@@ -10156,34 +10156,34 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
this.node.setAttributeNS(null, 'font-variant', 'normal');
this.node.setAttributeNS(null, 'font-weight', 'normal');
this.node.setAttributeNS(null, 'line-heigth', 'normal');
-
+
this.node.setAttributeNS(null, 'font-size', ORYX.CONFIG.LABEL_DEFAULT_LINE_HEIGHT);
-
+
this.bounds.set(0,0,options.width, options.height);
-
+
this.addEventHandlers(this.rootNode.parentNode);
-
+
//disable context menu
this.rootNode.oncontextmenu = function() {return false;};
},
-
+
focus: function(){
-
+
try {
// Get a href
- if (!this.focusEl)
+ if (!this.focusEl)
{
this.focusEl = jQuery('body').append(jQuery(''));
this.focusEl.swallowEvent("click", true);
}
-
+
// Focus it
this.focusEl.focus.defer(1, this.focusEl);
this.focusEl.blur.defer(3, this.focusEl);
-
+
} catch(e){}
},
-
+
setHightlightState: function(state) {
if(this.colHighlightEnabled && this.colHighlightState != state) {
if(state == 0) {
@@ -10202,7 +10202,7 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
this.colHighlightState = state;
}
},
-
+
setHightlightStateBasedOnX : function(x) {
if(x > ORYX.CONFIG.FORM_ROW_WIDTH + 30) {
this.setHightlightState(2);
@@ -10210,42 +10210,42 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
this.setHightlightState(1);
}
},
-
+
update: function() {
-
+
this.nodes.each(function(node) {
this._traverseForUpdate(node);
}.bind(this));
-
+
// call stencil's layout callback
// (needed for row layouting of xforms)
//this.getStencil().layout(this);
-
+
var layoutEvents = this.getStencil().layout();
-
+
if(layoutEvents) {
layoutEvents.each(function(event) {
-
+
// setup additional attributes
event.shape = this;
event.forceExecution = true;
event.target = this.rootNode;
-
+
// do layouting
-
+
this._delegateEvent(event);
}.bind(this))
}
-
+
this.nodes.invoke("_update");
-
+
this.edges.invoke("_update", true);
-
+
/*this.children.each(function(child) {
child._update();
});*/
},
-
+
_traverseForUpdate: function(shape) {
var childRet = shape.isChanged;
shape.getChildNodes(false, function(child) {
@@ -10253,7 +10253,7 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
childRet = true;
}
}.bind(this));
-
+
if(childRet) {
shape.layout();
return true;
@@ -10261,15 +10261,15 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
return false;
}
},
-
+
layout: function() {
-
-
-
+
+
+
},
-
+
/**
- *
+ *
* @param {Object} deep
* @param {Object} iterator
*/
@@ -10283,18 +10283,18 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
iterator(uiObject);
}
result.push(uiObject);
-
+
if(deep && uiObject instanceof ORYX.Core.Shape) {
result = result.concat(uiObject.getChildNodes(deep, iterator));
}
});
-
+
return result;
}
},
-
+
/**
- * buggy crap! use base class impl instead!
+ * buggy crap! use base class impl instead!
* @param {Object} iterator
*/
/* getChildEdges: function(iterator) {
@@ -10303,10 +10303,10 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
iterator(edge);
});
}
-
+
return this.edges.clone();
},
-*/
+*/
/**
* Overrides the UIObject.add method. Adds uiObject to the correct sub node.
* @param {UIObject} uiObject
@@ -10345,11 +10345,11 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
}
uiObject.bounds.registerCallback(this._changedCallback);
-
+
if(this.eventHandlerCallback && silent !== true)
this.eventHandlerCallback({type:ORYX.CONFIG.EVENT_SHAPEADDED,shape:uiObject})
} else {
-
+
ORYX.Log.warn("add: ORYX.Core.UIObject is already a child of this object.");
}
} else {
@@ -10367,7 +10367,7 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
if (this.children.member(uiObject)) {
//remove uiObject from children
var parent = uiObject.parent;
-
+
this.children = this.children.without(uiObject);
//delete parent reference of uiObject
@@ -10389,17 +10389,17 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
if(this.eventHandlerCallback && silent !== true)
this.eventHandlerCallback({type:ORYX.CONFIG.EVENT_SHAPEREMOVED,shape:uiObject, parent:parent});
-
+
uiObject.bounds.unregisterCallback(this._changedCallback);
} else {
ORYX.Log.warn("remove: ORYX.Core.UIObject is not a child of this object.");
}
},
-
+
/**
* Creates shapes out of the given collection of shape objects and adds them to the canvas.
- * @example
+ * @example
* canvas.addShapeObjects({
bounds:{ lowerRight:{ y:510, x:633 }, upperLeft:{ y:146, x:210 } },
resourceId:"oryx_F0715955-50F2-403D-9851-C08CFE70F8BD",
@@ -10411,22 +10411,22 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
outgoing:[{resourceId: 'aShape'}],
target: {resourceId: 'aShape'}
});
- * @param {Object} shapeObjects
+ * @param {Object} shapeObjects
* @param {Function} [eventHandler] An event handler passed to each newly created shape (as eventHandlerCallback)
* @return {Array} A collection of ORYX.Core.Shape
* @methodOf ORYX.Core.Canvas.prototype
*/
addShapeObjects: function(shapeObjects, eventHandler){
if(!shapeObjects) return;
-
+
this.initializingShapes = true;
-
+
/*FIXME This implementation is very evil! At first, all shapes are created on
canvas. In a second step, the attributes are applied. There must be a distinction
between the configuration phase (where the outgoings, for example, are just named),
and the creation phase (where the outgoings are evaluated). This must be reflected
in code to provide a nicer API/ implementation!!! */
-
+
var addShape = function(shape, parent){
// Create a new Stencil
var stencil = ORYX.Core.StencilSet.stencil(this.getStencil().namespace() + shape.stencil.id );
@@ -10436,16 +10436,16 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
var newShape = new ShapeClass(
{'eventHandlerCallback': eventHandler},
stencil, this.facade);
-
+
// Set the resource id
newShape.resourceId = shape.resourceId;
newShape.node.id = "svg-" + shape.resourceId;
-
+
// Set parent to json object to be used later
- // Due to the nested json structure, normally shape.parent is not set/ must not be set.
+ // Due to the nested json structure, normally shape.parent is not set/ must not be set.
// In special cases, it can be easier to set this directly instead of a nested structure.
shape.parent = "#" + ((shape.parent && shape.parent.resourceId) || parent.resourceId);
-
+
// Add the shape to the canvas
this.add( newShape );
@@ -10454,31 +10454,31 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
object: newShape
};
}.bind(this);
-
+
/** Builds up recursively a flatted array of shapes, including a javascript object and json representation
* @param {Object} shape Any object that has Object#childShapes
*/
var addChildShapesRecursively = function(shape){
var addedShapes = [];
-
+
if (shape.childShapes && shape.childShapes.constructor == String)
{
shape.childShapes = JSON.parse(shape.childShapes);
}
-
+
shape.childShapes.each(function(childShape){
addedShapes.push(addShape(childShape, shape));
addedShapes = addedShapes.concat(addChildShapesRecursively(childShape));
});
-
+
return addedShapes;
}.bind(this);
var shapes = addChildShapesRecursively({
- childShapes: shapeObjects,
+ childShapes: shapeObjects,
resourceId: this.resourceId
});
-
+
// prepare deserialisation parameter
shapes.each(
@@ -10491,7 +10491,7 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
value: shape.json.properties[field]
});
}
-
+
// Outgoings
shape.json.outgoing.each(function(out){
properties.push({
@@ -10500,8 +10500,8 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
value: "#"+out.resourceId
});
});
-
- // Target
+
+ // Target
// (because of a bug, the first outgoing is taken when there is no target,
// can be removed after some time)
if(shape.object instanceof ORYX.Core.Edge) {
@@ -10514,7 +10514,7 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
});
}
}
-
+
// Bounds
if (shape.json.bounds) {
properties.push({
@@ -10523,7 +10523,7 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
value: shape.json.bounds.upperLeft.x + "," + shape.json.bounds.upperLeft.y + "," + shape.json.bounds.lowerRight.x + "," + shape.json.bounds.lowerRight.y
});
}
-
+
//Dockers [{x:40, y:50}, {x:30, y:60}] => "40 50 30 60 #"
if(shape.json.dockers){
properties.push({
@@ -10534,28 +10534,28 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
}) + " #"
});
}
-
+
//Parent
properties.push({
prefix: 'raziel',
name: 'parent',
value: shape.json.parent
});
-
+
shape.__properties = properties;
}.bind(this)
);
-
+
// Deserialize the properties from the shapes
// This can't be done earlier because Shape#deserialize expects that all referenced nodes are already there
-
+
// first, deserialize all nodes
shapes.each(function(shape) {
if(shape.object instanceof ORYX.Core.Node) {
shape.object.deserialize(shape.__properties, shape.json);
}
});
-
+
// second, deserialize all edges
shapes.each(function(shape) {
if(shape.object instanceof ORYX.Core.Edge) {
@@ -10564,11 +10564,11 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
shape.object._update();
}
});
-
+
delete this.initializingShapes;
return shapes.pluck("object");
},
-
+
/**
* Updates the size of the canvas, regarding to the containg shapes.
*/
@@ -10581,8 +10581,8 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
var b = shape.bounds;
maxWidth = Math.max( maxWidth, b.lowerRight().x + offset)
maxHeight = Math.max( maxHeight, b.lowerRight().y + offset)
- });
-
+ });
+
if( this.bounds.width() < maxWidth || this.bounds.height() < maxHeight ){
this.setSize({width: Math.max(this.bounds.width(), maxWidth), height: Math.max(this.bounds.height(), maxHeight)})
}
@@ -10591,18 +10591,18 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
getRootNode: function() {
return this.rootNode;
},
-
+
getUnderlayNode: function() {
return this.underlayNode;
},
-
+
getSvgContainer: function() {
return this.node.childNodes[1];
},
-
+
getHTMLContainer: function() {
return this._htmlContainer;
- },
+ },
/**
* Return all elements of the same highest level
@@ -10622,27 +10622,27 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
parentShape = parentShape.parent;
}
return true;
- });
+ });
},
setSize: function(size, dontSetBounds) {
if(!size || !size.width || !size.height){return;};
-
+
if(this.rootNode.parentNode){
this.rootNode.parentNode.style.width = size.width + 'px';
this.rootNode.parentNode.style.height = size.height + 'px';
}
-
+
this.rootNode.setAttributeNS(null, 'width', size.width);
this.rootNode.setAttributeNS(null, 'height', size.height);
- //this._htmlContainer.style.top = "-" + (size.height + 4) + 'px';
+ //this._htmlContainer.style.top = "-" + (size.height + 4) + 'px';
if( !dontSetBounds ){
this.bounds.set({a:{x:0,y:0},b:{x:size.width/this.zoomLevel,y:size.height/this.zoomLevel}});
}
},
-
+
/**
* Returns an SVG document of the current process.
* @param {Boolean} escapeText Use true, if you want to parse it with an XmlParser,
@@ -10651,9 +10651,9 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
getSVGRepresentation: function(escapeText) {
// Get the serialized svg image source
var svgClone = this.getRootNode().cloneNode(true);
-
+
this._removeInvisibleElements(svgClone);
-
+
var x1, y1, x2, y2;
this.getChildShapes(true).each(function(shape) {
var absBounds = shape.absoluteBounds();
@@ -10671,7 +10671,7 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
y2 = Math.max(y2, lr.y);
}
});
-
+
var margin = 50;
var width, height, tx, ty;
if(x1 == undefined) {
@@ -10685,14 +10685,14 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
tx = -x1+margin/2;
ty = -y1+margin/2;
}
-
+
// Set the width and height
svgClone.setAttributeNS(null, 'width', width + margin);
svgClone.setAttributeNS(null, 'height', height + margin);
-
+
//remove scale factor
svgClone.childNodes[1].removeAttributeNS(null, 'transform');
-
+
try{
var svgCont = svgClone.childNodes[1].childNodes[1];
svgCont.parentNode.removeChild(svgCont);
@@ -10702,33 +10702,33 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
$A(svgClone.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'tspan')).each(function(elem) {
elem.textContent = elem.textContent.escapeHTML();
});
-
+
$A(svgClone.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'text')).each(function(elem) {
if(elem.childNodes.length == 0)
elem.textContent = elem.textContent.escapeHTML();
});
}
-
+
// generating absolute urls for the pdf-exporter
$A(svgClone.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'image')).each(function(elem) {
var href = elem.getAttributeNS("http://www.w3.org/1999/xlink","href");
-
+
if(!href.match("^(http|https)://")) {
href = window.location.protocol + "//" + window.location.host + href;
elem.setAttributeNS("http://www.w3.org/1999/xlink", "href", href);
}
});
-
-
+
+
// escape all links
$A(svgClone.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'a')).each(function(elem) {
elem.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", (elem.getAttributeNS("http://www.w3.org/1999/xlink","href")||"").escapeHTML());
});
-
+
return svgClone;
},
-
- /**
+
+ /**
* Removes all nodes (and its children) that has the
* attribute visibility set to "hidden"
*/
@@ -10741,12 +10741,12 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
element.removeChild(child);
} else {
this._removeInvisibleElements(child);
- index++;
+ index++;
}
}
-
+
},
-
+
/**
* This method checks all shapes on the canvas and removes all shapes that
* contain invalid bounds values or dockers values(NaN)
@@ -10790,15 +10790,15 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
this.eventHandlerCallback(event, this);
}
},
-
+
toString: function() { return "Canvas " + this.id },
-
+
/**
* Calls {@link ORYX.Core.AbstractShape#toJSON} and adds some stencil set information.
*/
toJSON: function() {
var json = arguments.callee.$.toJSON.apply(this, arguments);
-
+
// if(ORYX.CONFIG.STENCILSET_HANDLER.length > 0) {
// json.stencilset = {
// url: this.getStencil().stencilSet().namespace()
@@ -10807,10 +10807,10 @@ ORYX.Core.Canvas = ORYX.Core.AbstractShape.extend({
json.stencilset = {
url: this.getStencil().stencilSet().source(),
namespace: this.getStencil().stencilSet().namespace()
- };
+ };
// }
-
-
+
+
return json;
}
});/*
@@ -10832,11 +10832,11 @@ function init() {
// Hack for WebKit to set the SVGElement-Classes
ORYX.Editor.setMissingClasses();
-
+
// If someone wants to create the editor instance himself
if (window.onOryxResourcesLoaded) {
window.onOryxResourcesLoaded();
- }
+ }
// Else fetch the model from server and display editor
else {
var modelId = window.location.search.substring(4);
@@ -10860,51 +10860,51 @@ if(!ORYX) {var ORYX = {};}
* @param {String} config.id Any ID that can be used inside the editor. If fullscreen=false, any HTML node with this id must be present to render the editor to this node.
* @param {boolean} [config.fullscreen=true] Render editor in fullscreen mode or not.
* @param {String} config.stencilset.url Stencil set URL.
- * @param {String} [config.stencil.id] Stencil type used for creating the canvas.
+ * @param {String} [config.stencil.id] Stencil type used for creating the canvas.
* @param {Object} config.properties Any properties applied to the canvas.
*/
ORYX.Editor = {
/** @lends ORYX.Editor.prototype */
- // Defines the global dom event listener
+ // Defines the global dom event listener
DOMEventListeners: new Hash(),
// Defines the selection
selection: [],
-
+
// Defines the current zoom level
zoomLevel:1.0,
construct: function(config) {
-
+
// initialization.
this._eventsQueue = [];
this.loadedPlugins = [];
this.pluginsData = [];
-
-
+
+
//meta data about the model for the signavio warehouse
//directory, new, name, description, revision, model (the model data)
-
+
this.modelMetaData = config;
-
+
var model = config;
-
+
this.id = model.modelId;
-
+
if(config.model) {
model = config.model;
}
-
+
if(!this.id) {
this.id = model.id;
if(!this.id) {
this.id = ORYX.Editor.provideId();
}
}
-
+
// Defines if the editor should be fullscreen or not
this.fullscreen = config.fullscreen !== false;
-
+
// Initialize the eventlistener
this._initEventListener();
@@ -10926,11 +10926,11 @@ ORYX.Editor = {
// Initializing of a callback to check loading ends
var loadPluginFinished = false;
var loadContentFinished = false;
- var initFinished = function(){
+ var initFinished = function(){
if( !loadPluginFinished || !loadContentFinished ){ return }
this._finishedLoading();
}.bind(this)
-
+
// LOAD the plugins
window.setTimeout(function(){
this.loadPlugins();
@@ -10946,16 +10946,16 @@ ORYX.Editor = {
initFinished();
}.bind(this), 200);
},
-
+
_finishedLoading: function() {
// Raise Loaded Event
this.handleEvents( {type:ORYX.CONFIG.EVENT_LOADED} )
},
-
+
_initEventListener: function(){
// Register on Events
-
+
document.documentElement.addEventListener(ORYX.CONFIG.EVENT_KEYDOWN, this.catchKeyDownEvents.bind(this), false);
document.documentElement.addEventListener(ORYX.CONFIG.EVENT_KEYUP, this.catchKeyUpEvents.bind(this), false);
@@ -10969,32 +10969,32 @@ ORYX.Editor = {
this.DOMEventListeners[ORYX.CONFIG.EVENT_MOUSEOUT] = [];
this.DOMEventListeners[ORYX.CONFIG.EVENT_SELECTION_CHANGED] = [];
this.DOMEventListeners[ORYX.CONFIG.EVENT_MOUSEMOVE] = [];
-
+
},
-
+
/**
* Generate the whole viewport of the
* Editor and initialized the Ext-Framework
- *
+ *
*/
_generateGUI: function() {
// Defines the layout height if it's NOT fullscreen
var layoutHeight = ORYX.CONFIG.WINDOW_HEIGHT;
var canvasParent = this.getCanvas().rootNode.parentNode;
-
+
jQuery("#canvasSection").append(canvasParent);
-
+
// Set the editor to the center, and refresh the size
canvasParent.parentNode.setAttributeNS(null, 'align', 'center');
canvasParent.setAttributeNS(null, 'align', 'left');
this.getCanvas().setSize({
width : ORYX.CONFIG.CANVAS_WIDTH,
height : ORYX.CONFIG.CANVAS_HEIGHT
- });
-
+ });
+
},
-
+
getAvailablePlugins: function(){
var curAvailablePlugins=ORYX.availablePlugins.clone();
curAvailablePlugins.each(function(plugin){
@@ -11029,7 +11029,7 @@ ORYX.Editor = {
},
/**
* activate Plugin
- *
+ *
* @param {String} name
* @param {Function} callback
* callback(sucess, [errorCode])
@@ -11038,28 +11038,28 @@ ORYX.Editor = {
activatePluginByName: function(name, callback, loadTry){
var match=this.getAvailablePlugins().find(function(value){return value.name==name});
- if(match && (!match.engaged || (match.engaged==='false'))){
+ if(match && (!match.engaged || (match.engaged==='false'))){
var loadedStencilSetsNamespaces = this.getStencilSets().keys();
var facade = this._getPluginFacade();
var newPlugin;
var me=this;
ORYX.Log.debug("Initializing plugin '%0'", match.name);
-
+
if (!match.requires || !match.requires.namespaces || match.requires.namespaces.any(function(req){ return loadedStencilSetsNamespaces.indexOf(req) >= 0 }) ){
if(!match.notUsesIn || !match.notUsesIn.namespaces || !match.notUsesIn.namespaces.any(function(req){ return loadedStencilSetsNamespaces.indexOf(req) >= 0 })){
-
+
try {
-
+
var className = eval(match.name);
var newPlugin = new className(facade, match);
newPlugin.type = match.name;
-
+
// If there is an GUI-Plugin, they get all Plugins-Offer-Meta-Data
- if (newPlugin.registryChanged)
+ if (newPlugin.registryChanged)
newPlugin.registryChanged(me.pluginsData);
-
+
// If there have an onSelection-Method it will pushed to the Editor Event-Handler
- if (newPlugin.onSelectionChanged)
+ if (newPlugin.onSelectionChanged)
me.registerOnEvent(ORYX.CONFIG.EVENT_SELECTION_CHANGED, newPlugin.onSelectionChanged.bind(newPlugin));
this.loadedPlugins.push(newPlugin);
this.loadedPlugins.each(function(loaded){
@@ -11067,7 +11067,7 @@ ORYX.Editor = {
loaded.registryChanged(this.pluginsData);
}.bind(me));
callback(true);
-
+
} catch(e) {
ORYX.Log.warn("Plugin %0 is not available", match.name);
if(!!loadTry){
@@ -11080,13 +11080,13 @@ ORYX.Editor = {
callback(false,"NOTUSEINSTENCILSET");
ORYX.Log.info("Plugin need a stencilset which is not loaded'", match.name);
}
-
+
} else {
callback(false,"REQUIRESTENCILSET");
ORYX.Log.info("Plugin need a stencilset which is not loaded'", match.name);
}
-
+
}else{
callback(false, match?"NOTFOUND":"YETACTIVATED");
//TODO error handling
@@ -11097,14 +11097,14 @@ ORYX.Editor = {
* Laden der Plugins
*/
loadPlugins: function() {
-
+
// if there should be plugins but still are none, try again.
// TODO this should wait for every plugin respectively.
/*if (!ORYX.Plugins && ORYX.availablePlugins.length > 0) {
window.setTimeout(this.loadPlugins.bind(this), 100);
return;
}*/
-
+
var me = this;
var newPlugins = [];
@@ -11113,16 +11113,16 @@ ORYX.Editor = {
// Available Plugins will be initalize
var facade = this._getPluginFacade();
-
+
// If there is an Array where all plugins are described, than only take those
// (that comes from the usage of oryx with a mashup api)
if( ORYX.MashupAPI && ORYX.MashupAPI.loadablePlugins && ORYX.MashupAPI.loadablePlugins instanceof Array ){
-
+
// Get the plugins from the available plugins (those who are in the plugins.xml)
ORYX.availablePlugins = $A(ORYX.availablePlugins).findAll(function(value){
return ORYX.MashupAPI.loadablePlugins.include( value.name )
})
-
+
// Add those plugins to the list, which are only in the loadablePlugins list
ORYX.MashupAPI.loadablePlugins.each(function( className ){
if( !(ORYX.availablePlugins.find(function(val){ return val.name == className }))){
@@ -11130,8 +11130,8 @@ ORYX.Editor = {
}
})
}
-
-
+
+
ORYX.availablePlugins.each(function(value) {
ORYX.Log.debug("Initializing plugin '%0'", value.name);
if( (!value.requires || !value.requires.namespaces || value.requires.namespaces.any(function(req){ return loadedStencilSetsNamespaces.indexOf(req) >= 0 }) ) &&
@@ -11150,11 +11150,11 @@ ORYX.Editor = {
} catch(e) {
ORYX.Log.warn("Plugin %0 is not available %1", value.name, e);
}
-
+
} else {
ORYX.Log.info("Plugin need a stencilset which is not loaded'", value.name);
}
-
+
});
newPlugins.each(function(value) {
@@ -11168,11 +11168,11 @@ ORYX.Editor = {
});
this.loadedPlugins = newPlugins;
-
+
this.registerPluginsOnKeyEvents();
-
+
this.setSelection();
-
+
},
/**
@@ -11191,19 +11191,19 @@ ORYX.Editor = {
// Get any root stencil type
stencilType = this.getStencilSets().values()[0].findRootStencilName();
}
-
+
// get the stencil associated with the type
var canvasStencil = ORYX.Core.StencilSet.stencil(stencilType);
-
- if (!canvasStencil)
+
+ if (!canvasStencil)
ORYX.Log.fatal("Initialisation failed, because the stencil with the type %0 is not part of one of the loaded stencil sets.", stencilType);
-
+
// create all dom
// TODO fix border, so the visible canvas has a double border and some spacing to the scrollbars
var div = ORYX.Editor.graft("http://www.w3.org/1999/xhtml", null, ['div']);
// set class for custom styling
div.addClassName("ORYX_Editor");
-
+
// create the canvas
this._canvas = new ORYX.Core.Canvas({
width : ORYX.CONFIG.CANVAS_WIDTH,
@@ -11212,7 +11212,7 @@ ORYX.Editor = {
id : this.id,
parentNode : div
}, canvasStencil, this._getPluginFacade());
-
+
if (canvasConfig) {
// Migrate canvasConfig to an RDF-like structure
//FIXME this isn't nice at all because we don't want rdf any longer
@@ -11224,10 +11224,10 @@ ORYX.Editor = {
value: canvasConfig[field]
});
}
-
+
this._canvas.deserialize(properties);
}
-
+
},
/**
@@ -11256,23 +11256,23 @@ ORYX.Editor = {
setSelection: this.setSelection.bind(this),
updateSelection: this.updateSelection.bind(this),
getCanvas: this.getCanvas.bind(this),
-
+
importJSON: this.importJSON.bind(this),
getJSON: this.getJSON.bind(this),
getSerializedJSON: this.getSerializedJSON.bind(this),
-
+
executeCommands: this.executeCommands.bind(this),
isExecutingCommands: this.isExecutingCommands.bind(this),
-
+
registerOnEvent: this.registerOnEvent.bind(this),
unregisterOnEvent: this.unregisterOnEvent.bind(this),
raiseEvent: this.handleEvents.bind(this),
enableEvent: this.enableEvent.bind(this),
disableEvent: this.disableEvent.bind(this),
-
+
eventCoordinates: this.eventCoordinates.bind(this),
eventCoordinatesXY: this.eventCoordinatesXY.bind(this),
-
+
getModelMetaData: this.getModelMetaData.bind(this)
};
@@ -11292,24 +11292,24 @@ ORYX.Editor = {
* @param [] Array of commands
*/
executeCommands: function(commands){
-
+
if (!this.commandStack){
this.commandStack = [];
}
if (!this.commandStackExecuted){
this.commandStackExecuted = [];
}
-
-
+
+
this.commandStack = [].concat(this.commandStack)
.concat(commands);
-
+
// Check if already executes
if (this.commandExecuting){ return; }
-
+
// Start execution
this.commandExecuting = true;
-
+
// Iterate over all commands
while(this.commandStack.length > 0){
var command = this.commandStack.shift();
@@ -11317,23 +11317,23 @@ ORYX.Editor = {
command.execute();
this.commandStackExecuted.push(command);
}
-
+
// Raise event for executing commands
this.handleEvents({
type : ORYX.CONFIG.EVENT_EXECUTE_COMMANDS,
commands : this.commandStackExecuted
});
-
+
// Remove temporary vars
delete this.commandStack;
delete this.commandStackExecuted;
delete this.commandExecuting;
-
-
+
+
this.updateSelection();
},
-
+
/**
* Returns JSON of underlying canvas (calls ORYX.Canvas#toJSON()).
* @return {Object} Returns JSON representation as JSON object.
@@ -11344,7 +11344,7 @@ ORYX.Editor = {
canvasJSON.ssextensions = this.getStencilSets().values()[0].extensions().keys().findAll(function(sse){ return !sse.endsWith('/meta#') });
return canvasJSON;
},
-
+
/**
* Serializes a call to toJSON().
* @return {String} Returns JSON representation as string.
@@ -11352,7 +11352,7 @@ ORYX.Editor = {
getSerializedJSON: function(){
return JSON.stringify(this.getJSON());
},
-
+
/**
* Imports shapes in JSON as expected by {@link ORYX.Editor#loadSerialized}
* @param {Object|String} jsonObject The (serialized) json object to be imported
@@ -11360,12 +11360,12 @@ ORYX.Editor = {
* @throws {SyntaxError} If the serialized json object contains syntax errors
*/
importJSON: function(jsonObject, noSelectionAfterImport) {
-
+
try {
jsonObject = this.renewResourceIds(jsonObject);
} catch(error){
throw error;
- }
+ }
//check, if the imported json model can be loaded in this editor
// (stencil set has to fit)
if(jsonObject.stencilset.namespace && jsonObject.stencilset.namespace !== this.getCanvas().getStencil().stencilSet().namespace()) {
@@ -11382,16 +11382,16 @@ ORYX.Editor = {
this.parents = new Hash();
this.selection = this.facade.getSelection();
this.loadSerialized = loadSerializedCB;
- },
+ },
execute: function(){
-
+
if (!this.shapes) {
- // Import the shapes out of the serialization
- this.shapes = this.loadSerialized( this.jsonObject );
-
+ // Import the shapes out of the serialization
+ this.shapes = this.loadSerialized( this.jsonObject );
+
//store all connections
this.shapes.each(function(shape) {
-
+
if (shape.getDockers) {
var dockers = shape.getDockers();
if (dockers) {
@@ -11403,7 +11403,7 @@ ORYX.Editor = {
}
}
}
-
+
//store parents
this.parents[shape.id] = shape.parent;
}.bind(this));
@@ -11411,57 +11411,57 @@ ORYX.Editor = {
this.shapes.each(function(shape) {
this.parents[shape.id].add(shape);
}.bind(this));
-
+
this.connections.each(function(con) {
con[0].setDockedShape(con[1]);
con[0].setReferencePoint(con[2]);
con[0].update();
});
}
-
+
//this.parents.values().uniq().invoke("update");
- this.facade.getCanvas().update();
-
+ this.facade.getCanvas().update();
+
if(!this.noSelection)
this.facade.setSelection(this.shapes);
else
this.facade.updateSelection();
-
- // call updateSize again, because during loadSerialized the edges' bounds
+
+ // call updateSize again, because during loadSerialized the edges' bounds
// are not yet initialized properly
- this.facade.getCanvas().updateSize();
-
+ this.facade.getCanvas().updateSize();
+
},
rollback: function(){
var selection = this.facade.getSelection();
-
+
this.shapes.each(function(shape) {
selection = selection.without(shape);
this.facade.deleteShape(shape);
}.bind(this));
-
+
/*this.parents.values().uniq().each(function(parent) {
if(!this.shapes.member(parent))
parent.update();
}.bind(this));*/
-
+
this.facade.getCanvas().update();
-
+
this.facade.setSelection(selection);
}
})
-
- var command = new commandClass(jsonObject,
+
+ var command = new commandClass(jsonObject,
this.loadSerialized.bind(this),
noSelectionAfterImport,
this._getPluginFacade());
-
- this.executeCommands([command]);
-
+
+ this.executeCommands([command]);
+
return command.shapes.clone();
}
},
-
+
/**
* This method renew all resource Ids and according references.
* Warning: The implementation performs a substitution on the serialized object for
@@ -11483,24 +11483,24 @@ ORYX.Editor = {
}
} else {
var serJsonObject = JSON.stringify(jsonObject);
- }
-
+ }
+
// collect all resourceIds recursively
var collectResourceIds = function(shapes){
if(!shapes) return [];
-
+
return shapes.map(function(shape){
return collectResourceIds(shape.childShapes).concat(shape.resourceId);
}).flatten();
}
var resourceIds = collectResourceIds(jsonObject.childShapes);
-
+
// Replace each resource id by a new one
resourceIds.each(function(oldResourceId){
var newResourceId = ORYX.Editor.provideId();
serJsonObject = serJsonObject.replace(new RegExp(oldResourceId, 'g'), newResourceId);
});
-
+
return JSON.parse(serJsonObject);
},
@@ -11533,7 +11533,7 @@ ORYX.Editor = {
* @param {Object} model Description of the model to load.
* @param {Array} [model.ssextensions] List of stenctil set extensions.
* @param {String} model.stencilset.url
- * @param {String} model.stencil.id
+ * @param {String} model.stencil.id
* @param {Array} model.childShapes
* @param {Array} [model.properties]
* @param {String} model.resourceId
@@ -11542,11 +11542,11 @@ ORYX.Editor = {
*/
loadSerialized: function(model, requestMeta){
var canvas = this.getCanvas();
-
+
// Bugfix (cf. http://code.google.com/p/oryx-editor/issues/detail?id=240)
// Deserialize the canvas' stencil set extensions properties first!
this.loadSSExtensions(model.ssextensions);
-
+
// Load Meta Data Extension if available
// #Signavio
if (requestMeta === true) {
@@ -11555,9 +11555,9 @@ ORYX.Editor = {
this.loadSSExtension(metaDataExtension);
}
}
-
+
var shapes = this.getCanvas().addShapeObjects(model.childShapes, this.handleEvents.bind(this));
-
+
if(model.properties) {
for(key in model.properties) {
var value = model.properties[key];
@@ -11568,17 +11568,17 @@ ORYX.Editor = {
this.getCanvas().setProperty("oryx-" + key, value);
}
}
-
-
+
+
this.getCanvas().updateSize();
-
+
// Force to update the selection
this.selection = [null];
this.setSelection([]);
-
+
return shapes;
},
-
+
/**
* Return the namespace of the extension which
* provided all the self defined meta data
@@ -11589,15 +11589,15 @@ ORYX.Editor = {
if (!this.ss_extensions_def||!(this.ss_extensions_def.extensions instanceof Array)){
return null;
}
-
+
var stencilsets = this.getStencilSets();
var extension = this.ss_extensions_def.extensions.find(function(ex){
return !!stencilsets[ex["extends"]] && ex.namespace.endsWith("/meta#");
});
-
- return extension ? extension.namespace || null : null;
+
+ return extension ? extension.namespace || null : null;
},
-
+
/**
* Calls ORYX.Editor.prototype.ss_extension_namespace for each element
* @param {Array} ss_extension_namespaces An array of stencil set extension namespaces.
@@ -11609,44 +11609,44 @@ ORYX.Editor = {
this.loadSSExtension(ss_extension_namespace);
}.bind(this));
},
-
+
/**
* Loads a stencil set extension.
* The stencil set extensions definiton file must already
* be loaded when the editor is initialized.
*/
- loadSSExtension: function(ss_extension_namespace) {
-
+ loadSSExtension: function(ss_extension_namespace) {
+
if (this.ss_extensions_def) {
var extension = this.ss_extensions_def.extensions.find(function(ex){
return (ex.namespace == ss_extension_namespace);
});
-
+
if (!extension) {
return;
}
-
+
var stencilset = this.getStencilSets()[extension["extends"]];
-
+
if (!stencilset) {
return;
}
-
+
// Check if absolute or relative url
if ((extension["definition"]||"").startsWith("/")){
stencilset.addExtension(extension["definition"])
} else {
stencilset.addExtension(ORYX.CONFIG.SS_EXTENSIONS_FOLDER + extension["definition"])
}
-
+
//stencilset.addExtension("/oryx/build/stencilsets/extensions/" + extension["definition"])
this.getRules().initializeRules(stencilset);
-
+
this._getPluginFacade().raiseEvent({
type: ORYX.CONFIG.EVENT_STENCIL_SET_LOADED
});
}
-
+
},
disableEvent: function(eventType){
@@ -11666,11 +11666,11 @@ ORYX.Editor = {
if(eventType == ORYX.CONFIG.EVENT_KEYDOWN) {
this._keydownEnabled = true;
}
-
+
if(eventType == ORYX.CONFIG.EVENT_KEYUP) {
this._keyupEnabled = true;
}
-
+
if(this.DOMEventListeners.keys().member("disable_" + eventType)) {
var value = this.DOMEventListeners.remove("disable_" + eventType);
this.DOMEventListeners[eventType] = value;
@@ -11701,14 +11701,14 @@ ORYX.Editor = {
return this.selection || [];
},
- getStencilSets: function() {
- return ORYX.Core.StencilSet.stencilSets(this.id);
+ getStencilSets: function() {
+ return ORYX.Core.StencilSet.stencilSets(this.id);
},
-
+
getRules: function() {
return ORYX.Core.StencilSet.rules(this.id);
},
-
+
loadStencilSet: function(source) {
try {
ORYX.Core.StencilSet.loadStencilSet(source, this.modelMetaData, this.id);
@@ -11723,96 +11723,96 @@ ORYX.Editor = {
this.pluginsData.push(pluginData);
}
},
-
+
/**
* It creates an new event or adds the callback, if already existing,
* for the key combination that the plugin passes in keyCodes attribute
* of the offer method.
- *
+ *
* The new key down event fits the schema:
* key.event[.metactrl][.alt][.shift].'thekeyCode'
*/
registerPluginsOnKeyEvents: function() {
this.pluginsData.each(function(pluginData) {
-
+
if(pluginData.keyCodes) {
-
+
pluginData.keyCodes.each(function(keyComb) {
var eventName = "key.event";
-
+
/* Include key action */
eventName += '.' + keyComb.keyAction;
-
+
if(keyComb.metaKeys) {
/* Register on ctrl or apple meta key as meta key */
if(keyComb.metaKeys.
indexOf(ORYX.CONFIG.META_KEY_META_CTRL) > -1) {
eventName += "." + ORYX.CONFIG.META_KEY_META_CTRL;
}
-
+
/* Register on alt key as meta key */
if(keyComb.metaKeys.
indexOf(ORYX.CONFIG.META_KEY_ALT) > -1) {
eventName += '.' + ORYX.CONFIG.META_KEY_ALT;
}
-
+
/* Register on shift key as meta key */
if(keyComb.metaKeys.
indexOf(ORYX.CONFIG.META_KEY_SHIFT) > -1) {
eventName += '.' + ORYX.CONFIG.META_KEY_SHIFT;
- }
+ }
}
-
+
/* Register on the actual key */
if(keyComb.keyCode) {
eventName += '.' + keyComb.keyCode;
}
-
+
/* Register the event */
ORYX.Log.debug("Register Plugin on Key Event: %0", eventName);
if (pluginData.toggle === true && pluginData.buttonInstance) {
this.registerOnEvent(eventName, function(){
- pluginData.buttonInstance.toggle(!pluginData.buttonInstance.pressed); // Toggle
+ pluginData.buttonInstance.toggle(!pluginData.buttonInstance.pressed); // Toggle
pluginData.functionality.call(pluginData, pluginData.buttonInstance, pluginData.buttonInstance.pressed); // Call function
});
} else {
this.registerOnEvent(eventName, pluginData.functionality)
}
-
+
}.bind(this));
}
}.bind(this));
},
-
+
isEqual: function(a,b){
return a === b || (a.length === b.length && a.all(function(r){ return b.include(r) }))
},
-
+
isDirty: function(a){
return a.any(function(shape){ return shape.isPropertyChanged() })
},
setSelection: function(elements, subSelectionElement, force) {
-
+
if (!elements) { elements = []; }
if (!(elements instanceof Array)) { elements = [elements]; }
-
+
elements = elements.findAll(function(n){ return n && n instanceof ORYX.Core.Shape });
-
+
if (elements[0] instanceof ORYX.Core.Canvas) {
elements = [];
}
-
+
if (!force && this.isEqual(this.selection, elements) && !this.isDirty(elements)){
return;
}
-
+
this.selection = elements;
this._subSelection = subSelectionElement;
-
+
this.handleEvents({type:ORYX.CONFIG.EVENT_SELECTION_CHANGED, elements:elements, subSelection: subSelectionElement, force: !!force})
},
-
+
updateSelection: function() {
this.setSelection(this.selection, this._subSelection, true);
/*var s = this.selection;
@@ -11823,7 +11823,7 @@ ORYX.Editor = {
getCanvas: function() {
return this._canvas;
},
-
+
/**
* option = {
@@ -11840,25 +11840,25 @@ ORYX.Editor = {
createShape: function(option) {
if(option && option.serialize && option.serialize instanceof Array){
-
+
var type = option.serialize.find(function(obj){return (obj.prefix+"-"+obj.name) == "oryx-type"});
var stencil = ORYX.Core.StencilSet.stencil(type.value);
-
+
if(stencil.type() == 'node'){
- var newShapeObject = new ORYX.Core.Node({'eventHandlerCallback':this.handleEvents.bind(this)}, stencil, this._getPluginFacade());
+ var newShapeObject = new ORYX.Core.Node({'eventHandlerCallback':this.handleEvents.bind(this)}, stencil, this._getPluginFacade());
} else {
- var newShapeObject = new ORYX.Core.Edge({'eventHandlerCallback':this.handleEvents.bind(this)}, stencil, this._getPluginFacade());
+ var newShapeObject = new ORYX.Core.Edge({'eventHandlerCallback':this.handleEvents.bind(this)}, stencil, this._getPluginFacade());
}
-
+
this.getCanvas().add(newShapeObject);
newShapeObject.deserialize(option.serialize);
-
+
return newShapeObject;
}
// If there is no argument, throw an exception
if(!option || !option.type || !option.namespace) { throw "To create a new shape you have to give an argument with type and namespace";}
-
+
var canvas = this.getCanvas();
var newShapeObject;
@@ -11873,7 +11873,7 @@ ORYX.Editor = {
} else {
newShapeObject = new ORYX.Core.Edge({'eventHandlerCallback':this.handleEvents.bind(this)}, sset.stencil(shapetype), this._getPluginFacade())
}
-
+
// when there is a template, inherit the properties.
if(option.template) {
@@ -11887,53 +11887,53 @@ ORYX.Editor = {
} else {
canvas.add(newShapeObject);
}
-
-
+
+
// Set the position
var point = option.position ? option.position : {x:100, y:200};
-
-
+
+
var con;
// If there is create a shape and in the argument there is given an ConnectingType and is instance of an edge
if(option.connectingType && option.connectedShape && !(newShapeObject instanceof ORYX.Core.Edge)) {
// there will be create a new Edge
con = new ORYX.Core.Edge({'eventHandlerCallback':this.handleEvents.bind(this)}, sset.stencil(option.connectingType));
-
+
// And both endings dockers will be referenced to the both shapes
con.dockers.first().setDockedShape(option.connectedShape);
-
+
var magnet = option.connectedShape.getDefaultMagnet()
var cPoint = magnet ? magnet.bounds.center() : option.connectedShape.bounds.midPoint();
con.dockers.first().setReferencePoint( cPoint );
con.dockers.last().setDockedShape(newShapeObject);
- con.dockers.last().setReferencePoint(newShapeObject.getDefaultMagnet().bounds.center());
-
+ con.dockers.last().setReferencePoint(newShapeObject.getDefaultMagnet().bounds.center());
+
// The Edge will be added to the canvas and be updated
- canvas.add(con);
+ canvas.add(con);
//con.update();
-
- }
-
+
+ }
+
// Move the new Shape to the position
if(newShapeObject instanceof ORYX.Core.Edge && option.connectedShape) {
newShapeObject.dockers.first().setDockedShape(option.connectedShape);
-
+
if( option.connectedShape instanceof ORYX.Core.Node ){
- newShapeObject.dockers.first().setReferencePoint(option.connectedShape.getDefaultMagnet().bounds.center());
- newShapeObject.dockers.last().bounds.centerMoveTo(point);
+ newShapeObject.dockers.first().setReferencePoint(option.connectedShape.getDefaultMagnet().bounds.center());
+ newShapeObject.dockers.last().bounds.centerMoveTo(point);
} else {
- newShapeObject.dockers.first().setReferencePoint(option.connectedShape.bounds.midPoint());
+ newShapeObject.dockers.first().setReferencePoint(option.connectedShape.bounds.midPoint());
}
-
+
var start = newShapeObject.dockers.first();
var end = newShapeObject.dockers.last();
-
+
if(start.getDockedShape() && end.getDockedShape()) {
var startPoint = start.getAbsoluteReferencePoint();
var endPoint = end.getAbsoluteReferencePoint();
-
+
var docker = newShapeObject.createDocker();
docker.bounds.centerMoveTo({
x: startPoint.x + (endPont.x - startPoint.x) / 2,
@@ -11942,50 +11942,50 @@ ORYX.Editor = {
}
} else {
-
+
var b = newShapeObject.bounds
if( newShapeObject instanceof ORYX.Core.Node && newShapeObject.dockers.length == 1){
b = newShapeObject.dockers.first().bounds
}
-
+
b.centerMoveTo(point);
-
+
var upL = b.upperLeft();
b.moveBy( -Math.min(upL.x, 0) , -Math.min(upL.y, 0) )
-
+
var lwR = b.lowerRight();
b.moveBy( -Math.max(lwR.x-canvas.bounds.width(), 0) , -Math.max(lwR.y-canvas.bounds.height(), 0) )
-
+
}
-
+
// Update the shape
if (newShapeObject instanceof ORYX.Core.Edge) {
newShapeObject._update(false);
}
-
+
// And refresh the selection
if(!(newShapeObject instanceof ORYX.Core.Edge)&&!(option.dontUpdateSelection)) {
this.setSelection([newShapeObject]);
}
-
+
if(con && con.alignDockers) {
//con.alignDockers();
- }
+ }
if(newShapeObject.alignDockers) {
newShapeObject.alignDockers();
}
return newShapeObject;
},
-
+
deleteShape: function(shape) {
-
+
if (!shape || !shape.parent){ return }
-
+
//remove shape from parent
// this also removes it from DOM
shape.parent.remove(shape);
-
+
//delete references to outgoing edges
shape.getOutgoingShapes().each(function(os) {
var docker = os.getDockers().first();
@@ -11993,7 +11993,7 @@ ORYX.Editor = {
docker.setDockedShape(undefined);
}
});
-
+
//delete references to incoming edges
shape.getIncomingShapes().each(function(is) {
var docker = is.getDockers().last();
@@ -12001,19 +12001,19 @@ ORYX.Editor = {
docker.setDockedShape(undefined);
}
});
-
+
//delete references of the shape's dockers
shape.getDockers().each(function(docker) {
docker.setDockedShape(undefined);
});
},
-
+
/**
* Returns an object with meta data about the model.
* Like name, description, ...
- *
+ *
* Empty object with the current backend.
- *
+ *
* @return {Object} Meta data about the model
*/
getModelMetaData: function() {
@@ -12021,7 +12021,7 @@ ORYX.Editor = {
},
/* Event-Handler Methods */
-
+
/**
* Helper method to execute an event immediately. The event is not
* scheduled in the _eventsQueue. Needed to handle Layout-Callbacks.
@@ -12029,7 +12029,7 @@ ORYX.Editor = {
_executeEventImmediately: function(eventObj) {
if(this.DOMEventListeners.keys().member(eventObj.event.type)) {
this.DOMEventListeners[eventObj.event.type].each((function(value) {
- value(eventObj.event, eventObj.arg);
+ value(eventObj.event, eventObj.arg);
}).bind(this));
}
},
@@ -12042,14 +12042,14 @@ ORYX.Editor = {
}
this._queueRunning = false;
},
-
+
/**
* Leitet die Events an die Editor-Spezifischen Event-Methoden weiter
* @param {Object} event Event , welches gefeuert wurde
* @param {Object} uiObj Target-UiObj
*/
handleEvents: function(event, uiObj) {
-
+
ORYX.Log.trace("Dispatching event type %0 on %1", event.type, uiObj);
switch(event.type) {
@@ -12075,11 +12075,11 @@ ORYX.Editor = {
} else {
this._eventsQueue.push({event: event, arg: uiObj});
}
-
+
if(!this._queueRunning) {
this._executeEvents();
}
-
+
// TODO: Make this return whether no listener returned false.
// So that, when one considers bubbling undesireable, it won't happen.
return false;
@@ -12100,28 +12100,28 @@ ORYX.Editor = {
return;
}
/* assure we have the current event. */
- if (!event)
+ if (!event)
event = window.event;
-
+
// Checks if the event comes from some input field
if (!this.isValidEvent(event)){
return;
}
-
+
/* Create key up event type */
var keyUpEvent = this.createKeyCombEvent(event, ORYX.CONFIG.KEY_ACTION_UP);
-
+
ORYX.Log.debug("Key Event to handle: %0", keyUpEvent);
/* forward to dispatching. */
this.handleEvents({type: keyUpEvent, event:event});
},
-
+
/**
- * Catches all key down events and forward the appropriated event to
+ * Catches all key down events and forward the appropriated event to
* dispatching concerning to the pressed keys.
- *
- * @param {Event}
+ *
+ * @param {Event}
* The key down event to handle
*/
catchKeyDownEvents: function(event) {
@@ -12129,9 +12129,9 @@ ORYX.Editor = {
return;
}
/* Assure we have the current event. */
- if (!event)
+ if (!event)
event = window.event;
-
+
/* Fixed in FF3 */
// This is a mac-specific fix. The mozilla event object has no knowledge
// of meta key modifier on osx, however, it is needed for certain
@@ -12143,24 +12143,24 @@ ORYX.Editor = {
// event.appleMetaKey = true;
//}
//this.__currentKey = pressedKey;
-
+
// Checks if the event comes from some input field
if (!this.isValidEvent(event)){
return;
}
-
+
/* Create key up event type */
var keyDownEvent = this.createKeyCombEvent(event, ORYX.CONFIG.KEY_ACTION_DOWN);
-
+
ORYX.Log.debug("Key Event to handle: %0", keyDownEvent);
-
+
/* Forward to dispatching. */
this.handleEvents({type: keyDownEvent,event: event});
},
-
+
/**
* Creates the event type name concerning to the pressed keys.
- *
+ *
* @param {Event} keyDownEvent
* The source keyDownEvent to build up the event name
*/
@@ -12169,41 +12169,41 @@ ORYX.Editor = {
/* Get the currently pressed key code. */
var pressedKey = keyEvent.which || keyEvent.keyCode;
//this.__currentKey = pressedKey;
-
+
/* Event name */
var eventName = "key.event";
-
+
/* Key action */
if(keyAction) {
eventName += "." + keyAction;
}
-
+
/* Ctrl or apple meta key is pressed */
if(keyEvent.ctrlKey || keyEvent.metaKey) {
eventName += "." + ORYX.CONFIG.META_KEY_META_CTRL;
}
-
+
/* Alt key is pressed */
if(keyEvent.altKey) {
eventName += "." + ORYX.CONFIG.META_KEY_ALT;
}
-
+
/* Alt key is pressed */
if(keyEvent.shiftKey) {
eventName += "." + ORYX.CONFIG.META_KEY_SHIFT;
}
-
+
/* Return the composed event name */
return eventName + "." + pressedKey;
},
_handleMouseDown: function(event, uiObj) {
-
+
// get canvas.
var canvas = this.getCanvas();
// Try to get the focus
canvas.focus()
-
+
// find the shape that is responsible for this element's id.
var element = event.currentTarget;
var elementController = uiObj;
@@ -12242,7 +12242,7 @@ ORYX.Editor = {
// not selected, add it to the selection.
} else if(currentIsSelectable && modifierKeyPressed
&& !currentIsSelected) {
-
+
var newSelection = this.selection.clone();
newSelection.push(elementController)
this.setSelection(newSelection)
@@ -12269,9 +12269,9 @@ ORYX.Editor = {
// Rule #2: When clicked on something that is neither
// selectable nor movable, clear the selection, and return.
} else if (!currentIsSelectable && !currentIsMovable) {
-
+
this.setSelection([]);
-
+
ORYX.Log.trace("Rule #2 applied for mouse down on %0", element.id);
return;
@@ -12281,25 +12281,25 @@ ORYX.Editor = {
// the movedObject to the current one and enable Drag. Dockers will
// be processed in the dragDocker plugin.
} else if(!currentIsSelectable && currentIsMovable && !(elementController instanceof ORYX.Core.Controls.Docker)) {
-
+
// TODO: If there is any moveable elements, do this in a plugin
//ORYX.Core.UIEnableDrag(event, elementController);
ORYX.Log.trace("Rule #7 applied for mouse down on %0", element.id);
-
- // Rule #8: When the element is selectable and is currently selected and no
+
+ // Rule #8: When the element is selectable and is currently selected and no
// modifier key is pressed
} else if(currentIsSelectable && currentIsSelected &&
!modifierKeyPressed) {
-
+
this._subSelection = this._subSelection != elementController ? elementController : undefined;
-
+
this.setSelection(this.selection, this._subSelection);
-
+
ORYX.Log.trace("Rule #8 applied for mouse down on %0", element.id);
}
-
-
+
+
// prevent event from bubbling, return.
//Event.stop(event);
return;
@@ -12342,7 +12342,7 @@ ORYX.Editor = {
var svgPoint = canvas.node.ownerSVGElement.createSVGPoint();
svgPoint.x = event.clientX;
svgPoint.y = event.clientY;
-
+
var additionalIEZoom = 1;
if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) {
var ua = navigator.userAgent;
@@ -12354,16 +12354,16 @@ ORYX.Editor = {
}
}
}
-
+
if (additionalIEZoom !== 1) {
svgPoint.x = svgPoint.x * additionalIEZoom;
svgPoint.y = svgPoint.y * additionalIEZoom;
}
-
+
var matrix = canvas.node.getScreenCTM();
return svgPoint.matrixTransform(matrix.inverse());
},
-
+
eventCoordinatesXY: function(x, y) {
var canvas = this.getCanvas();
@@ -12371,7 +12371,7 @@ ORYX.Editor = {
var svgPoint = canvas.node.ownerSVGElement.createSVGPoint();
svgPoint.x = x;
svgPoint.y = y;
-
+
var additionalIEZoom = 1;
if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) {
var ua = navigator.userAgent;
@@ -12383,12 +12383,12 @@ ORYX.Editor = {
}
}
}
-
+
if (additionalIEZoom !== 1) {
svgPoint.x = svgPoint.x * additionalIEZoom;
svgPoint.y = svgPoint.y * additionalIEZoom;
}
-
+
var matrix = canvas.node.getScreenCTM();
return svgPoint.matrixTransform(matrix.inverse());
}
@@ -12506,39 +12506,39 @@ ORYX.Editor.resizeFix = function() {
window.resizeBy(1,1);
window.resizeBy(-1,-1);
ORYX.Editor._resizefixTimeout = null;
- }, 100);
+ }, 100);
}
};
ORYX.Editor.Cookie = {
-
+
callbacks:[],
-
+
onChange: function( callback, interval ){
-
+
this.callbacks.push(callback);
this.start( interval )
-
+
},
-
+
start: function( interval ){
-
+
if( this.pe ){
return;
}
-
+
var currentString = document.cookie;
-
+
this.pe = new PeriodicalExecuter( function(){
-
+
if( currentString != document.cookie ){
currentString = document.cookie;
this.callbacks.each(function(callback){ callback(this.getParams()) }.bind(this));
}
-
- }.bind(this), ( interval || 10000 ) / 1000);
+
+ }.bind(this), ( interval || 10000 ) / 1000);
},
-
+
stop: function(){
if( this.pe ){
@@ -12546,16 +12546,16 @@ ORYX.Editor.Cookie = {
this.pe = null;
}
},
-
+
getParams: function(){
var res = {};
-
+
var p = document.cookie;
p.split("; ").each(function(param){ res[param.split("=")[0]] = param.split("=")[1];});
-
+
return res;
- },
-
+ },
+
toString: function(){
return document.cookie;
}
@@ -12563,13 +12563,13 @@ ORYX.Editor.Cookie = {
/**
* Workaround for SAFARI/Webkit, because
- * when trying to check SVGSVGElement of instanceof there is
+ * when trying to check SVGSVGElement of instanceof there is
* raising an error
- *
+ *
*/
ORYX.Editor.SVGClassElementsAreAvailable = true;
ORYX.Editor.setMissingClasses = function() {
-
+
try {
SVGElement;
} catch(e) {
@@ -12586,12 +12586,12 @@ ORYX.Editor.setMissingClasses = function() {
SVGLineElement = document.createElementNS('http://www.w3.org/2000/svg', 'line').toString();
SVGPolylineElement = document.createElementNS('http://www.w3.org/2000/svg', 'polyline').toString();
SVGPolygonElement = document.createElementNS('http://www.w3.org/2000/svg', 'polygon').toString();
-
+
}
-
+
}
ORYX.Editor.checkClassType = function( classInst, classType ) {
-
+
if( ORYX.Editor.SVGClassElementsAreAvailable ){
return classInst instanceof classType
} else {
@@ -12616,79 +12616,79 @@ if(!ORYX.Core) {ORYX.Core = {};}
new function(){
-
+
ORYX.Core.UIEnableDrag = function(event, uiObj, option) {
-
+
this.uiObj = uiObj;
var upL = uiObj.bounds.upperLeft();
-
+
var a = uiObj.node.getScreenCTM();
this.faktorXY= {x: a.a, y: a.d};
-
+
this.scrollNode = uiObj.node.ownerSVGElement.parentNode.parentNode;
-
+
this.offSetPosition = {
x: Event.pointerX(event) - (upL.x * this.faktorXY.x),
y: Event.pointerY(event) - (upL.y * this.faktorXY.y)};
-
+
this.offsetScroll = {x:this.scrollNode.scrollLeft,y:this.scrollNode.scrollTop};
-
+
this.dragCallback = ORYX.Core.UIDragCallback.bind(this);
this.disableCallback = ORYX.Core.UIDisableDrag.bind(this);
-
+
this.movedCallback = option ? option.movedCallback : undefined;
this.upCallback = option ? option.upCallback : undefined;
-
+
document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEUP, this.disableCallback, true);
document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.dragCallback , false);
-
+
};
-
+
ORYX.Core.UIDragCallback = function(event) {
-
+
var position = {
x: Event.pointerX(event) - this.offSetPosition.x,
y: Event.pointerY(event) - this.offSetPosition.y}
-
- position.x -= this.offsetScroll.x - this.scrollNode.scrollLeft;
+
+ position.x -= this.offsetScroll.x - this.scrollNode.scrollLeft;
position.y -= this.offsetScroll.y - this.scrollNode.scrollTop;
-
+
position.x /= this.faktorXY.x;
position.y /= this.faktorXY.y;
-
+
this.uiObj.bounds.moveTo(position);
//this.uiObj.update();
-
+
if(this.movedCallback)
this.movedCallback(event);
-
+
//Event.stop(event);
-
+
};
-
+
ORYX.Core.UIDisableDrag = function(event) {
document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.dragCallback, false);
document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEUP, this.disableCallback, true);
-
+
if(this.upCallback)
this.upCallback(event);
-
+
this.upCallback = undefined;
- this.movedCallback = undefined;
-
- Event.stop(event);
+ this.movedCallback = undefined;
+
+ Event.stop(event);
};
-
+
/**
* Implements a command to move docker by an offset.
- *
+ *
* @class ORYX.Core.MoveDockersCommand
* @param {Object} object An object with the docker id as key and docker and offset as object value
- *
- */
+ *
+ */
ORYX.Core.MoveDockersCommand = ORYX.Core.Command.extend({
construct: function(dockers){
this.dockers = $H(dockers);
@@ -12701,11 +12701,11 @@ new function(){
} else {
this.changes = $H({});
}
-
+
this.dockers.values().each(function(docker){
var edge = docker.docker.parent;
if (!edge){ return }
-
+
if (!this.changes[edge.getId()]) {
this.changes[edge.getId()] = {
edge : edge,
@@ -12730,8 +12730,8 @@ new function(){
this.changes.values().each(function(change){
// Reset the dockers
this.removeAllDocker(change.edge);
- change.dockerPositions.each(function(pos, i){
- if (i==0||i==change.dockerPositions.length-1){ return }
+ change.dockerPositions.each(function(pos, i){
+ if (i==0||i==change.dockerPositions.length-1){ return }
var docker = change.edge.createDocker(undefined, pos);
docker.bounds.centerMoveTo(pos);
docker.update();
@@ -12743,8 +12743,8 @@ new function(){
this.changes.values().each(function(change){
// Reset the dockers
this.removeAllDocker(change.edge);
- change.oldDockerPositions.each(function(pos, i){
- if (i==0||i==change.oldDockerPositions.length-1){ return }
+ change.oldDockerPositions.each(function(pos, i){
+ if (i==0||i==change.oldDockerPositions.length-1){ return }
var docker = change.edge.createDocker(undefined, pos);
docker.bounds.centerMoveTo(pos);
docker.update();
@@ -12758,7 +12758,7 @@ new function(){
})
}
});
-
+
}();
/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
@@ -12788,23 +12788,23 @@ ORYX.Core.Shape = {
construct: function(options, stencil, facade) {
// call base class constructor
arguments.callee.$.construct.apply(this, arguments);
-
+
this.facade = facade;
this.dockers = [];
this.magnets = [];
-
+
this._defaultMagnet;
-
+
this.incoming = [];
this.outgoing = [];
-
+
this.nodes = [];
-
+
this._dockerChangedCallback = this._dockerChanged.bind(this);
-
+
//Hash map for all labels. Labels are not treated as children of shapes.
this._labels = new Hash();
-
+
// create SVG node
this.node = ORYX.Editor.graft("http://www.w3.org/2000/svg",
null,
@@ -12816,7 +12816,7 @@ ORYX.Core.Shape = {
],
['g', {"class": "controls"},
['g', {"class": "dockers"}],
- ['g', {"class": "magnets"}]
+ ['g', {"class": "magnets"}]
]
]);
},
@@ -12829,14 +12829,14 @@ ORYX.Core.Shape = {
//this.layout();
//}
},
-
+
/**
* !!!Not called from any sub class!!!
*/
_update: function() {
},
-
+
/**
* Calls the super class refresh method
* and updates the svg elements that are referenced by a property.
@@ -12844,7 +12844,7 @@ ORYX.Core.Shape = {
refresh: function() {
//call base class refresh method
arguments.callee.$.refresh.apply(this, arguments);
-
+
if(this.node.ownerDocument) {
//adjust SVG to properties' values
var me = this;
@@ -12854,7 +12854,7 @@ ORYX.Core.Shape = {
var property = this.getStencil().property(propChanged.key);
if (property != undefined) {
this.propertiesChanged[propChanged.key] = false;
-
+
//handle choice properties
if(property.type() == ORYX.CONFIG.TYPE_CHOICE) {
//iterate all references to SVG elements
@@ -12867,7 +12867,7 @@ ORYX.Core.Shape = {
}
}
}).bind(this));
-
+
//if the choice's items are referencing SVG elements
// show the selected and hide all other referenced SVG
// elements
@@ -12875,25 +12875,25 @@ ORYX.Core.Shape = {
property.items().each((function(item) {
item.refToView().each((function(itemRef) {
if(itemRef == "") { return; }
-
+
var svgElem = this.node.ownerDocument.getElementById(this.id + itemRef);
-
+
if(!svgElem) { return; }
-
-
+
+
/* Do not refresh the same svg element multiple times */
if(!refreshedSvgElements[svgElem.id] || prop == item.value()) {
svgElem.setAttributeNS(null, 'display', ((prop == item.value()) ? 'inherit' : 'none'));
refreshedSvgElements[svgElem.id] = svgElem;
}
-
+
// Reload the href if there is an image-tag
if(ORYX.Editor.checkClassType(svgElem, SVGImageElement)) {
svgElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', svgElem.getAttributeNS('http://www.w3.org/1999/xlink', 'href'));
}
}).bind(this));
}).bind(this));
-
+
} else { //handle properties that are not of type choice
//iterate all references to SVG elements
property.refToView().each((function(ref) {
@@ -12903,13 +12903,13 @@ ORYX.Core.Shape = {
if(ref === "") { return; }
var refId = this.id + ref;
-
+
if (property.type() === ORYX.CONFIG.TYPE_KISBPM_MULTIINSTANCE)
{
if (ref === "multiinstance") {
-
+
var svgElemParallel = this.node.ownerDocument.getElementById(this.id + 'parallel');
- if(svgElemParallel)
+ if(svgElemParallel)
{
if (prop === 'Parallel')
{
@@ -12919,11 +12919,11 @@ ORYX.Core.Shape = {
{
svgElemParallel.setAttributeNS(null, 'display', 'none');
}
- }
-
+ }
+
var svgElemSequential = this.node.ownerDocument.getElementById(this.id + 'sequential');
-
- if(svgElemSequential)
+
+ if(svgElemSequential)
{
if (prop === 'Sequential')
{
@@ -12933,16 +12933,16 @@ ORYX.Core.Shape = {
{
svgElemSequential.setAttributeNS(null, 'display', 'none');
}
- }
+ }
}
return;
-
- }
+
+ }
else if (property.type() === "cancelactivity")
{
var svgElemFrame = this.node.ownerDocument.getElementById(this.id + 'frame');
var svgElemFrame2 = this.node.ownerDocument.getElementById(this.id + 'frame2');
-
+
if (prop === 'true')
{
svgElemFrame.setAttributeNS(null, 'display', 'inherit');
@@ -12954,29 +12954,29 @@ ORYX.Core.Shape = {
svgElemFrame2.setAttributeNS(null, 'display', 'none');
}
}
-
+
//get the SVG element
var svgElem = this.node.ownerDocument.getElementById(refId);
-
+
//if the SVG element can not be found
- if(!svgElem || !(svgElem.ownerSVGElement)) {
+ if(!svgElem || !(svgElem.ownerSVGElement)) {
//if the referenced SVG element is a SVGAElement, it cannot
// be found with getElementById (Firefox bug).
// this is a work around
if(property.type() === ORYX.CONFIG.TYPE_URL || property.type() === ORYX.CONFIG.TYPE_DIAGRAM_LINK) {
var svgElems = this.node.ownerDocument.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'a');
-
+
svgElem = $A(svgElems).find(function(elem) {
return elem.getAttributeNS(null, 'id') === refId;
});
-
- if(!svgElem) { return; }
+
+ if(!svgElem) { return; }
} else {
//this.propertiesChanged[propChanged.key] = true;
return;
- }
+ }
}
-
+
if (property.complexAttributeToView()) {
var label = this._labels[refId];
if (label) {
@@ -12988,33 +12988,33 @@ ORYX.Core.Shape = {
label.text(prop);
}
}
-
+
} else {
switch (property.type()) {
- case ORYX.CONFIG.TYPE_BOOLEAN:
+ case ORYX.CONFIG.TYPE_BOOLEAN:
if (typeof prop == "string")
prop = prop === "true"
-
+
svgElem.setAttributeNS(null, 'display', (!(prop === property.inverseBoolean())) ? 'inherit' : 'none');
-
+
break;
case ORYX.CONFIG.TYPE_COLOR:
if(property.fill()) {
if (svgElem.tagName.toLowerCase() === "stop"){
if (prop){
-
+
if (property.lightness() && property.lightness() !== 1){
prop = ORYX.Utils.adjustLightness(prop, property.lightness());
}
-
+
svgElem.setAttributeNS(null, "stop-color", prop);
-
+
// Adjust stop color of the others
if (svgElem.parentNode.tagName.toLowerCase() === "radialgradient"){
ORYX.Utils.adjustGradient(svgElem.parentNode, svgElem);
}
}
-
+
// If there is no value, set opaque
if (svgElem.parentNode.tagName.toLowerCase() === "radialgradient"){
$A(svgElem.parentNode.getElementsByTagName('stop')).each(function(stop){
@@ -13046,7 +13046,7 @@ ORYX.Core.Shape = {
if (label) {
label.text(prop);
}
- break;
+ break;
case ORYX.CONFIG.TYPE_INTEGER:
var label = this._labels[refId];
if (label) {
@@ -13056,7 +13056,7 @@ ORYX.Core.Shape = {
case ORYX.CONFIG.TYPE_FLOAT:
if(property.fillOpacity()) {
svgElem.setAttributeNS(null, 'fill-opacity', prop);
- }
+ }
if(property.strokeOpacity()) {
svgElem.setAttributeNS(null, 'stroke-opacity', prop);
}
@@ -13067,7 +13067,7 @@ ORYX.Core.Shape = {
}
}
break;
-
+
case ORYX.CONFIG.TYPE_FORM_LINK:
if (ref == "pimg") {
var onclickAttr = svgElem.getAttributeNodeNS('', 'onclick');
@@ -13095,51 +13095,51 @@ ORYX.Core.Shape = {
hrefAttr.textContent = prop;
} else {
svgElem.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', prop);
- }
+ }
break;
-
+
}
}
}).bind(this));
-
-
+
+
}
}
-
+
}
}).bind(this));
-
+
//update labels
this._labels.values().each(function(label) {
label.update();
});
}
},
-
+
layout: function() {
//this.getStencil().layout(this)
var layoutEvents = this.getStencil().layout()
if (layoutEvents) {
layoutEvents.each(function(event) {
-
+
// setup additional attributes
event.shape = this;
event.forceExecution = true;
-
+
// do layouting
this._delegateEvent(event);
}.bind(this))
-
+
}
},
-
+
/**
* Returns an array of Label objects.
*/
getLabels: function() {
return this._labels.values();
},
-
+
/**
* Returns the label for a given ref
* @return {ORYX.Core.Label} Returns null if there is no label
@@ -13152,10 +13152,10 @@ ORYX.Core.Shape = {
return o.key.endsWith(ref);
})||{}).value || null;
},
-
+
/**
* Hides all related labels
- *
+ *
*/
hideLabels: function(){
this.getLabels().invoke("hide");
@@ -13163,7 +13163,7 @@ ORYX.Core.Shape = {
/**
* Shows all related labels
- *
+ *
*/
showLabels: function(){
var labels = this.getLabels();
@@ -13172,11 +13172,11 @@ ORYX.Core.Shape = {
label.update();
});
},
-
+
setOpacity: function(value, animate){
-
+
value = Math.max(Math.min((typeof value == "number" ? value : 1.0), 1.0), 0.0);
-
+
if (value !== 1.0){
value = String(value);
this.node.setAttributeNS(null, "fill-opacity", value)
@@ -13186,18 +13186,18 @@ ORYX.Core.Shape = {
this.node.removeAttributeNS(null, "stroke-opacity");
}
},
-
+
/**
* Returns an array of dockers of this object.
*/
getDockers: function() {
return this.dockers;
},
-
+
getMagnets: function() {
return this.magnets;
},
-
+
getDefaultMagnet: function() {
if(this._defaultMagnet) {
return this._defaultMagnet;
@@ -13211,14 +13211,14 @@ ORYX.Core.Shape = {
getParentShape: function() {
return this.parent;
},
-
+
getIncomingShapes: function(iterator) {
if(iterator) {
this.incoming.each(iterator);
}
return this.incoming;
},
-
+
getIncomingNodes: function(iterator) {
return this.incoming.select(function(incoming){
var isNode = (incoming instanceof ORYX.Core.Node);
@@ -13226,15 +13226,15 @@ ORYX.Core.Shape = {
return isNode;
});
},
-
-
+
+
getOutgoingShapes: function(iterator) {
if(iterator) {
this.outgoing.each(iterator);
}
return this.outgoing;
},
-
+
getOutgoingNodes: function(iterator) {
return this.outgoing.select(function(out){
var isNode = (out instanceof ORYX.Core.Node);
@@ -13242,7 +13242,7 @@ ORYX.Core.Shape = {
return isNode;
});
},
-
+
getAllDockedShapes: function(iterator) {
var result = this.incoming.concat(this.outgoing);
if(iterator) {
@@ -13260,9 +13260,9 @@ ORYX.Core.Shape = {
return undefined;
}
},
-
+
/**
- *
+ *
* @param {Object} deep
* @param {Object} iterator
*/
@@ -13277,16 +13277,16 @@ ORYX.Core.Shape = {
iterator(uiObject);
}
result.push(uiObject);
-
+
if(deep && uiObject instanceof ORYX.Core.Shape) {
result = result.concat(uiObject.getChildNodes(deep, iterator));
}
});
-
+
return result;
}
},
-
+
/**
* Overrides the UIObject.add method. Adds uiObject to the correct sub node.
* @param {UIObject} uiObject
@@ -13295,9 +13295,9 @@ ORYX.Core.Shape = {
add: function(uiObject, index, silent) {
//parameter has to be an UIObject, but
// must not be an Edge.
- if(uiObject instanceof ORYX.Core.UIObject
+ if(uiObject instanceof ORYX.Core.UIObject
&& !(uiObject instanceof ORYX.Core.Edge)) {
-
+
if (!(this.children.member(uiObject))) {
//if uiObject is child of another parent, remove it from that parent.
if(uiObject.parent) {
@@ -13341,14 +13341,14 @@ ORYX.Core.Shape = {
uiObject.node = parent.insertBefore(uiObject.node, parent.childNodes[index]);
else
uiObject.node = parent.appendChild(uiObject.node);
-
+
this._changed();
//uiObject.bounds.registerCallback(this._changedCallback);
-
-
+
+
if(this.eventHandlerCallback && silent !== true)
this.eventHandlerCallback({type:ORYX.CONFIG.EVENT_SHAPEADDED,shape:uiObject})
-
+
} else {
ORYX.Log.warn("add: ORYX.Core.UIObject is already a child of this object.");
@@ -13397,7 +13397,7 @@ ORYX.Core.Shape = {
if(this.eventHandlerCallback && silent !== true)
this.eventHandlerCallback({type: ORYX.CONFIG.EVENT_SHAPEREMOVED, shape: uiObject, parent: parent});
-
+
this._changed();
//uiObject.bounds.unregisterCallback(this._changedCallback);
} else {
@@ -13405,17 +13405,17 @@ ORYX.Core.Shape = {
ORYX.Log.warn("remove: ORYX.Core.UIObject is not a child of this object.");
}
},
-
+
/**
* Calculate the Border Intersection Point between two points
* @param {PointA}
* @param {PointB}
*/
getIntersectionPoint: function() {
-
+
var pointAX, pointAY, pointBX, pointBY;
-
- // Get the the two Points
+
+ // Get the the two Points
switch(arguments.length) {
case 2:
pointAX = arguments[0].x;
@@ -13432,14 +13432,14 @@ ORYX.Core.Shape = {
default:
throw "getIntersectionPoints needs two or four arguments";
}
-
-
-
+
+
+
// Defined an include and exclude point
var includePointX, includePointY, excludePointX, excludePointY;
var bounds = this.absoluteBounds();
-
+
if(this.isPointIncluded(pointAX, pointAY, bounds)){
includePointX = pointAX;
includePointY = pointAY;
@@ -13455,30 +13455,30 @@ ORYX.Core.Shape = {
excludePointX = pointBX;
excludePointY = pointBY;
}
-
+
// If there is no inclue or exclude Shape, than return
if(!includePointX || !includePointY || !excludePointX || !excludePointY) {
return undefined;
}
var midPointX = 0;
- var midPointY = 0;
-
+ var midPointY = 0;
+
var refPointX, refPointY;
-
+
var minDifferent = 1;
// Get the UpperLeft and LowerRight
//var ul = bounds.upperLeft();
//var lr = bounds.lowerRight();
-
+
var i = 0;
-
+
while(true) {
- // Calculate the midpoint of the current to points
+ // Calculate the midpoint of the current to points
var midPointX = Math.min(includePointX, excludePointX) + ((Math.max(includePointX, excludePointX) - Math.min(includePointX, excludePointX)) / 2.0);
var midPointY = Math.min(includePointY, excludePointY) + ((Math.max(includePointY, excludePointY) - Math.min(includePointY, excludePointY)) / 2.0);
-
-
+
+
// Set the new midpoint by the means of the include of the bounds
if(this.isPointIncluded(midPointX, midPointY, bounds)){
includePointX = midPointX;
@@ -13486,33 +13486,33 @@ ORYX.Core.Shape = {
} else {
excludePointX = midPointX;
excludePointY = midPointY;
- }
-
+ }
+
// Calc the length of the line
var length = Math.sqrt(Math.pow(includePointX - excludePointX, 2) + Math.pow(includePointY - excludePointY, 2))
// Calc a point one step from the include point
refPointX = includePointX + ((excludePointX - includePointX) / length),
refPointY = includePointY + ((excludePointY - includePointY) / length)
-
-
+
+
// If the reference point not in the bounds, break
if(!this.isPointIncluded(refPointX, refPointY, bounds)) {
break
}
-
-
+
+
}
// Return the last includepoint
return {x:refPointX , y:refPointY};
},
-
-
+
+
/**
* Calculate if the point is inside the Shape
* @param {PointX}
- * @param {PointY}
+ * @param {PointY}
*/
isPointIncluded: function(){
return false
@@ -13535,7 +13535,7 @@ ORYX.Core.Shape = {
}
return false
},
-
+
/**
* Calculate if the point is over an special offset area
* @param {Point}
@@ -13543,11 +13543,11 @@ ORYX.Core.Shape = {
isPointOverOffset: function(){
return this.isPointIncluded.apply( this , arguments )
},
-
+
_dockerChanged: function() {
},
-
+
/**
* Create a Docker for this Edge
*
@@ -13559,7 +13559,7 @@ ORYX.Core.Shape = {
docker.bounds.centerMoveTo(position);
}
this.add(docker, index);
-
+
return docker
},
@@ -13579,21 +13579,21 @@ ORYX.Core.Shape = {
// Add the outgoing shapes
this.getOutgoingShapes().each((function(followingShape){
- serializedObject.push({name: 'outgoing', prefix:'raziel', value: '#'+ERDF.__stripHashes(followingShape.resourceId), type: 'resource'});
+ serializedObject.push({name: 'outgoing', prefix:'raziel', value: '#'+ERDF.__stripHashes(followingShape.resourceId), type: 'resource'});
}).bind(this));
// Add the parent shape, if the parent not the canvas
//if(this.parent instanceof ORYX.Core.Shape){
- serializedObject.push({name: 'parent', prefix:'raziel', value: '#'+ERDF.__stripHashes(this.parent.resourceId), type: 'resource'});
- //}
-
+ serializedObject.push({name: 'parent', prefix:'raziel', value: '#'+ERDF.__stripHashes(this.parent.resourceId), type: 'resource'});
+ //}
+
return serializedObject;
},
-
-
+
+
deserialize: function(serialize, json){
arguments.callee.$.deserialize.apply(this, arguments);
-
+
// Set the Bounds
var bounds = serialize.find(function(ser){ return 'oryx-bounds' === (ser.prefix+"-"+ser.name) });
if (bounds) {
@@ -13607,7 +13607,7 @@ ORYX.Core.Shape = {
this.bounds.set(parseFloat(b[0]), parseFloat(b[1]), parseFloat(b[2]), parseFloat(b[3]));
}
}
-
+
if (json && json.labels instanceof Array){
json.labels.each(function(slabel){
var label = this.getLabel(slabel.ref);
@@ -13617,10 +13617,10 @@ ORYX.Core.Shape = {
}.bind(this))
}
},
-
+
toJSON: function(){
var json = arguments.callee.$.toJSON.apply(this, arguments);
-
+
var labels = [], id = this.id;
this._labels.each(function(obj){
var slabel = obj.value.serialize();
@@ -13629,14 +13629,14 @@ ORYX.Core.Shape = {
labels.push(slabel);
}
});
-
+
if (labels.length > 0){
json.labels = labels;
}
return json;
},
-
+
/**
* Private methods.
*/
@@ -13660,14 +13660,14 @@ ORYX.Core.Shape = {
element.setAttributeNS(null, 'id', this.id + "_" + this.id + "_" + idIndex);
idIndex++;
}
-
+
// Replace URL in fill attribute
var fill = element.getAttributeNS(null, 'fill');
if (fill&&fill.include("url(#")){
fill = fill.replace(/url\(#/g, 'url(#'+this.id);
element.setAttributeNS(null, 'fill', fill);
}
-
+
if(element.hasChildNodes()) {
for(var i = 0; i < element.childNodes.length; i++) {
idIndex = this._adjustIds(element.childNodes[i], idIndex);
@@ -13701,7 +13701,7 @@ if(!ORYX.Core.Controls) {ORYX.Core.Controls = {};}
* @classDescription Abstract base class for all Controls.
*/
ORYX.Core.Controls.Control = ORYX.Core.UIObject.extend({
-
+
toString: function() { return "Control " + this.id; }
});/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
@@ -13725,7 +13725,7 @@ if(!ORYX.Core.Controls) {ORYX.Core.Controls = {};}
* @classDescription Represents a movable docker that can be bound to a shape. Dockers are used
* for positioning shape objects.
* @extends {Control}
- *
+ *
* TODO absoluteXY und absoluteCenterXY von einem Docker liefern falsche Werte!!!
*/
ORYX.Core.Controls.Docker = ORYX.Core.Controls.Control.extend({
@@ -13734,15 +13734,15 @@ ORYX.Core.Controls.Docker = ORYX.Core.Controls.Control.extend({
*/
construct: function() {
arguments.callee.$.construct.apply(this, arguments);
-
+
this.isMovable = true; // Enables movability
this.bounds.set(0, 0, 16, 16); // Set the bounds
- this.referencePoint = undefined; // Refrenzpoint
- this._dockedShapeBounds = undefined;
+ this.referencePoint = undefined; // Refrenzpoint
+ this._dockedShapeBounds = undefined;
this._dockedShape = undefined;
this._oldRefPoint1 = undefined;
this._oldRefPoint2 = undefined;
-
+
//this.anchors = [];
this.anchorLeft;
this.anchorRight;
@@ -13760,25 +13760,25 @@ ORYX.Core.Controls.Docker = ORYX.Core.Controls.Control.extend({
['circle', {cx:"8", cy:"8", r:"8", stroke:"none", fill:"none"}],
['circle', {cx:"8", cy:"8", r:"3", stroke:"black", fill:"red", "stroke-width":"1"}]
]);
-
- // The ReferenzNode reprasentation
+
+ // The ReferenzNode reprasentation
this._referencePointNode = ORYX.Editor.graft("http://www.w3.org/2000/svg",
- this.node,
+ this.node,
['g', {"pointer-events":"none"},
['circle', {cx: this.bounds.upperLeft().x, cy: this.bounds.upperLeft().y, r: 3, fill:"red", "fill-opacity":0.4}]]);
// Hide the Docker
this.hide();
-
+
//Add to the EventHandler
this.addEventHandlers(this._dockerNode);
- // Buffer the Update Callback for un-/register on Event-Handler
+ // Buffer the Update Callback for un-/register on Event-Handler
this._updateCallback = this._changed.bind(this);
},
-
+
update: function() {
- // If there have an DockedShape
+ // If there have an DockedShape
if(this._dockedShape) {
if(this._dockedShapeBounds && this._dockedShape instanceof ORYX.Core.Node) {
// Calc the delta of width and height of the lastBounds and the current Bounds
@@ -13787,88 +13787,88 @@ ORYX.Core.Controls.Docker = ORYX.Core.Controls.Control.extend({
if(!dswidth)
dswidth = 1;
if(!dsheight)
- dsheight = 1;
+ dsheight = 1;
var widthDelta = this._dockedShape.bounds.width() / dswidth;
var heightDelta = this._dockedShape.bounds.height() / dsheight;
-
+
// If there is an different
if(widthDelta !== 1.0 || heightDelta !== 1.0) {
// Set the delta
this.referencePoint.x *= widthDelta;
this.referencePoint.y *= heightDelta;
}
-
+
// Clone these bounds
- this._dockedShapeBounds = this._dockedShape.bounds.clone();
+ this._dockedShapeBounds = this._dockedShape.bounds.clone();
}
-
+
// Get the first and the last Docker of the parent Shape
var dockerIndex = this.parent.dockers.indexOf(this)
var dock1 = this;
- var dock2 = this.parent.dockers.length > 1 ?
+ var dock2 = this.parent.dockers.length > 1 ?
(dockerIndex === 0? // If there is the first element
this.parent.dockers[dockerIndex + 1]: // then take the next docker
this.parent.dockers[dockerIndex - 1]): // if not, then take the docker before
undefined;
-
- // Calculate the first absolute Refenzpoint
- var absoluteReferenzPoint1 = dock1.getDockedShape() ?
- dock1.getAbsoluteReferencePoint() :
+
+ // Calculate the first absolute Refenzpoint
+ var absoluteReferenzPoint1 = dock1.getDockedShape() ?
+ dock1.getAbsoluteReferencePoint() :
dock1.bounds.center();
- // Calculate the last absolute Refenzpoint
- var absoluteReferenzPoint2 = dock2 && dock2.getDockedShape() ?
- dock2.getAbsoluteReferencePoint() :
- dock2 ?
+ // Calculate the last absolute Refenzpoint
+ var absoluteReferenzPoint2 = dock2 && dock2.getDockedShape() ?
+ dock2.getAbsoluteReferencePoint() :
+ dock2 ?
dock2.bounds.center() :
undefined;
- // If there is no last absolute Referenzpoint
+ // If there is no last absolute Referenzpoint
if(!absoluteReferenzPoint2) {
// Calculate from the middle of the DockedShape
var center = this._dockedShape.absoluteCenterXY();
- var minDimension = this._dockedShape.bounds.width() * this._dockedShape.bounds.height();
+ var minDimension = this._dockedShape.bounds.width() * this._dockedShape.bounds.height();
absoluteReferenzPoint2 = {
x: absoluteReferenzPoint1.x + (center.x - absoluteReferenzPoint1.x) * -minDimension,
y: absoluteReferenzPoint1.y + (center.y - absoluteReferenzPoint1.y) * -minDimension
}
}
-
+
var newPoint = undefined;
-
+
/*if (!this._oldRefPoint1 || !this._oldRefPoint2 ||
absoluteReferenzPoint1.x !== this._oldRefPoint1.x ||
absoluteReferenzPoint1.y !== this._oldRefPoint1.y ||
absoluteReferenzPoint2.x !== this._oldRefPoint2.x ||
absoluteReferenzPoint2.y !== this._oldRefPoint2.y) {*/
-
+
// Get the new point for the Docker, calucalted by the intersection point of the Shape and the two points
newPoint = this._dockedShape.getIntersectionPoint(absoluteReferenzPoint1, absoluteReferenzPoint2);
-
+
// If there is new point, take the referencepoint as the new point
if(!newPoint) {
newPoint = this.getAbsoluteReferencePoint();
}
-
+
if(this.parent && this.parent.parent) {
var grandParentPos = this.parent.parent.absoluteXY();
newPoint.x -= grandParentPos.x;
newPoint.y -= grandParentPos.y;
}
-
+
// Set the bounds to the new point
this.bounds.centerMoveTo(newPoint)
-
+
this._oldRefPoint1 = absoluteReferenzPoint1;
this._oldRefPoint2 = absoluteReferenzPoint2;
- }
+ }
/*else {
newPoint = this.bounds.center();
}*/
-
-
+
+
// }
-
+
// Call the super class
arguments.callee.$.update.apply(this, arguments);
},
@@ -13878,16 +13878,16 @@ ORYX.Core.Controls.Docker = ORYX.Core.Controls.Control.extend({
*/
refresh: function() {
arguments.callee.$.refresh.apply(this, arguments);
-
+
// Refresh the dockers node
var p = this.bounds.upperLeft();
this._dockerNode.setAttributeNS(null, 'transform','translate(' + p.x + ', ' + p.y + ')');
-
+
// Refresh the referencepoints node
p = Object.clone(this.referencePoint);
-
+
if(p && this._dockedShape){
- var upL
+ var upL
if(this.parent instanceof ORYX.Core.Edge) {
upL = this._dockedShape.absoluteXY();
} else {
@@ -13897,7 +13897,7 @@ ORYX.Core.Controls.Docker = ORYX.Core.Controls.Control.extend({
p.y += upL.y;
} else {
p = this.bounds.center();
- }
+ }
this._referencePointNode.setAttributeNS(null, 'transform','translate(' + p.x + ', ' + p.y + ')');
},
@@ -13905,24 +13905,24 @@ ORYX.Core.Controls.Docker = ORYX.Core.Controls.Control.extend({
/**
* Set the reference point
* @param {Object} point
- */
+ */
setReferencePoint: function(point) {
// Set the referencepoint
if(this.referencePoint !== point &&
- (!this.referencePoint ||
+ (!this.referencePoint ||
!point ||
- this.referencePoint.x !== point.x ||
+ this.referencePoint.x !== point.x ||
this.referencePoint.y !== point.y)) {
-
+
this.referencePoint = point;
- this._changed();
+ this._changed();
}
-
+
// Update directly, because the referencepoint has no influence of the bounds
//this.refresh();
},
-
+
/**
* Get the absolute referencepoint
*/
@@ -13931,13 +13931,13 @@ ORYX.Core.Controls.Docker = ORYX.Core.Controls.Control.extend({
return undefined;
} else {
var absUL = this._dockedShape.absoluteXY();
- return {
+ return {
x: this.referencePoint.x + absUL.x,
y: this.referencePoint.y + absUL.y
}
}
- },
-
+ },
+
/**
* Set the docked Shape from the docker
* @param {Object} shape
@@ -13947,69 +13947,69 @@ ORYX.Core.Controls.Docker = ORYX.Core.Controls.Control.extend({
// If there is an old docked Shape
if(this._dockedShape) {
this._dockedShape.bounds.unregisterCallback(this._updateCallback)
-
+
// Delete the Shapes from the incoming and outgoing array
// If this Docker the incoming of the Shape
if(this === this.parent.dockers.first()) {
-
+
this.parent.incoming = this.parent.incoming.without(this._dockedShape);
this._dockedShape.outgoing = this._dockedShape.outgoing.without(this.parent);
-
- // If this Docker the outgoing of the Shape
+
+ // If this Docker the outgoing of the Shape
} else if (this === this.parent.dockers.last()){
-
+
this.parent.outgoing = this.parent.outgoing.without(this._dockedShape);
this._dockedShape.incoming = this._dockedShape.incoming.without(this.parent);
-
+
}
-
+
}
-
+
// Set the new Shape
this._dockedShape = shape;
this._dockedShapeBounds = undefined;
var referencePoint = undefined;
-
+
// If there is an Shape, register the updateCallback if there are changes in the shape bounds
if(this._dockedShape) {
-
+
// Add the Shapes to the incoming and outgoing array
// If this Docker the incoming of the Shape
if(this === this.parent.dockers.first()) {
-
+
this.parent.incoming.push(shape);
shape.outgoing.push(this.parent);
-
- // If this Docker the outgoing of the Shape
+
+ // If this Docker the outgoing of the Shape
} else if (this === this.parent.dockers.last()){
-
+
this.parent.outgoing.push(shape);
shape.incoming.push(this.parent);
-
+
}
-
+
// Get the bounds and set the new referencepoint
var bounds = this.bounds;
var absUL = shape.absoluteXY();
-
+
/*if(shape.parent){
var b = shape.parent.bounds.upperLeft();
absUL.x -= b.x;
absUL.y -= b.y;
}*/
-
+
referencePoint = {
x: bounds.center().x - absUL.x,
y: bounds.center().y - absUL.y
- }
-
+ }
+
this._dockedShapeBounds = this._dockedShape.bounds.clone();
-
+
this._dockedShape.bounds.registerCallback(this._updateCallback);
-
+
// Set the color of the docker as docked
- this.setDockerColor(ORYX.CONFIG.DOCKER_DOCKED_COLOR);
+ this.setDockerColor(ORYX.CONFIG.DOCKER_DOCKED_COLOR);
} else {
// Set the color of the docker as undocked
this.setDockerColor(ORYX.CONFIG.DOCKER_UNDOCKED_COLOR);
@@ -14020,7 +14020,7 @@ ORYX.Core.Controls.Docker = ORYX.Core.Controls.Control.extend({
this._changed();
//this.update();
},
-
+
/**
* Get the docked Shape
*/
@@ -14034,7 +14034,7 @@ ORYX.Core.Controls.Docker = ORYX.Core.Controls.Control.extend({
isDocked: function() {
return !!this._dockedShape;
},
-
+
/**
* Set the Color of the Docker
* @param {Object} color
@@ -14042,11 +14042,11 @@ ORYX.Core.Controls.Docker = ORYX.Core.Controls.Control.extend({
setDockerColor: function(color) {
this._dockerNode.lastChild.setAttributeNS(null, "fill", color);
},
-
+
preventHiding: function(prevent){
this._preventHiding = Math.max(0, (this._preventHiding||0) + (prevent ? 1 : -1));
},
-
+
/**
* Hides this UIObject and all its children.
*/
@@ -14054,35 +14054,35 @@ ORYX.Core.Controls.Docker = ORYX.Core.Controls.Control.extend({
if (this._preventHiding){
return false;
}
-
+
// Hide docker and reference point
this.node.setAttributeNS(null, 'visibility', 'hidden');
this._referencePointNode.setAttributeNS(null, 'visibility', 'hidden');
-
+
this.children.each(function(uiObj) {
- uiObj.hide();
- });
+ uiObj.hide();
+ });
},
-
+
/**
* Enables visibility of this UIObject and all its children.
*/
show: function() {
// Show docker
this.node.setAttributeNS(null, 'visibility', 'visible');
-
+
// Hide reference point if the connected shape is an edge
if (this.getDockedShape() instanceof ORYX.Core.Edge){
this._referencePointNode.setAttributeNS(null, 'visibility', 'hidden');
} else {
this._referencePointNode.setAttributeNS(null, 'visibility', 'visible');
}
-
+
this.children.each(function(uiObj) {
- uiObj.show();
- });
+ uiObj.show();
+ });
},
-
+
toString: function() { return "Docker " + this.id }
});/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
@@ -14109,43 +14109,43 @@ if(!ORYX.Core.Controls) {ORYX.Core.Controls = {};}
* @extends {Control}
*/
ORYX.Core.Controls.Magnet = ORYX.Core.Controls.Control.extend({
-
+
/**
* Constructor
*/
construct: function() {
arguments.callee.$.construct.apply(this, arguments);
-
+
//this.anchors = [];
this.anchorLeft;
this.anchorRight;
this.anchorTop;
this.anchorBottom;
-
+
this.bounds.set(0, 0, 16, 16);
-
+
//graft magnet's root node into owner's control group.
this.node = ORYX.Editor.graft("http://www.w3.org/2000/svg",
null,
['g', {"pointer-events":"all"},
['circle', {cx:"8", cy:"8", r:"4", stroke:"none", fill:"red", "fill-opacity":"0.3"}],
]);
-
+
this.hide();
},
-
+
update: function() {
arguments.callee.$.update.apply(this, arguments);
-
+
//this.isChanged = true;
},
-
- _update: function() {
+
+ _update: function() {
arguments.callee.$.update.apply(this, arguments);
-
+
//this.isChanged = true;
},
-
+
refresh: function() {
arguments.callee.$.refresh.apply(this, arguments);
@@ -14155,15 +14155,15 @@ ORYX.Core.Controls.Magnet = ORYX.Core.Controls.Control.extend({
p.x += parentPos.x;
p.y += parentPos.y;
}*/
-
+
this.node.setAttributeNS(null, 'transform','translate(' + p.x + ', ' + p.y + ')');
},
-
+
show: function() {
//this.refresh();
arguments.callee.$.show.apply(this, arguments);
},
-
+
toString: function() {
return "Magnet " + this.id;
}
@@ -14201,48 +14201,48 @@ ORYX.Core.Node = {
*/
construct: function(options, stencil, facade){
arguments.callee.$.construct.apply(this, arguments);
-
+
this.isSelectable = true;
this.isMovable = true;
this._dockerUpdated = false;
this.facade = facade;
-
+
this._oldBounds = new ORYX.Core.Bounds(); //init bounds with undefined values
this._svgShapes = []; //array of all SVGShape objects of
// SVG representation
-
+
//TODO vielleicht in shape verschieben?
this.minimumSize = undefined; // {width:..., height:...}
this.maximumSize = undefined;
-
+
//TODO vielleicht in shape oder uiobject verschieben?
// vielleicht sogar isResizable ersetzen?
this.isHorizontallyResizable = false;
this.isVerticallyResizable = false;
-
+
this.dataId = undefined;
-
+
this._init(this._stencil.view());
this.forcedHeight = -1;
},
-
+
/**
* This method checks whether the shape is resized correctly and calls the
* super class update method.
*/
_update: function(){
-
+
this.dockers.invoke("update");
if (this.isChanged) {
var bounds = this.bounds;
var oldBounds = this._oldBounds;
-
+
if (this.isResized) {
-
+
var widthDelta = bounds.width() / oldBounds.width();
var heightDelta = bounds.height() / oldBounds.height();
-
+
//iterate over all relevant svg elements and resize them
this._svgShapes.each(function(svgShape){
//adjust width
@@ -14253,12 +14253,12 @@ ORYX.Core.Node = {
if (svgShape.isVerticallyResizable) {
svgShape.height = svgShape.oldHeight * heightDelta;
}
-
+
//check, if anchors are set
var anchorOffset;
var leftIncluded = svgShape.anchorLeft;
var rightIncluded = svgShape.anchorRight;
-
+
if (rightIncluded) {
anchorOffset = oldBounds.width() - (svgShape.oldX + svgShape.oldWidth);
if (leftIncluded) {
@@ -14268,17 +14268,17 @@ ORYX.Core.Node = {
svgShape.x = bounds.width() - (anchorOffset + svgShape.width);
}
}
- else
+ else
if (!leftIncluded) {
svgShape.x = widthDelta * svgShape.oldX;
if (!svgShape.isHorizontallyResizable) {
svgShape.x = svgShape.x + svgShape.width * widthDelta / 2 - svgShape.width / 2;
}
}
-
+
var topIncluded = svgShape.anchorTop;
var bottomIncluded = svgShape.anchorBottom;
-
+
if (bottomIncluded) {
anchorOffset = oldBounds.height() - (svgShape.oldY + svgShape.oldHeight);
if (topIncluded) {
@@ -14291,7 +14291,7 @@ ORYX.Core.Node = {
}
}
}
- else
+ else
if (!topIncluded) {
svgShape.y = heightDelta * svgShape.oldY;
if (!svgShape.isVerticallyResizable) {
@@ -14299,7 +14299,7 @@ ORYX.Core.Node = {
}
}
});
-
+
//check, if the current bounds is unallowed horizontally or vertically resized
var p = {
x: 0,
@@ -14314,7 +14314,7 @@ ORYX.Core.Node = {
if (p.x !== 0 || p.y !== 0) {
bounds.extend(p);
}
-
+
//check, if the current bounds are between maximum and minimum bounds
p = {
x: 0,
@@ -14322,7 +14322,7 @@ ORYX.Core.Node = {
};
var widthDifference, heightDifference;
if (this.minimumSize) {
-
+
ORYX.Log.debug("Shape (%0)'s min size: (%1x%2)", this, this.minimumSize.width, this.minimumSize.height);
widthDifference = this.minimumSize.width - bounds.width();
if (widthDifference > 0) {
@@ -14334,7 +14334,7 @@ ORYX.Core.Node = {
}
}
if (this.maximumSize) {
-
+
ORYX.Log.debug("Shape (%0)'s max size: (%1x%2)", this, this.maximumSize.width, this.maximumSize.height);
widthDifference = bounds.width() - this.maximumSize.width;
if (widthDifference > 0) {
@@ -14348,49 +14348,49 @@ ORYX.Core.Node = {
if (p.x !== 0 || p.y !== 0) {
bounds.extend(p);
}
-
+
//update magnets
-
+
var widthDelta = bounds.width() / oldBounds.width();
var heightDelta = bounds.height() / oldBounds.height();
-
+
var leftIncluded, rightIncluded, topIncluded, bottomIncluded, center, newX, newY;
-
+
this.magnets.each(function(magnet){
leftIncluded = magnet.anchorLeft;
rightIncluded = magnet.anchorRight;
topIncluded = magnet.anchorTop;
bottomIncluded = magnet.anchorBottom;
-
+
center = magnet.bounds.center();
-
+
if (leftIncluded) {
newX = center.x;
}
- else
+ else
if (rightIncluded) {
newX = bounds.width() - (oldBounds.width() - center.x)
}
else {
newX = center.x * widthDelta;
}
-
+
if (topIncluded) {
newY = center.y;
}
- else
+ else
if (bottomIncluded) {
newY = bounds.height() - (oldBounds.height() - center.y);
}
else {
newY = center.y * heightDelta;
}
-
+
if (center.x !== newX || center.y !== newY) {
magnet.bounds.centerMoveTo(newX, newY);
}
});
-
+
//set new position of labels
this.getLabels().each(function(label){
// Set the position dependings on it anchor
@@ -14408,7 +14408,7 @@ ORYX.Core.Node = {
label.setY((label.position?label.position.y:label.y) * heightDelta);
}
}
-
+
// If there is an position,
// set the origin position as well
if (label.position){
@@ -14428,7 +14428,7 @@ ORYX.Core.Node = {
}
}
});
-
+
//update docker
var docker = this.dockers[0];
if (docker) {
@@ -14437,77 +14437,77 @@ ORYX.Core.Node = {
docker.bounds.centerMoveTo(this.bounds.center());
this._dockerUpdated = false;
}
-
+
docker.update();
docker.bounds.registerCallback(this._dockerChangedCallback);
}
this.isResized = false;
}
-
+
this.refresh();
-
+
this.isChanged = false;
-
+
this._oldBounds = this.bounds.clone();
}
-
+
this.children.each(function(value) {
if(!(value instanceof ORYX.Core.Controls.Docker)) {
value._update();
}
});
-
+
if (this.dockers.length > 0&&!this.dockers.first().getDockedShape()) {
this.dockers.each(function(docker){
docker.bounds.centerMoveTo(this.bounds.center())
}.bind(this))
}
-
+
/*this.incoming.each((function(edge) {
if(!(this.dockers[0] && this.dockers[0].getDockedShape() instanceof ORYX.Core.Node))
edge._update(true);
}).bind(this));
-
+
this.outgoing.each((function(edge) {
if(!(this.dockers[0] && this.dockers[0].getDockedShape() instanceof ORYX.Core.Node))
edge._update(true);
}).bind(this)); */
},
-
+
/**
* This method repositions and resizes the SVG representation
* of the shape.
*/
refresh: function(){
arguments.callee.$.refresh.apply(this, arguments);
-
+
/** Movement */
var x = this.bounds.upperLeft().x;
var y = this.bounds.upperLeft().y;
-
+
// Move owner element
this.node.firstChild.setAttributeNS(null, "transform", "translate(" + x + ", " + y + ")");
// Move magnets
this.node.childNodes[1].childNodes[1].setAttributeNS(null, "transform", "translate(" + x + ", " + y + ")");
-
+
/** Resize */
-
+
//iterate over all relevant svg elements and update them
this._svgShapes.each(function(svgShape){
svgShape.update();
});
},
-
+
_dockerChanged: function(){
var docker = this.dockers[0];
-
+
//set the bounds of the the association
this.bounds.centerMoveTo(docker.bounds.center());
-
+
this._dockerUpdated = true;
//this._update(true);
},
-
+
/**
* This method traverses a tree of SVGElements and returns
* all SVGShape objects. For each basic shape or path element
@@ -14521,80 +14521,80 @@ ORYX.Core.Node = {
try {
var svgShape = new ORYX.Core.SVG.SVGShape(svgNode);
svgShapes.push(svgShape);
- }
+ }
catch (e) {
//do nothing
}
-
+
if (svgNode.hasChildNodes()) {
for (var i = 0; i < svgNode.childNodes.length; i++) {
svgShapes = svgShapes.concat(this._initSVGShapes(svgNode.childNodes[i]));
}
}
-
+
return svgShapes;
},
-
+
/**
* Calculate if the point is inside the Shape
* @param {PointX}
- * @param {PointY}
+ * @param {PointY}
* @param {absoluteBounds} optional: for performance
*/
isPointIncluded: function(pointX, pointY, absoluteBounds){
// If there is an arguments with the absoluteBounds
var absBounds = absoluteBounds && absoluteBounds instanceof ORYX.Core.Bounds ? absoluteBounds : this.absoluteBounds();
-
+
if (!absBounds.isIncluded(pointX, pointY)) {
return false;
} else {
-
+
}
-
-
+
+
//point = Object.clone(point);
var ul = absBounds.upperLeft();
var x = pointX - ul.x;
- var y = pointY - ul.y;
-
+ var y = pointY - ul.y;
+
var i=0;
do {
var isPointIncluded = this._svgShapes[i++].isPointIncluded( x, y );
} while( !isPointIncluded && i < this._svgShapes.length)
-
+
return isPointIncluded;
/*return this._svgShapes.any(function(svgShape){
return svgShape.isPointIncluded(point);
});*/
},
-
-
+
+
/**
* Calculate if the point is over an special offset area
* @param {Point}
*/
- isPointOverOffset: function( pointX, pointY ){
+ isPointOverOffset: function( pointX, pointY ){
var isOverEl = arguments.callee.$.isPointOverOffset.apply( this , arguments );
-
+
if (isOverEl) {
-
+
// If there is an arguments with the absoluteBounds
var absBounds = this.absoluteBounds();
absBounds.widen( - ORYX.CONFIG.BORDER_OFFSET );
-
+
if ( !absBounds.isIncluded( pointX, pointY )) {
return true;
- }
+ }
}
-
+
return false;
-
+
},
-
+
serialize: function(){
var result = arguments.callee.$.serialize.apply(this);
-
+
// Add the docker's bounds
// nodes only have at most one docker!
this.dockers.each((function(docker){
@@ -14609,13 +14609,13 @@ ORYX.Core.Node = {
});
}
}).bind(this));
-
+
// Get the spezific serialized object from the stencil
try {
//result = this.getStencil().serialize(this, result);
var serializeEvent = this.getStencil().serialize();
-
+
/*
* call serialize callback by reference, result should be found
* in serializeEvent.result
@@ -14625,27 +14625,27 @@ ORYX.Core.Node = {
serializeEvent.data = result;
serializeEvent.result = undefined;
serializeEvent.forceExecution = true;
-
+
this._delegateEvent(serializeEvent);
-
+
if(serializeEvent.result) {
result = serializeEvent.result;
}
}
- }
+ }
catch (e) {
}
return result;
},
-
+
deserialize: function(data){
arguments.callee.$.deserialize.apply(this, arguments);
-
+
try {
//data = this.getStencil().deserialize(this, data);
var deserializeEvent = this.getStencil().deserialize();
-
+
/*
* call serialize callback by reference, result should be found
* in serializeEventInfo.result
@@ -14655,25 +14655,25 @@ ORYX.Core.Node = {
deserializeEvent.data = data;
deserializeEvent.result = undefined;
deserializeEvent.forceExecution = true;
-
+
this._delegateEvent(deserializeEvent);
if(deserializeEvent.result) {
data = deserializeEvent.result;
}
}
- }
+ }
catch (e) {
}
-
+
// Set the outgoing shapes
var outgoing = data.findAll(function(ser){ return (ser.prefix+"-"+ser.name) == 'raziel-outgoing'});
outgoing.each((function(obj){
// TODO: Look at Canvas
if(!this.parent) {return};
-
+
// Set outgoing Shape
var next = this.getCanvas().getChildShapeByResourceId(obj.value);
-
+
if(next){
if(next instanceof ORYX.Core.Edge) {
//Set the first docker of the next shape
@@ -14683,16 +14683,16 @@ ORYX.Core.Node = {
next.dockers.first().setDockedShape(this);
//next.dockers.first().setReferencePoint({x: this.bounds.width() / 2.0, y: this.bounds.height() / 2.0});
}
- }
-
+ }
+
}).bind(this));
-
+
if (this.dockers.length === 1) {
var dockerPos;
dockerPos = data.find(function(entry){
return (entry.prefix + "-" + entry.name === "oryx-dockers");
});
-
+
if (dockerPos) {
var points = dockerPos.value.replace(/,/g, " ").split(" ").without("").without("#");
if (points.length === 2 && this.dockers[0].getDockedShape()) {
@@ -14707,7 +14707,7 @@ ORYX.Core.Node = {
}
}
},
-
+
/**
* This method excepts the SVGDoucment that is the SVG representation
* of this shape.
@@ -14718,31 +14718,31 @@ ORYX.Core.Node = {
*/
_init: function(svgDocument){
arguments.callee.$._init.apply(this, arguments);
-
+
var svgNode = svgDocument.getElementsByTagName("g")[0]; //outer most g node
// set all required attributes
var attributeTitle = svgDocument.ownerDocument.createAttribute("title");
attributeTitle.nodeValue = this.getStencil().title();
svgNode.setAttributeNode(attributeTitle);
-
+
var attributeId = svgDocument.ownerDocument.createAttribute("id");
attributeId.nodeValue = this.id;
svgNode.setAttributeNode(attributeId);
-
- //
+
+ //
var stencilTargetNode = this.node.childNodes[0].childNodes[0]; //"
svgNode = stencilTargetNode.appendChild(svgNode);
-
+
// Add to the EventHandler
this.addEventHandlers(svgNode.parentNode);
-
+
/**set minimum and maximum size*/
var minSizeAttr = svgNode.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "minimumSize");
if (minSizeAttr) {
minSizeAttr = minSizeAttr.replace("/,/g", " ");
var minSizeValues = minSizeAttr.split(" ");
minSizeValues = minSizeValues.without("");
-
+
if (minSizeValues.length > 1) {
this.minimumSize = {
width: parseFloat(minSizeValues[0]),
@@ -14757,13 +14757,13 @@ ORYX.Core.Node = {
};
}
}
-
+
var maxSizeAttr = svgNode.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "maximumSize");
if (maxSizeAttr) {
maxSizeAttr = maxSizeAttr.replace("/,/g", " ");
var maxSizeValues = maxSizeAttr.split(" ");
maxSizeValues = maxSizeValues.without("");
-
+
if (maxSizeValues.length > 1) {
this.maximumSize = {
width: parseFloat(maxSizeValues[0]),
@@ -14771,19 +14771,19 @@ ORYX.Core.Node = {
};
}
}
-
+
if (this.minimumSize && this.maximumSize &&
(this.minimumSize.width > this.maximumSize.width ||
this.minimumSize.height > this.maximumSize.height)) {
-
+
//TODO wird verschluckt!!!
throw this + ": Minimum Size must be greater than maxiumSize.";
}
-
+
/**get current bounds and adjust it to upperLeft == (0,0)*/
//initialize all SVGShape objects
this._svgShapes = this._initSVGShapes(svgNode);
-
+
//get upperLeft and lowerRight of stencil
var upperLeft = {
x: undefined,
@@ -14799,7 +14799,7 @@ ORYX.Core.Node = {
upperLeft.y = (upperLeft.y !== undefined) ? Math.min(upperLeft.y, svgShape.y) : svgShape.y;
lowerRight.x = (lowerRight.x !== undefined) ? Math.max(lowerRight.x, svgShape.x + svgShape.width) : svgShape.x + svgShape.width;
lowerRight.y = (lowerRight.y !== undefined) ? Math.max(lowerRight.y, svgShape.y + svgShape.height) : svgShape.y + svgShape.height;
-
+
/** set if resizing is enabled */
//TODO isResizable durch die beiden anderen booleans ersetzen?
if (svgShape.isHorizontallyResizable) {
@@ -14819,24 +14819,24 @@ ORYX.Core.Node = {
me.isResizable = true;
}
});
-
+
//move all SVGShapes by -upperLeft
this._svgShapes.each(function(svgShape){
svgShape.x -= upperLeft.x;
svgShape.y -= upperLeft.y;
svgShape.update();
});
-
+
//set bounds of shape
//the offsets are also needed for positioning the magnets and the docker
var offsetX = upperLeft.x;
var offsetY = upperLeft.y;
-
+
lowerRight.x -= offsetX;
lowerRight.y -= offsetY;
upperLeft.x = 0;
upperLeft.y = 0;
-
+
//prevent that width or height of initial bounds is 0
if (lowerRight.x === 0) {
lowerRight.x = 1;
@@ -14844,18 +14844,18 @@ ORYX.Core.Node = {
if (lowerRight.y === 0) {
lowerRight.y = 1;
}
-
+
this._oldBounds.set(upperLeft, lowerRight);
this.bounds.set(upperLeft, lowerRight);
-
+
/**initialize magnets */
-
+
var magnets = svgDocument.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_ORYX, "magnets");
-
+
if (magnets && magnets.length > 0) {
-
+
magnets = $A(magnets[0].getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_ORYX, "magnet"));
-
+
var me = this;
magnets.each(function(magnetElem){
var magnet = new ORYX.Core.Controls.Magnet({
@@ -14867,7 +14867,7 @@ ORYX.Core.Node = {
x: cx - offsetX,
y: cy - offsetY
});
-
+
//get anchors
var anchors = magnetElem.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "anchors");
if (anchors) {
@@ -14890,9 +14890,9 @@ ORYX.Core.Node = {
}
}
}
-
+
me.add(magnet);
-
+
//check, if magnet is default magnet
if (!this._defaultMagnet) {
var defaultAttr = magnetElem.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "default");
@@ -14903,15 +14903,15 @@ ORYX.Core.Node = {
});
}
else {
- // Add a Magnet in the Center of Shape
+ // Add a Magnet in the Center of Shape
var magnet = new ORYX.Core.Controls.Magnet();
magnet.bounds.centerMoveTo(this.bounds.width() / 2, this.bounds.height() / 2);
this.add(magnet);
}
-
+
/**initialize docker */
var dockerElem = svgDocument.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_ORYX, "docker");
-
+
if (dockerElem && dockerElem.length > 0) {
dockerElem = dockerElem[0];
var docker = this.createDocker();
@@ -14921,13 +14921,13 @@ ORYX.Core.Node = {
x: cx - offsetX,
y: cy - offsetY
});
-
+
//get anchors
var anchors = dockerElem.getAttributeNS(ORYX.CONFIG.NAMESPACE_ORYX, "anchors");
if (anchors) {
anchors = anchors.replace("/,/g", " ");
anchors = anchors.split(" ").without("");
-
+
for(var i = 0; i < anchors.length; i++) {
switch(anchors[i].toLowerCase()) {
case "left":
@@ -14946,7 +14946,7 @@ ORYX.Core.Node = {
}
}
}
-
+
/**initialize labels*/
var textElems = svgNode.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'text');
$A(textElems).each((function(textElem){
@@ -14957,30 +14957,30 @@ ORYX.Core.Node = {
label.x -= offsetX;
label.y -= offsetY;
this._labels[label.id] = label;
-
+
label.registerOnChange(this.layout.bind(this));
-
+
// Only apply fitting on form-components
if(this._stencil.id().indexOf(ORYX.CONFIG.FORM_ELEMENT_ID_PREFIX) == 0) {
label.registerOnChange(this.fitToLabels.bind(this));
}
-
+
}).bind(this));
},
-
+
fitToLabels: function() {
var y = 0;
-
+
this.getLabels().each(function(label){
var lr = label.getY() + label.getHeight();
if(lr > y) {
y = lr;
}
});
-
+
var bounds = this.bounds;
var boundsChanged = false;
-
+
if(this.minimumSize) {
// Check if y-value exceeds the min-value. If not, stick to this value.
var minHeight = this.minimumSize.height;
@@ -14995,13 +14995,13 @@ ORYX.Core.Node = {
boundsChanged = true;
}
}
-
+
if(boundsChanged) {
// Force facade to re-layout since bounds are changed AFTER layout has been performed
if(this.facade.getCanvas() != null) {
this.facade.getCanvas().update();
}
-
+
// Re-select if needed to force the select
if(this.facade.getSelection().member(this)) {
var selectedNow = this.facade.getSelection();
@@ -15010,7 +15010,7 @@ ORYX.Core.Node = {
}
}
},
-
+
/**
* Override the Method, that a docker is not shown
*
@@ -15018,14 +15018,14 @@ ORYX.Core.Node = {
createDocker: function() {
var docker = new ORYX.Core.Controls.Docker({eventHandlerCallback: this.eventHandlerCallback});
docker.bounds.registerCallback(this._dockerChangedCallback);
-
+
this.dockers.push( docker );
docker.parent = this;
- docker.bounds.registerCallback(this._changedCallback);
-
- return docker
- },
-
+ docker.bounds.registerCallback(this._changedCallback);
+
+ return docker
+ },
+
toString: function(){
return this._stencil.title() + " " + this.id
}
@@ -15075,47 +15075,47 @@ ORYX.Core.Edge = {
*/
construct: function(options, stencil, facade){
arguments.callee.$.construct.apply(this, arguments);
-
+
this.isMovable = true;
this.isSelectable = true;
-
+
this._dockerUpdated = false;
-
+
this._markers = new Hash(); //a hash map of SVGMarker objects where keys are the marker ids
this._paths = [];
this._interactionPaths = [];
this._dockersByPath = new Hash();
this._markersByPath = new Hash();
-
- /* Data structures to store positioning information of attached child nodes */
+
+ /* Data structures to store positioning information of attached child nodes */
this.attachedNodePositionData = new Hash();
-
+
//TODO was muss hier initial erzeugt werden?
var stencilNode = this.node.childNodes[0].childNodes[0];
stencilNode = ORYX.Editor.graft("http://www.w3.org/2000/svg", stencilNode, ['g', {
"pointer-events": "painted"
}]);
-
+
//Add to the EventHandler
this.addEventHandlers(stencilNode.parentNode);
-
-
+
+
this._oldBounds = this.bounds.clone();
-
+
//load stencil
this._init(this._stencil.view());
-
+
if (stencil instanceof Array) {
this.deserialize(stencil);
}
-
+
},
-
+
_update: function(force){
if(this._dockerUpdated || this.isChanged || force) {
-
+
this.dockers.invoke("update");
-
+
if (false && (this.bounds.width() === 0 || this.bounds.height() === 0)) {
var width = this.bounds.width();
var height = this.bounds.height();
@@ -15127,9 +15127,9 @@ ORYX.Core.Edge = {
x: width === 0 ? -1 : 0,
y: height === 0 ? -1 : 0
});
-
+
}
-
+
// TODO: Bounds muss abhaengig des Eltern-Shapes gesetzt werden
var upL = this.bounds.upperLeft();
var oldUpL = this._oldBounds.upperLeft();
@@ -15139,33 +15139,33 @@ ORYX.Core.Edge = {
var diffY = upL.y - oldUpL.y;
var diffWidth = (this.bounds.width() / oldWidth) || 1;
var diffHeight = (this.bounds.height() / oldHeight) || 1;
-
+
this.dockers.each((function(docker){
// Unregister on BoundsChangedCallback
docker.bounds.unregisterCallback(this._dockerChangedCallback);
-
+
// If there is any changes at the edge and is there is not an DockersUpdate
// set the new bounds to the docker
if (!this._dockerUpdated) {
docker.bounds.moveBy(diffX, diffY);
-
+
if (diffWidth !== 1 || diffHeight !== 1) {
var relX = docker.bounds.upperLeft().x - upL.x;
var relY = docker.bounds.upperLeft().y - upL.y;
-
+
docker.bounds.moveTo(upL.x + relX * diffWidth, upL.y + relY * diffHeight);
}
}
// Do Docker update and register on DockersBoundChange
docker.update();
docker.bounds.registerCallback(this._dockerChangedCallback);
-
+
}).bind(this));
-
+
if (this._dockerUpdated) {
var a = this.dockers.first().bounds.center();
var b = this.dockers.first().bounds.center();
-
+
this.dockers.each((function(docker){
var center = docker.bounds.center();
a.x = Math.min(a.x, center.x);
@@ -15173,36 +15173,36 @@ ORYX.Core.Edge = {
b.x = Math.max(b.x, center.x);
b.y = Math.max(b.y, center.y);
}).bind(this));
-
+
//set the bounds of the the association
this.bounds.set(Object.clone(a), Object.clone(b));
}
-
+
upL = this.bounds.upperLeft(); oldUpL = this._oldBounds.upperLeft();
- diffWidth = (this.bounds.width() / (oldWidth||this.bounds.width())); diffHeight = (this.bounds.height() / (oldHeight||this.bounds.height()));
+ diffWidth = (this.bounds.width() / (oldWidth||this.bounds.width())); diffHeight = (this.bounds.height() / (oldHeight||this.bounds.height()));
diffX = upL.x - oldUpL.x; diffY = upL.y - oldUpL.y;
-
+
//reposition labels
this.getLabels().each(function(label) {
-
+
if (label.getReferencePoint()){
var ref = label.getReferencePoint();
var from = ref.segment.from, to = ref.segment.to;
if (!from || !from.parent || !to || !to.parent) {
return;
}
-
+
var fromPosition = from.bounds.center(), toPosition = to.bounds.center();
if (fromPosition.x === ref.segment.fromPosition.x && fromPosition.y === ref.segment.fromPosition.y &&
toPosition.x === ref.segment.toPosition.x && toPosition.y === ref.segment.toPosition.y && !ref.dirty){
return;
}
-
+
if (!this.parent.initializingShapes) {
var oldDistance = ORYX.Core.Math.getDistanceBetweenTwoPoints(ref.segment.fromPosition, ref.segment.toPosition, ref.intersection);
var newIntersection = ORYX.Core.Math.getPointBetweenTwoPoints(fromPosition, toPosition, isNaN(oldDistance) ? 0.5 : oldDistance);
-
+
/**
* Set position
*/
@@ -15210,31 +15210,31 @@ ORYX.Core.Edge = {
var oiv = ORYX.Core.Math.getOrthogonalIdentityVector(fromPosition, toPosition);
var isHor = Math.abs(oiv.y)===1, isVer = Math.abs(oiv.x)===1;
oiv.x *= ref.distance; oiv.y *= ref.distance; // vector * distance
- oiv.x += newIntersection.x; oiv.y += newIntersection.y; // vector + the intersection point
- var mx = isHor && ref.orientation && (ref.iorientation||ref.orientation).endsWith("r") ? -label.getWidth() : 0;
+ oiv.x += newIntersection.x; oiv.y += newIntersection.y; // vector + the intersection point
+ var mx = isHor && ref.orientation && (ref.iorientation||ref.orientation).endsWith("r") ? -label.getWidth() : 0;
var my = isVer && ref.orientation && (ref.iorientation||ref.orientation).startsWith("l") ? -label.getHeight()+2 : 0;
label.setX(oiv.x+mx); label.setY(oiv.y+my);
-
+
// Update the reference point
this.updateReferencePointOfLabel(label, newIntersection, from, to);
} else {
var oiv = ORYX.Core.Math.getOrthogonalIdentityVector(fromPosition, toPosition);
oiv.x *= ref.distance; oiv.y *= ref.distance; // vector * distance
- oiv.x += ref.intersection.x; oiv.y += ref.intersection.y; // vector + the intersection point
+ oiv.x += ref.intersection.x; oiv.y += ref.intersection.y; // vector + the intersection point
label.setX(oiv.x); label.setY(oiv.y);
- ref.segment.fromPosition = fromPosition; ref.segment.toPosition = toPosition;
+ ref.segment.fromPosition = fromPosition; ref.segment.toPosition = toPosition;
}
-
- return;
+
+ return;
}
-
+
// Update label position if no reference point is set
if (label.position && !this.parent.initializingShapes){
var x = label.position.x + (diffX * (diffWidth||1));
if (x > this.bounds.lowerRight().x){
x += this.bounds.width()-(this.bounds.width()/(diffWidth||1));
}
-
+
var y = label.position.y + (diffY * (diffHeight||1));
if (y > this.bounds.lowerRight().y){
y += this.bounds.height()-(this.bounds.height()/(diffHeight||1));
@@ -15242,12 +15242,12 @@ ORYX.Core.Edge = {
label.setX(x);label.setY(y);
return;
}
-
+
switch (label.getEdgePosition()) {
case "starttop":
var angle = this._getAngle(this.dockers[0], this.dockers[1]);
var pos = this.dockers.first().bounds.center();
-
+
if (angle <= 90 || angle > 270) {
label.horizontalAlign("left");
label.verticalAlign("bottom");
@@ -15261,13 +15261,13 @@ ORYX.Core.Edge = {
label.y = pos.y - label.getOffsetTop();
label.rotate(180 - angle, pos);
}
-
+
break;
case "startmiddle":
var angle = this._getAngle(this.dockers[0], this.dockers[1]);
var pos = this.dockers.first().bounds.center();
-
+
if (angle <= 90 || angle > 270) {
label.horizontalAlign("left");
label.verticalAlign("bottom");
@@ -15281,13 +15281,13 @@ ORYX.Core.Edge = {
label.y = pos.y + 4;
label.rotate(180 - angle, pos);
}
-
+
break;
-
+
case "startbottom":
var angle = this._getAngle(this.dockers[0], this.dockers[1]);
var pos = this.dockers.first().bounds.center();
-
+
if (angle <= 90 || angle > 270) {
label.horizontalAlign("left");
label.verticalAlign("top");
@@ -15301,7 +15301,7 @@ ORYX.Core.Edge = {
label.y = pos.y + label.getOffsetBottom();
label.rotate(180 - angle, pos);
}
-
+
break;
case "midtop":
var numOfDockers = this.dockers.length;
@@ -15310,12 +15310,12 @@ ORYX.Core.Edge = {
var pos1 = this.dockers[numOfDockers/2-1].bounds.center();
var pos2 = this.dockers[numOfDockers/2].bounds.center();
var pos = {x:(pos1.x + pos2.x)/2.0, y:(pos1.y+pos2.y)/2.0};
-
+
label.horizontalAlign("center");
label.verticalAlign("bottom");
label.x = pos.x;
label.y = pos.y - label.getOffsetTop();
-
+
if (angle <= 90 || angle > 270) {
label.rotate(360 - angle, pos);
} else {
@@ -15325,7 +15325,7 @@ ORYX.Core.Edge = {
var index = parseInt(numOfDockers/2);
var angle = this._getAngle(this.dockers[index], this.dockers[index+1])
var pos = this.dockers[index].bounds.center();
-
+
if (angle <= 90 || angle > 270) {
label.horizontalAlign("left");
label.verticalAlign("bottom");
@@ -15340,7 +15340,7 @@ ORYX.Core.Edge = {
label.rotate(180 - angle, pos);
}
}
-
+
break;
case "midbottom":
var numOfDockers = this.dockers.length;
@@ -15349,12 +15349,12 @@ ORYX.Core.Edge = {
var pos1 = this.dockers[numOfDockers/2-1].bounds.center();
var pos2 = this.dockers[numOfDockers/2].bounds.center();
var pos = {x:(pos1.x + pos2.x)/2.0, y:(pos1.y+pos2.y)/2.0};
-
+
label.horizontalAlign("center");
label.verticalAlign("top");
label.x = pos.x;
label.y = pos.y + label.getOffsetTop();
-
+
if (angle <= 90 || angle > 270) {
label.rotate(360 - angle, pos);
} else {
@@ -15364,7 +15364,7 @@ ORYX.Core.Edge = {
var index = parseInt(numOfDockers/2);
var angle = this._getAngle(this.dockers[index], this.dockers[index+1])
var pos = this.dockers[index].bounds.center();
-
+
if (angle <= 90 || angle > 270) {
label.horizontalAlign("left");
label.verticalAlign("top");
@@ -15379,13 +15379,13 @@ ORYX.Core.Edge = {
label.rotate(180 - angle, pos);
}
}
-
+
break;
case "endtop":
var length = this.dockers.length;
var angle = this._getAngle(this.dockers[length-2], this.dockers[length-1]);
var pos = this.dockers.last().bounds.center();
-
+
if (angle <= 90 || angle > 270) {
label.horizontalAlign("right");
label.verticalAlign("bottom");
@@ -15399,13 +15399,13 @@ ORYX.Core.Edge = {
label.y = pos.y - label.getOffsetTop();
label.rotate(180 - angle, pos);
}
-
+
break;
case "endbottom":
var length = this.dockers.length;
var angle = this._getAngle(this.dockers[length-2], this.dockers[length-1]);
var pos = this.dockers.last().bounds.center();
-
+
if (angle <= 90 || angle > 270) {
label.horizontalAlign("right");
label.verticalAlign("top");
@@ -15419,38 +15419,38 @@ ORYX.Core.Edge = {
label.y = pos.y + label.getOffsetBottom();
label.rotate(180 - angle, pos);
}
-
+
break;
}
}.bind(this));
-
+
this.children.each(function(value) {
if(value instanceof ORYX.Core.Node) {
this.calculatePositionOfAttachedChildNode.call(this, value);
}
}.bind(this));
-
+
this.refreshAttachedNodes();
this.refresh();
-
+
this.isChanged = false;
this._dockerUpdated = false;
-
+
this._oldBounds = this.bounds.clone();
}
-
-
+
+
// IE10 specific fix, start and end-markes get left behind when moving path
var userAgent = navigator.userAgent;
- if (navigator.appVersion.indexOf("MSIE 10") !== -1 || (userAgent.indexOf('Trident') !== -1 && userAgent.indexOf('rv:11') !== -1))
+ if (navigator.appVersion.indexOf("MSIE 10") !== -1 || (userAgent.indexOf('Trident') !== -1 && userAgent.indexOf('rv:11') !== -1))
{
this.node.parentNode.insertBefore(this.node, this.node);
}
},
-
+
/**
* Moves a point to the upperLeft of a node's bounds.
- *
+ *
* @param {point} point
* The point to move
* @param {ORYX.Core.Bounds} bounds
@@ -15460,43 +15460,43 @@ ORYX.Core.Edge = {
point.x -= bounds.width()/2;
point.y -= bounds.height()/2;
},
-
+
/**
* Refreshes the visual representation of edge's attached nodes.
- */
+ */
refreshAttachedNodes: function() {
this.attachedNodePositionData.values().each(function(nodeData) {
var startPoint = nodeData.segment.docker1.bounds.center();
var endPoint = nodeData.segment.docker2.bounds.center();
this.relativizePoint(startPoint);
this.relativizePoint(endPoint);
-
+
var newNodePosition = new Object();
-
+
/* Calculate new x-coordinate */
- newNodePosition.x = startPoint.x
+ newNodePosition.x = startPoint.x
+ nodeData.relativDistanceFromDocker1
* (endPoint.x - startPoint.x);
-
+
/* Calculate new y-coordinate */
- newNodePosition.y = startPoint.y
+ newNodePosition.y = startPoint.y
+ nodeData.relativDistanceFromDocker1
* (endPoint.y - startPoint.y);
-
+
/* Convert new position to the upper left of the node */
this.movePointToUpperLeftOfNode(newNodePosition, nodeData.node.bounds);
-
+
/* Move node to its new position */
nodeData.node.bounds.moveTo(newNodePosition);
- nodeData.node._update();
-
+ nodeData.node._update();
+
}.bind(this));
},
-
+
/**
- * Calculates the position of an edge's child node. The node is placed on
+ * Calculates the position of an edge's child node. The node is placed on
* the path of the edge.
- *
+ *
* @param {node}
* The node to calculate the new position
* @return {Point}
@@ -15507,7 +15507,7 @@ ORYX.Core.Edge = {
var position = new Object();
position.x = 0;
position.y = 0;
-
+
/* Case: Node was just added */
if(!this.attachedNodePositionData[node.getId()]) {
this.attachedNodePositionData[node.getId()] = new Object();
@@ -15519,65 +15519,65 @@ ORYX.Core.Edge = {
}else if(node.isChanged) {
this.findEdgeSegmentForNode(node);
}
-
-
-
- },
-
- /**
+
+
+
+ },
+
+ /**
* Finds the appropriate edge segement for a node.
* The segment is choosen, which has the smallest distance to the node.
- *
+ *
* @param {ORYX.Core.Node} node
* The concerning node
*/
findEdgeSegmentForNode: function(node) {
var length = this.dockers.length;
var smallestDistance = undefined;
-
+
for(i=1;i 0) {
var x = this.bounds.upperLeft().x;
var y = this.bounds.upperLeft().y;
-
+
this.node.firstChild.childNodes[1].setAttributeNS(null, "transform", "translate(" + x + ", " + y + ")");
}
-
+
},
-
+
/**
* Calculate the Border Intersection Point between two points
* @param {PointA}
* @param {PointB}
*/
getIntersectionPoint: function(){
-
+
var length = Math.floor(this.dockers.length / 2)
-
+
return ORYX.Core.Math.midPoint(this.dockers[length - 1].bounds.center(), this.dockers[length].bounds.center())
},
-
+
/**
* Returns TRUE if the bounds is over the edge
* @param {Bounds}
@@ -15756,48 +15756,48 @@ ORYX.Core.Edge = {
if (i == size-1){ return false; }
var a = docker.bounds.center();
var b = dockers[i+1].bounds.center();
-
+
return ORYX.Core.Math.isRectOverLine(a.x, a.y, b.x, b.y, bounds.a.x, bounds.a.y, bounds.b.x, bounds.b.y);
});
},
-
+
/**
* Calculate if the point is inside the Shape
* @param {PointX}
- * @param {PointY}
+ * @param {PointY}
*/
isPointIncluded: function(pointX, pointY){
-
- var isbetweenAB = this.absoluteBounds().isIncluded(pointX, pointY,
+
+ var isbetweenAB = this.absoluteBounds().isIncluded(pointX, pointY,
ORYX.CONFIG.OFFSET_EDGE_BOUNDS);
-
+
var isPointIncluded = undefined;
-
+
if (isbetweenAB && this.dockers.length > 0) {
-
+
var i = 0;
var point1, point2;
-
-
+
+
do {
-
+
point1 = this.dockers[i].bounds.center();
point2 = this.dockers[++i].bounds.center();
-
- isPointIncluded = ORYX.Core.Math.isPointInLine(pointX, pointY,
- point1.x, point1.y,
- point2.x, point2.y,
+
+ isPointIncluded = ORYX.Core.Math.isPointInLine(pointX, pointY,
+ point1.x, point1.y,
+ point2.x, point2.y,
ORYX.CONFIG.OFFSET_EDGE_BOUNDS);
-
+
} while (!isPointIncluded && i < this.dockers.length - 1)
-
+
}
-
+
return isPointIncluded;
},
-
-
+
+
/**
* Calculate if the point is over an special offset area
* @param {Point}
@@ -15805,7 +15805,7 @@ ORYX.Core.Edge = {
isPointOverOffset: function(){
return false
},
-
+
/**
* Returns TRUE if the given node
* is a child node of the shapes node
@@ -15814,13 +15814,13 @@ ORYX.Core.Edge = {
*
*/
containsNode: function(node){
- if (this._paths.include(node) ||
+ if (this._paths.include(node) ||
this._interactionPaths.include(node)){
- return true;
- }
+ return true;
+ }
return false;
},
-
+
/**
* Returns the angle of the line between two dockers
* (0 - 359.99999999)
@@ -15828,104 +15828,104 @@ ORYX.Core.Edge = {
_getAngle: function(docker1, docker2) {
var p1 = docker1 instanceof ORYX.Core.Controls.Docker ? docker1.absoluteCenterXY() : docker1;
var p2 = docker2 instanceof ORYX.Core.Controls.Docker ? docker2.absoluteCenterXY() : docker2;
-
+
return ORYX.Core.Math.getAngle(p1, p2);
},
-
+
alignDockers: function(){
this._update(true);
-
+
var firstPoint = this.dockers.first().bounds.center();
var lastPoint = this.dockers.last().bounds.center();
-
+
var deltaX = lastPoint.x - firstPoint.x;
var deltaY = lastPoint.y - firstPoint.y;
-
+
var numOfDockers = this.dockers.length - 1;
-
+
this.dockers.each((function(docker, index){
var part = index / numOfDockers;
docker.bounds.unregisterCallback(this._dockerChangedCallback);
docker.bounds.moveTo(firstPoint.x + part * deltaX, firstPoint.y + part * deltaY);
docker.bounds.registerCallback(this._dockerChangedCallback);
}).bind(this));
-
+
this._dockerChanged();
},
-
+
add: function(shape){
arguments.callee.$.add.apply(this, arguments);
-
+
// If the new shape is a Docker which is not contained
if (shape instanceof ORYX.Core.Controls.Docker && this.dockers.include(shape)){
- // Add it to the dockers list ordered by paths
+ // Add it to the dockers list ordered by paths
var pathArray = this._dockersByPath.values()[0];
if (pathArray) {
pathArray.splice(this.dockers.indexOf(shape), 0, shape);
}
-
+
/* Perform nessary adjustments on the edge's child shapes */
this.handleChildShapesAfterAddDocker(shape);
}
},
-
+
/**
* Performs nessary adjustments on the edge's child shapes.
- *
+ *
* @param {ORYX.Core.Controls.Docker} docker
* The added docker
*/
handleChildShapesAfterAddDocker: function(docker) {
/* Ensure type of Docker */
if(!docker instanceof ORYX.Core.Controls.Docker) {return undefined;}
-
+
var index = this.dockers.indexOf(docker);
if(!(0 < index && index < this.dockers.length - 1)) {
/* Exception: Expect added docker between first and last node of the edge */
return undefined;
- }
-
+ }
+
/* Get child nodes concerning the segment of the new docker */
var startDocker = this.dockers[index-1];
var endDocker = this.dockers[index+1];
-
+
/* Adjust the position of edge's child nodes */
- var segmentElements =
+ var segmentElements =
this.getAttachedNodePositionDataForSegment(startDocker, endDocker);
-
+
var lengthSegmentPart1 = ORYX.Core.Math.getDistancePointToPoint(
startDocker.bounds.center(),
docker.bounds.center());
var lengthSegmentPart2 = ORYX.Core.Math.getDistancePointToPoint(
endDocker.bounds.center(),
docker.bounds.center());
-
+
if(!(lengthSegmentPart1 + lengthSegmentPart2)) {return;}
-
+
var relativDockerPosition = lengthSegmentPart1 / (lengthSegmentPart1 + lengthSegmentPart2);
-
+
segmentElements.each(function(nodePositionData) {
/* Assign child node to the new segment */
if(nodePositionData.value.relativDistanceFromDocker1 < relativDockerPosition) {
/* Case: before added Docker */
nodePositionData.value.segment.docker2 = docker;
- nodePositionData.value.relativDistanceFromDocker1 =
+ nodePositionData.value.relativDistanceFromDocker1 =
nodePositionData.value.relativDistanceFromDocker1 / relativDockerPosition;
} else {
/* Case: after added Docker */
nodePositionData.value.segment.docker1 = docker;
var newFullDistance = 1 - relativDockerPosition;
- var relativPartOfSegment =
+ var relativPartOfSegment =
nodePositionData.value.relativDistanceFromDocker1
- relativDockerPosition;
-
- nodePositionData.value.relativDistanceFromDocker1 =
+
+ nodePositionData.value.relativDistanceFromDocker1 =
relativPartOfSegment / newFullDistance;
-
+
}
})
-
-
+
+
// Update all labels reference points
this.getLabels().each(function(label){
@@ -15935,16 +15935,16 @@ ORYX.Core.Edge = {
}
var index = this.dockers.indexOf(docker);
if (index >= ref.segment.fromIndex && index <= ref.segment.toIndex){
-
+
var segment = this.findSegment(ref.intersection);
- if (!segment){
+ if (!segment){
// Choose whether the first of the last segment
- segment.fromDocker = ref.segment.fromIndex >= (this.dockers.length/2) ? this.dockers[0] : this.dockers[this.dockers.length-2];
+ segment.fromDocker = ref.segment.fromIndex >= (this.dockers.length/2) ? this.dockers[0] : this.dockers[this.dockers.length-2];
segment.toDocker = this.dockers[this.dockers.indexOf(from)+1]; // The next one if the to docker
}
-
+
var fromPosition = segment.fromDocker.bounds.center(), toPosition = segment.toDocker.bounds.center();
-
+
var intersection = ORYX.Core.Math.getPointOfIntersectionPointLine(
fromPosition, // P1 - Center of the first docker
toPosition, // P2 - Center of the second docker
@@ -15952,71 +15952,71 @@ ORYX.Core.Edge = {
true);
//var oldDistance = ORYX.Core.Math.getDistanceBetweenTwoPoints(ref.segment.fromPosition, ref.segment.toPosition, ref.intersection);
//intersection = ORYX.Core.Math.getPointBetweenTwoPoints(fromPosition, toPosition, isNaN(oldDistance) ? 0.5 : (lengthOld*oldDistance)/lengthNew);
-
+
// Update the reference point
this.updateReferencePointOfLabel(label, intersection, segment.fromDocker, segment.toDocker, true);
}
}.bind(this));
-
+
/* Update attached nodes visual representation */
this.refreshAttachedNodes();
},
-
+
/**
* Returns elements from {@link attachedNodePositiondata} that match the
* segement defined by startDocker and endDocker.
- *
+ *
* @param {ORYX.Core.Controls.Docker} startDocker
* The docker defining the begin of the segment.
* @param {ORYX.Core.Controls.Docker} endDocker
* The docker defining the begin of the segment.
- *
+ *
* @return {Hash} attachedNodePositionData
* Child elements matching the segment
*/
getAttachedNodePositionDataForSegment: function(startDocker, endDocker) {
/* Ensure that the segment is defined correctly */
- if(!((startDocker instanceof ORYX.Core.Controls.Docker)
+ if(!((startDocker instanceof ORYX.Core.Controls.Docker)
&& (endDocker instanceof ORYX.Core.Controls.Docker))) {
return [];
}
-
+
/* Get elements of the segment */
- var elementsOfSegment =
+ var elementsOfSegment =
this.attachedNodePositionData.findAll(function(nodePositionData) {
return nodePositionData.value.segment.docker1 === startDocker &&
nodePositionData.value.segment.docker2 === endDocker;
});
-
+
/* Return a Hash in each case */
if(!elementsOfSegment) {return [];}
-
+
return elementsOfSegment;
},
-
+
/**
* Removes an edge's child shape
*/
remove: function(shape) {
arguments.callee.$.remove.apply(this, arguments);
-
+
if(this.attachedNodePositionData[shape.getId()]) {
delete this.attachedNodePositionData[shape.getId()];
}
-
+
/* Adjust child shapes if neccessary */
if(shape instanceof ORYX.Core.Controls.Docker) {
this.handleChildShapesAfterRemoveDocker(shape);
}
},
-
+
updateReferencePointOfLabel: function(label, intersection, from, to, dirty){
if (!label.getReferencePoint() || !label.isVisible) {
return;
}
-
+
var ref = label.getReferencePoint();
-
+
//
if (ref.orientation && ref.orientation !== "ce"){
var angle = this._getAngle(from, to);
@@ -16038,7 +16038,7 @@ ORYX.Core.Edge = {
label.verticalAlign("top");
} else if (angle > 180 && angle < 270){
label.horizontalAlign("left");
- label.verticalAlign("top");
+ label.verticalAlign("top");
} else if (angle == 270){
label.horizontalAlign("left");
label.verticalAlign("top");//ref.orientation == "ll" ? "bottom" : "top");
@@ -16071,12 +16071,12 @@ ORYX.Core.Edge = {
} else if (angle > 270 && angle <= 360){
label.horizontalAlign("right");
label.verticalAlign("top");
- }
+ }
}
ref.iorientation = ref.iorientation || ref.orientation;
ref.orientation = (label.verticalAlign()=="top"?"u":"l") + (label.horizontalAlign()=="left"?"l":"r");
}
-
+
label.setReferencePoint(jQuery.extend({},{
intersection: intersection,
segment: {
@@ -16092,21 +16092,21 @@ ORYX.Core.Edge = {
},
/**
* Adjusts the child shapes of an edges after a docker was removed.
- *
+ *
* @param{ORYX.Core.Controls.Docker} docker
* The removed docker.
*/
handleChildShapesAfterRemoveDocker: function(docker) {
/* Ensure docker type */
if(!(docker instanceof ORYX.Core.Controls.Docker)) {return;}
-
+
this.attachedNodePositionData.each(function(nodePositionData) {
if(nodePositionData.value.segment.docker1 === docker) {
/* The new start of the segment is the predecessor of docker2. */
var index = this.dockers.indexOf(nodePositionData.value.segment.docker2);
if(index == -1) {return;}
nodePositionData.value.segment.docker1 = this.dockers[index - 1];
- }
+ }
else if(nodePositionData.value.segment.docker2 === docker) {
/* The new end of the segment is the successor of docker1. */
var index = this.dockers.indexOf(nodePositionData.value.segment.docker1);
@@ -16114,7 +16114,7 @@ ORYX.Core.Edge = {
nodePositionData.value.segment.docker2 = this.dockers[index + 1];
}
}.bind(this));
-
+
// Update all labels reference points
this.getLabels().each(function(label){
@@ -16124,13 +16124,13 @@ ORYX.Core.Edge = {
}
var from = ref.segment.from;
var to = ref.segment.to;
-
- if (from !== docker && to !== docker){
- return;
+
+ if (from !== docker && to !== docker){
+ return;
}
-
+
var segment = this.findSegment(ref.intersection);
- if (!segment){
+ if (!segment){
from = segment.fromDocker;
to = segment.toDocker;
} else {
@@ -16138,15 +16138,15 @@ ORYX.Core.Edge = {
to = this.dockers[this.dockers.indexOf(from)+1];
}
- var intersection = ORYX.Core.Math.getPointOfIntersectionPointLine(from.bounds.center(), to.bounds.center(), ref.intersection, true);
+ var intersection = ORYX.Core.Math.getPointOfIntersectionPointLine(from.bounds.center(), to.bounds.center(), ref.intersection, true);
// Update the reference point
this.updateReferencePointOfLabel(label, intersection, from, to, true);
}.bind(this));
-
+
/* Update attached nodes visual representation */
this.refreshAttachedNodes();
},
-
+
/**
*@deprecated Use the .createDocker() Method and set the point via the bounds
*/
@@ -16162,7 +16162,7 @@ ORYX.Core.Edge = {
else {
var point1 = lastDocker.bounds.center();
var point2 = docker.bounds.center();
-
+
var additionalIEZoom = 1;
if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) {
var ua = navigator.userAgent;
@@ -16174,12 +16174,12 @@ ORYX.Core.Edge = {
}
}
}
-
+
if (additionalIEZoom !== 1) {
position.x = position.x / additionalIEZoom;
position.y = position.y / additionalIEZoom;
}
-
+
if (ORYX.Core.Math.isPointInLine(position.x, position.y, point1.x, point1.y, point2.x, point2.y, 10)) {
var path = this._paths.find(function(path){
return path.id === pair.key;
@@ -16190,7 +16190,7 @@ ORYX.Core.Edge = {
return true;
}
}
-
+
var newDocker = (exDocker) ? exDocker : this.createDocker(this.dockers.indexOf(lastDocker) + 1, position);
newDocker.bounds.centerMoveTo(position);
if(exDocker)
@@ -16207,7 +16207,7 @@ ORYX.Core.Edge = {
}).bind(this));
return result;
},
-
+
removeDocker: function(docker){
if (this.dockers.length > 2 && !(this.dockers.first() === docker)) {
this._dockersByPath.any((function(pair){
@@ -16227,55 +16227,55 @@ ORYX.Core.Edge = {
}).bind(this));
}
},
-
+
/**
- * Removes all dockers from the edge which are on
+ * Removes all dockers from the edge which are on
* the line between two dockers
- * @return {Object} Removed dockers in an indicied array
+ * @return {Object} Removed dockers in an indicied array
* (key is the removed position of the docker, value is docker themselve)
*/
removeUnusedDockers:function(){
var marked = $H({});
-
+
this.dockers.each(function(docker, i){
if (i==0||i==this.dockers.length-1){ return }
var previous = this.dockers[i-1];
-
+
/* Do not consider already removed dockers */
if(marked.values().indexOf(previous) != -1 && this.dockers[i-2]) {
previous = this.dockers[i-2];
}
var next = this.dockers[i+1];
-
+
var cp = previous.getDockedShape() && previous.referencePoint ? previous.getAbsoluteReferencePoint() : previous.bounds.center();
var cn = next.getDockedShape() && next.referencePoint ? next.getAbsoluteReferencePoint() : next.bounds.center();
var cd = docker.bounds.center();
-
+
if (ORYX.Core.Math.isPointInLine(cd.x, cd.y, cp.x, cp.y, cn.x, cn.y, 1)){
marked[i] = docker;
}
}.bind(this))
-
+
marked.each(function(docker){
this.removeDocker(docker.value);
}.bind(this))
-
+
if (marked.values().length > 0){
this._update(true);
}
-
+
return marked;
},
-
+
/**
* Initializes the Edge after loading the SVG representation of the edge.
* @param {SVGDocument} svgDocument
*/
_init: function(svgDocument){
arguments.callee.$._init.apply(this, arguments);
-
+
var minPointX, minPointY, maxPointX, maxPointY;
-
+
//init markers
var defs = svgDocument.getElementsByTagNameNS(NAMESPACE_SVG, "defs");
if (defs.length > 0) {
@@ -16296,82 +16296,82 @@ ORYX.Core.Edge = {
});
me._labels[label.id] = label;
});
- }
+ }
catch (e) {
}
});
}
-
-
+
+
var gs = svgDocument.getElementsByTagNameNS(NAMESPACE_SVG, "g");
if (gs.length <= 0) {
throw "Edge: No g element found.";
}
var g = gs[0];
-
-
+
+
g.setAttributeNS(null, "id", null);
-
+
var isFirst = true;
-
+
$A(g.childNodes).each((function(path, index){
if (ORYX.Editor.checkClassType(path, SVGPathElement)) {
path = path.cloneNode(false);
-
+
var pathId = this.id + "_" + index;
path.setAttributeNS(null, "id", pathId);
this._paths.push(path);
-
+
//check, if markers are set and update the id
var markersByThisPath = [];
var markerUrl = path.getAttributeNS(null, "marker-start");
-
+
if (markerUrl && markerUrl !== "") {
markerUrl = markerUrl.strip();
markerUrl = markerUrl.replace(/^url\(#/, '');
-
+
var markerStartId = this.getValidMarkerId(markerUrl);
path.setAttributeNS(null, "marker-start", "url(#" + markerStartId + ")");
-
+
markersByThisPath.push(this._markers[markerStartId]);
}
-
+
markerUrl = path.getAttributeNS(null, "marker-mid");
-
+
if (markerUrl && markerUrl !== "") {
markerUrl = markerUrl.strip();
markerUrl = markerUrl.replace(/^url\(#/, '');
var markerMidId = this.getValidMarkerId(markerUrl);
path.setAttributeNS(null, "marker-mid", "url(#" + markerMidId + ")");
-
+
markersByThisPath.push(this._markers[markerMidId]);
}
-
+
markerUrl = path.getAttributeNS(null, "marker-end");
-
+
if (markerUrl && markerUrl !== "") {
markerUrl = markerUrl.strip();
-
+
var markerEndId = this.getValidMarkerId(markerUrl);
path.setAttributeNS(null, "marker-end", "url(#" + markerEndId + ")");
-
+
markersByThisPath.push(this._markers[markerEndId]);
}
-
+
this._markersByPath[pathId] = markersByThisPath;
-
+
//init dockers
var parser = new PathParser();
var handler = new ORYX.Core.SVG.PointsPathHandler();
parser.setHandler(handler);
parser.parsePath(path);
-
+
if (handler.points.length < 4) {
throw "Edge: Path has to have two or more points specified.";
}
-
+
this._dockersByPath[pathId] = [];
-
+
for (var i = 0; i < handler.points.length; i += 2) {
//handler.points.each((function(point, pIndex){
var x = handler.points[i];
@@ -16383,9 +16383,9 @@ ORYX.Core.Edge = {
docker.bounds.centerMoveTo(x,y);
docker.bounds.registerCallback(this._dockerChangedCallback);
this.add(docker, this.dockers.length);
-
+
//this._dockersByPath[pathId].push(docker);
-
+
//calculate minPoint and maxPoint
if (minPointX) {
minPointX = Math.min(x, minPointX);
@@ -16395,7 +16395,7 @@ ORYX.Core.Edge = {
minPointX = x;
minPointY = y;
}
-
+
if (maxPointX) {
maxPointX = Math.max(x, maxPointX);
maxPointY = Math.max(y, maxPointY);
@@ -16410,36 +16410,36 @@ ORYX.Core.Edge = {
isFirst = false;
}
}).bind(this));
-
+
this.bounds.set(minPointX, minPointY, maxPointX, maxPointY);
-
+
if (false&&(this.bounds.width() === 0 || this.bounds.height() === 0)) {
var width = this.bounds.width();
var height = this.bounds.height();
-
+
this.bounds.extend({
x: width === 0 ? 2 : 0,
y: height === 0 ? 2 : 0
});
-
+
this.bounds.moveBy({
x: width === 0 ? -1 : 0,
y: height === 0 ? -1 : 0
});
-
+
}
-
+
this._oldBounds = this.bounds.clone();
-
+
//add paths to this.node
this._paths.reverse();
var paths = [];
this._paths.each((function(path){
paths.push(this.node.childNodes[0].childNodes[0].childNodes[0].appendChild(path));
}).bind(this));
-
+
this._paths = paths;
-
+
//init interaction path
this._paths.each((function(path){
var iPath = path.cloneNode(false);
@@ -16452,13 +16452,13 @@ ORYX.Core.Edge = {
iPath.setAttributeNS(null, "title", this.getStencil().title());
this._interactionPaths.push(this.node.childNodes[0].childNodes[0].childNodes[0].appendChild(iPath));
}).bind(this));
-
+
this._paths.reverse();
this._interactionPaths.reverse();
-
+
/**initialize labels*/
var textElems = svgDocument.getElementsByTagNameNS(ORYX.CONFIG.NAMESPACE_SVG, 'text');
-
+
$A(textElems).each((function(textElem){
var label = new ORYX.Core.SVG.Label({
textElement: textElem,
@@ -16466,25 +16466,25 @@ ORYX.Core.Edge = {
});
this.node.childNodes[0].childNodes[0].appendChild(label.node);
this._labels[label.id] = label;
-
+
label.registerOnChange(this.layout.bind(this));
- }).bind(this));
-
-
+ }).bind(this));
+
+
this.propertiesChanged.each(function(pair){
pair.value = true;
});
-
-
+
+
//if(this.dockers.length == 2) {
-
-
-
+
+
+
// }
-
+
//this._update(true);
},
-
+
getValidMarkerId: function(markerUrl) {
if(markerUrl.indexOf("url(\"#") >= 0) {
// Fix for IE9, additional quotes are added to the 2) {
@@ -16733,14 +16733,14 @@ ORYX.Core.Edge = {
this.removeDocker(this._dockersByPath[path.id][0]);
}
}
-
+
var dockersByPath = this._dockersByPath[path.id];
-
+
if (index === 0) {
//set position of first docker
var x = parseFloat(values.shift());
var y = parseFloat(values.shift());
-
+
if (dockersByPath.first().getDockedShape()) {
dockersByPath.first().setReferencePoint({
x: x,
@@ -16751,11 +16751,11 @@ ORYX.Core.Edge = {
dockersByPath.first().bounds.centerMoveTo(x, y);
}
}
-
+
//set position of last docker
y = parseFloat(values.pop());
x = parseFloat(values.pop());
-
+
if (dockersByPath.last().getDockedShape()) {
dockersByPath.last().setReferencePoint({
x: x,
@@ -16764,15 +16764,15 @@ ORYX.Core.Edge = {
} else {
dockersByPath.last().bounds.centerMoveTo(x, y);
}
-
+
//add additional dockers
for (var i = 0; i < values.length; i++) {
x = parseFloat(values[i]);
y = parseFloat(values[++i]);
-
+
var newDocker = this.createDocker();
newDocker.bounds.centerMoveTo(x, y);
-
+
//this.dockers = this.dockers.without(newDocker);
//this.dockers.splice(this.dockers.indexOf(dockersByPath.last()), 0, newDocker);
//dockersByPath.splice(this.dockers.indexOf(dockersByPath.last()), 0, newDocker);
@@ -16783,33 +16783,33 @@ ORYX.Core.Edge = {
} else {
this.alignDockers();
}
-
+
arguments.callee.$.deserialize.apply(this, arguments);
-
+
this._changed();
},
-
+
toString: function(){
return this.getStencil().title() + " " + this.id;
},
-
+
/**
* @return {ORYX.Core.Shape} Returns last docked shape or null.
*/
getTarget: function(){
return this.dockers.last() ? this.dockers.last().getDockedShape() : null;
},
-
+
/**
* @return {ORYX.Core.Shape} Returns the first docked shape or null
*/
getSource: function() {
return this.dockers.first() ? this.dockers.first().getDockedShape() : null;
},
-
+
/**
* Checks whether the edge is at least docked to one shape.
- *
+ *
* @return {boolean} True if edge is docked
*/
isDocked: function() {
@@ -16822,19 +16822,19 @@ ORYX.Core.Edge = {
});
return isDocked;
},
-
+
/**
* Calls {@link ORYX.Core.AbstractShape#toJSON} and add a some stencil set information.
*/
toJSON: function() {
var json = arguments.callee.$.toJSON.apply(this, arguments);
-
+
if(this.getTarget()) {
json.target = {
resourceId: this.getTarget().resourceId
};
}
-
+
return json;
}
};
@@ -16860,42 +16860,42 @@ if(!ORYX.Plugins){ ORYX.Plugins = {} }
construct: function() {
// Call super class constructor
arguments.callee.$.construct.apply(this, arguments);
-
+
[...]
},
[...]
});
-
+
@class ORYX.Plugins.AbstractPlugin
@constructor Creates a new instance
@author Willi Tscheschner
*/
ORYX.Plugins.AbstractPlugin = Clazz.extend({
- /**
+ /**
* The facade which offer editor-specific functionality
* @type Facade
* @memberOf ORYX.Plugins.AbstractPlugin.prototype
*/
facade: null,
-
+
construct: function( facade ){
this.facade = facade;
-
+
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADED, this.onLoaded.bind(this));
},
-
+
/**
Overwrite to handle load event. TODO: Document params!!!
@methodOf ORYX.Plugins.AbstractPlugin.prototype
*/
onLoaded: function(){},
-
+
/**
Overwrite to handle selection changed event. TODO: Document params!!!
@methodOf ORYX.Plugins.AbstractPlugin.prototype
*/
onSelectionChanged: function(){},
-
+
/**
Show overlay on given shape.
@methodOf ORYX.Plugins.AbstractPlugin.prototype
@@ -16917,11 +16917,11 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
@param {String} [svgNode="NW"] The svg node position where the overlay should be placed
*/
showOverlay: function(shapes, attributes, svgNode, svgNodePosition ){
-
+
if( !(shapes instanceof Array) ){
shapes = [shapes]
}
-
+
// Define Shapes
shapes = shapes.map(function(shape){
var el = shape;
@@ -16931,12 +16931,12 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
}
return el;
}.bind(this)).compact();
-
+
// Define unified id
if( !this.overlayID ){
this.overlayID = this.type + ORYX.Editor.provideId();
}
-
+
this.facade.raiseEvent({
type : ORYX.CONFIG.EVENT_OVERLAY_SHOW,
id : this.overlayID,
@@ -16945,9 +16945,9 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
node : svgNode,
nodePosition: svgNodePosition || "NW"
});
-
+
},
-
+
/**
Hide current overlay.
@methodOf ORYX.Plugins.AbstractPlugin.prototype
@@ -16956,17 +16956,17 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
this.facade.raiseEvent({
type : ORYX.CONFIG.EVENT_OVERLAY_HIDE,
id : this.overlayID
- });
+ });
},
-
+
/**
Does a transformation with the given xslt stylesheet.
@methodOf ORYX.Plugins.AbstractPlugin.prototype
@param {String} data The data (e.g. eRDF) which should be transformed
@param {String} stylesheet URL of a stylesheet which should be used for transforming data.
*/
- doTransform: function( data, stylesheet ) {
-
+ doTransform: function( data, stylesheet ) {
+
if( !stylesheet || !data ){
return ""
}
@@ -16988,23 +16988,23 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
var domParser = new DOMParser();
var xslObject = domParser.parseFromString(xsl, "text/xml");
xsltProcessor.importStylesheet(xslObject);
-
+
try {
-
+
var newData = xsltProcessor.transformToFragment(parsedData, document);
var serializedData = (new XMLSerializer()).serializeToString(newData);
-
+
/* Firefox 2 to 3 problem?! */
serializedData = !serializedData.startsWith("" + serializedData : serializedData;
-
+
return serializedData;
-
+
}catch (error) {
return -1;
}
-
+
},
-
+
/**
* Opens a new window that shows the given XML content.
* @methodOf ORYX.Plugins.AbstractPlugin.prototype
@@ -17020,7 +17020,7 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
'_blank', "resizable=yes,width=600,height=600,toolbar=0,scrollbars=yes"
);
},
-
+
/**
* Opens a download window for downloading the given content.
* @methodOf ORYX.Plugins.AbstractPlugin.prototype
@@ -17034,7 +17034,7 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
win.document.write("");
var submitForm = win.document.createElement("form");
win.document.body.appendChild(submitForm);
-
+
var createHiddenElement = function(name, value) {
var newElement = document.createElement("input");
newElement.name=name;
@@ -17042,19 +17042,19 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
newElement.value = value;
return newElement
}
-
+
submitForm.appendChild( createHiddenElement("download", content) );
submitForm.appendChild( createHiddenElement("file", filename) );
-
-
+
+
submitForm.method = "POST";
win.document.write("");
win.document.close();
submitForm.action= ORYX.PATH + "/download";
submitForm.submit();
- }
+ }
},
-
+
/**
* Serializes DOM.
* @methodOf ORYX.Plugins.AbstractPlugin.prototype
@@ -17083,10 +17083,10 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
'' +
serializedDOM +
'';
-
+
return serializedDOM;
},
-
+
/**
* Sets the editor in read only mode: Edges/ dockers cannot be moved anymore,
* shapes cannot be selected anymore.
@@ -17095,7 +17095,7 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
enableReadOnlyMode: function(){
//Edges cannot be moved anymore
this.facade.disableEvent(ORYX.CONFIG.EVENT_MOUSEDOWN);
-
+
// Stop the user from editing the diagram while the plugin is active
this._stopSelectionChange = function(){
if(this.facade.getSelection().length > 0) {
@@ -17112,13 +17112,13 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
disableReadOnlyMode: function(){
// Edges can be moved now again
this.facade.enableEvent(ORYX.CONFIG.EVENT_MOUSEDOWN);
-
+
if (this._stopSelectionChange) {
this.facade.unregisterOnEvent(ORYX.CONFIG.EVENT_SELECTION_CHANGED, this._stopSelectionChange.bind(this));
this._stopSelectionChange = undefined;
}
},
-
+
/**
* Extracts RDF from DOM.
* @methodOf ORYX.Plugins.AbstractPlugin.prototype
@@ -17139,32 +17139,32 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
ORYX.Log.error("XSL load failed" + transport);
}).bind(this)
});
-
+
var domParser = new DOMParser();
var xmlObject = domParser.parseFromString(this.getSerializedDOM(), "text/xml");
var xslObject = domParser.parseFromString(xsl, "text/xml");
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xslObject);
var result = xsltProcessor.transformToFragment(xmlObject, document);
-
+
var serializer = new XMLSerializer();
-
+
return serializer.serializeToString(result);
} catch(e){
console.log("error serializing " + e);
return "";
}
-
+
},
-
+
/**
* Checks if a certain stencil set is loaded right now.
- *
+ *
*/
isStencilSetExtensionLoaded: function(stencilSetExtensionNamespace) {
return this.facade.getStencilSets().values().any(
- function(ss){
+ function(ss){
return ss.extensions().keys().any(
function(extensionKey) {
return extensionKey == stencilSetExtensionNamespace;
@@ -17173,10 +17173,10 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
}.bind(this)
);
},
-
+
/**
* Raises an event so that registered layouters does
- * have the posiblility to layout the given shapes
+ * have the posiblility to layout the given shapes
* For further reading, have a look into the AbstractLayouter
* class
* @param {Object} shapes
@@ -17198,18 +17198,18 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
});
}
},
-
-
+
+
/**
- * Does a primitive layouting with the incoming/outgoing
- * edges (set the dockers to the right position) and if
- * necessary, it will be called the real layouting
+ * Does a primitive layouting with the incoming/outgoing
+ * edges (set the dockers to the right position) and if
+ * necessary, it will be called the real layouting
* @param {ORYX.Core.Node} node
* @param {Array} edges
*/
- layoutEdges : function(node, allEdges, offset){
+ layoutEdges : function(node, allEdges, offset){
- if (!this.facade.isExecutingCommands()){ return }
+ if (!this.facade.isExecutingCommands()){ return }
var Command = ORYX.Core.Command.extend({
construct: function(edges, node, offset, plugin){
@@ -17217,15 +17217,15 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
this.node = node;
this.plugin = plugin;
this.offset = offset;
-
+
// Get the new absolute center
var center = node.absoluteXY();
this.ulo = {x: center.x - offset.x, y:center.y - offset.y};
-
-
+
+
},
execute: function(){
-
+
if (this.changes){
this.executeAgain();
return;
@@ -17238,7 +17238,7 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
})
}.bind(this));
}
-
+
// Find all edges, which are related to the node and
// have more than two dockers
this.edges
@@ -17246,14 +17246,14 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
.findAll(function(r){ return r.dockers.length > 2 }.bind(this))
// For every edge, check second and one before last docker
// if there are horizontal/vertical on the same level
- // and if so, align the the bounds
+ // and if so, align the the bounds
.each(function(edge){
if (edge.dockers.first().getDockedShape() === this.node){
var second = edge.dockers[1];
if (this.align(second.bounds, edge.dockers.first())){ second.update(); }
} else if (edge.dockers.last().getDockedShape() === this.node) {
var beforeLast = edge.dockers[edge.dockers.length-2];
- if (this.align(beforeLast.bounds, edge.dockers.last())){ beforeLast.update(); }
+ if (this.align(beforeLast.bounds, edge.dockers.last())){ beforeLast.update(); }
}
edge._update(true);
edge.removeUnusedDockers();
@@ -17262,9 +17262,9 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
return;
}
}.bind(this));
-
-
- // Find all edges, which have only to dockers
+
+
+ // Find all edges, which have only to dockers
// and is located horizontal/vertical.
// Do layout with those edges
this.edges
@@ -17279,22 +17279,22 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
}
}
}.bind(this));
-
+
this.edges.each(function(edge, i){
this.changes[i].dockerPositions = edge.dockers.map(function(r){ return r.bounds.center() });
}.bind(this));
-
+
},
/**
- * Align the bounds if the center is
+ * Align the bounds if the center is
* the same than the old center
* @params {Object} bounds
* @params {Object} bounds2
*/
align: function(bounds, refDocker){
-
+
var abRef = refDocker.getAbsoluteReferencePoint() || refDocker.bounds.center();
-
+
var xdif = bounds.center().x-abRef.x;
var ydif = bounds.center().y-abRef.y;
if (Math.abs(-Math.abs(xdif) + Math.abs(this.offset.x)) < 3 && this.offset.xs === undefined){
@@ -17303,50 +17303,50 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
if (Math.abs(-Math.abs(ydif) + Math.abs(this.offset.y)) < 3 && this.offset.ys === undefined){
bounds.moveBy({y:-ydif, x:0})
}
-
+
if (this.offset.xs !== undefined || this.offset.ys !== undefined){
var absPXY = refDocker.getDockedShape().absoluteXY();
xdif = bounds.center().x-(absPXY.x+((abRef.x-absPXY.x)/this.offset.xs));
ydif = bounds.center().y-(absPXY.y+((abRef.y-absPXY.y)/this.offset.ys));
-
+
if (Math.abs(-Math.abs(xdif) + Math.abs(this.offset.x)) < 3){
bounds.moveBy({x:-(bounds.center().x-abRef.x), y:0})
}
-
+
if (Math.abs(-Math.abs(ydif) + Math.abs(this.offset.y)) < 3){
bounds.moveBy({y:-(bounds.center().y-abRef.y), x:0})
}
}
},
-
- /**
+
+ /**
* Returns a TRUE if there are bend point which overlay the shape
*/
isBendPointIncluded: function(edge){
// Get absolute bounds
var ab = edge.dockers.first().getDockedShape();
var bb = edge.dockers.last().getDockedShape();
-
+
if (ab) {
ab = ab.absoluteBounds();
ab.widen(5);
}
-
+
if (bb) {
bb = bb.absoluteBounds();
bb.widen(20); // Wide with 20 because of the arrow from the edge
}
-
+
return edge.dockers
- .any(function(docker, i){
+ .any(function(docker, i){
var c = docker.bounds.center();
// Dont count first and last
- return i != 0 && i != edge.dockers.length-1 &&
+ return i != 0 && i != edge.dockers.length-1 &&
// Check if the point is included to the absolute bounds
((ab && ab.isIncluded(c)) || (bb && bb.isIncluded(c)))
})
},
-
+
removeAllDocker: function(edge){
edge.dockers.slice(1, edge.dockers.length-1).each(function(docker){
edge.removeDocker(docker);
@@ -17356,8 +17356,8 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
this.changes.each(function(change){
// Reset the dockers
this.removeAllDocker(change.edge);
- change.dockerPositions.each(function(pos, i){
- if (i==0||i==change.dockerPositions.length-1){ return }
+ change.dockerPositions.each(function(pos, i){
+ if (i==0||i==change.dockerPositions.length-1){ return }
var docker = change.edge.createDocker(undefined, pos);
docker.bounds.centerMoveTo(pos);
docker.update();
@@ -17365,12 +17365,12 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
change.edge._update(true);
}.bind(this));
},
- rollback: function(){
+ rollback: function(){
this.changes.each(function(change){
// Reset the dockers
this.removeAllDocker(change.edge);
- change.oldDockerPositions.each(function(pos, i){
- if (i==0||i==change.oldDockerPositions.length-1){ return }
+ change.oldDockerPositions.each(function(pos, i){
+ if (i==0||i==change.oldDockerPositions.length-1){ return }
var docker = change.edge.createDocker(undefined, pos);
docker.bounds.centerMoveTo(pos);
docker.update();
@@ -17379,7 +17379,7 @@ ORYX.Plugins.AbstractPlugin = Clazz.extend({
}.bind(this));
}
});
-
+
this.facade.executeCommands([new Command(allEdges, node, offset, this)]);
}
@@ -17398,23 +17398,23 @@ if(!ORYX.Plugins){ ORYX.Plugins = {} }
/**
This abstract plugin implements the core behaviour of layout
-
+
@class ORYX.Plugins.AbstractLayouter
@constructor Creates a new instance
@author Willi Tscheschner
*/
ORYX.Plugins.AbstractLayouter = ORYX.Plugins.AbstractPlugin.extend({
-
+
/**
- * 'layouted' defined all types of shapes which will be layouted.
+ * 'layouted' defined all types of shapes which will be layouted.
* It can be one value or an array of values. The value
- * can be a Stencil ID (as String) or an class type of either
+ * can be a Stencil ID (as String) or an class type of either
* a ORYX.Core.Node or ORYX.Core.Edge
* @type Array|String|Object
* @memberOf ORYX.Plugins.AbstractLayouter.prototype
*/
layouted : [],
-
+
/**
* Constructor
* @param {Object} facade
@@ -17422,10 +17422,10 @@ ORYX.Plugins.AbstractLayouter = ORYX.Plugins.AbstractPlugin.extend({
*/
construct: function( facade ){
arguments.callee.$.construct.apply(this, arguments);
-
+
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LAYOUT, this._initLayout.bind(this));
},
-
+
/**
* Proofs if this shape should be layouted or not
* @param {Object} shape
@@ -17435,14 +17435,14 @@ ORYX.Plugins.AbstractLayouter = ORYX.Plugins.AbstractPlugin.extend({
if (!(this.layouted instanceof Array)){
this.layouted = [this.layouted].compact();
}
-
+
// If there are no elements
if (this.layouted.length <= 0) {
// Return TRUE
return true;
}
-
- // Return TRUE if there is any correlation between
+
+ // Return TRUE if there is any correlation between
// the 'layouted' attribute and the shape themselve.
return this.layouted.any(function(s){
if (typeof s == "string") {
@@ -17452,7 +17452,7 @@ ORYX.Plugins.AbstractLayouter = ORYX.Plugins.AbstractPlugin.extend({
}
})
},
-
+
/**
* Callback to start the layouting
* @param {Object} event Layout event
@@ -17460,22 +17460,22 @@ ORYX.Plugins.AbstractLayouter = ORYX.Plugins.AbstractPlugin.extend({
* @memberOf ORYX.Plugins.AbstractLayouter.prototype
*/
_initLayout: function(event){
-
+
// Get the shapes
var shapes = [event.shapes].flatten().compact();
-
+
// Find all shapes which should be layouted
var toLayout = shapes.findAll(function(shape){
- return this.isIncludedInLayout(shape)
+ return this.isIncludedInLayout(shape)
}.bind(this))
-
- // If there are shapes left
+
+ // If there are shapes left
if (toLayout.length > 0){
// Do layout
this.layout(toLayout);
}
},
-
+
/**
* Implementation of layouting a set on shapes
* @param {Object} shapes Given shapes
@@ -17494,18 +17494,18 @@ ORYX.Plugins.AbstractLayouter = ORYX.Plugins.AbstractPlugin.extend({
* All code Copyright 2013 KIS Consultancy all rights reserved
*/
-if (!ORYX.Plugins)
+if (!ORYX.Plugins)
ORYX.Plugins = new Object();
ORYX.Plugins.Edit = Clazz.extend({
-
+
construct: function(facade){
-
+
this.facade = facade;
this.clipboard = new ORYX.Plugins.Edit.ClipBoard();
-
+
//this.facade.registerOnEvent(ORYX.CONFIG.EVENT_KEYDOWN, this.keyHandler.bind(this));
-
+
this.facade.offer({
name: ORYX.I18N.Edit.cut,
description: ORYX.I18N.Edit.cutDesc,
@@ -17521,7 +17521,7 @@ ORYX.Plugins.Edit = Clazz.extend({
index: 1,
minShape: 1
});
-
+
this.facade.offer({
name: ORYX.I18N.Edit.copy,
description: ORYX.I18N.Edit.copyDesc,
@@ -17537,7 +17537,7 @@ ORYX.Plugins.Edit = Clazz.extend({
index: 2,
minShape: 1
});
-
+
this.facade.offer({
name: ORYX.I18N.Edit.paste,
description: ORYX.I18N.Edit.pasteDesc,
@@ -17555,7 +17555,7 @@ ORYX.Plugins.Edit = Clazz.extend({
minShape: 0,
maxShape: 0
});
-
+
this.facade.offer({
name: ORYX.I18N.Edit.del,
description: ORYX.I18N.Edit.delDesc,
@@ -17565,7 +17565,7 @@ ORYX.Plugins.Edit = Clazz.extend({
keyCode: 8,
keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
},
- {
+ {
keyCode: 46,
keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
}
@@ -17576,13 +17576,13 @@ ORYX.Plugins.Edit = Clazz.extend({
minShape: 1
});
},
-
+
callEdit: function(fn, args){
window.setTimeout(function(){
fn.apply(this, (args instanceof Array ? args : []));
}.bind(this), 1);
},
-
+
/**
* Handles the mouse down event and starts the copy-move-paste action, if
* control or meta key is pressed.
@@ -17596,10 +17596,10 @@ ORYX.Plugins.Edit = Clazz.extend({
this.editPaste();
event.forceExecution = true;
this.facade.raiseEvent(event, this.clipboard.shapesAsJson);
-
+
}
},
-
+
/**
* The key handler for this plugin. Every action from the set of cut, copy,
* paste and delete should be accessible trough simple keyboard shortcuts.
@@ -17610,68 +17610,68 @@ ORYX.Plugins.Edit = Clazz.extend({
*/
// keyHandler: function(event){
// //TODO document what event.which is.
-//
+//
// ORYX.Log.debug("edit.js handles a keyEvent.");
-//
+//
// // assure we have the current event.
-// if (!event)
+// if (!event)
// event = window.event;
-//
-//
+//
+//
// // get the currently pressed key and state of control key.
// var pressedKey = event.which || event.keyCode;
// var ctrlPressed = event.ctrlKey;
-//
+//
// // if the object is to be deleted, do so, and return immediately.
// if ((pressedKey == ORYX.CONFIG.KEY_CODE_DELETE) ||
// ((pressedKey == ORYX.CONFIG.KEY_CODE_BACKSPACE) &&
// (event.metaKey || event.appleMetaKey))) {
-//
+//
// ORYX.Log.debug("edit.js deletes the shape.");
// this.editDelete();
// return;
// }
-//
+//
// // if control key is not pressed, we're not interested anymore.
// if (!ctrlPressed)
// return;
-//
+//
// // when ctrl is pressed, switch trough the possibilities.
// switch (pressedKey) {
-//
+//
// // cut.
// case ORYX.CONFIG.KEY_CODE_X:
// this.editCut();
// break;
-//
+//
// // copy.
// case ORYX.CONFIG.KEY_CODE_C:
// this.editCopy();
// break;
-//
+//
// // paste.
// case ORYX.CONFIG.KEY_CODE_V:
// this.editPaste();
// break;
// }
// },
-
+
/**
* Returns a list of shapes which should be considered while copying.
* Besides the shapes of given ones, edges and attached nodes are added to the result set.
- * If one of the given shape is a child of another given shape, it is not put into the result.
+ * If one of the given shape is a child of another given shape, it is not put into the result.
*/
getAllShapesToConsider: function(shapes){
var shapesToConsider = []; // only top-level shapes
var childShapesToConsider = []; // all child shapes of top-level shapes
-
+
shapes.each(function(shape){
//Throw away these shapes which have a parent in given shapes
isChildShapeOfAnother = shapes.any(function(s2){
return s2.hasChildShape(shape);
});
if(isChildShapeOfAnother) return;
-
+
// This shape should be considered
shapesToConsider.push(shape);
// Consider attached nodes (e.g. intermediate events)
@@ -17680,17 +17680,17 @@ ORYX.Plugins.Edit = Clazz.extend({
attached = attached.findAll(function(a){ return !shapes.include(a) });
shapesToConsider = shapesToConsider.concat(attached);
}
-
+
childShapesToConsider = childShapesToConsider.concat(shape.getChildShapes(true));
}.bind(this));
-
+
// All edges between considered child shapes should be considered
// Look for these edges having incoming and outgoing in childShapesToConsider
var edgesToConsider = this.facade.getCanvas().getChildEdges().select(function(edge){
// Ignore if already added
if(shapesToConsider.include(edge)) return false;
// Ignore if there are no docked shapes
- if(edge.getAllDockedShapes().size() === 0) return false;
+ if(edge.getAllDockedShapes().size() === 0) return false;
// True if all docked shapes are in considered child shapes
return edge.getAllDockedShapes().all(function(shape){
// Remember: Edges can have other edges on outgoing, that is why edges must not be included in childShapesToConsider
@@ -17698,10 +17698,10 @@ ORYX.Plugins.Edit = Clazz.extend({
});
});
shapesToConsider = shapesToConsider.concat(edgesToConsider);
-
+
return shapesToConsider;
},
-
+
/**
* Performs the cut operation by first copy-ing and then deleting the
* current selection.
@@ -17709,32 +17709,32 @@ ORYX.Plugins.Edit = Clazz.extend({
editCut: function(){
//TODO document why this returns false.
//TODO document what the magic boolean parameters are supposed to do.
-
+
this.editCopy(false, true);
this.editDelete(true);
return false;
},
-
+
/**
* Performs the copy operation.
* @param {Object} will_not_update ??
*/
editCopy: function( will_update, useNoOffset ){
var selection = this.facade.getSelection();
-
+
//if the selection is empty, do not remove the previously copied elements
if(selection.length == 0) return;
-
+
this.clipboard.refresh(selection, this.getAllShapesToConsider(selection), this.facade.getCanvas().getStencil().stencilSet().namespace(), useNoOffset);
if( will_update ) this.facade.updateSelection();
},
-
+
/**
* Performs the paste operation.
*/
editPaste: function(){
- // Create a new canvas with childShapes
+ // Create a new canvas with childShapes
//and stencilset namespace to be JSON Import conform
var canvas = {
childShapes: this.clipboard.shapesAsJson,
@@ -17744,7 +17744,7 @@ ORYX.Plugins.Edit = Clazz.extend({
};
// Apply json helper to iterate over json object
jQuery.extend(canvas, ORYX.Core.AbstractShape.JSONHelper);
-
+
var childShapeResourceIds = canvas.getChildShapes(true).pluck("resourceId");
var outgoings = {};
// Iterate over all shapes
@@ -17757,35 +17757,35 @@ ORYX.Plugins.Edit = Clazz.extend({
if (!outgoings[out.resourceId]){ outgoings[out.resourceId] = []; }
outgoings[out.resourceId].push(shape);
});
-
+
return shape;
}.bind(this), true, true);
-
+
// Iterate over all shapes
canvas.eachChild(function(shape, parent){
-
+
// Check if there has a valid target
if(shape.target && !(childShapeResourceIds.include(shape.target.resourceId))){
shape.target = undefined;
shape.targetRemoved = true;
}
-
+
// Check if the first docker is removed
- if( shape.dockers &&
- shape.dockers.length >= 1 &&
+ if( shape.dockers &&
+ shape.dockers.length >= 1 &&
shape.dockers[0].getDocker &&
((shape.dockers[0].getDocker().getDockedShape() &&
- !childShapeResourceIds.include(shape.dockers[0].getDocker().getDockedShape().resourceId)) ||
+ !childShapeResourceIds.include(shape.dockers[0].getDocker().getDockedShape().resourceId)) ||
!shape.getShape().dockers[0].getDockedShape()&&!outgoings[shape.resourceId])) {
-
+
shape.sourceRemoved = true;
}
-
+
return shape;
}.bind(this), true, true);
-
+
// Iterate over top-level shapes
canvas.eachChild(function(shape, parent){
// All top-level shapes should get an offset in their bounds
@@ -17813,27 +17813,27 @@ ORYX.Plugins.Edit = Clazz.extend({
docker = docker.getDocker().bounds.center();
}
- // If it is the first docker and it has a docked shape,
+ // If it is the first docker and it has a docked shape,
// just return the coordinates
- if ((i == 0 && docker.getDocker instanceof Function &&
- shape.sourceRemoved !== true && (docker.getDocker().getDockedShape() || ((outgoings[shape.resourceId]||[]).length > 0 && (!(shape.getShape() instanceof ORYX.Core.Node) || outgoings[shape.resourceId][0].getShape() instanceof ORYX.Core.Node)))) ||
- (i == shape.dockers.length - 1 && docker.getDocker instanceof Function &&
+ if ((i == 0 && docker.getDocker instanceof Function &&
+ shape.sourceRemoved !== true && (docker.getDocker().getDockedShape() || ((outgoings[shape.resourceId]||[]).length > 0 && (!(shape.getShape() instanceof ORYX.Core.Node) || outgoings[shape.resourceId][0].getShape() instanceof ORYX.Core.Node)))) ||
+ (i == shape.dockers.length - 1 && docker.getDocker instanceof Function &&
shape.targetRemoved !== true && (docker.getDocker().getDockedShape() || shape.target))){
-
+
return {
- x: docker.x,
+ x: docker.x,
y: docker.y,
getDocker: docker.getDocker
}
} else if (this.clipboard.useOffset) {
return {
- x: docker.x + ORYX.CONFIG.COPY_MOVE_OFFSET,
+ x: docker.x + ORYX.CONFIG.COPY_MOVE_OFFSET,
y: docker.y + ORYX.CONFIG.COPY_MOVE_OFFSET,
getDocker: docker.getDocker
};
} else {
return {
- x: docker.x,
+ x: docker.x,
y: docker.y,
getDocker: docker.getDocker
};
@@ -17841,50 +17841,50 @@ ORYX.Plugins.Edit = Clazz.extend({
}.bind(this));
} else if (shape.getShape() instanceof ORYX.Core.Node && shape.dockers && shape.dockers.length > 0 && (!shape.dockers.first().getDocker || shape.sourceRemoved === true || !(shape.dockers.first().getDocker().getDockedShape() || outgoings[shape.resourceId]))){
-
+
shape.dockers = shape.dockers.map(function(docker, i){
-
+
if((shape.sourceRemoved === true && i == 0&&docker.getDocker)){
docker = docker.getDocker().bounds.center();
}
-
+
if (this.clipboard.useOffset) {
return {
- x: docker.x + ORYX.CONFIG.COPY_MOVE_OFFSET,
+ x: docker.x + ORYX.CONFIG.COPY_MOVE_OFFSET,
y: docker.y + ORYX.CONFIG.COPY_MOVE_OFFSET,
getDocker: docker.getDocker
};
} else {
return {
- x: docker.x,
+ x: docker.x,
y: docker.y,
getDocker: docker.getDocker
};
}
}.bind(this));
}
-
+
return shape;
}.bind(this), false, true);
this.clipboard.useOffset = true;
this.facade.importJSON(canvas);
},
-
+
/**
* Performs the delete operation. No more asking.
*/
editDelete: function(){
var selection = this.facade.getSelection();
-
+
var clipboard = new ORYX.Plugins.Edit.ClipBoard();
clipboard.refresh(selection, this.getAllShapesToConsider(selection));
-
+
var command = new ORYX.Plugins.Edit.DeleteCommand(clipboard , this.facade);
-
+
this.facade.executeCommands([command]);
}
-});
+});
ORYX.Plugins.Edit.ClipBoard = Clazz.extend({
construct: function(){
@@ -17904,7 +17904,7 @@ ORYX.Plugins.Edit.ClipBoard = Clazz.extend({
this.parents = {};
this.targets = {};
this.useOffset = useNoOffset !== true;
-
+
this.shapesAsJson = shapes.map(function(shape){
var s = shape.toJSON();
s.parent = {resourceId : shape.getParentShape().resourceId};
@@ -17919,7 +17919,7 @@ ORYX.Plugins.Edit.DeleteCommand = ORYX.Core.Command.extend({
this.clipboard = clipboard;
this.shapesAsJson = clipboard.shapesAsJson;
this.facade = facade;
-
+
// Store dockers of deleted shapes to restore connections
this.dockers = this.shapesAsJson.map(function(shapeAsJson) {
var shape = shapeAsJson.getShape();
@@ -17934,17 +17934,17 @@ ORYX.Plugins.Edit.DeleteCommand = ORYX.Core.Command.extend({
});
return dockers;
}).flatten();
- },
+ },
execute: function(){
this.shapesAsJson.each(function(shapeAsJson){
// Delete shape
this.facade.deleteShape(shapeAsJson.getShape());
}.bind(this));
-
+
this.facade.setSelection([]);
- this.facade.getCanvas().update();
+ this.facade.getCanvas().update();
this.facade.updateSelection();
-
+
},
rollback: function(){
this.shapesAsJson.each(function(shapeAsJson) {
@@ -17952,17 +17952,17 @@ ORYX.Plugins.Edit.DeleteCommand = ORYX.Core.Command.extend({
var parent = this.facade.getCanvas().getChildShapeByResourceId(shapeAsJson.parent.resourceId) || this.facade.getCanvas();
parent.add(shape, shape.parentIndex);
}.bind(this));
-
+
//reconnect shapes
this.dockers.each(function(d) {
d.object.setDockedShape(d.dockedShape);
d.object.setReferencePoint(d.referencePoint);
}.bind(this));
-
+
this.facade.setSelection(this.selectedShapes);
- this.facade.getCanvas().update();
+ this.facade.getCanvas().update();
this.facade.updateSelection();
-
+
}
});/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
@@ -17982,9 +17982,9 @@ if(!ORYX.Plugins)
ORYX.Plugins = new Object();
/**
- * The view plugin offers all of zooming functionality accessible over the
+ * The view plugin offers all of zooming functionality accessible over the
* tool bar. This are zoom in, zoom out, zoom to standard, zoom fit to model.
- *
+ *
* @class ORYX.Plugins.View
* @extends Clazz
* @param {Object} facade The editor facade for plugins.
@@ -18001,18 +18001,18 @@ ORYX.Plugins.View = {
this.minZoomLevel = 0.1;
this.maxZoomLevel = 2.5;
this.diff=5; //difference between canvas and view port, s.th. like toolbar??
-
+
//Read properties
if (ownPluginData !== undefined && ownPluginData !== null) {
- ownPluginData.properties.each( function(property) {
- if (property.zoomLevel) {this.zoomLevel = Number(1.0);}
+ ownPluginData.properties.each( function(property) {
+ if (property.zoomLevel) {this.zoomLevel = Number(1.0);}
if (property.maxFitToScreenLevel) {this.maxFitToScreenLevel=Number(property.maxFitToScreenLevel);}
if (property.minZoomLevel) {this.minZoomLevel = Number(property.minZoomLevel);}
if (property.maxZoomLevel) {this.maxZoomLevel = Number(property.maxZoomLevel);}
}.bind(this));
}
-
+
/* Register zoom in */
this.facade.offer({
'name':ORYX.I18N.View.zoomIn,
@@ -18024,7 +18024,7 @@ ORYX.Plugins.View = {
'minShape': 0,
'maxShape': 0,
'isEnabled': function(){return this.zoomLevel < this.maxZoomLevel }.bind(this)});
-
+
/* Register zoom out */
this.facade.offer({
'name':ORYX.I18N.View.zoomOut,
@@ -18036,7 +18036,7 @@ ORYX.Plugins.View = {
'minShape': 0,
'maxShape': 0,
'isEnabled': function(){ return this._checkSize() }.bind(this)});
-
+
/* Register zoom standard */
this.facade.offer({
'name':ORYX.I18N.View.zoomStandard,
@@ -18050,7 +18050,7 @@ ORYX.Plugins.View = {
'maxShape': 0,
'isEnabled': function(){return this.zoomLevel != 1}.bind(this)
});
-
+
/* Register zoom fit to model */
this.facade.offer({
'name':ORYX.I18N.View.zoomFitToModel,
@@ -18063,10 +18063,10 @@ ORYX.Plugins.View = {
'maxShape': 0
});
},
-
+
/**
* It sets the zoom level to a fix value and call the zooming function.
- *
+ *
* @param {Number} zoomLevel
* the zoom level
*/
@@ -18075,124 +18075,124 @@ ORYX.Plugins.View = {
this._checkZoomLevelRange();
this.zoom(1);
},
-
+
/**
- * It does the actual zooming. It changes the viewable size of the canvas
+ * It does the actual zooming. It changes the viewable size of the canvas
* and all to its child elements.
- *
+ *
* @param {Number} factor
* the factor to adjust the zoom level
*/
zoom: function(factor) {
// TODO: Zoomen auf allen Objekten im SVG-DOM
-
+
this.zoomLevel *= factor;
var scrollNode = this.facade.getCanvas().getHTMLContainer().parentNode.parentNode;
var canvas = this.facade.getCanvas();
var newWidth = canvas.bounds.width() * this.zoomLevel;
var newHeight = canvas.bounds.height() * this.zoomLevel;
-
+
/* Set new top offset */
- var offsetTop = (canvas.node.parentNode.parentNode.parentNode.offsetHeight - newHeight) / 2.0;
+ var offsetTop = (canvas.node.parentNode.parentNode.parentNode.offsetHeight - newHeight) / 2.0;
offsetTop = offsetTop > 20 ? offsetTop - 20 : 0;
canvas.node.parentNode.parentNode.style.marginTop = offsetTop + "px";
offsetTop += 5;
canvas.getHTMLContainer().style.top = offsetTop + "px";
-
+
/*readjust scrollbar*/
var newScrollTop= scrollNode.scrollTop - Math.round((canvas.getHTMLContainer().parentNode.getHeight()-newHeight) / 2)+this.diff;
var newScrollLeft= scrollNode.scrollLeft - Math.round((canvas.getHTMLContainer().parentNode.getWidth()-newWidth) / 2)+this.diff;
-
+
/* Set new Zoom-Level */
canvas.setSize({width: newWidth, height: newHeight}, true);
-
+
/* Set Scale-Factor */
- canvas.node.setAttributeNS(null, "transform", "scale(" +this.zoomLevel+ ")");
+ canvas.node.setAttributeNS(null, "transform", "scale(" +this.zoomLevel+ ")");
/* Refresh the Selection */
this.facade.updateSelection();
scrollNode.scrollTop=newScrollTop;
scrollNode.scrollLeft=newScrollLeft;
-
+
/* Update the zoom-level*/
canvas.zoomLevel = this.zoomLevel;
},
-
-
+
+
/**
* It calculates the zoom level to fit whole model into the visible area
- * of the canvas. Than the model gets zoomed and the position of the
+ * of the canvas. Than the model gets zoomed and the position of the
* scroll bars are adjusted.
- *
+ *
*/
zoomFitToModel: function() {
-
+
/* Get the size of the visible area of the canvas */
var scrollNode = this.facade.getCanvas().getHTMLContainer().parentNode.parentNode;
var visibleHeight = scrollNode.getHeight() - 30;
var visibleWidth = scrollNode.getWidth() - 30;
-
+
var nodes = this.facade.getCanvas().getChildShapes();
-
+
if(!nodes || nodes.length < 1) {
- return false;
+ return false;
}
-
+
/* Calculate size of canvas to fit the model */
var bounds = nodes[0].absoluteBounds().clone();
nodes.each(function(node) {
bounds.include(node.absoluteBounds().clone());
});
-
-
+
+
/* Set new Zoom Level */
var scaleFactorWidth = visibleWidth / bounds.width();
var scaleFactorHeight = visibleHeight / bounds.height();
-
+
/* Choose the smaller zoom level to fit the whole model */
var zoomFactor = scaleFactorHeight < scaleFactorWidth ? scaleFactorHeight : scaleFactorWidth;
-
+
/*Test if maximum zoom is reached*/
if(zoomFactor>this.maxFitToScreenLevel){zoomFactor=this.maxFitToScreenLevel}
/* Do zooming */
this.setAFixZoomLevel(zoomFactor);
-
+
/* Set scroll bar position */
scrollNode.scrollTop = Math.round(bounds.upperLeft().y * this.zoomLevel) - 5;
scrollNode.scrollLeft = Math.round(bounds.upperLeft().x * this.zoomLevel) - 5;
-
+
},
-
+
/**
* It checks if the zoom level is less or equal to the level, which is required
* to schow the whole canvas.
- *
+ *
* @private
*/
_checkSize:function(){
var canvasParent=this.facade.getCanvas().getHTMLContainer().parentNode;
var minForCanvas= Math.min((canvasParent.parentNode.getWidth()/canvasParent.getWidth()),(canvasParent.parentNode.getHeight()/canvasParent.getHeight()));
return 1.05 > minForCanvas;
-
+
},
/**
* It checks if the zoom level is included in the definined zoom
* level range.
- *
+ *
* @private
*/
_checkZoomLevelRange: function() {
/*var canvasParent=this.facade.getCanvas().getHTMLContainer().parentNode;
var maxForCanvas= Math.max((canvasParent.parentNode.getWidth()/canvasParent.getWidth()),(canvasParent.parentNode.getHeight()/canvasParent.getHeight()));
if(this.zoomLevel > maxForCanvas) {
- this.zoomLevel = maxForCanvas;
+ this.zoomLevel = maxForCanvas;
}*/
if(this.zoomLevel < this.minZoomLevel) {
- this.zoomLevel = this.minZoomLevel;
+ this.zoomLevel = this.minZoomLevel;
}
-
+
if(this.zoomLevel > this.maxZoomLevel) {
- this.zoomLevel = this.maxZoomLevel;
+ this.zoomLevel = this.maxZoomLevel;
}
}
};
@@ -18244,16 +18244,16 @@ new function() {
*/
ORYX.Editor.provideId = function() {
var res = [], hex = '0123456789ABCDEF';
-
+
for (var i = 0; i < 36; i++) res[i] = Math.floor(Math.random()*0x10);
-
+
res[14] = 4;
res[19] = (res[19] & 0x3) | 0x8;
-
+
for (var i = 0; i < 36; i++) res[i] = hex[res[i]];
-
+
res[8] = res[13] = res[18] = res[23] = '-';
-
+
return "sid-" + res.join('');
};
@@ -18283,41 +18283,41 @@ if (!ORYX.Plugins) {
ORYX.Plugins.Loading = {
construct: function(facade){
-
+
this.facade = facade;
-
+
// The parent Node
this.node = ORYX.Editor.graft("http://www.w3.org/1999/xhtml", this.facade.getCanvas().getHTMLContainer().parentNode, ['div', {
'class': 'LoadingIndicator'
}, '']);
-
+
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADING_ENABLE, this.enableLoading.bind(this));
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADING_DISABLE, this.disableLoading.bind(this));
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADING_STATUS, this.showStatus.bind(this));
-
+
this.disableLoading();
},
-
+
enableLoading: function(options){
- if(options.text)
+ if(options.text)
this.node.innerHTML = options.text + "...";
else
this.node.innerHTML = ORYX.I18N.Loading.waiting;
this.node.removeClassName('StatusIndicator');
this.node.addClassName('LoadingIndicator');
this.node.style.display = "block";
-
+
var pos = this.facade.getCanvas().rootNode.parentNode.parentNode.parentNode.parentNode;
this.node.style.top = pos.offsetTop + 'px';
this.node.style.left = pos.offsetLeft +'px';
-
+
},
-
+
disableLoading: function(){
this.node.style.display = "none";
},
-
+
showStatus: function(options) {
if(options.text) {
this.node.innerHTML = options.text;
@@ -18329,16 +18329,16 @@ ORYX.Plugins.Loading = {
this.node.style.top = pos.offsetTop + 'px';
this.node.style.left = pos.offsetLeft +'px';
-
+
var tout = options.timeout ? options.timeout : 2000;
-
+
window.setTimeout((function(){
-
+
this.disableLoading();
-
+
}).bind(this), tout);
}
-
+
}
}
@@ -18364,24 +18364,24 @@ if (!ORYX.Plugins) {
ORYX.Plugins.CanvasResize = Clazz.extend({
construct: function(facade){
-
+
this.facade = facade;
new ORYX.Plugins.CanvasResizeButton( this.facade.getCanvas(), "N", this.resize.bind(this));
new ORYX.Plugins.CanvasResizeButton( this.facade.getCanvas(), "W", this.resize.bind(this));
new ORYX.Plugins.CanvasResizeButton( this.facade.getCanvas(), "E", this.resize.bind(this));
new ORYX.Plugins.CanvasResizeButton( this.facade.getCanvas(), "S", this.resize.bind(this));
-
+
window.setTimeout(function(){jQuery(window).trigger('resize');});
},
-
+
resize: function( position, shrink ){
-
+
resizeCanvas = function(position, extentionSize, facade) {
var canvas = facade.getCanvas();
var b = canvas.bounds;
var scrollNode = facade.getCanvas().getHTMLContainer().parentNode.parentNode;
-
+
if( position == "E" || position == "W"){
canvas.setSize({width: (b.width() + extentionSize)*canvas.zoomLevel, height: (b.height())*canvas.zoomLevel})
@@ -18390,7 +18390,7 @@ ORYX.Plugins.CanvasResize = Clazz.extend({
}
if( position == "N" || position == "W"){
-
+
var move = position == "N" ? {x: 0, y: extentionSize}: {x: extentionSize, y: 0 };
// Move all children
@@ -18404,19 +18404,19 @@ ORYX.Plugins.CanvasResize = Clazz.extend({
} else if( position == "E" ){
scrollNode.scrollLeft += extentionSize;
}
-
+
jQuery(window).trigger('resize');
-
+
canvas.update();
facade.updateSelection();
}
-
+
var commandClass = ORYX.Core.Command.extend({
construct: function(position, extentionSize, facade){
this.position = position;
this.extentionSize = extentionSize;
this.facade = facade;
- },
+ },
execute: function(){
resizeCanvas(this.position, this.extentionSize, this.facade);
},
@@ -18426,31 +18426,31 @@ ORYX.Plugins.CanvasResize = Clazz.extend({
update:function(){
}
});
-
+
var extentionSize = ORYX.CONFIG.CANVAS_RESIZE_INTERVAL;
if(shrink) extentionSize = -extentionSize;
var command = new commandClass(position, extentionSize, this.facade);
-
+
this.facade.executeCommands([command]);
-
+
}
-
+
});
ORYX.Plugins.CanvasResizeButton = Clazz.extend({
-
+
construct: function(canvas, position, callback){
this.canvas = canvas;
var parentNode = canvas.getHTMLContainer().parentNode;
-
+
window.myParent=parentNode;
-
+
var actualScrollNode = jQuery('#canvasSection')[0];
var scrollNode = actualScrollNode;
var canvasNode = jQuery('#canvasSection').find(".ORYX_Editor")[0];
var svgRootNode = canvasNode.children[0];
-
+
var iconClass = 'glyphicon glyphicon-chevron-';
var iconClassShrink = 'glyphicon glyphicon-chevron-';
if(position == 'N') {
@@ -18466,11 +18466,11 @@ ORYX.Plugins.CanvasResizeButton = Clazz.extend({
iconClass += 'left';
iconClassShrink += 'right';
}
-
+
// The buttons
var idGrow = 'canvas-shrink-' + position;
var idShrink = 'canvas-grow-' + position;
-
+
var buttonGrow = ORYX.Editor.graft("http://www.w3.org/1999/xhtml", parentNode, ['div', {'class': 'canvas_resize_indicator canvas_resize_indicator_grow' + ' ' + position, 'id': idGrow ,'title':ORYX.I18N.RESIZE.tipGrow+ORYX.I18N.RESIZE[position]},
['i', {'class' : iconClass}]
]);
@@ -18478,42 +18478,42 @@ ORYX.Plugins.CanvasResizeButton = Clazz.extend({
['i', {'class' : iconClassShrink}]
]);
// Defines a callback which gives back
- // a boolean if the current mouse event
+ // a boolean if the current mouse event
// is over the particular button area
var offSetWidth = 60;
var isOverOffset = function(event) {
-
+
var isOverButton = event.target.id.indexOf("canvas-shrink") != -1
|| event.target.id.indexOf("canvas-grow") != -1
|| event.target.parentNode.id.indexOf("canvas-shrink") != -1
|| event.target.parentNode.id.indexOf("canvas-grow") != -1;
if(isOverButton) {
- if(event.target.id == idGrow || event.target.id == idShrink ||
+ if(event.target.id == idGrow || event.target.id == idShrink ||
event.target.parentNode.id == idGrow || event.target.parentNode.id == idShrink ) {
return true;
} else {
return false;
}
}
-
+
if(event.target!=parentNode && event.target!=scrollNode&& event.target!=scrollNode.firstChild&& event.target!=svgRootNode&& event.target!=scrollNode){ return false; }
-
+
//if(inCanvas){offSetWidth=30}else{offSetWidth=30*2}
//Safari work around
var X=event.offsetX !== undefined ? event.offsetX : event.layerX;
var Y=event.offsetY !== undefined ? event.offsetY : event.layerY;
-
+
var canvasOffset = 0;
if(canvasNode.clientWidth < actualScrollNode.clientWidth) {
var widthDiff = actualScrollNode.clientWidth - canvasNode.clientWidth;
canvasOffset = widthDiff / 2;
}
-
+
// Adjust to relative location to the actual viewport
Y = Y - actualScrollNode.scrollTop;
X = X - actualScrollNode.scrollLeft;
-
-
+
+
if(position == "N"){
return Y < offSetWidth;
} else if(position == "W"){
@@ -18523,30 +18523,30 @@ ORYX.Plugins.CanvasResizeButton = Clazz.extend({
} else if(position == "S"){
return actualScrollNode.clientHeight - Y < offSetWidth;
}
-
+
return false;
};
-
+
var showButtons = (function() {
- buttonGrow.show();
-
+ buttonGrow.show();
+
var w = canvas.bounds.width();
var h = canvas.bounds.height();
-
+
if(position=="N" && (h - ORYX.CONFIG.CANVAS_RESIZE_INTERVAL > ORYX.CONFIG.CANVAS_MIN_HEIGHT)) buttonShrink.show();
else if(position=="E" && (w - ORYX.CONFIG.CANVAS_RESIZE_INTERVAL > ORYX.CONFIG.CANVAS_MIN_WIDTH)) buttonShrink.show();
else if(position=="S" && (h - ORYX.CONFIG.CANVAS_RESIZE_INTERVAL > ORYX.CONFIG.CANVAS_MIN_HEIGHT)) buttonShrink.show();
else if(position=="W" && (w - ORYX.CONFIG.CANVAS_RESIZE_INTERVAL > ORYX.CONFIG.CANVAS_MIN_WIDTH)) buttonShrink.show();
else buttonShrink.hide();
-
+
}).bind(this);
-
+
var hideButtons = function() {
- buttonGrow.hide();
+ buttonGrow.hide();
buttonShrink.hide();
};
-
+
// If the mouse move is over the button area, show the button
parentNode.parentNode.addEventListener( ORYX.CONFIG.EVENT_MOUSEMOVE, function(event){ if( isOverOffset(event) ){showButtons();} else {hideButtons()}} , false );
// If the mouse is over the button, show them
@@ -18556,7 +18556,7 @@ ORYX.Plugins.CanvasResizeButton = Clazz.extend({
//scrollNode.addEventListener( ORYX.CONFIG.EVENT_MOUSEOUT, function(event){button.hide()}, true )
parentNode.parentNode.addEventListener( ORYX.CONFIG.EVENT_MOUSEOUT, function(event){hideButtons()} , true );
//svgRootNode.addEventListener( ORYX.CONFIG.EVENT_MOUSEOUT, function(event){ inCanvas = false } , true );
-
+
// Hide the button initialy
hideButtons();
@@ -18565,7 +18565,7 @@ ORYX.Plugins.CanvasResizeButton = Clazz.extend({
buttonShrink.addEventListener('click', function(){callback( position, true ); showButtons();}, true);
}
-
+
});
@@ -18579,32 +18579,32 @@ ORYX.Plugins.CanvasResizeButton = Clazz.extend({
* All code Copyright 2013 KIS Consultancy all rights reserved
*/
-if (!ORYX.Plugins)
+if (!ORYX.Plugins)
ORYX.Plugins = new Object();
ORYX.Plugins.RenameShapes = Clazz.extend({
facade: undefined,
-
+
construct: function(facade){
-
+
this.facade = facade;
-
- this.facade.registerOnEvent(ORYX.CONFIG.EVENT_CANVAS_SCROLL, this.hideField.bind(this));
- this.facade.registerOnEvent(ORYX.CONFIG.EVENT_DBLCLICK, this.actOnDBLClick.bind(this));
+
+ this.facade.registerOnEvent(ORYX.CONFIG.EVENT_CANVAS_SCROLL, this.hideField.bind(this));
+ this.facade.registerOnEvent(ORYX.CONFIG.EVENT_DBLCLICK, this.actOnDBLClick.bind(this));
this.facade.offer({
keyCodes: [{
keyCode: 113, // F2-Key
- keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
+ keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
}
],
functionality: this.renamePerF2.bind(this)
});
-
-
+
+
document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEDOWN, this.hide.bind(this), true);
},
-
+
/**
* This method handles the "F2" key down event. The selected shape are looked
* up and the editing of title/name of it gets started.
@@ -18613,39 +18613,39 @@ ORYX.Plugins.RenameShapes = Clazz.extend({
var selectedShapes = this.facade.getSelection();
this.actOnDBLClick(undefined, selectedShapes.first());
},
-
+
actOnDBLClick: function(evt, shape){
-
+
if( !(shape instanceof ORYX.Core.Shape) ){ return; }
-
+
// Destroys the old input, if there is one
this.destroy();
-
+
// Get all properties which where at least one ref to view is set
- var props = shape.getStencil().properties().findAll(function(item){
- return (item.refToView()
+ var props = shape.getStencil().properties().findAll(function(item){
+ return (item.refToView()
&& item.refToView().length > 0
- && item.directlyEditable());
+ && item.directlyEditable());
});
// from these, get all properties where write access are and the type is String or Expression
props = props.findAll(function(item){ return !item.readonly() && (item.type() == ORYX.CONFIG.TYPE_STRING || item.type() == ORYX.CONFIG.TYPE_EXPRESSION || item.type() == ORYX.CONFIG.TYPE_DATASOURCE); });
-
+
// Get all ref ids
var allRefToViews = props.collect(function(prop){ return prop.refToView(); }).flatten().compact();
// Get all labels from the shape with the ref ids
var labels = shape.getLabels().findAll(function(label){ return allRefToViews.any(function(toView){ return label.id.endsWith(toView); }); });
-
+
// If there are no referenced labels --> return
- if( labels.length == 0 ){ return; }
-
+ if( labels.length == 0 ){ return; }
+
// Define the nearest label
- var nearestLabel = labels.length <= 1 ? labels[0] : null;
+ var nearestLabel = labels.length <= 1 ? labels[0] : null;
if( !nearestLabel ){
nearestLabel = labels.find(function(label){ return label.node == evt.target || label.node == evt.target.parentNode; });
if( !nearestLabel ){
-
+
var evtCoord = this.facade.eventCoordinates(evt);
-
+
var additionalIEZoom = 1;
if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) {
var ua = navigator.userAgent;
@@ -18657,7 +18657,7 @@ ORYX.Plugins.RenameShapes = Clazz.extend({
}
}
}
-
+
if (additionalIEZoom !== 1) {
evtCoord.x = evtCoord.x / additionalIEZoom;
evtCoord.y = evtCoord.y / additionalIEZoom;
@@ -18668,28 +18668,28 @@ ORYX.Plugins.RenameShapes = Clazz.extend({
{
evtCoord.y += 61;
}
-
+
evtCoord.x -= $("canvasSection").scrollLeft;
-
+
var trans = this.facade.getCanvas().rootNode.lastChild.getScreenCTM();
evtCoord.x *= trans.a;
evtCoord.y *= trans.d;
- var diff = labels.collect(function(label){
- var center = this.getCenterPosition( label.node );
+ var diff = labels.collect(function(label){
+ var center = this.getCenterPosition( label.node );
var len = Math.sqrt( Math.pow(center.x - evtCoord.x, 2) + Math.pow(center.y - evtCoord.y, 2));
- return {diff: len, label: label};
+ return {diff: len, label: label};
}.bind(this));
-
+
diff.sort(function(a, b){ return a.diff > b.diff; });
-
+
nearestLabel = diff[0].label;
}
}
// Get the particular property for the label
var prop = props.find(function(item){ return item.refToView().any(function(toView){ return nearestLabel.id == shape.id + toView; });});
-
+
// Get the center position from the nearest label
var width = Math.min(Math.max(100, shape.bounds.width()), 200);
var center = this.getCenterPosition( nearestLabel.node, shape );
@@ -18706,13 +18706,13 @@ ORYX.Plugins.RenameShapes = Clazz.extend({
this.oldValueText = shape.properties[propId];
document.getElementById('canvasSection').appendChild(textInput);
this.shownTextField = textInput;
-
-
+
+
// Value change listener needs to be defined now since we reference it in the text field
this.updateValueFunction = function(newValue, oldValue) {
var currentEl = shape;
var facade = this.facade;
-
+
if (oldValue != newValue) {
// Implement the specific command for property change
var commandClass = ORYX.Core.Command.extend({
@@ -18740,28 +18740,28 @@ ORYX.Plugins.RenameShapes = Clazz.extend({
});
// Instantiated the class
var command = new commandClass();
-
+
// Execute the command
this.facade.executeCommands([command]);
}
}.bind(this);
-
+
jQuery("#shapeTextInput").focus();
-
+
jQuery("#shapeTextInput").autogrow();
-
+
// Disable the keydown in the editor (that when hitting the delete button, the shapes not get deleted)
this.facade.disableEvent(ORYX.CONFIG.EVENT_KEYDOWN);
-
+
},
-
+
getCenterPosition: function(svgNode, shape){
-
+
if (!svgNode) { return {x:0, y:0}; }
-
+
var scale = this.facade.getCanvas().node.getScreenCTM();
var absoluteXY = shape.bounds.upperLeft();
-
+
var hasParent = true;
var searchShape = shape;
while (hasParent)
@@ -18778,14 +18778,14 @@ ORYX.Plugins.RenameShapes = Clazz.extend({
searchShape = searchShape.getParentShape();
}
}
-
+
var center = shape.bounds.midPoint();
center.x += absoluteXY.x + scale.e;
center.y += absoluteXY.y + scale.f;
-
+
center.x *= scale.a;
center.y *= scale.d;
-
+
var additionalIEZoom = 1;
if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) {
var ua = navigator.userAgent;
@@ -18797,16 +18797,16 @@ ORYX.Plugins.RenameShapes = Clazz.extend({
}
}
}
-
+
if (additionalIEZoom === 1) {
center.y = center.y - jQuery("#canvasSection").offset().top + 5;
center.x -= jQuery("#canvasSection").offset().left;
-
+
} else {
var canvasOffsetLeft = jQuery("#canvasSection").offset().left;
var canvasScrollLeft = jQuery("#canvasSection").scrollLeft();
var canvasScrollTop = jQuery("#canvasSection").scrollTop();
-
+
var offset = scale.e - (canvasOffsetLeft * additionalIEZoom);
var additionaloffset = 0;
if (offset > 10) {
@@ -18815,11 +18815,11 @@ ORYX.Plugins.RenameShapes = Clazz.extend({
center.y = center.y - (jQuery("#canvasSection").offset().top * additionalIEZoom) + 5 + ((canvasScrollTop * additionalIEZoom) - canvasScrollTop);
center.x = center.x - (canvasOffsetLeft * additionalIEZoom) + additionaloffset + ((canvasScrollLeft * additionalIEZoom) - canvasScrollLeft);
}
-
-
- return center;
+
+
+ return center;
},
-
+
hide: function(e){
if (this.shownTextField && (!e || e.target !== this.shownTextField)) {
var newValue = this.shownTextField.value;
@@ -18830,19 +18830,19 @@ ORYX.Plugins.RenameShapes = Clazz.extend({
this.destroy();
}
},
-
+
hideField: function(e){
if (this.shownTextField) {
this.destroy();
}
},
-
+
destroy: function(e){
var textInputComp = jQuery("#shapeTextInput");
if( textInputComp ){
- textInputComp.remove();
- delete this.shownTextField;
-
+ textInputComp.remove();
+ delete this.shownTextField;
+
this.facade.enableEvent(ORYX.CONFIG.EVENT_KEYDOWN);
}
}
@@ -18862,8 +18862,8 @@ if(!ORYX.Plugins)
/**
* Supports EPCs by offering a syntax check and export and import ability..
- *
- *
+ *
+ *
*/
ORYX.Plugins.ProcessLink = Clazz.extend({
@@ -18871,57 +18871,57 @@ ORYX.Plugins.ProcessLink = Clazz.extend({
/**
* Offers the plugin functionality:
- *
+ *
*/
construct: function(facade) {
this.facade = facade;
-
+
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_PROPERTY_CHANGED, this.propertyChanged.bind(this) );
-
+
},
/**
- *
+ *
* @param {Object} option
*/
propertyChanged: function( option, node){
if( option.name !== "oryx-refuri" || !node instanceof ORYX.Core.Node ){ return }
-
-
+
+
if( option.value && option.value.length > 0 && option.value != "undefined"){
-
+
this.show( node, option.value );
-
+
} else {
this.hide( node );
- }
+ }
},
-
+
/**
* Shows the Link for a particular shape with a specific url
- *
+ *
* @param {Object} shape
* @param {Object} url
*/
show: function( shape, url){
-
+
// Generate the svg-representation of a link
var link = ORYX.Editor.graft("http://www.w3.org/2000/svg", null ,
[ 'a',
{'target': '_blank'},
- ['path',
+ ['path',
{ "stroke-width": 1.0, "stroke":"#00DD00", "fill": "#00AA00", "d": "M3,3 l0,-2.5 l7.5,0 l0,-2.5 l7.5,4.5 l-7.5,3.5 l0,-2.5 l-8,0", "line-captions": "round"}
]
]);
- var link = ORYX.Editor.graft("http://www.w3.org/2000/svg", null ,
+ var link = ORYX.Editor.graft("http://www.w3.org/2000/svg", null ,
[ 'a',
{'target': '_blank'},
['path', { "style": "fill:#92BFFC;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72", "d": "M0 1.44 L0 15.05 L11.91 15.05 L11.91 5.98 L7.37 1.44 L0 1.44 Z"}],
@@ -18930,7 +18930,7 @@ ORYX.Plugins.ProcessLink = Clazz.extend({
]);
/*
- *
+ *
* [ 'a',
{'target': '_blank'},
['path', { "style": "fill:none;stroke-width:0.5px; stroke:#000000", "d": "M7,4 l0,2"}],
@@ -18943,25 +18943,25 @@ ORYX.Plugins.ProcessLink = Clazz.extend({
['rect', { "style": "fill:none;stroke:none;pointer-events:all", "width": 14, "height": 16, "x": 0, "y": 0}]
]);
*/
-
+
// Set the link with the special namespace
link.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", url);
-
-
- // Shows the link in the overlay
+
+
+ // Shows the link in the overlay
this.facade.raiseEvent({
type: ORYX.CONFIG.EVENT_OVERLAY_SHOW,
id: "arissupport.urlref_" + shape.id,
shapes: [shape],
node: link,
nodePosition: "SE"
- });
-
- },
+ });
+
+ },
/**
* Hides the Link for a particular shape
- *
+ *
* @param {Object} shape
*/
hide: function( shape ){
@@ -18969,9 +18969,9 @@ ORYX.Plugins.ProcessLink = Clazz.extend({
this.facade.raiseEvent({
type: ORYX.CONFIG.EVENT_OVERLAY_HIDE,
id: "arissupport.urlref_" + shape.id
- });
-
- }
+ });
+
+ }
});/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
* License rights for this program may be obtained from Alfresco Software, Ltd.
@@ -18985,7 +18985,7 @@ ORYX.Plugins.ProcessLink = Clazz.extend({
Array.prototype.insertFrom = function(from, to){
to = Math.max(0, to);
from = Math.min( Math.max(0, from), this.length-1 );
-
+
var el = this[from];
var old = this.without(el);
var newA = old.slice(0, to);
@@ -19007,8 +19007,8 @@ ORYX.Plugins.Arrangement = ORYX.Plugins.AbstractPlugin.extend({
this.facade = facade;
// Z-Ordering
- /** Hide for SIGNAVIO
-
+ /** Hide for SIGNAVIO
+
this.facade.offer({
'name':ORYX.I18N.Arrangement.btf,
'functionality': this.setZLevel.bind(this, this.setToTop),
@@ -19017,7 +19017,7 @@ ORYX.Plugins.Arrangement = ORYX.Plugins.AbstractPlugin.extend({
'description': ORYX.I18N.Arrangement.btfDesc,
'index': 1,
'minShape': 1});
-
+
this.facade.offer({
'name':ORYX.I18N.Arrangement.btb,
'functionality': this.setZLevel.bind(this, this.setToBack),
@@ -19085,7 +19085,7 @@ ORYX.Plugins.Arrangement = ORYX.Plugins.AbstractPlugin.extend({
'minShape': 2});
**/
-
+
this.facade.offer({
'name':ORYX.I18N.Arrangement.am,
'functionality': this.alignShapes.bind(this, [ORYX.CONFIG.EDITOR_ALIGN_MIDDLE]),
@@ -19094,7 +19094,7 @@ ORYX.Plugins.Arrangement = ORYX.Plugins.AbstractPlugin.extend({
'description': ORYX.I18N.Arrangement.amDesc,
'index': 1,
'minShape': 2});
-
+
this.facade.offer({
'name':ORYX.I18N.Arrangement.ac,
'functionality': this.alignShapes.bind(this, [ORYX.CONFIG.EDITOR_ALIGN_CENTER]),
@@ -19104,7 +19104,7 @@ ORYX.Plugins.Arrangement = ORYX.Plugins.AbstractPlugin.extend({
'index': 2,
'minShape': 2});
-
+
this.facade.offer({
'name':ORYX.I18N.Arrangement.as,
'functionality': this.alignShapes.bind(this, [ORYX.CONFIG.EDITOR_ALIGN_SIZE]),
@@ -19113,26 +19113,26 @@ ORYX.Plugins.Arrangement = ORYX.Plugins.AbstractPlugin.extend({
'description': ORYX.I18N.Arrangement.asDesc,
'index': 3,
'minShape': 2});
-
+
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_ARRANGEMENT_TOP, this.setZLevel.bind(this, this.setToTop) );
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_ARRANGEMENT_BACK, this.setZLevel.bind(this, this.setToBack) );
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_ARRANGEMENT_FORWARD, this.setZLevel.bind(this, this.setForward) );
- this.facade.registerOnEvent(ORYX.CONFIG.EVENT_ARRANGEMENT_BACKWARD, this.setZLevel.bind(this, this.setBackward) );
+ this.facade.registerOnEvent(ORYX.CONFIG.EVENT_ARRANGEMENT_BACKWARD, this.setZLevel.bind(this, this.setBackward) );
+
-
},
-
+
onSelectionChanged: function(elemnt){
var selection = this.facade.getSelection();
if (selection.length === 1 && selection[0] instanceof ORYX.Core.Edge) {
this.setToTop(selection);
}
},
-
+
setZLevel:function(callback, event){
-
+
//Command-Pattern for dragging one docker
var zLevelCommand = ORYX.Core.Command.extend({
construct: function(callback, elements, facade){
@@ -19141,30 +19141,30 @@ ORYX.Plugins.Arrangement = ORYX.Plugins.AbstractPlugin.extend({
// For redo, the previous elements get stored
this.elAndIndex = elements.map(function(el){ return {el:el, previous:el.parent.children[el.parent.children.indexOf(el)-1]} })
this.facade = facade;
- },
+ },
execute: function(){
-
+
// Call the defined z-order callback with the elements
- this.callback( this.elements )
+ this.callback( this.elements )
this.facade.setSelection( this.elements )
},
rollback: function(){
-
+
// Sort all elements on the index of there containment
var sortedEl = this.elAndIndex.sortBy( function( el ) {
var value = el.el;
var t = $A(value.node.parentNode.childNodes);
return t.indexOf(value.node);
- });
-
+ });
+
// Every element get setted back bevor the old previous element
for(var i=0; i maxSize.width) {
- newBounds.a.x = shape.bounds.upperLeft().x -
+ newBounds.a.x = shape.bounds.upperLeft().x -
(maxSize.width - shape.bounds.width())/2;
-
+
newBounds.b.x = shape.bounds.lowerRight().x + (maxSize.width - shape.bounds.width())/2
}
-
+
/* If the new height of shape exceeds the maximum height, set height value to maximum. */
if(this.maxHeight > maxSize.height) {
- newBounds.a.y = shape.bounds.upperLeft().y -
+ newBounds.a.y = shape.bounds.upperLeft().y -
(maxSize.height - shape.bounds.height())/2;
-
+
newBounds.b.y = shape.bounds.lowerRight().y + (maxSize.height - shape.bounds.height())/2
}
-
+
/* set bounds of shape */
shape.bounds.set(newBounds);
-
- },
+
+ },
execute: function(){
// align each shape according to the way that was specified.
this.elements.each(function(shape, index) {
this.orgPos[index] = shape.bounds.upperLeft();
-
+
var relBounds = this.bounds.clone();
var newCoordinates;
if (shape.parent && !(shape.parent instanceof ORYX.Core.Canvas) ) {
var upL = shape.parent.absoluteBounds().upperLeft();
relBounds.moveBy(-upL.x, -upL.y);
}
-
+
switch (this.way) {
// align the shapes in the requested way.
case ORYX.CONFIG.EDITOR_ALIGN_BOTTOM:
@@ -19365,37 +19365,37 @@ ORYX.Plugins.Arrangement = ORYX.Plugins.AbstractPlugin.extend({
x: shape.bounds.upperLeft().x,
y: relBounds.b.y - shape.bounds.height()
}; break;
-
+
case ORYX.CONFIG.EDITOR_ALIGN_MIDDLE:
newCoordinates = {
x: shape.bounds.upperLeft().x,
y: (relBounds.a.y + relBounds.b.y - shape.bounds.height()) / 2
}; break;
-
+
case ORYX.CONFIG.EDITOR_ALIGN_TOP:
newCoordinates = {
x: shape.bounds.upperLeft().x,
y: relBounds.a.y
}; break;
-
+
case ORYX.CONFIG.EDITOR_ALIGN_LEFT:
newCoordinates = {
x: relBounds.a.x,
y: shape.bounds.upperLeft().y
}; break;
-
+
case ORYX.CONFIG.EDITOR_ALIGN_CENTER:
newCoordinates = {
x: (relBounds.a.x + relBounds.b.x - shape.bounds.width()) / 2,
y: shape.bounds.upperLeft().y
}; break;
-
+
case ORYX.CONFIG.EDITOR_ALIGN_RIGHT:
newCoordinates = {
x: relBounds.b.x - shape.bounds.width(),
y: shape.bounds.upperLeft().y
}; break;
-
+
case ORYX.CONFIG.EDITOR_ALIGN_SIZE:
if(shape.isResizable) {
this.orgPos[index] = {a: shape.bounds.upperLeft(), b: shape.bounds.lowerRight()};
@@ -19403,7 +19403,7 @@ ORYX.Plugins.Arrangement = ORYX.Plugins.AbstractPlugin.extend({
}
break;
}
-
+
if (newCoordinates){
var offset = {
x: shape.bounds.upperLeft().x - newCoordinates.x,
@@ -19413,9 +19413,9 @@ ORYX.Plugins.Arrangement = ORYX.Plugins.AbstractPlugin.extend({
shape.bounds.moveTo(newCoordinates);
this.plugin.layoutEdges(shape, shape.getAllDockedShapes(),offset);
//shape.update()
- }
+ }
}.bind(this));
-
+
//this.facade.getCanvas().update();
//this.facade.updateSelection();
},
@@ -19425,15 +19425,15 @@ ORYX.Plugins.Arrangement = ORYX.Plugins.AbstractPlugin.extend({
if(shape.isResizable) {shape.bounds.set(this.orgPos[index]);}
} else {shape.bounds.moveTo(this.orgPos[index]);}
}.bind(this));
-
+
//this.facade.getCanvas().update();
//this.facade.updateSelection();
}
})
-
+
var command = new commandClass(elements, bounds, maxHeight, maxWidth, parseInt(way), this);
-
- this.facade.executeCommands([command]);
+
+ this.facade.executeCommands([command]);
}
});/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
@@ -19445,65 +19445,65 @@ ORYX.Plugins.Arrangement = ORYX.Plugins.AbstractPlugin.extend({
* All code Copyright 2013 KIS Consultancy all rights reserved
*/
-if (!ORYX.Plugins)
+if (!ORYX.Plugins)
ORYX.Plugins = new Object();
ORYX.Plugins.Save = Clazz.extend({
-
+
facade: undefined,
-
+
processURI: undefined,
-
+
changeSymbol : "*",
-
+
construct: function(facade){
this.facade = facade;
-
+
document.addEventListener("keydown", function(e){
if (e.ctrlKey&&e.keyCode === 83){
Event.stop(e);
}
}, false);
-
+
window.onbeforeunload = this.onUnLoad.bind(this);
-
+
this.changeDifference = 0;
-
- // Register on event for executing commands --> store all commands in a stack
+
+ // Register on event for executing commands --> store all commands in a stack
// --> Execute
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_UNDO_EXECUTE, function(){ this.changeDifference++; this.updateTitle(); }.bind(this) );
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_EXECUTE_COMMANDS, function(){ this.changeDifference++; this.updateTitle(); }.bind(this) );
// --> Saved from other places in the editor
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_SAVED, function(){ this.changeDifference = 0; this.updateTitle(); }.bind(this) );
-
+
// --> Rollback
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_UNDO_ROLLBACK, function(){ this.changeDifference--; this.updateTitle(); }.bind(this) );
-
+
//TODO very critical for load time performance!!!
//this.serializedDOM = DataManager.__persistDOM(this.facade);
-
+
this.hasChanges = this._hasChanges.bind(this);
},
-
+
updateTitle: function(){
-
+
var value = window.document.title || document.getElementsByTagName("title")[0].childNodes[0].nodeValue;
-
+
if (this.changeDifference === 0 && value.startsWith(this.changeSymbol)){
window.document.title = value.slice(1);
} else if (this.changeDifference !== 0 && !value.startsWith(this.changeSymbol)){
window.document.title = this.changeSymbol + "" + value;
}
},
-
+
_hasChanges: function() {
return this.changeDifference !== 0 || (this.facade.getModelMetaData()['new'] && this.facade.getCanvas().getChildShapes().size() > 0);
},
-
+
onUnLoad: function(){
if(this._hasChanges()) {
return ORYX.I18N.Save.unsavedData;
- }
+ }
}
});
/*
@@ -19516,7 +19516,7 @@ ORYX.Plugins.Save = Clazz.extend({
* All code Copyright 2013 KIS Consultancy all rights reserved
*/
-if(!ORYX.Plugins)
+if(!ORYX.Plugins)
ORYX.Plugins = new Object();
ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
@@ -19542,39 +19542,39 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
this.containmentParentNode; // the current future parent node for the dragged shapes
this.isAddingAllowed = false; // flag, if adding current selected shapes to containmentParentNode is allowed
this.isAttachingAllowed = false; // flag, if attaching to the current shape is allowed
-
+
this.callbackMouseMove = this.handleMouseMove.bind(this);
this.callbackMouseUp = this.handleMouseUp.bind(this);
-
- // Get the SVG-Containernode
+
+ // Get the SVG-Containernode
var containerNode = this.facade.getCanvas().getSvgContainer();
-
+
// Create the Selected Rectangle in the SVG
this.selectedRect = new ORYX.Plugins.SelectedRect(containerNode);
-
+
// Show grid line if enabled
if (ORYX.CONFIG.SHOW_GRIDLINE) {
this.vLine = new ORYX.Plugins.GridLine(containerNode, ORYX.Plugins.GridLine.DIR_VERTICAL);
this.hLine = new ORYX.Plugins.GridLine(containerNode, ORYX.Plugins.GridLine.DIR_HORIZONTAL);
}
-
+
// Get a HTML-ContainerNode
containerNode = this.facade.getCanvas().getHTMLContainer();
-
+
this.scrollNode = this.facade.getCanvas().rootNode.parentNode.parentNode;
-
+
// Create the southeastern button for resizing
this.resizerSE = new ORYX.Plugins.Resizer(containerNode, "southeast", this.facade);
this.resizerSE.registerOnResize(this.onResize.bind(this)); // register the resize callback
this.resizerSE.registerOnResizeEnd(this.onResizeEnd.bind(this)); // register the resize end callback
this.resizerSE.registerOnResizeStart(this.onResizeStart.bind(this)); // register the resize start callback
-
+
// Create the northwestern button for resizing
this.resizerNW = new ORYX.Plugins.Resizer(containerNode, "northwest", this.facade);
this.resizerNW.registerOnResize(this.onResize.bind(this)); // register the resize callback
this.resizerNW.registerOnResizeEnd(this.onResizeEnd.bind(this)); // register the resize end callback
this.resizerNW.registerOnResizeStart(this.onResizeStart.bind(this)); // register the resize start callback
-
+
// For the Drag and Drop
// Register on MouseDown-Event on a Shape
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_MOUSEDOWN, this.handleMouseDown.bind(this));
@@ -19588,7 +19588,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
// If the selection Bounds not intialized and the uiObj is not member of current selectio
// then return
if(!this.dragBounds || !this.currentShapes.member(uiObj) || !this.toMoveShapes.length) {return;};
-
+
// Start Dragging
this.dragEnable = true;
this.dragIntialized = true;
@@ -19598,7 +19598,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
var a = this.facade.getCanvas().node.getScreenCTM();
this.faktorXY.x = a.a;
this.faktorXY.y = a.d;
-
+
var eventX = Event.pointerX(event);
var eventY = Event.pointerY(event);
@@ -19607,13 +19607,13 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
this.offSetPosition = {
x: eventX - (upL.x * this.faktorXY.x),
y: eventY - (upL.y * this.faktorXY.y)};
-
+
this.offsetScroll = {x:this.scrollNode.scrollLeft,y:this.scrollNode.scrollTop};
-
+
// Register on Global Mouse-MOVE Event
- document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.callbackMouseMove, false);
+ document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.callbackMouseMove, false);
// Register on Global Mouse-UP Event
- document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEUP, this.callbackMouseUp, true);
+ document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEUP, this.callbackMouseUp, true);
return;
},
@@ -19623,13 +19623,13 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
*
*/
handleMouseUp: function(event) {
-
+
//disable containment highlighting
this.facade.raiseEvent({
type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE,
highlightId:"dragdropresize.contain"
});
-
+
this.facade.raiseEvent({
type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE,
highlightId:"dragdropresize.attached"
@@ -19637,24 +19637,24 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
// If Dragging is finished
if(this.dragEnable) {
-
+
// and update the current selection
if(!this.dragIntialized) {
-
+
// Do Method after Dragging
- this.afterDrag();
-
- // Check if the Shape is allowed to dock to the other Shape
+ this.afterDrag();
+
+ // Check if the Shape is allowed to dock to the other Shape
if ( this.isAttachingAllowed &&
this.toMoveShapes.length == 1 && this.toMoveShapes[0] instanceof ORYX.Core.Node &&
this.toMoveShapes[0].dockers.length > 0) {
-
- // Get the position and the docker
- var position = this.facade.eventCoordinates( event );
+
+ // Get the position and the docker
+ var position = this.facade.eventCoordinates( event );
var docker = this.toMoveShapes[0].dockers[0];
-
+
//Command-Pattern for dragging several Shapes
var dockCommand = ORYX.Core.Command.extend({
construct: function(docker, position, newDockedShape, facade){
@@ -19666,17 +19666,17 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
this.oldDockedShape = docker.getDockedShape();
this.oldParent = docker.parent.parent || facade.getCanvas();
this.facade = facade;
-
+
if( this.oldDockedShape ){
this.oldPosition = docker.parent.absoluteBounds().center();
}
-
- },
+
+ },
execute: function(){
this.dock( this.newDockedShape, this.newParent, this.newPosition );
-
+
// Raise Event for having the docked shape on top of the other shape
- this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_ARRANGEMENT_TOP, excludeCommand: true})
+ this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_ARRANGEMENT_TOP, excludeCommand: true})
},
rollback: function(){
this.dock( this.oldDockedShape, this.oldParent, this.oldPosition );
@@ -19684,42 +19684,42 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
dock:function( toDockShape, parent, pos ){
// Add to the same parent Shape
parent.add( this.docker.parent )
-
-
+
+
// Set the Docker to the new Shape
this.docker.setDockedShape( undefined );
- this.docker.bounds.centerMoveTo( pos )
- this.docker.setDockedShape( toDockShape );
+ this.docker.bounds.centerMoveTo( pos )
+ this.docker.setDockedShape( toDockShape );
//this.docker.update();
-
- this.facade.setSelection( [this.docker.parent] );
+
+ this.facade.setSelection( [this.docker.parent] );
this.facade.getCanvas().update();
this.facade.updateSelection();
-
-
+
+
}
});
-
+
// Instanziate the dockCommand
var commands = [new dockCommand(docker, position, this.containmentParentNode, this.facade)];
- this.facade.executeCommands(commands);
-
-
- // Check if adding is allowed to the other Shape
+ this.facade.executeCommands(commands);
+
+
+ // Check if adding is allowed to the other Shape
} else if( this.isAddingAllowed ) {
-
-
+
+
// Refresh all Shapes --> Set the new Bounds
this.refreshSelectedShapes();
-
+
}
-
+
this.facade.updateSelection();
-
+
//this.currentShapes.each(function(shape) {shape.update()})
// Raise Event: Dragging is finished
this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_DRAGDROP_END});
- }
+ }
if (this.vLine)
this.vLine.hide();
@@ -19727,14 +19727,14 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
this.hLine.hide();
}
- // Disable
- this.dragEnable = false;
-
+ // Disable
+ this.dragEnable = false;
+
// UnRegister on Global Mouse-UP/-Move Event
- document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEUP, this.callbackMouseUp, true);
- document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.callbackMouseMove, false);
-
+ document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEUP, this.callbackMouseUp, true);
+ document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.callbackMouseMove, false);
+
return;
},
@@ -19750,32 +19750,32 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
// Raise Event: Drag will be started
this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_DRAGDROP_START});
this.dragIntialized = false;
-
+
// And hide the resizers and the highlighting
this.resizerSE.hide();
this.resizerNW.hide();
-
+
// if only edges are selected, containmentParentNode must be the canvas
this._onlyEdges = this.currentShapes.all(function(currentShape) {
return (currentShape instanceof ORYX.Core.Edge);
});
-
+
// Do method before Drag
this.beforeDrag();
-
+
this._currentUnderlyingNodes = [];
-
+
}
-
+
// Calculate the new position
var position = {
x: Event.pointerX(event) - this.offSetPosition.x,
y: Event.pointerY(event) - this.offSetPosition.y}
- position.x -= this.offsetScroll.x - this.scrollNode.scrollLeft;
+ position.x -= this.offsetScroll.x - this.scrollNode.scrollLeft;
position.y -= this.offsetScroll.y - this.scrollNode.scrollTop;
-
+
// If not the Control-Key are pressed
var modifierKeyPressed = event.shiftKey || event.ctrlKey;
if(ORYX.CONFIG.GRID_ENABLED && !modifierKeyPressed) {
@@ -19788,7 +19788,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
this.hLine.hide();
}
- // Adjust the point by the zoom faktor
+ // Adjust the point by the zoom faktor
position.x /= this.faktorXY.x;
position.y /= this.faktorXY.y;
@@ -19799,8 +19799,8 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
// Set that the position is not bigger than the canvas
var c = this.facade.getCanvas();
position.x = Math.min( c.bounds.width() - this.dragBounds.width(), position.x)
- position.y = Math.min( c.bounds.height() - this.dragBounds.height(), position.y)
-
+ position.y = Math.min( c.bounds.height() - this.dragBounds.height(), position.y)
+
// Drag this bounds
this.dragBounds.moveTo(position);
@@ -19813,7 +19813,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
//check, if a node can be added to the underlying node
var eventCoordinates = this.facade.eventCoordinates(event);
-
+
var additionalIEZoom = 1;
if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) {
var ua = navigator.userAgent;
@@ -19825,31 +19825,31 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
}
}
}
-
+
if (additionalIEZoom !== 1) {
eventCoordinates.x = eventCoordinates.x / additionalIEZoom;
eventCoordinates.y = eventCoordinates.y / additionalIEZoom;
}
-
+
var underlyingNodes = $A(this.facade.getCanvas().getAbstractShapesAtPosition(eventCoordinates));
-
+
var checkIfAttachable = this.toMoveShapes.length == 1 && this.toMoveShapes[0] instanceof ORYX.Core.Node && this.toMoveShapes[0].dockers.length > 0
checkIfAttachable = checkIfAttachable && underlyingNodes.length != 1
-
-
+
+
if (!checkIfAttachable &&
underlyingNodes.length === this._currentUnderlyingNodes.length &&
underlyingNodes.all(function(node, index){return this._currentUnderlyingNodes[index] === node}.bind(this))) {
-
+
return
-
+
} else if(this._onlyEdges) {
-
+
this.isAddingAllowed = true;
this.containmentParentNode = this.facade.getCanvas();
-
+
} else {
-
+
/* Check the containment and connection rules */
var options = {
event : event,
@@ -19857,14 +19857,14 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
checkIfAttachable : checkIfAttachable
};
this.checkRules(options);
-
+
}
-
+
this._currentUnderlyingNodes = underlyingNodes.reverse();
-
+
//visualize the containment result
if( this.isAttachingAllowed ) {
-
+
this.facade.raiseEvent({
type: ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW,
highlightId: "dragdropresize.attached",
@@ -19872,15 +19872,15 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
style: ORYX.CONFIG.SELECTION_HIGHLIGHT_STYLE_RECTANGLE,
color: ORYX.CONFIG.SELECTION_VALID_COLOR
});
-
+
} else {
-
+
this.facade.raiseEvent({
type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE,
highlightId:"dragdropresize.attached"
});
}
-
+
if( !this.isAttachingAllowed ){
if( this.isAddingAllowed ) {
@@ -19905,14 +19905,14 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
this.facade.raiseEvent({
type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE,
highlightId:"dragdropresize.contain"
- });
- }
+ });
+ }
// Stop the Event
//Event.stop(event);
return;
},
-
+
// /**
// * Rollbacks the docked shape of an edge, if the edge is not movable.
// */
@@ -19922,7 +19922,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
// el.docker.setReferencePoint(el.refPoint);
// })
// },
-
+
/**
* Checks the containment and connection rules for the selected shapes.
*/
@@ -19931,33 +19931,33 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
var underlyingNodes = options.underlyingNodes;
var checkIfAttachable = options.checkIfAttachable;
var noEdges = options.noEdges;
-
+
//get underlying node that is not the same than one of the currently selected shapes or
// a child of one of the selected shapes with the highest z Order.
// The result is a shape or the canvas
this.containmentParentNode = underlyingNodes.reverse().find((function(node) {
- return (node instanceof ORYX.Core.Canvas) ||
- (((node instanceof ORYX.Core.Node) || ((node instanceof ORYX.Core.Edge) && !noEdges))
- && (!(this.currentShapes.member(node) ||
+ return (node instanceof ORYX.Core.Canvas) ||
+ (((node instanceof ORYX.Core.Node) || ((node instanceof ORYX.Core.Edge) && !noEdges))
+ && (!(this.currentShapes.member(node) ||
this.currentShapes.any(function(shape) {
return (shape.children.length > 0 && shape.getChildNodes(true).member(node));
}))));
}).bind(this));
-
+
if( checkIfAttachable ){
-
+
this.isAttachingAllowed = this.facade.getRules().canConnect({
- sourceShape: this.containmentParentNode,
- edgeShape: this.toMoveShapes[0],
+ sourceShape: this.containmentParentNode,
+ edgeShape: this.toMoveShapes[0],
targetShape: this.toMoveShapes[0]
- });
-
+ });
+
if ( this.isAttachingAllowed ) {
var point = this.facade.eventCoordinates(event);
this.isAttachingAllowed = this.containmentParentNode.isPointOverOffset( point.x, point.y );
- }
+ }
}
-
+
if( !this.isAttachingAllowed ){
//check all selected shapes, if they can be added to containmentParentNode
this.isAddingAllowed = this.toMoveShapes.all((function(currentShape) {
@@ -19966,27 +19966,27 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
this.containmentParentNode === currentShape.parent) {
return true;
} else if(this.containmentParentNode !== currentShape) {
-
+
if(!(this.containmentParentNode instanceof ORYX.Core.Edge) || !noEdges) {
-
+
if(this.facade.getRules().canContain({containingShape:this.containmentParentNode,
- containedShape:currentShape})) {
+ containedShape:currentShape})) {
return true;
}
}
}
return false;
- }).bind(this));
+ }).bind(this));
}
-
- if(!this.isAttachingAllowed && !this.isAddingAllowed &&
+
+ if(!this.isAttachingAllowed && !this.isAddingAllowed &&
(this.containmentParentNode instanceof ORYX.Core.Edge)) {
options.noEdges = true;
options.underlyingNodes.reverse();
- this.checkRules(options);
+ this.checkRules(options);
}
},
-
+
/**
* Redraw the selected Shapes.
*
@@ -20008,15 +20008,15 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
if( this._undockedEdgesCommand instanceof ORYX.Core.Command ){
commands.unshift( this._undockedEdgesCommand );
}
- // Execute the commands
- this.facade.executeCommands( commands );
+ // Execute the commands
+ this.facade.executeCommands( commands );
// copy the bounds to the old bounds
if( this.dragBounds )
this.oldDragBounds = this.dragBounds.clone();
},
-
+
/**
* Callback for Resize
*
@@ -20024,44 +20024,44 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
onResize: function(bounds) {
// If the selection bounds not initialized, return
if(!this.dragBounds) {return}
-
+
this.dragBounds = bounds;
this.isResizing = true;
- // Update the rectangle
+ // Update the rectangle
this.resizeRectangle(this.dragBounds);
},
-
+
onResizeStart: function() {
this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_RESIZE_START});
},
onResizeEnd: function() {
-
+
if (!(this.currentShapes instanceof Array)||this.currentShapes.length<=0) {
return;
}
-
+
// If Resizing finished, the Shapes will be resize
if(this.isResizing) {
-
+
var commandClass = ORYX.Core.Command.extend({
construct: function(shape, newBounds, plugin){
this.shape = shape;
this.oldBounds = shape.bounds.clone();
this.newBounds = newBounds;
this.plugin = plugin;
- },
+ },
execute: function(){
this.shape.bounds.set(this.newBounds.a, this.newBounds.b);
this.update(this.getOffset(this.oldBounds, this.newBounds));
-
+
},
rollback: function(){
this.shape.bounds.set(this.oldBounds.a, this.oldBounds.b);
this.update(this.getOffset(this.newBounds, this.oldBounds))
},
-
+
getOffset:function(b1, b2){
return {
x: b2.a.x - b1.a.x,
@@ -20074,12 +20074,12 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
this.shape.getLabels().each(function(label) {
label.changed();
});
-
+
var allEdges = [].concat(this.shape.getIncomingShapes())
.concat(this.shape.getOutgoingShapes())
// Remove all edges which are included in the selection from the list
.findAll(function(r){ return r instanceof ORYX.Core.Edge }.bind(this))
-
+
this.plugin.layoutEdges(this.shape, allEdges, offset);
this.plugin.facade.setSelection([this.shape]);
@@ -20087,25 +20087,25 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
this.plugin.facade.updateSelection();
}
});
-
+
var bounds = this.dragBounds.clone();
var shape = this.currentShapes[0];
-
+
if(shape.parent) {
var parentPosition = shape.parent.absoluteXY();
bounds.moveBy(-parentPosition.x, -parentPosition.y);
}
-
+
var command = new commandClass(shape, bounds, this);
-
+
this.facade.executeCommands([command]);
-
+
this.isResizing = false;
-
+
this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_RESIZE_END});
}
},
-
+
/**
* Prepare the Dragging
@@ -20116,7 +20116,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
var undockEdgeCommand = ORYX.Core.Command.extend({
construct: function(moveShapes){
this.dockers = moveShapes.collect(function(shape){ return shape instanceof ORYX.Core.Controls.Docker ? {docker:shape, dockedShape:shape.getDockedShape(), refPoint:shape.referencePoint} : undefined }).compact();
- },
+ },
execute: function(){
this.dockers.each(function(el){
el.docker.setDockedShape(undefined);
@@ -20130,14 +20130,14 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
})
}
});
-
+
this._undockedEdgesCommand = new undockEdgeCommand( this.toMoveShapes );
- this._undockedEdgesCommand.execute();
-
+ this._undockedEdgesCommand.execute();
+
},
hideAllLabels: function(shape) {
-
+
// Hide all labels from the shape
shape.getLabels().each(function(label) {
label.hide();
@@ -20165,12 +20165,12 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
*
*/
afterDrag: function(){
-
+
},
/**
* Show all Labels at these shape
- *
+ *
*/
showAllLabels: function(shape) {
@@ -20184,7 +20184,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
//shape.getAllDockedShapes().each(function(dockedShape) {
var allDockedShapes = shape.getAllDockedShapes()
for(var i=0; i 0) {
labels.each(function(label) {
@@ -20196,7 +20196,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
// Do this recursive
//shape.children.each((function(value) {
for(var i=0; i 2 && hasF && hasL){
this.toMoveShapes = this.toMoveShapes.concat(dks.findAll(function(el,index){ return index > 0 && index < dks.length-1}));
}
-
+
}).bind(this));
-
+
// Calculate the new area-bounds of the selection
var newBounds = undefined;
this.toMoveShapes.each(function(value) {
@@ -20282,7 +20282,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
/* Get the Shape */
shape = value.parent;
}
-
+
if(!newBounds){
newBounds = shape.absoluteBounds();
}
@@ -20290,7 +20290,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
newBounds.include(shape.absoluteBounds());
}
}.bind(this));
-
+
if(!newBounds){
elements.each(function(value){
if(!newBounds) {
@@ -20300,7 +20300,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
}
});
}
-
+
// Set the new bounds
this.dragBounds = newBounds;
this.oldDragBounds = newBounds.clone();
@@ -20308,7 +20308,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
// Update and show the rectangle
this.resizeRectangle(newBounds);
this.selectedRect.show();
-
+
// Show the resize button, if there is only one element and this is resizeable
if(elements.length == 1 && elements[0].isResizable) {
var aspectRatio = elements[0].getStencil().fixedAspectRatio() ? elements[0].bounds.width() / elements[0].bounds.height() : undefined;
@@ -20329,7 +20329,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
if (this.distPointTimeout)
window.clearTimeout(this.distPointTimeout)
-
+
this.distPointTimeout = window.setTimeout(function(){
// Get all the shapes, there will consider at snapping
// Consider only those elements who shares the same parent element
@@ -20341,7 +20341,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
}
return true;
})
-
+
// The current selection will delete from this array
//elements.each(function(shape) {
// distShapes = distShapes.without(shape);
@@ -20371,7 +20371,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
});
}
}).bind(this));
-
+
}.bind(this), 10)
@@ -20387,7 +20387,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
// Get the current Bounds
var bounds = this.dragBounds;
-
+
var point = {};
var ulThres = 6;
@@ -20395,14 +20395,14 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
var lrThres = 6;
var scale = this.vLine ? this.vLine.getScale() : 1;
-
+
var ul = { x: (position.x/scale), y: (position.y/scale)};
var c = { x: (position.x/scale) + (bounds.width()/2), y: (position.y/scale) + (bounds.height()/2)};
var lr = { x: (position.x/scale) + (bounds.width()), y: (position.y/scale) + (bounds.height())};
var offsetX, offsetY;
var gridX, gridY;
-
+
// For each distant point
this.distPoints.each(function(value) {
@@ -20417,7 +20417,7 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
x = value.lr.x-lr.x;
gx = value.lr.x;
} */
-
+
if (Math.abs(value.c.y-c.y) < cThres){
y = value.c.y-c.y;
@@ -20442,10 +20442,10 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
gridY = gy;
}
});
-
-
+
+
if (offsetX !== undefined) {
- ul.x += offsetX;
+ ul.x += offsetX;
ul.x *= scale;
if (this.vLine&&gridX)
this.vLine.update(gridX);
@@ -20454,8 +20454,8 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
if (this.vLine)
this.vLine.hide()
}
-
- if (offsetY !== undefined) {
+
+ if (offsetY !== undefined) {
ul.y += offsetY;
ul.y *= scale;
if (this.hLine&&gridY)
@@ -20465,12 +20465,12 @@ ORYX.Plugins.DragDropResize = ORYX.Plugins.AbstractPlugin.extend({
if (this.hLine)
this.hLine.hide();
}
-
+
return ul;
},
-
+
showGridLine: function(){
-
+
},
@@ -20529,14 +20529,14 @@ ORYX.Plugins.SelectedRect = Clazz.extend({
ORYX.Plugins.GridLine = Clazz.extend({
-
+
construct: function(parentId, direction) {
if (ORYX.Plugins.GridLine.DIR_HORIZONTAL !== direction && ORYX.Plugins.GridLine.DIR_VERTICAL !== direction) {
direction = ORYX.Plugins.GridLine.DIR_HORIZONTAL
}
-
-
+
+
this.parent = $(parentId);
this.direction = direction;
this.node = ORYX.Editor.graft("http://www.w3.org/2000/svg", this.parent,
@@ -20567,19 +20567,19 @@ ORYX.Plugins.GridLine = Clazz.extend({
return 1;
}
},
-
+
update: function(pos) {
-
+
if (this.direction === ORYX.Plugins.GridLine.DIR_HORIZONTAL) {
- var y = pos instanceof Object ? pos.y : pos;
+ var y = pos instanceof Object ? pos.y : pos;
var cWidth = this.parent.parentNode.parentNode.width.baseVal.value/this.getScale();
this.line.setAttributeNS(null, 'd', 'M 0 '+y+ ' L '+cWidth+' '+y);
} else {
- var x = pos instanceof Object ? pos.x : pos;
+ var x = pos instanceof Object ? pos.x : pos;
var cHeight = this.parent.parentNode.parentNode.height.baseVal.value/this.getScale();
this.line.setAttributeNS(null, 'd', 'M'+x+ ' 0 L '+x+' '+cHeight);
}
-
+
this.show();
}
@@ -20596,7 +20596,7 @@ ORYX.Plugins.Resizer = Clazz.extend({
this.parentId = parentId;
this.orientation = orientation;
this.facade = facade;
-
+
this.node = ORYX.Editor.graft("http://www.w3.org/1999/xhtml", $('canvasSection'),
['div', {'class': 'resizer_'+ this.orientation, style:'left:0px; top:0px;position:absolute;'}]);
@@ -20612,14 +20612,14 @@ ORYX.Plugins.Resizer = Clazz.extend({
this.minSize = undefined;
this.maxSize = undefined;
-
+
this.aspectRatio = undefined;
this.resizeCallbacks = [];
this.resizeStartCallbacks = [];
this.resizeEndCallbacks = [];
this.hide();
-
+
// Calculate the Offset
this.scrollNode = this.node.parentNode.parentNode.parentNode;
@@ -20629,11 +20629,11 @@ ORYX.Plugins.Resizer = Clazz.extend({
this.dragEnable = true;
this.offsetScroll = {x:this.scrollNode.scrollLeft,y:this.scrollNode.scrollTop};
-
+
this.offSetPosition = {
x: Event.pointerX(event) - this.position.x,
y: Event.pointerY(event) - this.position.y};
-
+
this.resizeStartCallbacks.each((function(value) {
value(this.bounds);
}).bind(this));
@@ -20646,12 +20646,12 @@ ORYX.Plugins.Resizer = Clazz.extend({
this.resizeEndCallbacks.each((function(value) {
value(this.bounds);
}).bind(this));
-
+
},
handleMouseMove: function(event) {
if(!this.dragEnable) { return }
-
+
if(event.shiftKey || event.ctrlKey) {
this.aspectRatio = this.bounds.width() / this.bounds.height();
} else {
@@ -20663,17 +20663,17 @@ ORYX.Plugins.Resizer = Clazz.extend({
y: Event.pointerY(event) - this.offSetPosition.y};
- position.x -= this.offsetScroll.x - this.scrollNode.scrollLeft;
+ position.x -= this.offsetScroll.x - this.scrollNode.scrollLeft;
position.y -= this.offsetScroll.y - this.scrollNode.scrollTop;
-
+
position.x = Math.min( position.x, this.facade.getCanvas().bounds.width());
position.y = Math.min( position.y, this.facade.getCanvas().bounds.height());
-
+
var offset = {
x: position.x - this.position.x,
y: position.y - this.position.y
};
-
+
if(this.aspectRatio) {
// fixed aspect ratio
newAspectRatio = (this.bounds.width()+offset.x) / (this.bounds.height()+offset.y);
@@ -20683,10 +20683,10 @@ ORYX.Plugins.Resizer = Clazz.extend({
offset.y = (this.bounds.width()+offset.x) / this.aspectRatio - this.bounds.height();
}
}
-
+
// respect minimum and maximum sizes of stencil
if(this.orientation==="northwest") {
-
+
if(this.bounds.width()-offset.x > this.maxSize.width) {
offset.x = -(this.maxSize.width - this.bounds.width());
if(this.aspectRatio)
@@ -20707,7 +20707,7 @@ ORYX.Plugins.Resizer = Clazz.extend({
if(this.aspectRatio)
offset.x = offset.y / this.aspectRatio;
}
-
+
} else { // defaults to southeast
if(this.bounds.width()+offset.x > this.maxSize.width) {
offset.x = this.maxSize.width - this.bounds.width();
@@ -20747,13 +20747,13 @@ ORYX.Plugins.Resizer = Clazz.extend({
Event.stop(event);
},
-
+
registerOnResizeStart: function(callback) {
if(!this.resizeStartCallbacks.member(callback)) {
this.resizeStartCallbacks.push(callback);
}
},
-
+
unregisterOnResizeStart: function(callback) {
if(this.resizeStartCallbacks.member(callback)) {
this.resizeStartCallbacks = this.resizeStartCallbacks.without(callback);
@@ -20765,13 +20765,13 @@ ORYX.Plugins.Resizer = Clazz.extend({
this.resizeEndCallbacks.push(callback);
}
},
-
+
unregisterOnResizeEnd: function(callback) {
if(this.resizeEndCallbacks.member(callback)) {
this.resizeEndCallbacks = this.resizeEndCallbacks.without(callback);
}
},
-
+
registerOnResize: function(callback) {
if(!this.resizeCallbacks.member(callback)) {
this.resizeCallbacks.push(callback);
@@ -20804,7 +20804,7 @@ ORYX.Plugins.Resizer = Clazz.extend({
this.minSize = min;
this.maxSize = max;
-
+
this.aspectRatio = aspectRatio;
this.update();
@@ -20814,17 +20814,17 @@ ORYX.Plugins.Resizer = Clazz.extend({
if(!this.bounds) { return; }
var upL = this.bounds.upperLeft();
-
+
if(this.bounds.width() < this.minSize.width) { this.bounds.set(upL.x, upL.y, upL.x + this.minSize.width, upL.y + this.bounds.height());};
if(this.bounds.height() < this.minSize.height) { this.bounds.set(upL.x, upL.y, upL.x + this.bounds.width(), upL.y + this.minSize.height);};
if(this.bounds.width() > this.maxSize.width) { this.bounds.set(upL.x, upL.y, upL.x + this.maxSize.width, upL.y + this.bounds.height());};
if(this.bounds.height() > this.maxSize.height) { this.bounds.set(upL.x, upL.y, upL.x + this.bounds.width(), upL.y + this.maxSize.height);};
var a = this.canvasNode.getScreenCTM();
-
+
upL.x *= a.a;
upL.y *= a.d;
-
+
var additionalIEZoom = 1;
if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) {
var ua = navigator.userAgent;
@@ -20836,16 +20836,16 @@ ORYX.Plugins.Resizer = Clazz.extend({
}
}
}
-
+
if (additionalIEZoom === 1) {
upL.y = upL.y - jQuery("#canvasSection").offset().top + a.f;
upL.x = upL.x - jQuery("#canvasSection").offset().left + a.e;
-
+
} 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) {
@@ -20854,7 +20854,7 @@ ORYX.Plugins.Resizer = Clazz.extend({
upL.y = upL.y - (jQuery("#canvasSection").offset().top * additionalIEZoom) + ((canvasScrollTop * additionalIEZoom) - canvasScrollTop) + a.f;
upL.x = upL.x - (canvasOffsetLeft * additionalIEZoom) + additionaloffset + ((canvasScrollLeft * additionalIEZoom) - canvasScrollLeft) + a.e;
}
-
+
if(this.orientation==="northwest") {
upL.x -= 13;
upL.y -= 13;
@@ -20862,7 +20862,7 @@ ORYX.Plugins.Resizer = Clazz.extend({
upL.x += (a.a * this.bounds.width()) + 3 ;
upL.y += (a.d * this.bounds.height()) + 3;
}
-
+
this.position = upL;
this.node.style.left = this.position.x + "px";
@@ -20874,8 +20874,8 @@ ORYX.Plugins.Resizer = Clazz.extend({
/**
* Implements a Command to move shapes
- *
- */
+ *
+ */
ORYX.Core.Command.Move = ORYX.Core.Command.extend({
construct: function(moveShapes, offset, parent, selectedShapes, plugin){
this.moveShapes = moveShapes;
@@ -20886,13 +20886,13 @@ ORYX.Core.Command.Move = ORYX.Core.Command.extend({
this.newParents = moveShapes.collect(function(t){ return parent || t.parent });
this.oldParents = moveShapes.collect(function(shape){ return shape.parent });
this.dockedNodes= moveShapes.findAll(function(shape){ return shape instanceof ORYX.Core.Node && shape.dockers.length == 1}).collect(function(shape){ return {docker:shape.dockers[0], dockedShape:shape.dockers[0].getDockedShape(), refPoint:shape.dockers[0].referencePoint} });
- },
+ },
execute: function(){
- this.dockAllShapes()
+ this.dockAllShapes()
// Moves by the offset
this.move( this.offset);
// Addes to the new parents
- this.addShapeToParent( this.newParents );
+ this.addShapeToParent( this.newParents );
// Set the selection to the current selection
this.selectCurrentShapes();
this.plugin.facade.getCanvas().update();
@@ -20903,35 +20903,35 @@ ORYX.Core.Command.Move = ORYX.Core.Command.extend({
var offset = { x:-this.offset.x, y:-this.offset.y };
this.move( offset );
// Addes to the old parents
- this.addShapeToParent( this.oldParents );
- this.dockAllShapes(true)
-
+ this.addShapeToParent( this.oldParents );
+ this.dockAllShapes(true)
+
// Set the selection to the current selection
this.selectCurrentShapes();
this.plugin.facade.getCanvas().update();
this.plugin.facade.updateSelection();
-
+
},
move:function(offset, doLayout){
-
+
// Move all Shapes by these offset
for(var i=0; i Math.abs(center.x - dockerCenter.x) ? center.x - dockerCenter.x : nearestX;
nearestY = Math.abs(nearestY) > Math.abs(center.y - dockerCenter.y) ? center.y - dockerCenter.y : nearestY;
-
-
+
+
}).bind(this));
-
+
if (Math.abs(nearestX) < minOffset || Math.abs(nearestY) < minOffset) {
nearestX = Math.abs(nearestX) < minOffset ? nearestX : 0;
nearestY = Math.abs(nearestY) < minOffset ? nearestY : 0;
-
+
this.docker.bounds.centerMoveTo(dockerCenter.x + nearestX, dockerCenter.y + nearestY);
//this.docker.update()
} else {
-
-
-
+
+
+
var previous = this.docker.parent.dockers[Math.max(this.docker.parent.dockers.indexOf(this.docker)-1, 0)];
var next = this.docker.parent.dockers[Math.min(this.docker.parent.dockers.indexOf(this.docker)+1, this.docker.parent.dockers.length-1)];
-
+
if (previous && next && previous !== this.docker && next !== this.docker){
var cp = previous.bounds.center();
var cn = next.bounds.center();
var cd = this.docker.bounds.center();
-
+
// Checks if the point is on the line between previous and next
if (ORYX.Core.Math.isPointInLine(cd.x, cd.y, cp.x, cp.y, cn.x, cn.y, 10)) {
// Get the rise
@@ -21419,13 +21419,13 @@ ORYX.Plugins.DragDocker = Clazz.extend({
// Calculate the intersection point
var intersecX = ((cp.y-(cp.x*raise))-(cd.y-(cd.x*(-Math.pow(raise,-1)))))/((-Math.pow(raise,-1))-raise);
var intersecY = (cp.y-(cp.x*raise))+(raise*intersecX);
-
+
if(isNaN(intersecX) || isNaN(intersecY)) {return;}
-
+
this.docker.bounds.centerMoveTo(intersecX, intersecY);
}
}
-
+
}
}
}
@@ -21438,45 +21438,45 @@ ORYX.Plugins.DragDocker = Clazz.extend({
*
*/
dockerMovedFinished: function(event) {
-
+
/* Reset to buffered shape selection */
this.facade.setSelection(this.shapeSelection);
-
+
// Hide the border
this.hideHighlight();
-
+
// Show all Labels from Docker
this.dockerParent.getLabels().each(function(label){
label.show();
//label.update();
});
-
+
// If there is a last top level Shape
- if(this.lastUIObj && (this.isStartDocker || this.isEndDocker)){
+ if(this.lastUIObj && (this.isStartDocker || this.isEndDocker)){
// If there is a valid connection, the set as a docked Shape to them
if(this.isValid) {
-
- this.docker.setDockedShape(this.lastUIObj);
-
+
+ this.docker.setDockedShape(this.lastUIObj);
+
this.facade.raiseEvent({
- type :ORYX.CONFIG.EVENT_DRAGDOCKER_DOCKED,
+ type :ORYX.CONFIG.EVENT_DRAGDOCKER_DOCKED,
docker : this.docker,
parent : this.docker.parent,
target : this.lastUIObj
});
}
-
+
this.hideMagnets(this.lastUIObj);
}
-
+
// Hide the Docker
this.docker.hide();
-
+
if(this.outerDockerNotMoved) {
// Get the EventPosition and all Shapes on these point
var evPos = this.facade.eventCoordinates(event);
var shapes = this.facade.getCanvas().getAbstractShapesAtPosition(evPos);
-
+
/* Remove edges from selection */
var shapeWithoutEdges = shapes.findAll(function(node) {
return node instanceof ORYX.Core.Node;
@@ -21496,8 +21496,8 @@ ORYX.Plugins.DragDocker = Clazz.extend({
this.facade = facade;
this.index = docker.parent.dockers.indexOf(docker);
this.shape = docker.parent;
-
- },
+
+ },
execute: function(){
if (!this.docker.parent){
this.docker = this.shape.dockers[this.index];
@@ -21514,41 +21514,41 @@ ORYX.Plugins.DragDocker = Clazz.extend({
}.bind(this));
this.facade.updateSelection();
},
- dock:function( toDockShape, pos ){
+ dock:function( toDockShape, pos ){
// Set the Docker to the new Shape
this.docker.setDockedShape( undefined );
- if( toDockShape ){
- this.docker.setDockedShape( toDockShape );
+ if( toDockShape ){
+ this.docker.setDockedShape( toDockShape );
this.docker.setReferencePoint( pos );
- //this.docker.update();
- //this.docker.parent._update();
+ //this.docker.update();
+ //this.docker.parent._update();
} else {
this.docker.bounds.centerMoveTo( pos );
}
-
+
this.facade.getCanvas().update();
}
});
-
-
+
+
if (this.docker.parent){
// Instanziate the dockCommand
var command = new dragDockerCommand(this.docker, this.docker.getDockedShape() ? this.docker.referencePoint : this.docker.bounds.center(), this._commandArg.refPoint, this.docker.getDockedShape(), this._commandArg.dockedShape, this.facade);
- this.facade.executeCommands( [command] );
+ this.facade.executeCommands( [command] );
}
}
-
+
// Update all Shapes
//this.facade.updateSelection();
-
+
// Undefined all variables
this.docker = undefined;
this.dockerParent = undefined;
this.dockerSource = undefined;
- this.dockerTarget = undefined;
- this.lastUIObj = undefined;
+ this.dockerTarget = undefined;
+ this.lastUIObj = undefined;
},
-
+
/**
* Hide the highlighting
*/
@@ -21561,37 +21561,37 @@ ORYX.Plugins.DragDocker = Clazz.extend({
*
*/
showHighlight: function(uiObj, color) {
-
+
this.facade.raiseEvent({
- type: ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW,
+ type: ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW,
highlightId:'validDockedShape',
elements: [uiObj],
color: color
});
},
-
+
showMagnets: function(uiObj){
uiObj.magnets.each(function(magnet) {
magnet.show();
});
},
-
+
hideMagnets: function(uiObj){
uiObj.magnets.each(function(magnet) {
magnet.hide();
});
},
-
+
getHighestParentBeforeCanvas: function(shape) {
if(!(shape instanceof ORYX.Core.Shape)) {return undefined;}
-
+
var parent = shape.parent;
while(parent && !(parent.parent instanceof ORYX.Core.Canvas)) {
parent = parent.parent;
- }
-
- return parent;
- }
+ }
+
+ return parent;
+ }
});
@@ -21618,13 +21618,13 @@ ORYX.Plugins.AddDocker = Clazz.extend({
this.facade = facade;
this.enableAdd = false;
this.enableRemove = false;
-
+
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_MOUSEDOWN, this.handleMouseDown.bind(this));
},
-
+
setEnableAdd: function(enable){
this.enableAdd = enable;
-
+
if(this.enableAdd) {
jQuery("#add-bendpoint-button").addClass('pressed');
} else {
@@ -21634,7 +21634,7 @@ ORYX.Plugins.AddDocker = Clazz.extend({
},
setEnableRemove: function(enable){
this.enableRemove = enable;
-
+
if(this.enableRemove) {
jQuery("#remove-bendpoint-button").addClass('pressed');
} else {
@@ -21642,18 +21642,18 @@ ORYX.Plugins.AddDocker = Clazz.extend({
jQuery("#remove-bendpoint-button").blur();
}
},
-
+
enabledAdd: function(enable){
return this.enableAdd;
},
enabledRemove: function(){
return this.enableRemove;
},
-
+
/**
* MouseDown Handler
*
- */
+ */
handleMouseDown: function(event, uiObj) {
if (this.enabledAdd() && uiObj instanceof ORYX.Core.Edge) {
this.newDockerCommand({
@@ -21661,7 +21661,7 @@ ORYX.Plugins.AddDocker = Clazz.extend({
position: this.facade.eventCoordinates(event)
});
this.setEnableAdd(false);
-
+
} else if (this.enabledRemove() &&
uiObj instanceof ORYX.Core.Controls.Docker &&
uiObj.parent instanceof ORYX.Core.Edge) {
@@ -21673,7 +21673,7 @@ ORYX.Plugins.AddDocker = Clazz.extend({
}
document.body.style.cursor = 'default';
},
-
+
// Options: edge (required), position (required if add), docker (required if delete)
newDockerCommand: function(options){
if(!options.edge)
@@ -21720,9 +21720,9 @@ ORYX.Plugins.AddDocker = Clazz.extend({
this.facade.updateSelection();
}
})
-
+
var command = new commandClass(this.enabledAdd(), this.enabledRemove(), options.edge, options.docker, options.position, this.facade);
-
+
this.facade.executeCommands([command]);
}
});
@@ -21769,7 +21769,7 @@ if(!ORYX.Plugins)
if( uiObj instanceof ORYX.Core.Canvas ) {
// Calculate the Offset
var scrollNode = uiObj.rootNode.parentNode.parentNode;
-
+
var a = this.facade.getCanvas().node.getScreenCTM();
this.offsetPosition = {
x: a.e,
@@ -21778,19 +21778,19 @@ if(!ORYX.Plugins)
// Set the new Position
this.setPos({
- x: Event.pointerX(event) - jQuery("#canvasSection").offset().left,
+ x: Event.pointerX(event) - jQuery("#canvasSection").offset().left,
y: Event.pointerY(event) - jQuery("#canvasSection").offset().top + 5
});
-
+
// Reset the size
this.resize({width:0, height:0});
this.moveCallback = this.handleMouseMove.bind(this);
-
+
// Register Mouse-Move Event
document.documentElement.addEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.moveCallback, false);
this.offsetScroll = {x:scrollNode.scrollLeft,y:scrollNode.scrollTop};
-
+
// Show the Frame
this.show();
}
@@ -21805,8 +21805,8 @@ if(!ORYX.Plugins)
this.hide();
// Unregister Mouse-Move
- document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.moveCallback, false);
-
+ document.documentElement.removeEventListener(ORYX.CONFIG.EVENT_MOUSEMOVE, this.moveCallback, false);
+
this.moveCallback = undefined;
var corrSVG = this.facade.getCanvas().node.getScreenCTM();
@@ -21821,7 +21821,7 @@ if(!ORYX.Plugins)
x: a.x + Math.abs(this.size.width),
y: a.y + Math.abs(this.size.height)
};
-
+
var additionalIEZoom = 1;
if (!isNaN(screen.logicalXDPI) && !isNaN(screen.systemXDPI)) {
var ua = navigator.userAgent;
@@ -21833,43 +21833,43 @@ if(!ORYX.Plugins)
}
}
}
-
+
if (additionalIEZoom === 1) {
a.x = a.x - (corrSVG.e - jQuery("#canvasSection").offset().left);
a.y = a.y - (corrSVG.f - jQuery("#canvasSection").offset().top);
b.x = b.x - (corrSVG.e - jQuery("#canvasSection").offset().left);
b.y = b.y - (corrSVG.f - jQuery("#canvasSection").offset().top);
-
+
} 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) {
additionaloffset = (offset / additionalIEZoom) - offset;
}
-
+
a.x = a.x - (corrSVG.e - (canvasOffsetLeft * additionalIEZoom) + additionaloffset + ((canvasScrollLeft * additionalIEZoom) - canvasScrollLeft));
a.y = a.y - (corrSVG.f - (jQuery("#canvasSection").offset().top * additionalIEZoom) + ((canvasScrollTop * additionalIEZoom) - canvasScrollTop));
b.x = b.x - (corrSVG.e - (canvasOffsetLeft * additionalIEZoom) + additionaloffset + ((canvasScrollLeft * additionalIEZoom) - canvasScrollLeft));
b.y = b.y - (corrSVG.f - (jQuery("#canvasSection").offset().top * additionalIEZoom) + ((canvasScrollTop * additionalIEZoom) - canvasScrollTop));
}
-
-
+
+
// Fit to SVG-Coordinates
a.x /= corrSVG.a; a.y /= corrSVG.d;
b.x /= corrSVG.a; b.y /= corrSVG.d;
-
+
// Calculate the elements from the childs of the canvas
var elements = this.facade.getCanvas().getChildShapes(true).findAll(function(value) {
var absBounds = value.absoluteBounds();
-
+
var bA = absBounds.upperLeft();
var bB = absBounds.lowerRight();
-
+
if(bA.x > a.x && bA.y > a.y && bB.x < b.x && bB.y < b.y)
return true;
return false;
@@ -21888,9 +21888,9 @@ if(!ORYX.Plugins)
};
var scrollNode = this.facade.getCanvas().rootNode.parentNode.parentNode;
- size.width -= this.offsetScroll.x - scrollNode.scrollLeft;
+ size.width -= this.offsetScroll.x - scrollNode.scrollLeft;
size.height -= this.offsetScroll.y - scrollNode.scrollTop;
-
+
// Set the size
this.resize(size);
@@ -21917,7 +21917,7 @@ if(!ORYX.Plugins)
// Calculate the negative offset
this.setPos(this.position);
this.size = Object.clone(size);
-
+
if(size.width < 0) {
this.node.style.left = (this.position.x + size.width) + "px";
size.width = - size.width;
@@ -21946,58 +21946,58 @@ if(!ORYX.Plugins)
*/
if(!ORYX.Plugins)
- ORYX.Plugins = new Object();
+ ORYX.Plugins = new Object();
ORYX.Plugins.ShapeHighlighting = Clazz.extend({
construct: function(facade) {
-
+
this.parentNode = facade.getCanvas().getSvgContainer();
-
+
// The parent Node
this.node = ORYX.Editor.graft("http://www.w3.org/2000/svg", this.parentNode,
['g']);
this.highlightNodes = {};
-
+
facade.registerOnEvent(ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW, this.setHighlight.bind(this));
- facade.registerOnEvent(ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, this.hideHighlight.bind(this));
+ facade.registerOnEvent(ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, this.hideHighlight.bind(this));
},
setHighlight: function(options) {
if(options && options.highlightId){
var node = this.highlightNodes[options.highlightId];
-
+
if(!node){
node= ORYX.Editor.graft("http://www.w3.org/2000/svg", this.node,
['path', {
"stroke-width": 2.0, "fill":"none"
- }]);
-
+ }]);
+
this.highlightNodes[options.highlightId] = node;
}
if(options.elements && options.elements.length > 0) {
-
+
this.setAttributesByStyle( node, options );
this.show(node);
-
+
} else {
-
- this.hide(node);
-
+
+ this.hide(node);
+
}
-
+
}
},
-
+
hideHighlight: function(options) {
if(options && options.highlightId && this.highlightNodes[options.highlightId]){
this.hide(this.highlightNodes[options.highlightId]);
- }
+ }
},
-
+
hide: function(node) {
node.setAttributeNS(null, 'display', 'none');
},
@@ -22005,26 +22005,26 @@ ORYX.Plugins.ShapeHighlighting = Clazz.extend({
show: function(node) {
node.setAttributeNS(null, 'display', '');
},
-
+
setAttributesByStyle: function( node, options ){
-
+
// If the style say, that it should look like a rectangle
if( options.style && options.style == ORYX.CONFIG.SELECTION_HIGHLIGHT_STYLE_RECTANGLE ){
-
+
// Set like this
var bo = options.elements[0].absoluteBounds();
-
+
var strWidth = options.strokewidth ? options.strokewidth : ORYX.CONFIG.BORDER_OFFSET
-
+
node.setAttributeNS(null, "d", this.getPathRectangle( bo.a, bo.b , strWidth ) );
node.setAttributeNS(null, "stroke", options.color ? options.color : ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR);
node.setAttributeNS(null, "stroke-opacity", options.opacity ? options.opacity : 0.2);
node.setAttributeNS(null, "stroke-width", strWidth);
-
- } else if(options.elements.length == 1
+
+ } else if(options.elements.length == 1
&& options.elements[0] instanceof ORYX.Core.Edge &&
options.highlightId != "selection") {
-
+
/* Highlight containment of edge's childs */
var path = this.getPathEdge(options.elements[0].dockers);
if (path && path.length > 0)
@@ -22034,7 +22034,7 @@ ORYX.Plugins.ShapeHighlighting = Clazz.extend({
node.setAttributeNS(null, "stroke", options.color ? options.color : ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR);
node.setAttributeNS(null, "stroke-opacity", options.opacity ? options.opacity : 0.2);
node.setAttributeNS(null, "stroke-width", ORYX.CONFIG.OFFSET_EDGE_BOUNDS);
-
+
}else {
// If not, set just the corners
var path = this.getPathByElements(options.elements);
@@ -22045,18 +22045,18 @@ ORYX.Plugins.ShapeHighlighting = Clazz.extend({
node.setAttributeNS(null, "stroke", options.color ? options.color : ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR);
node.setAttributeNS(null, "stroke-opacity", options.opacity ? options.opacity : 1.0);
node.setAttributeNS(null, "stroke-width", options.strokewidth ? options.strokewidth : 2.0);
-
+
}
},
-
+
getPathByElements: function(elements){
if(!elements || elements.length <= 0) {return undefined}
-
+
// Get the padding and the size
var padding = ORYX.CONFIG.SELECTED_AREA_PADDING;
-
+
var path = ""
-
+
// Get thru all Elements
elements.each((function(element) {
if(!element) {return}
@@ -22065,28 +22065,28 @@ ORYX.Plugins.ShapeHighlighting = Clazz.extend({
bounds.widen(padding)
var a = bounds.upperLeft();
var b = bounds.lowerRight();
-
+
path = path + this.getPath(a ,b);
-
+
}).bind(this));
return path;
-
+
},
getPath: function(a, b){
-
+
return this.getPathCorners(a, b);
-
+
},
-
+
getPathCorners: function(a, b){
var size = ORYX.CONFIG.SELECTION_HIGHLIGHT_SIZE;
-
+
var path = ""
- // Set: Upper left
+ // Set: Upper left
path = path + "M" + a.x + " " + (a.y + size) + " l0 -" + size + " l" + size + " 0 ";
// Set: Lower left
path = path + "M" + a.x + " " + (b.y - size) + " l0 " + size + " l" + size + " 0 ";
@@ -22094,18 +22094,18 @@ ORYX.Plugins.ShapeHighlighting = Clazz.extend({
path = path + "M" + b.x + " " + (b.y - size) + " l0 " + size + " l-" + size + " 0 ";
// Set: Upper right
path = path + "M" + b.x + " " + (a.y + size) + " l0 -" + size + " l-" + size + " 0 ";
-
+
return path;
},
-
+
getPathRectangle: function(a, b, strokeWidth){
var size = ORYX.CONFIG.SELECTION_HIGHLIGHT_SIZE;
var path = ""
var offset = strokeWidth / 2.0;
-
- // Set: Upper left
+
+ // Set: Upper left
path = path + "M" + (a.x + offset) + " " + (a.y);
path = path + " L" + (a.x + offset) + " " + (b.y - offset);
path = path + " L" + (b.x - offset) + " " + (b.y - offset);
@@ -22114,23 +22114,23 @@ ORYX.Plugins.ShapeHighlighting = Clazz.extend({
return path;
},
-
+
getPathEdge: function(edgeDockers) {
var length = edgeDockers.length;
- var path = "M" + edgeDockers[0].bounds.center().x + " "
+ var path = "M" + edgeDockers[0].bounds.center().x + " "
+ edgeDockers[0].bounds.center().y;
-
+
for(i=1; i 1) {
this.facade.raiseEvent({
- type: ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW,
+ type: ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW,
highlightId:'selection',
elements: event.elements.without(event.subSelection),
color: ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR,
@@ -22159,20 +22159,20 @@ ORYX.Plugins.HighlightingSelectedShapes = Clazz.extend({
if(event.subSelection){
this.facade.raiseEvent({
- type: ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW,
+ type: ORYX.CONFIG.EVENT_HIGHLIGHT_SHOW,
highlightId:'subselection',
elements: [event.subSelection],
color: ORYX.CONFIG.SELECTION_HIGHLIGHT_COLOR,
opacity: this.opacityFull
- });
+ });
} else {
- this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, highlightId:'subselection'});
- }
-
+ this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, highlightId:'subselection'});
+ }
+
} else {
this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, highlightId:'selection'});
this.facade.raiseEvent({type:ORYX.CONFIG.EVENT_HIGHLIGHT_HIDE, highlightId:'subselection'});
- }
+ }
}
});/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
@@ -22184,105 +22184,105 @@ ORYX.Plugins.HighlightingSelectedShapes = Clazz.extend({
* All code Copyright 2013 KIS Consultancy all rights reserved
*/
-if (!ORYX.Plugins)
+if (!ORYX.Plugins)
ORYX.Plugins = new Object();
ORYX.Plugins.Overlay = Clazz.extend({
facade: undefined,
-
+
styleNode: undefined,
-
+
construct: function(facade){
-
+
this.facade = facade;
this.changes = [];
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_OVERLAY_SHOW, this.show.bind(this));
- this.facade.registerOnEvent(ORYX.CONFIG.EVENT_OVERLAY_HIDE, this.hide.bind(this));
+ this.facade.registerOnEvent(ORYX.CONFIG.EVENT_OVERLAY_HIDE, this.hide.bind(this));
this.styleNode = document.createElement('style')
this.styleNode.setAttributeNS(null, 'type', 'text/css')
-
+
document.getElementsByTagName('head')[0].appendChild( this.styleNode )
},
-
+
/**
* Show the overlay for specific nodes
* @param {Object} options
- *
- * String options.id - MUST - Define the id of the overlay (is needed for the hiding of this overlay)
+ *
+ * String options.id - MUST - Define the id of the overlay (is needed for the hiding of this overlay)
* ORYX.Core.Shape[] options.shapes - MUST - Define the Shapes for the changes
* attr-name:value options.changes - Defines all the changes which should be shown
- *
- *
+ *
+ *
*/
show: function( options ){
-
+
// Checks if all arguments are available
- if( !options ||
+ if( !options ||
!options.shapes || !options.shapes instanceof Array ||
- !options.id || !options.id instanceof String || options.id.length == 0) {
-
+ !options.id || !options.id instanceof String || options.id.length == 0) {
+
return
-
+
}
-
+
//if( this.changes[options.id]){
// this.hide( options )
//}
-
+
// Checked if attributes are setted
if( options.attributes ){
-
+
// FOR EACH - Shape
options.shapes.each(function(el){
-
+
// Checks if the node is a Shape
if( !el instanceof ORYX.Core.Shape){ return }
-
+
this.setAttributes( el.node , options.attributes )
-
+
}.bind(this))
- }
-
+ }
+
var isSVG = true
try {
isSVG = options.node && options.node instanceof SVGElement;
} catch(e){}
-
- // Checks if node is setted and if this is an SVGElement
+
+ // Checks if node is setted and if this is an SVGElement
if ( options.node && isSVG) {
-
+
options["_temps"] = []
-
+
// FOR EACH - Node
options.shapes.each(function(el, index){
-
+
// Checks if the node is a Shape
if( !el instanceof ORYX.Core.Shape){ return }
-
+
var _temp = {}
_temp.svg = options.dontCloneNode ? options.node : options.node.cloneNode( true );
-
+
// Add the svg node to the ORYX-Shape
- el.node.firstChild.appendChild( _temp.svg )
-
+ el.node.firstChild.appendChild( _temp.svg )
+
// If
if (el instanceof ORYX.Core.Edge && !options.nodePosition) {
options['nodePosition'] = "START"
}
-
+
// If the node position is setted, it has to be transformed
if( options.nodePosition ){
-
+
var b = el.bounds;
var p = options.nodePosition.toUpperCase();
-
+
// Check the values of START and END
if( el instanceof ORYX.Core.Node && p == "START"){
p = "NW";
@@ -22294,12 +22294,12 @@ ORYX.Plugins.Overlay = Clazz.extend({
b = el.getDockers().last().bounds
}
- // Create a callback for the changing the position
+ // Create a callback for the changing the position
// depending on the position string
_temp.callback = function(){
-
+
var x = 0; var y = 0;
-
+
if( p == "NW" ){
// Do Nothing
} else if( p == "N" ) {
@@ -22321,122 +22321,122 @@ ORYX.Plugins.Overlay = Clazz.extend({
} else {
return
}
-
+
if( el instanceof ORYX.Core.Edge){
x += b.upperLeft().x ; y += b.upperLeft().y ;
}
-
+
_temp.svg.setAttributeNS(null, "transform", "translate(" + x + ", " + y + ")")
-
+
}.bind(this)
-
+
_temp.element = el;
_temp.callback();
-
+
b.registerCallback( _temp.callback );
-
+
}
-
-
- options._temps.push( _temp )
-
+
+
+ options._temps.push( _temp )
+
}.bind(this))
-
-
-
- }
-
+
+
+
+ }
+
// Store the changes
if( !this.changes[options.id] ){
this.changes[options.id] = [];
}
-
+
this.changes[options.id].push( options );
-
+
},
-
+
/**
* Hide the overlay with the spefic id
* @param {Object} options
*/
hide: function( options ){
-
+
// Checks if all arguments are available
- if( !options ||
+ if( !options ||
!options.id || !options.id instanceof String || options.id.length == 0 ||
- !this.changes[options.id]) {
-
+ !this.changes[options.id]) {
+
return
-
- }
-
-
+
+ }
+
+
// Delete all added attributes
// FOR EACH - Shape
this.changes[options.id].each(function(option){
-
+
option.shapes.each(function(el, index){
-
+
// Checks if the node is a Shape
if( !el instanceof ORYX.Core.Shape){ return }
-
+
this.deleteAttributes( el.node )
-
+
}.bind(this));
-
+
if( option._temps ){
-
+
option._temps.each(function(tmp){
// Delete the added Node, if there is one
if( tmp.svg && tmp.svg.parentNode ){
tmp.svg.parentNode.removeChild( tmp.svg )
}
-
- // If
+
+ // If
if( tmp.callback && tmp.element){
// It has to be unregistered from the edge
tmp.element.bounds.unregisterCallback( tmp.callback )
}
-
+
}.bind(this))
-
+
}
-
-
+
+
}.bind(this));
-
+
this.changes[options.id] = null;
-
-
+
+
},
-
-
+
+
/**
* Set the given css attributes to that node
* @param {HTMLElement} node
* @param {Object} attributes
*/
setAttributes: function( node, attributes ) {
-
-
+
+
// Get all the childs from ME
var childs = this.getAllChilds( node.firstChild.firstChild )
-
+
var ids = []
-
+
// Add all Attributes which have relation to another node in this document and concate the pure id out of it
// This is for example important for the markers of a edge
childs.each(function(e){ ids.push( $A(e.attributes).findAll(function(attr){ return attr.nodeValue.startsWith('url(#')}) )})
ids = ids.flatten().compact();
ids = ids.collect(function(s){return s.nodeValue}).uniq();
ids = ids.collect(function(s){return s.slice(5, s.length-1)})
-
+
// Add the node ID to the id
ids.unshift( node.id + ' .me')
-
+
var attr = $H(attributes);
var attrValue = attr.toJSON().gsub(',', ';').gsub('"', '');
var attrMarkerValue = attributes.stroke ? attrValue.slice(0, attrValue.length-1) + "; fill:" + attributes.stroke + ";}" : attrValue;
@@ -22446,48 +22446,48 @@ ORYX.Plugins.Overlay = Clazz.extend({
copyAttr.fill = "black";
attrTextValue = $H(copyAttr).toJSON().gsub(',', ';').gsub('"', '');
}
-
+
// Create the CSS-Tags Style out of the ids and the attributes
csstags = ids.collect(function(s, i){return "#" + s + " * " + (!i? attrValue : attrMarkerValue) + "" + (attrTextValue ? " #" + s + " text * " + attrTextValue : "") })
-
+
// Join all the tags
- var s = csstags.join(" ") + "\n"
-
+ var s = csstags.join(" ") + "\n"
+
// And add to the end of the style tag
this.styleNode.appendChild(document.createTextNode(s));
-
-
+
+
},
-
+
/**
* Deletes all attributes which are
* added in a special style sheet for that node
- * @param {HTMLElement} node
+ * @param {HTMLElement} node
*/
deleteAttributes: function( node ) {
-
- // Get all children which contains the node id
+
+ // Get all children which contains the node id
var delEl = $A(this.styleNode.childNodes)
.findAll(function(e){ return e.textContent.include( '#' + node.id ) });
-
+
// Remove all of them
delEl.each(function(el){
el.parentNode.removeChild(el);
- });
+ });
},
-
+
getAllChilds: function( node ){
-
+
var childs = $A(node.childNodes)
-
- $A(node.childNodes).each(function( e ){
+
+ $A(node.childNodes).each(function( e ){
childs.push( this.getAllChilds( e ) )
}.bind(this))
return childs.flatten();
}
-
+
});
/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
@@ -22499,18 +22499,18 @@ ORYX.Plugins.Overlay = Clazz.extend({
* All code Copyright 2013 KIS Consultancy all rights reserved
*/
-if (!ORYX.Plugins)
+if (!ORYX.Plugins)
ORYX.Plugins = new Object();
ORYX.Plugins.KeysMove = ORYX.Plugins.AbstractPlugin.extend({
facade: undefined,
-
+
construct: function(facade){
-
+
this.facade = facade;
this.copyElements = [];
-
+
//this.facade.registerOnEvent(ORYX.CONFIG.EVENT_KEYDOWN, this.keyHandler.bind(this));
// SELECT ALL
@@ -22518,99 +22518,99 @@ ORYX.Plugins.KeysMove = ORYX.Plugins.AbstractPlugin.extend({
keyCodes: [{
metaKeys: [ORYX.CONFIG.META_KEY_META_CTRL],
keyCode: 65,
- keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
+ keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
}
],
functionality: this.selectAll.bind(this)
});
-
- // MOVE LEFT SMALL
+
+ // MOVE LEFT SMALL
this.facade.offer({
keyCodes: [{
metaKeys: [ORYX.CONFIG.META_KEY_META_CTRL],
keyCode: ORYX.CONFIG.KEY_CODE_LEFT,
- keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
+ keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
}
],
functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_LEFT, false)
});
-
+
// MOVE LEFT
this.facade.offer({
keyCodes: [{
keyCode: ORYX.CONFIG.KEY_CODE_LEFT,
- keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
+ keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
}
],
functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_LEFT, true)
});
-
- // MOVE RIGHT SMALL
+
+ // MOVE RIGHT SMALL
this.facade.offer({
keyCodes: [{
metaKeys: [ORYX.CONFIG.META_KEY_META_CTRL],
keyCode: ORYX.CONFIG.KEY_CODE_RIGHT,
- keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
+ keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
}
],
functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_RIGHT, false)
});
-
- // MOVE RIGHT
+
+ // MOVE RIGHT
this.facade.offer({
keyCodes: [{
keyCode: ORYX.CONFIG.KEY_CODE_RIGHT,
- keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
+ keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
}
],
functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_RIGHT, true)
});
-
- // MOVE UP SMALL
+
+ // MOVE UP SMALL
this.facade.offer({
keyCodes: [{
metaKeys: [ORYX.CONFIG.META_KEY_META_CTRL],
keyCode: ORYX.CONFIG.KEY_CODE_UP,
- keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
+ keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
}
],
functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_UP, false)
});
-
- // MOVE UP
+
+ // MOVE UP
this.facade.offer({
keyCodes: [{
keyCode: ORYX.CONFIG.KEY_CODE_UP,
- keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
+ keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
}
],
functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_UP, true)
});
-
- // MOVE DOWN SMALL
+
+ // MOVE DOWN SMALL
this.facade.offer({
keyCodes: [{
metaKeys: [ORYX.CONFIG.META_KEY_META_CTRL],
keyCode: ORYX.CONFIG.KEY_CODE_DOWN,
- keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
+ keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
}
],
functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_DOWN, false)
});
-
- // MOVE DOWN
+
+ // MOVE DOWN
this.facade.offer({
keyCodes: [{
keyCode: ORYX.CONFIG.KEY_CODE_DOWN,
- keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
+ keyAction: ORYX.CONFIG.KEY_ACTION_DOWN
}
],
functionality: this.move.bind(this, ORYX.CONFIG.KEY_CODE_DOWN, true)
});
-
-
+
+
},
-
+
/**
* Select all shapes in the editor
*
@@ -22619,9 +22619,9 @@ ORYX.Plugins.KeysMove = ORYX.Plugins.AbstractPlugin.extend({
Event.stop(e.event);
this.facade.setSelection(this.facade.getCanvas().getChildShapes(true))
},
-
+
move: function(key, far, e) {
-
+
Event.stop(e.event);
// calculate the distance to move the objects and get the selection.
@@ -22629,7 +22629,7 @@ ORYX.Plugins.KeysMove = ORYX.Plugins.AbstractPlugin.extend({
var selection = this.facade.getSelection();
var currentSelection = this.facade.getSelection();
var p = {x: 0, y: 0};
-
+
// switch on the key pressed and populate the point to move by.
switch(key) {
@@ -22646,28 +22646,28 @@ ORYX.Plugins.KeysMove = ORYX.Plugins.AbstractPlugin.extend({
p.y = distance;
break;
}
-
+
// move each shape in the selection by the point calculated and update it.
- selection = selection.findAll(function(shape){
- // Check if this shape is docked to an shape in the selection
- if(shape instanceof ORYX.Core.Node && shape.dockers.length == 1 && selection.include( shape.dockers.first().getDockedShape() )){
- return false
- }
-
+ selection = selection.findAll(function(shape){
+ // Check if this shape is docked to an shape in the selection
+ if(shape instanceof ORYX.Core.Node && shape.dockers.length == 1 && selection.include( shape.dockers.first().getDockedShape() )){
+ return false
+ }
+
// Check if any of the parent shape is included in the selection
- var s = shape.parent;
- do{
- if(selection.include(s)){
+ var s = shape.parent;
+ do{
+ if(selection.include(s)){
return false
}
- }while(s = s.parent);
-
+ }while(s = s.parent);
+
// Otherwise, return true
return true;
-
+
});
-
- /* Edges must not be movable, if only edges are selected and at least
+
+ /* Edges must not be movable, if only edges are selected and at least
* one of them is docked.
*/
var edgesMovable = true;
@@ -22676,17 +22676,17 @@ ORYX.Plugins.KeysMove = ORYX.Plugins.AbstractPlugin.extend({
if(shape.isDocked()) {
edgesMovable = false;
}
- return true;
+ return true;
}
return false;
});
-
+
if(onlyEdgesSelected && !edgesMovable) {
/* Abort moving shapes */
return;
}
-
- selection = selection.map(function(shape){
+
+ selection = selection.map(function(shape){
if( shape instanceof ORYX.Core.Node ){
/*if( shape.dockers.length == 1 ){
return shape.dockers.first()
@@ -22694,9 +22694,9 @@ ORYX.Plugins.KeysMove = ORYX.Plugins.AbstractPlugin.extend({
return shape
//}
} else if( shape instanceof ORYX.Core.Edge ) {
-
+
var dockers = shape.dockers;
-
+
if( selection.include( shape.dockers.first().getDockedShape() ) ){
dockers = dockers.without( shape.dockers.first() )
}
@@ -22704,17 +22704,17 @@ ORYX.Plugins.KeysMove = ORYX.Plugins.AbstractPlugin.extend({
if( selection.include( shape.dockers.last().getDockedShape() ) ){
dockers = dockers.without( shape.dockers.last() )
}
-
- return dockers
-
+
+ return dockers
+
} else {
return null
}
-
+
}).flatten().compact();
-
+
if (selection.size() > 0) {
-
+
//Stop moving at canvas borders
var selectionBounds = [ this.facade.getCanvas().bounds.lowerRight().x,
this.facade.getCanvas().bounds.lowerRight().y,
@@ -22734,23 +22734,23 @@ ORYX.Plugins.KeysMove = ORYX.Plugins.AbstractPlugin.extend({
p.x = this.facade.getCanvas().bounds.lowerRight().x - selectionBounds[2];
if(selectionBounds[3]+p.y > this.facade.getCanvas().bounds.lowerRight().y)
p.y = this.facade.getCanvas().bounds.lowerRight().y - selectionBounds[3];
-
+
if(p.x!=0 || p.y!=0) {
// Instantiate the moveCommand
var commands = [new ORYX.Core.Command.Move(selection, p, null, currentSelection, this)];
- // Execute the commands
+ // Execute the commands
this.facade.executeCommands(commands);
}
-
+
}
},
-
+
getUndockedCommant: function(shapes){
var undockEdgeCommand = ORYX.Core.Command.extend({
construct: function(moveShapes){
this.dockers = moveShapes.collect(function(shape){ return shape instanceof ORYX.Core.Controls.Docker ? {docker:shape, dockedShape:shape.getDockedShape(), refPoint:shape.referencePoint} : undefined }).compact();
- },
+ },
execute: function(){
this.dockers.each(function(el){
el.docker.setDockedShape(undefined);
@@ -22764,12 +22764,12 @@ ORYX.Plugins.KeysMove = ORYX.Plugins.AbstractPlugin.extend({
})
}
});
-
+
command = new undockEdgeCommand( shapes );
- command.execute();
+ command.execute();
return command;
},
-
+
// /**
// * The key handler for this plugin. Every action from the set of cut, copy,
// * paste and delete should be accessible trough simple keyboard shortcuts.
@@ -22780,13 +22780,13 @@ ORYX.Plugins.KeysMove = ORYX.Plugins.AbstractPlugin.extend({
// */
// keyHandler: function(event){
// //TODO document what event.which is.
-//
+//
// ORYX.Log.debug("keysMove.js handles a keyEvent.");
-//
+//
// // assure we have the current event.
-// if (!event)
+// if (!event)
// event = window.event;
-//
+//
// // get the currently pressed key and state of control key.
// var pressedKey = event.which || event.keyCode;
// var ctrlPressed = event.ctrlKey;
@@ -22794,13 +22794,13 @@ ORYX.Plugins.KeysMove = ORYX.Plugins.AbstractPlugin.extend({
// // if the key is one of the arrow keys, forward to move and return.
// if ([ORYX.CONFIG.KEY_CODE_LEFT, ORYX.CONFIG.KEY_CODE_RIGHT,
// ORYX.CONFIG.KEY_CODE_UP, ORYX.CONFIG.KEY_CODE_DOWN].include(pressedKey)) {
-//
+//
// this.move(pressedKey, !ctrlPressed);
// return;
// }
-//
+//
// }
-
+
});
/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
@@ -22816,30 +22816,30 @@ if(!ORYX.Plugins) { ORYX.Plugins = {} }
if(!ORYX.Plugins.Layouter) { ORYX.Plugins.Layouter = {} }
new function(){
-
+
/**
* Edge layouter is an implementation to layout an edge
* @class ORYX.Plugins.Layouter.EdgeLayouter
* @author Willi Tscheschner
*/
ORYX.Plugins.Layouter.EdgeLayouter = ORYX.Plugins.AbstractLayouter.extend({
-
+
/**
* Layout only Edges
*/
- layouted : [ "http://b3mn.org/stencilset/bpmn1.1#SequenceFlow",
+ layouted : [ "http://b3mn.org/stencilset/bpmn1.1#SequenceFlow",
"http://b3mn.org/stencilset/bpmn1.1#MessageFlow",
- "http://b3mn.org/stencilset/timjpdl3#SequenceFlow",
- "http://b3mn.org/stencilset/jbpm4#SequenceFlow",
+ "http://b3mn.org/stencilset/timjpdl3#SequenceFlow",
+ "http://b3mn.org/stencilset/jbpm4#SequenceFlow",
"http://b3mn.org/stencilset/bpmn2.0#MessageFlow",
- "http://b3mn.org/stencilset/bpmn2.0#SequenceFlow",
+ "http://b3mn.org/stencilset/bpmn2.0#SequenceFlow",
"http://b3mn.org/stencilset/bpmn2.0choreography#MessageFlow",
- "http://b3mn.org/stencilset/bpmn2.0choreography#SequenceFlow",
+ "http://b3mn.org/stencilset/bpmn2.0choreography#SequenceFlow",
"http://b3mn.org/stencilset/bpmn2.0conversation#ConversationLink",
"http://b3mn.org/stencilset/epc#ControlFlow",
"http://www.signavio.com/stencilsets/processmap#ProcessLink",
"http://www.signavio.com/stencilsets/organigram#connection"],
-
+
/**
* Layout a set on edges
* @param {Object} edges
@@ -22849,54 +22849,54 @@ new function(){
this.doLayout(edge)
}.bind(this))
},
-
+
/**
* Layout one edge
* @param {Object} edge
*/
doLayout: function(edge){
// Get from and to node
- var from = edge.getIncomingNodes()[0];
+ var from = edge.getIncomingNodes()[0];
var to = edge.getOutgoingNodes()[0];
-
+
// Return if one is null
if (!from || !to) { return }
-
+
var positions = this.getPositions(from, to, edge);
-
+
if (positions.length > 0){
this.setDockers(edge, positions[0].a, positions[0].b);
}
-
+
},
-
+
/**
- * Returns a set on positions which are not containt either
+ * Returns a set on positions which are not containt either
* in the bounds in from or to.
* @param {Object} from Shape where the edge is come from
* @param {Object} to Shape where the edge is leading to
* @param {Object} edge Edge between from and to
*/
getPositions : function(from, to, edge){
-
+
// Get absolute bounds
var ab = from.absoluteBounds();
var bb = to.absoluteBounds();
-
+
// Get center from and to
var a = ab.center();
var b = bb.center();
-
+
var am = ab.midPoint();
var bm = bb.midPoint();
-
+
// Get first and last reference point
var first = Object.clone(edge.dockers.first().referencePoint);
var last = Object.clone(edge.dockers.last().referencePoint);
// Get the absolute one
var aFirst = edge.dockers.first().getAbsoluteReferencePoint();
- var aLast = edge.dockers.last().getAbsoluteReferencePoint();
-
+ var aLast = edge.dockers.last().getAbsoluteReferencePoint();
+
// IF ------>
// or |
// V
@@ -22904,26 +22904,26 @@ new function(){
if (Math.abs(aFirst.x-aLast.x) < 1 || Math.abs(aFirst.y-aLast.y) < 1) {
return []
}
-
+
// Calc center position, between a and b
// depending on there weight
var m = {}
- m.x = a.x < b.x ?
- (((b.x - bb.width()/2) - (a.x + ab.width()/2))/2) + (a.x + ab.width()/2):
+ m.x = a.x < b.x ?
+ (((b.x - bb.width()/2) - (a.x + ab.width()/2))/2) + (a.x + ab.width()/2):
(((a.x - ab.width()/2) - (b.x + bb.width()/2))/2) + (b.x + bb.width()/2);
- m.y = a.y < b.y ?
- (((b.y - bb.height()/2) - (a.y + ab.height()/2))/2) + (a.y + ab.height()/2):
+ m.y = a.y < b.y ?
+ (((b.y - bb.height()/2) - (a.y + ab.height()/2))/2) + (a.y + ab.height()/2):
(((a.y - ab.height()/2) - (b.y + bb.height()/2))/2) + (b.y + bb.height()/2);
-
-
+
+
// Enlarge both bounds with 10
- ab.widen(5); // Wide the from less than
+ ab.widen(5); // Wide the from less than
bb.widen(20);// the to because of the arrow from the edge
-
+
var positions = [];
var off = this.getOffset.bind(this);
-
+
// Checks ----+
// |
// V
@@ -22933,8 +22933,8 @@ new function(){
z : this.getWeight(from, a.x < b.x ? "r" : "l", to, a.y < b.y ? "t" : "b", edge)
});
}
-
- // Checks |
+
+ // Checks |
// +--->
if (!ab.isIncluded(a.x, b.y)&&!bb.isIncluded(a.x, b.y)) {
positions.push({
@@ -22942,7 +22942,7 @@ new function(){
z : this.getWeight(from, a.y < b.y ? "b" : "t", to, a.x < b.x ? "l" : "r", edge)
});
}
-
+
// Checks --+
// |
// +--->
@@ -22953,8 +22953,8 @@ new function(){
z : this.getWeight(from, "r", to, "l", edge, a.x > b.x)
});
}
-
- // Checks |
+
+ // Checks |
// +---+
// |
// V
@@ -22964,15 +22964,15 @@ new function(){
b : {x:b.x+off(last,bm,"x"),y:m.y},
z : this.getWeight(from, "b", to, "t", edge, a.y > b.y)
});
- }
-
+ }
+
// Sort DESC of weights
return positions.sort(function(a,b){ return a.z < b.z ? 1 : (a.z == b.z ? -1 : -1)});
},
-
+
/**
* Returns a offset for the pos to the center of the bounds
- *
+ *
* @param {Object} val
* @param {Object} pos2
* @param {String} dir Direction x|y
@@ -22980,10 +22980,10 @@ new function(){
getOffset: function(pos, pos2, dir){
return pos[dir] - pos2[dir];
},
-
+
/**
* Returns a value which shows the weight for this configuration
- *
+ *
* @param {Object} from Shape which is coming from
* @param {String} d1 Direction where is goes
* @param {Object} to Shape which goes to
@@ -22992,21 +22992,21 @@ new function(){
* @param {Boolean} reverse Reverse the direction (e.g. "r" -> "l")
*/
getWeight: function(from, d1, to, d2, edge, reverse){
-
+
d1 = (d1||"").toLowerCase();
d2 = (d2||"").toLowerCase();
-
+
if (!["t","r","b","l"].include(d1)){ d1 = "r"}
if (!["t","r","b","l"].include(d2)){ d1 = "l"}
-
+
// If reverse is set
if (reverse) {
// Reverse d1 and d2
d1 = d1=="t"?"b":(d1=="r"?"l":(d1=="b"?"t":(d1=="l"?"r":"r")))
d2 = d2=="t"?"b":(d2=="r"?"l":(d2=="b"?"t":(d2=="l"?"r":"r")))
}
-
-
+
+
var weight = 0;
// Get rules for from "out" and to "in"
var dr1 = this.facade.getRules().getLayoutingRules(from, edge)["out"];
@@ -23036,7 +23036,7 @@ new function(){
var sameIncomingFrom = from
.getIncomingShapes()
.findAll(function(a){ return a instanceof ORYX.Core.Edge})
- .any(function(e){
+ .any(function(e){
return sameDirection(d1, e.dockers[e.dockers.length-2].bounds.center(), e.dockers.last().bounds.center());
});
@@ -23044,20 +23044,20 @@ new function(){
var sameOutgoingTo = to
.getOutgoingShapes()
.findAll(function(a){ return a instanceof ORYX.Core.Edge})
- .any(function(e){
+ .any(function(e){
return sameDirection(d2, e.dockers[1].bounds.center(), e.dockers.first().bounds.center());
});
-
+
// If there are equivalent edges, set 0
//fromWeight = sameIncomingFrom ? 0 : fromWeight;
//toWeight = sameOutgoingTo ? 0 : toWeight;
-
- // Get the sum of "out" and the direction plus "in" and the direction
+
+ // Get the sum of "out" and the direction plus "in" and the direction
return (sameIncomingFrom||sameOutgoingTo?0:fromWeight+toWeight);
},
-
+
/**
- * Removes all current dockers from the node
+ * Removes all current dockers from the node
* (except the start and end) and adds two new
* dockers, on the position a and b.
* @param {Object} edge
@@ -23066,33 +23066,33 @@ new function(){
*/
setDockers: function(edge, a, b){
if (!edge){ return }
-
+
// Remove all dockers (implicit,
// start and end dockers will not removed)
edge.dockers.each(function(r){
edge.removeDocker(r);
});
-
+
// For a and b (if exists), create
// a new docker and set position
[a, b].compact().each(function(pos){
var docker = edge.createDocker(undefined, pos);
docker.bounds.centerMoveTo(pos);
});
-
+
// Update all dockers from the edge
edge.dockers.each(function(docker){
docker.update()
})
-
+
// Update edge
//edge.refresh();
edge._update(true);
-
+
}
});
-
-
+
+
}()
/*
* Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
@@ -23108,28 +23108,28 @@ if(!ORYX.Plugins)
ORYX.Plugins = new Object();
new function(){
-
+
ORYX.Plugins.BPMN2_0 = {
-
+
/**
* Constructor
* @param {Object} Facade: The Facade of the Editor
*/
construct: function(facade){
this.facade = facade;
-
+
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_DRAGDOCKER_DOCKED, this.handleDockerDocked.bind(this));
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_PROPWINDOW_PROP_CHANGED, this.handlePropertyChanged.bind(this));
this.facade.registerOnEvent('layout.bpmn2_0.pool', this.handleLayoutPool.bind(this));
this.facade.registerOnEvent('layout.bpmn2_0.subprocess', this.handleSubProcess.bind(this));
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_SHAPEREMOVED, this.handleShapeRemove.bind(this));
-
+
this.facade.registerOnEvent(ORYX.CONFIG.EVENT_LOADED, this.afterLoad.bind(this));
-
+
this.namespace = undefined;
},
-
+
/**
* Force to update every pool
*/
@@ -23142,14 +23142,14 @@ new function(){
}
}.bind(this))
},
-
+
/**
* If a pool is selected and contains no lane,
* a lane is created automagically
*/
onSelectionChanged: function(event) {
var selection = event.elements;
-
+
if(selection && selection.length === 1) {
var namespace = this.getNamespace();
var shape = selection[0];
@@ -23168,19 +23168,19 @@ new function(){
}
}
}
-
+
// Preventing selection of all lanes but not the pool
if(selection.any(function(s){ return s instanceof ORYX.Core.Node && s.getStencil().id().endsWith("Lane")})){
var lanes = selection.findAll(function(s){
return s instanceof ORYX.Core.Node && s.getStencil().id().endsWith("Lane")
});
-
+
var pools = [];
var unselectLanes = [];
lanes.each(function(lane){
pools.push(this.getParentPool(lane))
}.bind(this));
-
+
pools = pools.uniq().findAll(function(pool){
var childLanes = this.getLanes(pool, true);
if (childLanes.all(function(lane){ return lanes.include(lane)})){
@@ -23193,7 +23193,7 @@ new function(){
return false;
}
}.bind(this))
-
+
if (unselectLanes.length > 0 && pools.length > 0){
selection = selection.without.apply(selection, unselectLanes);
selection = selection.concat(pools);
@@ -23201,34 +23201,34 @@ new function(){
}
}
},
-
+
handleShapeRemove: function(option) {
-
+
var sh = option.shape;
var parent = option.parent;
-
+
if (sh instanceof ORYX.Core.Node && sh.getStencil().idWithoutNs() === "Lane" && this.facade.isExecutingCommands()) {
-
+
var pool = this.getParentPool(parent);
- if (pool&&pool.parent){
-
+ if (pool&&pool.parent){
+
var isLeafFn = function(leaf){
return !leaf.getChildNodes().any(function(r){ return r.getStencil().idWithoutNs() === "Lane"});
}
-
+
var isLeaf = isLeafFn(sh);
var parentHasMoreLanes = parent.getChildNodes().any(function(r){ return r.getStencil().idWithoutNs() === "Lane"});
-
+
if (isLeaf && parentHasMoreLanes){
-
+
var command = new ResizeLanesCommand(sh, parent, pool, this);
this.facade.executeCommands([command]);
-
+
} else if( !isLeaf &&
!this.facade.getSelection().any(function(select){ // Find one of the selection, which is a lane and child of "sh" and is a leaf lane
return select instanceof ORYX.Core.Node && select.getStencil().idWithoutNs() === "Lane" &&
select.isParent(sh) && isLeafFn(select);})) {
-
+
var Command = ORYX.Core.Command.extend({
construct: function(shape, facade) {
this.children = shape.getChildNodes(true);
@@ -23248,19 +23248,19 @@ new function(){
}
});
this.facade.executeCommands([new Command(sh, this.facade)]);
-
+
} else if (isLeaf&&!parentHasMoreLanes&&parent == pool){
parent.add(sh);
}
}
-
+
}
-
+
},
-
+
hashedSubProcesses: {},
-
+
hashChildShapes: function(shape){
var children = shape.getChildNodes();
children.each(function(child){
@@ -23272,49 +23272,49 @@ new function(){
}
}.bind(this));
},
-
+
/**
* Handle the layouting of a sub process.
- * Mainly to adjust the child dockers of a sub process.
+ * Mainly to adjust the child dockers of a sub process.
*
*/
handleSubProcess : function(option) {
-
+
var sh = option.shape;
-
+
if (!this.hashedSubProcesses[sh.id]) {
this.hashedSubProcesses[sh.id] = sh.absoluteXY();
this.hashedSubProcesses[sh.id].width = sh.bounds.width();
this.hashedSubProcesses[sh.id].height = sh.bounds.height();
return;
}
-
+
var offset = sh.absoluteXY();
offset.x -= this.hashedSubProcesses[sh.id].x;
offset.y -= this.hashedSubProcesses[sh.id].y;
-
+
var resized = this.hashedSubProcesses[sh.id].width !== sh.bounds.width() || this.hashedSubProcesses[sh.id].height !== sh.bounds.height();
-
+
this.hashedSubProcesses[sh.id] = sh.absoluteXY();
this.hashedSubProcesses[sh.id].width = sh.bounds.width();
this.hashedSubProcesses[sh.id].height = sh.bounds.height();
this.hashChildShapes(sh);
-
-
+
+
// Move dockers only if currently is not resizing
if (this.facade.isExecutingCommands()&&!resized) {
this.moveChildDockers(sh, offset);
}
},
-
+
moveChildDockers: function(shape, offset){
-
+
if (!offset.x && !offset.y) {
return;
- }
-
+ }
+
var children = shape.getChildNodes(true);
-
+
// Get all nodes
var dockers = children
// Get all incoming and outgoing edges
@@ -23328,38 +23328,38 @@ new function(){
.uniq()
// Get all dockers
.map(function(edge){
- return edge.dockers.length > 2 ?
- edge.dockers.slice(1, edge.dockers.length-1) :
+ return edge.dockers.length > 2 ?
+ edge.dockers.slice(1, edge.dockers.length-1) :
[];
})
// Flatten the dockers lists
.flatten();
-
+
var abs = shape.absoluteBounds();
abs.moveBy(-offset.x, -offset.y)
var obj = {};
dockers.each(function(docker){
-
+
if (docker.isChanged){
return;
}
-
+
var off = Object.clone(offset);
-
+
if (!abs.isIncluded(docker.bounds.center())){
var index = docker.parent.dockers.indexOf(docker);
var size = docker.parent.dockers.length;
var from = docker.parent.getSource();
var to = docker.parent.getTarget();
-
+
var bothAreIncluded = children.include(from) && children.include(to);
-
+
if (!bothAreIncluded){
var previousIsOver = index !== 0 ? abs.isIncluded(docker.parent.dockers[index-1].bounds.center()) : false;
var nextIsOver = index !== size-1 ? abs.isIncluded(docker.parent.dockers[index+1].bounds.center()) : false;
-
+
if (!previousIsOver && !nextIsOver){ return; }
-
+
var ref = docker.parent.dockers[previousIsOver ? index-1 : index+1];
if (Math.abs(-Math.abs(ref.bounds.center().x-docker.bounds.center().x)) < 2){
off.y = 0;
@@ -23369,151 +23369,151 @@ new function(){
return;
}
}
-
+
}
-
+
obj[docker.getId()] = {
docker:docker,
offset:off
}
})
-
+
// Set dockers
this.facade.executeCommands([new ORYX.Core.MoveDockersCommand(obj)]);
-
+
},
-
+
/**
* DragDocker.Docked Handler
*
- */
+ */
handleDockerDocked: function(options) {
var namespace = this.getNamespace();
-
+
var edge = options.parent;
var edgeSource = options.target;
-
+
if(edge.getStencil().id() === namespace + "SequenceFlow") {
var isGateway = edgeSource.getStencil().groups().find(function(group) {
- if(group == "Gateways")
+ if(group == "Gateways")
return group;
});
if(!isGateway && (edge.properties["oryx-conditiontype"] == "Expression"))
// show diamond on edge source
edge.setProperty("oryx-showdiamondmarker", true);
- else
+ else
// do not show diamond on edge source
edge.setProperty("oryx-showdiamondmarker", false);
-
+
// update edge rendering
//edge.update();
-
+
this.facade.getCanvas().update();
}
},
-
+
/**
* PropertyWindow.PropertyChanged Handler
*/
handlePropertyChanged: function(option) {
var namespace = this.getNamespace();
-
+
var shapes = option.elements;
var propertyKey = option.key;
var propertyValue = option.value;
-
+
var changed = false;
shapes.each(function(shape){
if((shape.getStencil().id() === namespace + "SequenceFlow") &&
(propertyKey === "oryx-conditiontype")) {
-
+
if(propertyValue != "Expression")
// Do not show the Diamond
shape.setProperty("oryx-showdiamondmarker", false);
else {
var incomingShapes = shape.getIncomingShapes();
-
+
if(!incomingShapes) {
shape.setProperty("oryx-showdiamondmarker", true);
}
-
+
var incomingGateway = incomingShapes.find(function(aShape) {
var foundGateway = aShape.getStencil().groups().find(function(group) {
- if(group == "Gateways")
+ if(group == "Gateways")
return group;
});
if(foundGateway)
return foundGateway;
});
-
- if(!incomingGateway)
+
+ if(!incomingGateway)
// show diamond on edge source
shape.setProperty("oryx-showdiamondmarker", true);
else
// do not show diamond
shape.setProperty("oryx-showdiamondmarker", false);
}
-
+
changed = true;
}
}.bind(this));
-
+
if(changed) {this.facade.getCanvas().update();}
-
+
},
-
+
hashedPoolPositions : {},
hashedLaneDepth : {},
hashedBounds : {},
hashedPositions: {},
-
+
/**
* Handler for layouting event 'layout.bpmn2_0.pool'
* @param {Object} event
*/
handleLayoutPool: function(event){
-
-
+
+
var pool = event.shape;
var selection = this.facade.getSelection();
var currentShape = selection.include(pool) ? pool : selection.first();
-
+
currentShape = currentShape || pool;
-
+
this.currentPool = pool;
-
+
// Check if it is a pool or a lane
if (!(currentShape.getStencil().id().endsWith("Pool") || currentShape.getStencil().id().endsWith("Lane"))) {
return;
}
-
+
// Check if the lane is within the pool and is not removed lately
if (currentShape !== pool && !currentShape.isParent(pool) && !this.hashedBounds[pool.id][currentShape.id]){
return;
}
-
-
+
+
if (!this.hashedBounds[pool.id]) {
this.hashedBounds[pool.id] = {};
}
-
+
// Find all child lanes
var lanes = this.getLanes(pool);
-
+
if (lanes.length <= 0) {
return
}
-
+
var allLanes = this.getLanes(pool, true), hp;
var considerForDockers = allLanes.clone();
-
+
var hashedPositions = $H({});
allLanes.each(function(lane){
hashedPositions[lane.id] = lane.bounds.upperLeft();
})
-
-
-
+
+
+
// Show/hide caption regarding the number of lanes
if (lanes.length === 1 && this.getLanes(lanes.first()).length <= 0) {
// TRUE if there is a caption
@@ -23527,10 +23527,10 @@ new function(){
rect[0].removeAttributeNS(null, "display");
})
}
-
+
var deletedLanes = [];
var addedLanes = [];
-
+
// Get all new lanes
var i=-1;
while (++i 0){
currentShape = addedLanes.first();
}
-
-
+
+
// Get all deleted lanes
var resourceIds = $H(this.hashedBounds[pool.id]).keys();
var i=-1;
@@ -23552,12 +23552,12 @@ new function(){
deletedLanes.push(this.hashedBounds[pool.id][resourceIds[i]]);
selection = selection.without(function(r){ return r.id == resourceIds[i] });
}
- }
-
+ }
+
var height, width, x, y;
-
+
if (deletedLanes.length > 0 || addedLanes.length > 0) {
-
+
if (addedLanes.length === 1 && this.getLanes(addedLanes[0].parent).length === 1){
// Set height from the pool
height = this.adjustHeight(lanes, addedLanes[0].parent);
@@ -23566,16 +23566,16 @@ new function(){
height = this.updateHeight(pool);
}
// Set width from the pool
- width = this.adjustWidth(lanes, pool.bounds.width());
-
+ width = this.adjustWidth(lanes, pool.bounds.width());
+
pool.update();
}
-
+
/**
* Set width/height depending on the pool
*/
else if (pool == currentShape) {
-
+
if (selection.length === 1 && this.isResized(pool, this.hashedPoolPositions[pool.id])) {
var oldXY = this.hashedPoolPositions[pool.id].upperLeft();
var xy = pool.bounds.upperLeft();
@@ -23584,34 +23584,34 @@ new function(){
var old = this.hashedPoolPositions[pool.id];
scale = old.height()/pool.bounds.height();
}
-
+
this.adjustLanes(pool, allLanes, oldXY.x - xy.x, oldXY.y - xy.y, scale);
}
-
+
// Set height from the pool
height = this.adjustHeight(lanes, undefined, pool.bounds.height());
// Set width from the pool
- width = this.adjustWidth(lanes, pool.bounds.width());
+ width = this.adjustWidth(lanes, pool.bounds.width());
}
-
+
/**???
* Set width/height depending on containing lanes
- */
+ */
else {
-
+
// Reposition the pool if one shape is selected and the upperleft has changed
if (selection.length === 1 && this.isResized(currentShape, this.hashedBounds[pool.id][currentShape.id])){
var oldXY = this.hashedBounds[pool.id][currentShape.id].upperLeft();
var xy = currentShape.absoluteXY();
x = oldXY.x - xy.x;
y = oldXY.y - xy.y;
-
+
// Adjust all other lanes beneath this lane
if (x||y){
considerForDockers = considerForDockers.without(currentShape);
this.adjustLanes(pool, this.getAllExcludedLanes(pool, currentShape), x, 0);
}
-
+
// Adjust all child lanes
var childLanes = this.getLanes(currentShape, true);
if (childLanes.length > 0){
@@ -23624,34 +23624,34 @@ new function(){
}
}
}
-
+
// Cache all bounds
var changes = allLanes.map(function(lane){ return {
shape: lane,
bounds: lane.bounds.clone()
} });
-
+
// Get height and adjust child heights
height = this.adjustHeight(lanes, currentShape);
// Check if something has changed and maybe create a command
this.checkForChanges(allLanes, changes);
-
+
// Set width from the current shape
width = this.adjustWidth(lanes, currentShape.bounds.width()+(this.getDepth(currentShape,pool)*30));
}
-
+
this.setDimensions(pool, width, height, x, y);
-
-
+
+
if (this.facade.isExecutingCommands() && (deletedLanes.length === 0 || addedLanes.length !== 0)){
// Update all dockers
this.updateDockers(considerForDockers, pool);
-
+
// Check if the order has changed
if (this.hashedPositions[pool.id] && this.hashedPositions[pool.id].keys().any(function(key, i){
return (allLanes[i]||{}).id !== key;
})){
-
+
var LanesHasBeenReordered = ORYX.Core.Command.extend({
construct: function(originPosition, newPosition, lanes, plugin, poolId) {
this.originPosition = Object.clone(originPosition);
@@ -23678,46 +23678,46 @@ new function(){
this.plugin.hashedPositions[this.pool] = Object.clone(this.originPosition);
}
});
-
+
var hp2 = $H({});
allLanes.each(function(lane){
hp2[lane.id] = lane.bounds.upperLeft();
})
-
+
var command = new LanesHasBeenReordered(hashedPositions, hp2, allLanes, this, pool.id);
this.facade.executeCommands([command]);
-
+
}
}
-
+
this.hashedBounds[pool.id] = {};
this.hashedPositions[pool.id] = hashedPositions;
-
+
var i=-1;
while (++i < allLanes.length) {
// Cache positions
this.hashedBounds[pool.id][allLanes[i].id] = allLanes[i].absoluteBounds();
-
+
// Cache also the bounds of child shapes, mainly for child subprocesses
this.hashChildShapes(allLanes[i]);
-
+
this.hashedLaneDepth[allLanes[i].id] = this.getDepth(allLanes[i], pool);
-
+
this.forceToUpdateLane(allLanes[i]);
}
-
+
this.hashedPoolPositions[pool.id] = pool.bounds.clone();
-
-
+
+
// Update selection
- //this.facade.setSelection(selection);
+ //this.facade.setSelection(selection);
},
-
+
shouldScale: function(element){
var childLanes = element.getChildNodes().findAll(function(shape){ return shape.getStencil().id().endsWith("Lane") })
return childLanes.length > 1 || childLanes.any(function(lane){ return this.shouldScale(lane) }.bind(this))
},
-
+
/**
* Lookup if some bounds has changed
* @param {Object} lanes
@@ -23728,7 +23728,7 @@ new function(){
if (this.facade.isExecutingCommands() && changes.any(function(change){
return change.shape.bounds.toString() !== change.bounds.toString();
})){
-
+
var Command = ORYX.Core.Command.extend({
construct: function(changes) {
this.oldState = changes;
@@ -23749,25 +23749,25 @@ new function(){
})
}
});
-
+
this.facade.executeCommands([new Command(changes)]);
}
},
-
+
isResized: function(shape, bounds){
-
+
if (!bounds||!shape){
return false;
}
-
+
var oldB = bounds;
//var oldXY = oldB.upperLeft();
//var xy = shape.absoluteXY();
return Math.round(oldB.width() - shape.bounds.width()) !== 0 || Math.round(oldB.height() - shape.bounds.height()) !== 0
},
-
+
adjustLanes: function(pool, lanes, x, y, scale){
-
+
scale = scale || 0;
// For every lane, adjust the child nodes with the offset
@@ -23776,11 +23776,11 @@ new function(){
if (!child.getStencil().id().endsWith("Lane")){
var cy = scale ? child.bounds.center().y - (child.bounds.center().y/scale) : -y;
child.bounds.moveBy((x||0), -cy);
-
+
if (scale&&child.getStencil().id().endsWith("Subprocess")) {
this.moveChildDockers(child, {x:(0), y:-cy});
}
-
+
}
}.bind(this));
this.hashedBounds[pool.id][l.id].moveBy(-(x||0), !scale?-y:0);
@@ -23788,9 +23788,9 @@ new function(){
l.isScaled = true;
}
}.bind(this))
-
+
},
-
+
getAllExcludedLanes: function(parent, lane){
var lanes = [];
parent.getChildNodes().each(function(shape){
@@ -23801,19 +23801,19 @@ new function(){
}.bind(this));
return lanes;
},
-
-
+
+
forceToUpdateLane: function(lane){
-
- if (lane.bounds.height() !== lane._svgShapes[0].height) {
+
+ if (lane.bounds.height() !== lane._svgShapes[0].height) {
lane.isChanged = true;
lane.isResized = true;
lane._update();
}
},
-
+
getDepth: function(child, parent){
-
+
var i=0;
while(child && child.parent && child !== parent){
child = child.parent;
@@ -23821,21 +23821,21 @@ new function(){
}
return i;
},
-
+
updateDepth: function(lane, fromDepth, toDepth){
-
+
var xOffset = (fromDepth - toDepth) * 30;
-
+
lane.getChildNodes().each(function(shape){
shape.bounds.moveBy(xOffset, 0);
-
+
[].concat(children[j].getIncomingShapes())
.concat(children[j].getOutgoingShapes())
-
+
})
-
+
},
-
+
setDimensions: function(shape, width, height, x, y){
var isLane = shape.getStencil().id().endsWith("Lane");
// Set the bounds
@@ -23848,47 +23848,47 @@ new function(){
},
setLanePosition: function(shape, y){
-
+
shape.bounds.moveTo(30, y);
-
+
},
-
+
adjustWidth: function(lanes, width) {
-
+
// Set width to each lane
(lanes||[]).each(function(lane){
this.setDimensions(lane, width);
this.adjustWidth(this.getLanes(lane), width-30);
}.bind(this));
-
+
return width;
},
-
-
+
+
adjustHeight: function(lanes, changedLane, propagateHeight){
-
+
var oldHeight = 0;
if (!changedLane && propagateHeight){
var i=-1;
- while (++i buy ? 1: 0);
}
-
+
// Check if upper left and lower right is completely above/below
var above = auy < buy && aly < bly;
var below = auy > buy && aly > bly;
@@ -24185,15 +24185,15 @@ new function(){
// Check if a is below b including the old values
var slightlyBelowBottom = auy > buy && aly <= bly && oaly > obly;
var slightlyBelowTop = auy <= buy && aly > bly && oauy > obuy;
-
+
// Return -1 if a is above b, 1 if b is above a, or 0 otherwise
return (above || slightlyAboveBottom || slightlyAboveTop ? -1 : (below || slightlyBelowBottom || slightlyBelowTop ? 1 : 0))
}.bind(this));
-
+
// Return lanes
return lanes;
},
-
+
getNamespace: function() {
if(!this.namespace) {
var stencilsets = this.facade.getStencilSets();
@@ -24206,23 +24206,23 @@ new function(){
return this.namespace;
}
};
-
+
var ResizeLanesCommand = ORYX.Core.Command.extend({
construct: function(shape, parent, pool, plugin) {
-
+
this.facade = plugin.facade;
this.plugin = plugin;
this.shape = shape;
this.changes;
-
+
this.pool = pool;
-
+
this.parent = parent;
-
-
+
+
this.shapeChildren = [];
-
+
/*
* The Bounds have to be stored
* separate because they would
@@ -24245,7 +24245,7 @@ new function(){
}.bind(this));
this.shapeUpperLeft = this.shape.bounds.upperLeft();
-
+
// If there is no parent,
// correct the abs position with the parents abs.
/*if (!this.shape.parent) {
@@ -24256,16 +24256,16 @@ new function(){
this.parentHeight = this.parent.bounds.height();
},
-
+
getLeafLanes: function(lane){
var childLanes = this.plugin.getLanes(lane).map(function(child){
return this.getLeafLanes(child);
}.bind(this)).flatten();
return childLanes.length > 0 ? childLanes : [lane];
},
-
+
findNewLane: function(){
-
+
var lanes = this.plugin.getLanes(this.parent);
var leafLanes = this.getLeafLanes(this.parent);
@@ -24275,11 +24275,11 @@ new function(){
return aupl < bupl ? -1 : (aupl > bupl ? 1 : 0)
})*/
this.lane = leafLanes.find(function(l){ return l.bounds.upperLeft().y >= this.shapeUpperLeft.y }.bind(this)) || leafLanes.last();
- this.laneUpperLeft = this.lane.bounds.upperLeft();
+ this.laneUpperLeft = this.lane.bounds.upperLeft();
},
-
+
execute: function() {
-
+
if(this.changes) {
this.executeAgain();
return;
@@ -24290,87 +24290,87 @@ new function(){
* Shape into the lane that takes its
* place
*/
-
+
if (!this.lane){
this.findNewLane();
}
-
- if(this.lane) {
-
+
+ if(this.lane) {
+
var laUpL = this.laneUpperLeft;
var shUpL = this.shapeUpperLeft;
-
+
var depthChange = this.plugin.getDepth(this.lane, this.parent)-1;
-
+
this.changes = $H({});
-
+
// Selected lane is BELOW the removed lane
- if (laUpL.y >= shUpL.y) {
+ if (laUpL.y >= shUpL.y) {
this.lane.getChildShapes().each(function(childShape) {
-
+
/*
* Cache the changes for rollback
*/
if(!this.changes[childShape.getId()]) {
this.changes[childShape.getId()] = this.computeChanges(childShape, this.lane, this.lane, this.shape.bounds.height());
}
-
+
childShape.bounds.moveBy(0, this.shape.bounds.height());
}.bind(this));
-
+
this.plugin.hashChildShapes(this.lane);
-
+
this.shapeChildren.each(function(shapeChild) {
shapeChild.shape.bounds.set(shapeChild.bounds);
shapeChild.shape.bounds.moveBy((shUpL.x-30)-(depthChange*30), 0);
-
+
/*
* Cache the changes for rollback
*/
if(!this.changes[shapeChild.shape.getId()]) {
this.changes[shapeChild.shape.getId()] = this.computeChanges(shapeChild.shape, this.shape, this.lane, 0);
}
-
+
this.lane.add(shapeChild.shape);
-
- }.bind(this));
-
+
+ }.bind(this));
+
this.lane.bounds.moveBy(0, shUpL.y-laUpL.y);
-
- // Selected lane is ABOVE the removed lane
+
+ // Selected lane is ABOVE the removed lane
} else if(shUpL.y > laUpL.y){
-
+
this.shapeChildren.each(function(shapeChild) {
- shapeChild.shape.bounds.set(shapeChild.bounds);
- shapeChild.shape.bounds.moveBy((shUpL.x-30)-(depthChange*30), this.lane.bounds.height());
-
+ shapeChild.shape.bounds.set(shapeChild.bounds);
+ shapeChild.shape.bounds.moveBy((shUpL.x-30)-(depthChange*30), this.lane.bounds.height());
+
/*
* Cache the changes for rollback
*/
if(!this.changes[shapeChild.shape.getId()]) {
this.changes[shapeChild.shape.getId()] = this.computeChanges(shapeChild.shape, this.shape, this.lane, 0);
}
-
+
this.lane.add(shapeChild.shape);
-
+
}.bind(this));
}
-
-
-
+
+
+
}
-
+
/*
* Adjust the height of the lanes
*/
// Get the height values
- var oldHeight = this.lane.bounds.height();
+ var oldHeight = this.lane.bounds.height();
var newHeight = this.lane.length === 1 ? this.parentHeight : this.lane.bounds.height() + this.shape.bounds.height();
// Set height
this.setHeight(newHeight, oldHeight, this.parent, this.parentHeight, true);
-
+
// Cache all sibling lanes
//this.changes[this.shape.getId()] = this.computeChanges(this.shape, this.parent, this.parent, 0);
this.plugin.getLanes(this.parent).each(function(childLane){
@@ -24378,61 +24378,61 @@ new function(){
this.changes[childLane.getId()] = this.computeChanges(childLane, this.parent, this.parent, 0);
}
}.bind(this))
-
+
// Update
this.update();
},
-
+
setHeight: function(newHeight, oldHeight, parent, parentHeight, store){
-
+
// Set heigh of the lane
this.plugin.setDimensions(this.lane, this.lane.bounds.width(), newHeight);
this.plugin.hashedBounds[this.pool.id][this.lane.id] = this.lane.absoluteBounds();
-
+
// Adjust child lanes
this.plugin.adjustHeight(this.plugin.getLanes(parent), this.lane);
-
+
if (store === true){
// Store changes
- this.changes[this.shape.getId()] = this.computeChanges(this.shape, parent, parent, 0, oldHeight, newHeight);
+ this.changes[this.shape.getId()] = this.computeChanges(this.shape, parent, parent, 0, oldHeight, newHeight);
}
-
+
// Set parents height
this.plugin.setDimensions(parent, parent.bounds.width(), parentHeight);
-
+
if (parent !== this.pool){
this.plugin.setDimensions(this.pool, this.pool.bounds.width(), this.pool.bounds.height() + (newHeight-oldHeight));
}
},
-
+
update: function(){
-
+
// Hack to prevent the updating of the dockers
this.plugin.hashedBounds[this.pool.id]["REMOVED"] = true;
// Update
//this.facade.getCanvas().update();
},
-
+
rollback: function() {
-
+
var laUpL = this.laneUpperLeft;
var shUpL = this.shapeUpperLeft;
-
+
this.changes.each(function(pair) {
-
+
var parent = pair.value.oldParent;
var shape = pair.value.shape;
var parentHeight = pair.value.parentHeight;
var oldHeight = pair.value.oldHeight;
var newHeight = pair.value.newHeight;
-
+
// Move siblings
if (shape.getStencil().id().endsWith("Lane")){
- shape.bounds.moveTo(pair.value.oldPosition);
+ shape.bounds.moveTo(pair.value.oldPosition);
}
-
+
// If lane
- if(oldHeight) {
+ if(oldHeight) {
this.setHeight(oldHeight, newHeight, parent, parent.bounds.height() + (oldHeight - newHeight));
if (laUpL.y >= shUpL.y) {
this.lane.bounds.moveBy(0, this.shape.bounds.height()-1);
@@ -24440,30 +24440,30 @@ new function(){
} else {
parent.add(shape);
shape.bounds.moveTo(pair.value.oldPosition);
-
+
}
-
+
}.bind(this));
-
+
// Update
//this.update();
-
+
},
-
+
executeAgain: function() {
-
+
this.changes.each(function(pair) {
var parent = pair.value.newParent;
var shape = pair.value.shape;
var newHeight = pair.value.newHeight;
var oldHeight = pair.value.oldHeight;
-
+
// If lane
if(newHeight) {
var laUpL = this.laneUpperLeft.y;
var shUpL = this.shapeUpperLeft.y;
-
+
if (laUpL >= shUpL) {
this.lane.bounds.moveBy(0, shUpL - laUpL);
}
@@ -24472,22 +24472,22 @@ new function(){
parent.add(shape);
shape.bounds.moveTo(pair.value.newPosition);
}
-
+
}.bind(this));
-
+
// Update
this.update();
},
-
+
computeChanges: function(shape, oldParent, parent, yOffset, oldHeight, newHeight) {
-
+
oldParent = this.changes[shape.getId()] ? this.changes[shape.getId()].oldParent : oldParent;
var oldPosition = this.changes[shape.getId()] ? this.changes[shape.getId()].oldPosition : shape.bounds.upperLeft();
-
+
var sUl = shape.bounds.upperLeft();
-
+
var pos = {x: sUl.x, y: sUl.y + yOffset};
-
+
var changes = {
shape : shape,
parentHeight: oldParent.bounds.height(),
@@ -24498,13 +24498,13 @@ new function(){
newPosition : pos,
newHeight : newHeight
};
-
+
return changes;
}
-
+
});
-
+
ORYX.Plugins.BPMN2_0 = ORYX.Plugins.AbstractPlugin.extend(ORYX.Plugins.BPMN2_0);
-
-}()
\ No newline at end of file
+
+}()
\ No newline at end of file
diff --git a/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap.css b/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap.css
index 7f36651..4e3da79 100644
--- a/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap.css
+++ b/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap.css
@@ -5499,7 +5499,7 @@ button.close {
.carousel-control .glyphicon-chevron-left,
.carousel-control .glyphicon-chevron-right {
position: absolute;
- top: 50%;
+ top: 0%;
z-index: 5;
display: inline-block;
}
diff --git a/len-activiti/src/main/resources/static/modeler.html b/len-activiti/src/main/resources/static/modeler.html
index 9ae605c..a35a9d4 100644
--- a/len-activiti/src/main/resources/static/modeler.html
+++ b/len-activiti/src/main/resources/static/modeler.html
@@ -8,22 +8,22 @@
-
-
- Activiti Editor
-
-
-
+
+
+ Activiti Editor
+
+
+
-
-
+
+
-
-
+
+
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/len-sys/src/main/resources/plugin/login/demo2.png b/len-sys/src/main/resources/plugin/login/demo2.png
new file mode 100644
index 0000000000000000000000000000000000000000..675c74b3e0a682fbb07b281bc6331845a25be495
GIT binary patch
literal 687033
zcmbTcRa6{dvnblQyE}p4?(PuWZSX+`x1fW&ySqaO4#5*-fZ$Godq|J~VF(bM-2D6O
zeeQiY>pa|E{qRZoSGB&X>Q2znQpUlg!~_5UM^!~p4*<}@0RZVUI?}%t=)+100AMOO
zDJbZuDk#u*TK`t@gG|A9h^cUS$ZD&Z}#rgT;>SNzg@zK*<
zz&u_!0U>k7VWl%5rWYeAzDAd(t@3%YKOB)nWe=Gi|8RQP0c8{b;79?`P@h(rCxjLc
z01@z9=6+2$zW+DsqYkq%K%W8ZF%TYMA*Aa86Wj(9#J~hO(5l~VhY4f@fNMaoJOfaV
z1Dsu}N}~X4by-_vz*;4B9XgPL02Ht)zebe(1b_`A^f(b=!$5hXECV+(tQjHPq>En}
zF}xoI@Jj`y@7@B(?x8Gv3C5m2Bdnnj}5Kq}{58r-Y1@{H+GK>%RWIkS1{O9I3_
zISZ8jzu|k|UVR&OZIibqW5c({_|8zASHwu9a)hKYhYbLf_lrX>qB7}6hu`-P?T=h9
zu170hT;LuI(yuOeU;2^}kpXl7<=+3+tT8rlOzsAW8bKz`n;`Qs|$5yDyu8aNupBY(W#OD(d;I
zwYy)lUh2^_vOJ&r?GfY4cud%HD%;{W!8UVFlEh0;LXQrE=6FD_UWVeU$((P5Ct>`T
zbh*zMS^hXcW2`nzs|&4j+7%Z13jr|+7qsLD$cA2VB~xN$0Qe4q`~kNBkTrOpCd+{U
z%;r@e06^a{x%vBSGL12G08lKCU~iQ}!yY1Tgy9ws(e%N{5Uo)aWwBqwB=O}@zlT#}
zR*>h)Q5e9)*N{6~ktoXv3it6lhWJErj`j%6BThZZP{HJ-!{mLj7|3!H=tS19#N!EU
zQr8&f(8&r?kr}L21T({{=}+Q`bs0t{ys8oF|Fr#M{zAZyK3@y`p_p%4ErcOJtR$@)~zC
z^Sc)2E2eaQRV-B(l}#0{YW-^IC48r14d&Byx5=IF=pVux>GLwW)A7=^Gan~MzIPLg
zkH&w~z^Ht!SDj6$CIpfBfm~C@FJDkzuRB{;`W3xCUcAgy)ver5hetoIj!4kAkZHDv
zRAIWBt7>_n(8O$}7?_e#j+Ae#OfO>6FtYU(?3y!~L0tAIc+@A5V~mzJhnXeWQJbeaYe5Sp?j%
zwmrDmda>Hvt2vyxATA^>8LqY!=O+86&?b?Mz>R?on{%&o((}`e3t!I?*%Ho@8*w-B
zTVITi!XI@%#(doLo&PEQ#r8Dd1mkAv2KQupQTfL0y6T4P=f%p!BAp1YAi8img)5(^
zEqo^3_Shxgsb>)$z5kwI+VNw?XUD2V)hd=A=3j9R2SQLXY5PVGYMVyE9mtl8q_vF`
z|7P{)>e255Y_r)eh4vp8JHGhL%uH}@HLf*Io~4Q{7rT^N53KiXKBdIeC>4*YB?%{u
z=WgT%Pov~&=H52u8%Y}l7~L4HHma_epK_kMtr)xNP#G6t7l{{5cfD^aYWnO~&*
z>OR+voESS$IaGL;TnUlAQ%|2J%=615(|4;)taUF7oX+_{`Rn6S=a-wRqEAIzP3vx7
zw`ZhALmD16xr?YKEk>j+>3rnNR6FG-^CC0cz3UHGSh_~zo+aP-$Um_Q9yPdLd?d_U(fwh
zw?p6OtX=0_C0
zybce!_K#Y3O&X%#(M2)ZN&}TCmAY-+J!+Dfhb2Zie?+$>LKGexW3}J-jtO9B>v05R
zP-ONpUTGRBuIx0fmft4>dA`&tjw
zsd`aMH8lzxk;Z~K
zb=i~C?#elymxS`NMmaNF3}QR|*M
zKUF!cK6P)rH5qJC>vxu0UWkR`G*Mlq{GhUOQ`_;W2z0(lo$Z*Nnne<_7CJYZ>1y2k
zT_IfcC$J>UV%q4rsiAvdoq1zraN9rV3O9;|L}KS6`>d~%18VHjuM~3QzVs_{JB`wY
z>f_*H=ys2?zxHTpT2M_8+8?EhQ)eF!*R7Vp!4DX2dcrBRD&n3$io!iMip~rDJ3UR=
zafju846*FK3l2KaIj)!+*&3PMEePwrK|fUq;8+qL^ljv-ax0gr=)X8lt}3Ciq){H|
z{u_G1cVO!~E|g|mT3*5`b$S0iGV7q$uC}y9OGfHz!B)Vn##4cdg|0=vgTj2N44Ka_
zjc%*k$*Y~CGz)m2=QYEv%_dW~dXrSMlya!&^S(-pna3&QcKX~{vf1Za^HgH-;!D_r
zGi=#=^=_5hqAZ~QV(g5n+nsrvx`*lG&7I$$b25L-Um9B$foaf|r-6;{@-?US^KpgYKi8j
zLXG|goO(AL?LL2dRG$Yut--PGljaAT1M054E*k1u#K#%O>H6jZq%Pk*HO*~?T=ZOg
z+#T$$;<=5!dJGq1BKVh8Quru=eDpo+ef+JxAb^~m
zhYf^Y)y>)gq6e|I3wS#Tk^Gl{`Z*bZd_bBS;@bC$6@$!lD3X2Pf(f{|u@Q<69oxQl8;+y~G^=~G{;OOJy
zDbB;=@9)p;FTm~L<-o%yCML$i%g@8l&-D+2%R9i`#~RAz?#=i=6ci!ewq8!2K29F)
z^#7q~ZR6qVBgODf(*LD`o2RDc|0eA2{ojWAXEGkBwI>fBH!qKy+kf=>FKBNcJ;?tn
z#{Uu8+aSOb!lMWA_VD$x{dXSrjQ@lD&vyTJM*ji)Cylta*T3w+-P%>r!`9ag;_joW
zD8=w^huhA{PTbB$SVT*1ys#4Q8+oz+!Butl_OW)ih5Qe1r+>Wv8<+S0
ziYu<*1+n(=@G|i5aQz=I&~fze@$h!^@TC7&0sT95QF>NmCwDs!e{Z(`9Mk{OS`p&q
zt4hu8`TbBT!X{?p%1ke^Fb#9EX~Sk&4MVl5&p!Yj(p
z@Zb1$|9|br^G_(A|2WJ4$9eu|>7PgbXZXKE;oszc2NT5oUj%vm3zg|dYTthm2Gx3P48Zz;Ty$wzFjYy|u<&)Ah2~R4N)3JbfMTREk$7ffjm(+pXLxSUT
z*@UDLbE{NA_S}+6e6p%~U{6jlIU|Tqa(;DSOtzANO=fAmfz4Zbc7FGu#MHuCUTI}l
zXuP>|0Lb3Y(lt0Sx7x-t+$Stm%feO7)Daq;sblG;Y3?kfsAcK|6;{$=7m||P
z)3I_FeWNR=ph@+bDm8aJ
zmQt
z2~R2Jm3iYDmy8qgG-quQ`Zlnc2nV-2xJLWL2ZnOSP=rB2$VIv#b3hv*WTVJcE;CGslyKezCO7JQ`*$B=pRx
zAV=!g92^qz#`gZs&}3V$NFxV7XiRQeVV$6&hDUI^y17eSc4>O?J8}jVB?CKSM`%=f
zMR-yXr=((XewCR^U{Y?CzMYT0jkkb;x|L^WNN@+lBj=Gsk
zR9cyqr3W^}tAyN&xUBNX)RO4*ve?Xun2ge>)Z&=*(%7u>xXgcVMN(dMbVg}RdRbcW
z`>3?y$h4B^j51Lb-I&aOFcneh#Tlh_8Kw0ZC3O*L#YuTpQK^LqITeYy6|&k^I$+O~
zf_JHfH7p|1BFZ|pKH*f1oD3X-@mXcj=|wpetr4lE@!8dJSykS?@;d;gbEvAKoB?!W
ztAAd*=%kSACwYDH1n|l=nR0&uL2(Fm9Q|y9z7hsZMq;b9GIXnbaI`Ubj}ygur11w<
zt{;WIZB+C5b-SLgW*4jPDnZl|#nzC~=~Ppcsr+r)9^P^8M<4!A7pC)9FL$mAne|_H
zmT$4h6+$BhFM?J-l{!edjM^*bIn1w+9=>^#J2sAnmiF*~+MHCQCzYcaVp7NX>!RgP
zQI!!_%ec*Hfkvcqd%#ZL57ApRnWU%E=Y~7}vZ=w`iF|)=JHmqG`!LT&7Q&{Rn;G#`
zqv>D*x>cf6zN_W6zy@7+!Kr0aPSS>(Rp%5h&XxEaGrr)m(qQa?-L;ywEN
z`5AS0&u;!{4X`rbTIZXOHJ&|{mh8*dV$rW@X>NH$MeQCFIa;w-R#s*)GI~cV3H@ys
z80ctk@8J-!3LDS!#{8Qi-h*YP61j|wi$i-(%a@Z;rK|q)
zvwROK8HJk#$^0_5uF^fME8c;gUjL(>yRrrei5`3BWz@MTiBg!a{|WM{%2O2Hz|-4+
zpw=*U0l8Vuf^maQ4p-R%6qo(u5=5KxQ_xX(fO5zXe2JDbu`Fh+|GbG;k
z!9&!mAt-&GAxJNIQmNm`1w}UZn#H=bw8sO?Q;Wz#yszx8zT4TQj&E#i3=eM%pPikp
zuRlFK{brr}8(k_(ZL6tg4}t?z2Et-v4N
z-7{L+*&&Y*50z5v%l21SS9`N`+MavkCB?xo+o%gD+dEp<#^eG#eOp^-#+VV@(UL!8
zoB2CQF-%=dTt@t(q|B#2$w603t1HTboKg$Wr;nzf5k8S_u-5S8)>ga;?d;>$xo3TTLZ4Ye^RaunY%UL4#
zk$V>HuL8SouP?WszWIJRN^>zc;IXnS8j;MOZiF>(Sxp>F{O~^9GXzcKB#zo(c!*u;
zIFoIj>-Agm_}oZq
zM?jY`u8F-iU;8v@+9YiELm&q^qVaZD@c#ZWhP>
zQA1u^fQ;N#dZHfPAZh>F2{I8W6^v4XLwHf)NEWEKG#B#asAi3b2P%FvAXX%h0z!`>`KpkD}shueD|#No;k
z0MwZsd5>kQfMSg@5r8WZhg$(*L5RGsZaeopSOEVDc!)nby7xSb=+kv7Lu=n|2<0$u
ziwM%7zr)rag7}$JsCJ7p7>*5qz-yr$fGa(81
zJaB)B2FwyADwBjO=S9E{-gn~4gb;X|$6+=pC4W=>_us2PjA8CigRu|4?Y
zVdi~jFEY6_jg`0srARFSYcM8U=;EL@_+t#KxVvO9|V1TfnggmkFg~zo=15auRQ~fYjUF+<2^nJl?5#Nx?
zxl18gihJ1su)LWA?;)FYSHw7+-=UiR1v
zYNV6YW-g;Tl<3nxl}R>i03-%*UG*o)ms5nb{+Vt7-fK3NgV193;<94~
zi2{LPsNrvG0+Dx6{}6_LS=0U&czASjH0j!Z-QJ6aHlFw9u=(GOIr~#0HpYIbQDK;n
zdYz!uc6ChxH=KtPD5`N%DmNxr`}Yk2>AL`JxWhXUqc^LETDjaj+OxtXj~DU-KH#o?
zr(lmq`z#l9Zg@B4NK=e=YbidUMXdby#m0s1lhqYf6R34Jr8I4q4N%@QhOfGwQXa-h
zeWn=U4ufufuo~uBZ4%!TK?Asn&xWDfaUw~uRKRQn39*l3eC2K>7s0aK%bROg&_(jn
z-(3?IVK0DsdYU#ojSJ})B6vZ`oFdUZH6#{z`qn1zKpaluU)GO{mo`IyJy47P^ai-Q
zv>n|`#~_L>+u0BM#S6L(D#f0MvNsAsJ?5o!`CTKRg{)7Cyih`Tl1K&Yp>;?k-FiTq
zAYw8u0XB|+BpgJE1cO>1DbJ3#uixLVqx9|B@3!0H+3@V#120(AJA$&oHglx1KN(eFctQ^P{BSWTW>
z#31V)uq?T(>jbZKwwKbYq1dOwsx|J&>s;t;F7#xjJ@)C{hjJLIA6_;hOFP@|J*2A|
zB*^fg_Yc^bIL&&q@N@+98(
zf5QMzNlcjN(P1{}!*5Z>_3vpX*I~`STngG=Z4zhW#WXR03}_6iAk@W9_5Vw7_3@)`
z`XkNYw-b|z4p2j@;A*fQ=^6h#Xq@+$`rupqH*QCdf@6-O%w4t@lIez`3_6*Qzt9|D
zA#4wYO48mu?V}EHr(2~$BSJfWb$;7+^js>;ZZ#endaD*necQ)9ofqwRz=lDT&@{Y@
zIQn~GgN98xvRPx@He=r9&kAr4Vgtg4qQ>FVF$-h3jfWUSl{0
z+nXv>seZKF>+TP-a~j&ITs--Ps5yf4yzY0w+&PK}rfLgueZtsd-$v6AYF7j_2SR7B
zH%3QIKVlkj9-peuAL%|li=L(2uCey2&BYCQu;BVLelSluOsP$g0X0U{j5NO1dk@-P
z{pp=~T%=Kht5@f@&FS4JbA%GnCi*Af+7Q?E{-PYrOL{QW#8nPIAtlHM`l1OtOm-|V
z0&z$jdE0-mB1szow6++gm;QR}3wk}iz645Eaf6)c(NC-3pHgVu^QGILZf7J5Z@cHA
zTUZew`uqz-m`Q1B)o(=@H+av?rjhSi+$nTYEvan;OPGy2daokEsZ}N1g^q10n6v_~*Ryv0GAqAm
zm1MZymYCyWe=oqPSf9<;%E6V^%I@)1Yo{BA2y#*`!0{Y^*25rcv9Q2a+^*M#u5~)88%@u?Kn}wJ-1z
z7yX47AeA1RyO~lp8PA5BI*|81A%peyRDH%4o^t}J^M2=~pgA(nZ!NR$&n#rs
zEv}2T57CYPvgmTSw_!Ko^IsDNpv%D*&pmmq&xvuX^$DcF>_j@=U?XVp*@BL{n$MNC8T#5O%0?+5`)Mzr
z2+!ovSQmd#2lxtw9T}3Tq=QwTl*9sEwp?4sv=fH*`JjrtV?k)>K}|5(4n|jmd~8tS
z!fMFx=q7NJlDY`_=e)E4;!3&5h|x0)DnfG}gm8o*w-dB0QLxxic%D$<2qx^e{RAJ?
z&>ep~U*gvdQY|C9#Z0b;mw{eg*_a4eTo;=;5{9rrkLjD$R?Z)ejYkaUZR#jSa9m<7
z#gpwY6Cl-vq-#C-$+qpUuAqyGu&>Vj<#@-j%Zxh2^TI-XMQfRV{o$zzpyqU<0nQML
z-xulh=b%_USyi`{f3k1+S}#Oj=d4;oaW@^wJO^roY{CvN*#0!fH3h4O29+PD@Yov5
ziHW)`3IwY&y}m23c=e?#;$A=ysuSf41tGoAezW%VeH&!>bDmS~YR#T&BlzKFbuv&o
zOlrZuLuf#ZzuU9Rl{B@Dg!^OG1_71cRJ+6Uf`45^?|}-M%Ys6>wJJtnOane?d4jFZ
z-Ycv3#p^-*LVTZuyL%P4(Onkok&AnXLhiW<kI37|2z`Qt!xvslQez=P4^I
z2y?!M`kiA(lN0s`eIm(JyWZNEn4Fm0nw+5CxRH<4)=7{yLBtw+ykpj`T_67NAeqWM
z(tM7FMMQdxg1gyZ4LfKp_n>>V=CS)-oZtSZLzA1cp@;}`)(@;x{}_AcR_kk}=aA5^;6cNsUl#~t
zDURZ!3NQY_NgI)B|A=HlTId#wNk^;K>$KB`xzQwXpYSC?7V45QgxK0lmw>Na$+eHS
z8?oC{^A{&Id^sS{VW;qj0I;8yvY^=6-8E^-(S7fsx^B{H{N7pqv9l{PnDM?JA)F`z
zHo9_u7OBkqiQCt{F%Z@NZK$b{D49zKfAvT9nylss0RHiPwZN`fY3cE?LKrq6Qbfaa
z1iipn*5pFjH%I_WSsmfk>X~*lP!WF-u77S=U_<{aWgdeZ801TplAQ?f-WVrUkIG1+
z0Y{IhGfjaQuddgRyLX#gf1;ycip?+RfPCx(j2BlKc%v5-jtkse8<7bcF_2)k@)1o2
ze}2teN7+u4^Jw=9?+t_{5Oyqsaqyymh9|XYLelWRUuR0U`$eBco{k&cg3BCVb`V5+
zUUxd}>TP>>zFT%k-yIDR{-l`fmHvQgQ1R8>R%%3k{GqHXyv2>I=K_)q#1T5WA!8!E
zL&aimtjW?mE?1`hVVeKEkA?-Sq77HT$@L2-39n^jI!^l3%(ti;ZiF66^s_XfwJhY%
z`%~zn(E@q+RuxsSmD!Md7!I%-wulsUA(`VQo95g>OJ*$rou8@-u>u7RpP@_0<Ps~;QyL&0CEyqPR#XkD;gv_?@}TLL5X^VA9T*kcp|
z#R?Rtd5opRS11#|aW0uyxR*C&I@R4=$#v74^IC(5;Y!A!8<0tRi{ylw06AH}@4cex
z`1VZp#VO|Vs!=wbU*ySN`
zyJ%qR&T1L})&Hn}b|lSS-OVYPz;unqbQBJ&F*<)ip-9o2+gywuIEm}({GOV5sJWa(
zWprf;G&aq}=L<8kH|E}F%qST*3A29L;#^K*_wG$E^#(O=<773{R5KV92+
zJPb`q2EuA9lUY#aNZP*-CMDThebQ${%1w-RzRpG%CliT#dHHMl`tFUm*kJkflMBM#
zJBHDFw_ykPuD^k$>P4P>ui>8qjKRsH_b}`Dkw#OcMz9+%4yUgeOKh*v6OQu&l2+W0
z!jLG_s2wkFm0~&5-+(LWV?*b9%nmR!@J?qBjR06V&(D$F#e{kM@MTv8Y6xq>2hJ`607kBg_%v0##P$Q^$2yr?fp)I3wAdW#^Whl5rd3~w16>(q5p$q&
zB2ZN~_fN#EP<|98hcP~1M}Q*Fn&kKRe^n?B(@K>knXX{k$KEbHbFsp2jZr+E1ZVY&
zQ(@1Idb#W;YNikqd$ti%zT}hFVg_fCIoh&4L$4C}lN>J=u-qs6-l6OzX9~LS3s{u@
zwxS5HQl9A(k6om0HhNX_Hp@hlOLTKdqE$4b7bS#fyE69*Kbt6GOzDMcU=3A0p~ZeQ
z$#AHCirTYo)byf9Ao1ibwIj4mB7Km%^^_|4h@jtm{5pNa?0jRaq$X6o9uK5${c&V<9BS}wn~2S2FN4|ND3685Q4L69lBsmw7s`&fy;D}i
zN4~wPa3nKeM?8lV&V){!`*sy!fFHod7ga#mNNP1erJ<1j3H-Z>*NuGz!|CE4IAV4k
zw&PuJpJ(7!!M~3MD#lIgL(fMSbJ3Av=?-@N>9>Yr$~MN+G5y>33ku2^LMo!6+P$qM
zWTXg{R9IcU$8)9~I{S5OO^RtvI@vXejw_YQEL(O<{1U@gj;K}ST+5Efl}eOSEIG$Q
zX~PS4CFQTV$dh|t>)Mz6biG}p+=+s~Blh=erGWJdJiGK{pqew(PafAGe+jR)@SW_t=VM4b{E9>MwbI
z;3f^F0v`FQ+<~s5Ix7U&wkEh`;7O|9Opv#-)48L@yr<7RS%_0vb;yR
z`a5p~;=5}v?^#als&V&Aq0<>uS21Rbi}|kS(j5%U5VAd7P-QD|uXVC5L#q};29j-4
z6v_DT#NE=$%3j9ID{GmOANYh_E^$ICty6l^iHM$(rSH=$pStB63hrLI(ZEi%$hOvW
zSg?d>B(PABQ=9I>f?QiDX3JIpwDfCl6%sq>r#;G}sy$D{aDZ_nGcd?WTqytx(ZwKT
zn(J)KE+8G*il@YG%EX?%4i*VoAJ%GEb-$~W7frTAWboaoF~{+h^}C$
z)*4)NhZ`jV=fRzVHrRRYx~}^>Z`oUR3`6Dsa!JfHv1=T)V{}wJC|j=3;juogEBB|$
ziB`;PMKcq`xXeWG5R+iEx6S;k?L9(*p0zh3AZzj;$9i3*Ovndb4jlQT4p^VjTwfkq
z?D`$hhQx3n9UV(c#l@g!cWAye4g3^V?%C8e;xvQmYm)MY!)RG->1Hj^u7XVEVW%^u
zC}EHi_{)sep~Wvjh0q>-dM}>-ssE0;WmS>MF%EmG6
zgSu5tsAn=W>DTI?c9{~4v!8KnC;zn+2hJGet{D4|2vE0#CT|u2>R+P#q4=tCYC}y6
zrUpcu)RIT@U*R_yGbw=|@3pa}0dO*dn`_U{Dim-Mj4Wc!
zfH`7x6b7{BzioX=e%L%dUi%uwlFO&sLT(Alm)}^%?C8x?ud{=^1@*hz&2^tGhyZ&~
z$alKiF6V^L_f~}nrE2R}lN+`{SJ0gf3}|ot
zK^%UygzziqgcTmnzc)au39k1729Uv&)?5X?!JnPVV}jU#Dm8He@wdq+caQYs@|1dU
zx!Nc&T~0spnY1pQA@!6h>(iMuZBpMD^*<0k3SEQA@
z|7Pd3Wdh-Hn{p-0hcg{vvIhE_@oeIg+ICdQ<=E5QYd5;o#=m1x
zMtEA4%ChlMeHdb0Lx1Wzp+iD<*Vkkv^Xrd(hN!VGtT%RrjaDlp&P9kB-Nm>rO@7cx
zHj=A@Vhzc-L!o9m?wZM8&0y4K@AU+
zQRcjwBi-KCCN&fgdtT7y%j`O9ltl6ZPZeHz4MzRK#5YG0Ko)BJb4!%9
z{)7TJ@HesEF^ebdcP~Fa!$}gek@w~x4~(Yh&OZt0z3@bEW%Pc=EWB^4LeelsD`cl>
zRtq9{k9s*^Q108xU0@{Ev948ad=EixzdAYvC0NIR~#yq>qOrqQl*k
zbh1n%ji%)c&sfncmG%S+47{o8SyT(v`Fz}F`;&VCIWXEY?lVsLJp!JwKWmDuh5S)!
z_DiL0tQ9>$zy|h@&q!G0GjcPL;wV2c#qhtDr=79#mXH?{#SxdUBkycc@4r7mUzTPK
zZRU!{Bc*5^*|l|1?5!{~svW{qTUfbbV2Hp~4o8uqbGi`0>};`Ak_lq^_usmsN_#a8
zweFkUyc1@@0x@chq||uc2PI?U{DYs`CDtmuY{_%+MMML~9jC3dG*5M-B~evFv=LIM
zUy6|)wP|peF^p(A6%amf+;}zq`0-=?N5DSpU!AU(T3S+Km0#3vTGWrJoTb&MJAOEU
z?sJx}V=B)UHKLODFOj2KImiw{>m1!c;cSqqk;F!Y5NaXO;V5z}?i&zBbeDJWteQp-
zfp}ZSKJ}?E6rD!nj$955Ixlq
znJ#gP(XL@`nkKJbtR~qSHt45#agMGca@-W}NhIU>m
zIE
z>s6(--MEQcEm|4oJ^DO|!Te>ozBX7)Ssd(aTJZbdQ><7If%)Y1(EYwEzsvZHxG)!_
z1LIG*aa2<*|F9FTpR$O*F{L>ap7z&DS1yPJcO?AF;iqV-?08mCgu5@_UR=TO9yL@In1bu-@yCwZ#|DO9ir2AcXLWPSN^
zJ!zw`<{MobKEf%lkfuc1_pN`w`tzWxL#AkMbzvh!3tgQr@Z8yLKdvE$BLd8kM!QI`
zpQXuK&9m?9hbXr~sI#^QU#cN5r4W?fMxmm`c3zA!%4LdDjdEvT>o|l9_G~gx`W}~s
zF#|`9e5C694BEWOptxl*B2FSz8Ipa5C`2ENem1tGImGaxK>hXXQ0DLv8k-7q21IPHMByi!;^++J>vUp2nO|?G2r=ROYS-51wQA(9Q}r`CsV>&
z0XNxR-(UMU(Yp3X(%s!bT1ob$uY9)BDx6|`ZzZz=X7A6P#R^jLA?UhMwjQeQ?{z_d
zz9HvjgMS^%M*`2u(zZzE+mV5$1GA{cr?H9-(vwth9ya!p*1x%{-^2r)G(|?OQflZ(
zTCb1(ynEyivjz_D9mnQ9I&1qd!r25_^Msg?jv(W%%T9rY6~B8Ke$O|y?gpwxS4R$3
z4~o4VnrZ;vP$wc{bhO9?ePPs&(AJF|3zTYBsQEeaN*Ht}bV?3)!~<|cME~_@uigT|
z0y_gsi~xAq{+`Vm4R(8yfkGK9!<*zcdOVIBF41X18!i!-eVkh})tHooJI^^CJpw~r
z+H<0ZSBJyDBV8Cxns&rjo@59yk@qp|2>xkKZ$z!+1>d=nYC`v64ldMq@0i71QLDTn
zw0Ip`Roce1-v~q4^M5!}`gn4#o%K{BHgV^mCU-;SL}{t>74fKPZs2jan?tLW33Fu4
zO_;A*Hs#_g)~V-`7_huT-X4b&Hf(cuy`@eEVC!oa|B;Y+0Y
zUX%{~*GE&q&mj5{PKDYplcOO4^1f{EIO1;iZ@T-DMmRH+tEkbbV^uQ(qTWIj7<77u
z9iR2FmP+hREDCV`-T-T2rE?`MorgTg7GU+ru#^4A@rbTdN!m-BpXR$r
zW?}7hBibfaKZ_G(*T57n>Ktm>7C3hGG8e
zH7bIiD)8hUbyW2=6r7k+4NL@l?LZSdW+P#2M1AwA-c&SOA_o^nb@f^sQt+?Kva4Rd
z`VaGN9OkX{o%~grrYpZFV;E2wp1p%_e7r6`kpAVGmX&(fGkvmH~fRL<)pb^9gKy7%LUz@k!%
zDi3)iXXlh&(NsnTQQy4VQk_@yN5?s)0s)tJo*8zYwgZ0hHz+6F7#8~O
z(Q@Xop~_3JqN*zv_?~@^Dx&7tUCn<|Pkj}F48+Zd>_~y_aD`faS|gp)uWGuhj_3Vi
zUim>W5FIH`A9ePz{WDnlb3H_IIJ`>3Kkh@oj~LTBnZ&{f#Vcy*@b|GvA5iw}pQ=i*
zBtF4(z2~_BX}p8LK
zQW-fiGuq1v`&(i1G(k3gkVT{ex4ro58UaL@>>i&BvLM3fsA
zQ}^5Wy~Sj+@zuYb*ZR)!9#?qG0KGJca$AJ_NLE#EPQ~`xTpn@6Gv$a+O{`5M|LV&^
zxi6TMgV)EjM{%8`YoB%eUosBlq7+GGElXzD)lZ)@J+&Dy=nT6KK8q@2pntWD3&rE
z+F8E+NwkXBE(+p9MnrC(hHU2km1c|aGNkxW;w4T|AKBE-uCdG4?<>VhzsJMTgJ-nT
zSLm~bc#i?PG1{cb7;+688FE}s9mphjseGlf4u3(tdYb-WA|>mz>z8a0_=%bzg+NE)A4C>U*Y#NMxiCw;>bNR(iO%Z%v21
zBbU7QtA?ITOMW*^jxQ%6BNBhuQs1N#rtT{=CNGDIR4Ll8ECl+jC3PUZFW3a%4Wa{4
ztf;Saq|BKwB?|2KuE^m#D%}G6@7|AUu8Kh%^IJgT-Q=_&2v^}$wO7tq7EX98ZcL{u
zDCbM;y0lQt%moH4!C#X?3`i~eONsil4q2S?&^8B!tyZQ&K$jY(__@=f
z7`Jiaxq&@zvE8}c=D21`Pn`RP6JB%4n{mi5?wOl!p~LjYons^rY9{$-MB}$nLqvp)
zW)f`y=#^Iz7u)2|i5$K8+c+_S)MtHsC!2nA3>epdCjUMiuF#{-q~
zf$7dQrh_6nyk0nr3lQ+#mkq`cQcW*xQ377oqX^>
zAEahg@nZc1+*xm6VniI-r1>LpibAL%g7J4%1oMU#a|Otb9RB;Pu?&wi3AYO~GNQUy
z%o|apNeV4ke2gt#nC14jS61EpL2WF7$9bt`J%KuSeyGG`0Ufuo5>5Oo2q~mQH>T$h
zlcxo%i;n1twp!Az`dMV%#9
z9g%qCCQy1`C%NrvrF|tO>#iuWb7HS7*tX3M)QUn=PyOjgYA$;n-$QD-Wv2+LYrY
zdxeEjNP~VjYs}DKn?v|7_-AzrwtE{e%vx!zx`a;bzqojR%OGYQ5DC-$VA!`QD6aQ-
z2H|N8h$g--pWuE`doG8O>(ad=AboTA`Bct7T@FsxxR6vo!cPpn`s_NmOnJBIkrsoL
zwDcL%y1+x)o8ac&Tj&_a#0}UZLT9A2Fj?10NHj@$Ge46`Thq>^F-5&k%5zO}TF3L{
zkhG#D(C~X=lVfRqKrh|PWFP6~fr3KR>E)pZ>znIP_KbFdi<1!FtRs?7zbD4iTdm+$
zpJ+_KhRQ0Px}vesNbB7?@bQA%v=l+u@;u1iFz0N#`d0BiQB?nB>_C4k5>=H}Yzb3w
zx$R6gxGUmc80PiU6U9~F6FKiY$FX5KL0{XqfFzM%L>cO{)g(gKQ{Err!~xo{!Jd8e
z&?p9{Bv=|)|9-t{t_L-4uo*{V@OV71&+}5%|KkW1afIP8{3~KB-rIi->?}2Pi8Xt4
ziLBID>*?&sGEjV!J$gYW$kZWfS`(`GO<7MWw&uOeWT7-xWtLUu|?BigFr>PrJMFkKj;`&h_o~~
z=l0$Ap;r*f>lmgE{GxHmif)y-DFdn~Rj;~Jv`TI-%(p~qt<}}jYD?9xWl{`u+d0)^
zIn1Y)aVlzA+ENHs~F);dl$x2zgRwW+Qt9V!KRU4geZqg
zsU3SntcD&Feybb#t1DG9jlGERwG4rfZfE44vBSnwzXm=^vU;~0_L`qOH%hn#Mm3V}L9DkH2
zz26KulY&^H$$)RfJzjf$vKD>>!r=HW&U5*ndON3`FuHv$rCyKB5SB-
z5HsdoKr4H%+pSA1q>+I6;X1Du*OaIsD85n$ZpQ41WC1oZ<2Pr!lgu}Z^f1xQgFG{z
zgjns4WK@syjj!OgWAbYo&ZJKn`+LVadc<+PGzQ$RrHAH@yyIDpvvN_m8mL)FRP=9d
zS6w^TF`HN0Z~W9QSAJWPd%Y(v><43yJ+ke&D%oIig?N&itC}@TRTK3XkZ$v70Pn0<
ze)6hE#eKEs>z9kn1~KKNfAOEoagzGEy#Ji~2@n-$disR8cZdTN$BUw%NL}FjM`d0G
zY9JqQQS@feB>mpM!RBgdJ+Amg-SFYpxR@Ss&Gb{r%Ez&Xjn(V1#L)i-e?Wl0{6mDx
z#9ql)=my~4xyjAS_)tYaByTW4yk;d^`30>tR-)B??${aw5XA04#$@iQ>w|O19af+5Tx9
zR?j<^eVL<00M@Z=1HYU+QZ0H~myfK@{&E_luEbXpklLkoyU46JWWMDn
zI+ghku6)-&hejNcG$c`B@ulTjyQ^N5W_i9u-*9BamNM6_7S1?&Iv>`csev9-4YYT`
ziX<@*ixhyv7$nG{LI;j#tUr6P^A{g{5UIm<@Y~mqG{DgDU~=F$_d1)w8peeDLLVXA
zX&W7QM&D6enWr*Yr
zZ`l#?LE2Mlv%>X(kD`LC(49lCw3jdY5QZs^l!aTQ=
zZMn8fsk*KAm`x`~jj}0(B?`w&N4
zs}4}%ewh>2Ek7qOC>BzlrbX6FrlS@eZ3@#$Iamk+EdHHnqGLX5F%d@o+VXE;rx9wL
z!>j>ud!izCU2=QZWvrtdYiS46yjYnQeXY!&sJ2>V(OSh~k|?O5kfh6*?gaN=1iHlUB
zn06dTgIkcwBB&h@%tRxm(mikiN$SR+jo^z59irT0D)19*|E1CNv~I`hGe~gG%1-l2JU~Od
z2+IWm+esuD{uJs1T`Y|IQKN*8R!OiJK?8uT1eyShst1m#u_*_@PbNbGJQHdF0sxja
z?0pZwk3I|BuigW|pZCJxSAJ9pfk})r?8s@j-yy|v?O@cQ1%e-U6r$M*zH5h*gb)*x
z@Ak-2y70ni9S$DS{K6s44W72LXz_~<#)4fLdIj)1X7-^g!hu&*6fL!AsYBx&EYm6)
zHd%1y5CEnmdhLhVwX3U0A=+TCA;TxwQJokPJia+1{P*&5laJ$Dmj-{w&4;a1hGNNf
z%myVfD@kXPj&^Mu*mK}M55b`(8Yx`Y*Xl=JfGW$T2TN=)(H8|9&dyPZWp5N%AoSh%s~T0TFP&69tk=v^n2HBzM#B*5p(I@aQJ}$
zd>%jV5lYb=q441VY$sltx2d_h09f4BNcvGt!Q2}Z2dK9Q0PhcL_<~%t6#8dfBSpVv
zC~&SY&}RU6>+)o7#N707D3ojljm4Q{C3@0&@{0`i!g~7c!RKn43(uJP??GQeMc21b
zL_=I+mJ-;@FO8qtxd?;9eb=Q_^7;OblVG)C>roN3Ifa%2?`-|c%y=XI@cj1yzzH>z
z{oV=^Vp@HcObiViG+S`uZ^ap3Rjdz?N>P|p4iic$u-eFUqY($a?x}-T#f#*#29v;M
zaXjklieor(R#@x;8$N_AJ2Vb4%pwW23u?Y(0C?2Ope2j&m?Pl79)KU+2Ed#QjUqk1f>#yYZ{;G@34q4IiwX~BIzn+x!(
z>jI6Uy(~+F(Zt?-PJ?$vr<$@2png_
z`QWTGhIUkf6>1e{ISLHIVcz#E62htp4%_>HV9H}w85#$o(r;57IIkKjOGR43P%RS(
zA-LJ>Wtx@f%*y+#0PuNK1r1qo2MnJJ^9ASqUif`RyWMVwAr>X(=P&DoO)I8$p5LCQ)5DaM>$wAzpRD>ko;f;IWaqR!QUgU1q0XZQu29v
z2k^@vF>k_=@r58x0-I~9@Bf*ZUwjyE_JYMF>{PFSE>sD0WY;8C$)(IF&fgXN8&1$n#%@2PJAKYkps;E({qw>Q&Y0`TX-
z(F1@5h4J?V${#&?`{?zf(4O*MIFl3>qZNM*_TCRw(Jw-~=%)c1KMk~5-m>GVuSAC+
zEV3-wh)(DUe8D=HfDm0{R(g!|v9+f^dSU`ALy1~{d`i!k$OM?l*S67J9P#lJ@
zikMVlIQV4qD8b<
zCofWxPP}JI>94_m9}7D<>=^*JJPOfQ`%UZE$l^hM7r&r9P;i
zGg@UfZ%}8c&xT|iX~WmPP~Rs$B>;Qt$@r}n93KI|w>e=&0l4XMb{qi1=!LohMC~x_
z4gfsN+KU~1vH4z#zgopfvJ06*XVD<=*6#S++NObELxSg}FQ~>y>;lV3sMX?7FDf-U
z31mPAY-+`ppl7ev=5;lhXXF}+XQxY-&}SYEh*-C;kZT|Om|i9SWfX8Ig9rf_(zopF
zzm63Xyr-Y{)eDqLQ}TcB#5$H5gR@SXI#02&+UB4tVPp
z3K9G*SaO3Sw-49=-nu#3B0ta4Z{;DWYPx<01O`v%fCh^d=OHYgcR^!OM%}9
zz+|fqfO{34dmg=Lu&SZosvb)@aM%fs0&pZW>G9(*wxNenmW@sdoGV>VSX#nQMeZ=u
z<-rtnai_HZ8baIzU2$;l){$fl{S!WG?ud
zZ1PLhM`%=VHlV)xh6yEI)q+;AOe9rgEUA*-PFHLS9LJN8J5DQh3S@>?CBtFWCK=KT
z2uX%W@zJQ)mc*ISbTJW$4G5~aAqt;&X|w)XV@SQcB`M$)Hwm%T$OOhtVR}rXYzVJ}
zsFMD!lLAvYj%Q_N9|3Q*S)2(Hbk+lR&!+RS42?FL@2xd|3;>@uZ|1-s0Km~v;81)U
zEdAX8oCz2(!U)NLYltGG=@RD9t?mD!wO)d$c||5*vK6nz%C_72yx4I-iG_{z8iLcT
zGo=!uN#{$sx7T4}&ypP7ur^j!Xu7uyd%cApW@R;*M*(^bHBfj#TQeR+0=Mf2e+B^e
zH?)c10C?THrDrq{>EU;m|2Tb=>FveQjQ^$p+;uSr!`R|DSvD7^j{Wv?2Q+LO0BJk>
zn{+yKhOwnmSzm}wab2pn4f6&0m3X&YP8<%T1TFoxm!SsBJ8{@~lEEXJ2Mho{wW6HO
zlcmj(6Uo*A0oEX%0D!dw?M+A{NeniUaxa(x{*3{+!d+IE65lN6*hh#-1wN=K6D%rQ20Y?<(ch6W!`
z1d)X-MMINiwnu0OpUuk2lE@@Of>jWW+2A#iMT7lPlQqY2A-ue%Eys0Gh|bG=aDm-mp}@JX+7vmIa>b$&
zVH^g3>-B6(K$ygsWAUYfq)jVSQI;JL)}RL4M9T(%9QZ_wG8%TT>53X!H(O!c
z4wDg=eqFYE129YQ=gr%}yu&>@BBzdba<6FlQbr9lLW&Vfr!h#)}3nbi6C)1UR
z)AjRG_O3Et9@JAML$mtm$FVg|+rqV3uFVq@E5|ESk#r>bQtm}u?DrIarRyaO*sL8t
zEUaD43IKxvFJO!jJ>Xs4Yn$8ns}kZER?T%^Rdu^BL3aXhyf&~gv$pdv-aFj!6SRRN
z&u>QZHo{Hi80nGyFfy@9Cf$3x%5kWf&tQF`B
zi@<>g*8Tf|3D#@LAnbv@pMSvNRap>2iyZn@#GMj6_}M+jgF79v-uT1@Ym(K22H)uk
z!`{5o2RZQlZ|}}rSf>tAJ?vRU)}AB6HaJ)d(AFQ?MHSMSL(H+pI4}=Yw6mymonSh1
zNEP~Q+1!N-?AWhCx4v-2v$q!Yi8iNolVJ^_irxeOJ1Puu7Nh{Azbr?eo(@u?M-)EN
zhR{)G9s1}f)I&!G-+;RXb&1BcDCSrJ2x9yJOXh0CUq|LMY=A>1k?HN4b#D8?f3<3KEN*=@l=@~g
zK2SFg9NDntV@2Ww0d<|zLxW0Jy}^G~WV|DGSvPzL-&y*SL;LL;n&
zHM4HaUCn}L833k|6B}{>@Sxn(*FT%BG4hc5(R|@$?t8#KIa^g&e@c`__r|_?_|Jbu
z0QT;v>(=m@C7FgME{F|^dF}T_d@chK6;~|tVW%oHu@z{^LaJjL7+&@ekkVP#GGO)p
zg95ehI*ddL>?nOE@UDx*kttwtPoj^5h_DoZ=QRwNKtKjeCu6n2k`{0Pz1gnjBo&$$bwxa)r)c;I9?Td0Sk19)FCL~GVo}CB
zXP&dc^RqDLSkSQ~qOi57#4k1%&2A!YEP+rdaj5
z*^s6VY+BMcDTWuaQI@jNz|UQ918%E>tTo4qQsMMsT0@h}GWhkP3@5Q7i0B5G;>g>o
zmZPz6Hr$0lO8vElSxXybumT1+upIsFoiEWTawY7fl9L%lm~i~B)ee5BMjVNVr?Vvv
zSX9+*K|(2Pp5QuH;28BdhV61;(*P-u;{G!8d?nRa;(RF-&t$w2U?vkfh@FSQj-L>K
zqYU^402clmZ+-*-N1t|za+|$$(2PW?k^!>>O$v4>qrls6WZU1SZ@Hu&!TwNlzBFJn
zTS@=fd>QtKc?KgL9ia?8GIuq%Fs~eVMF9B0Mv%@rZwoZ&Lkx3o)~QbKj{GAi;LeBfV*nZ91D(A
zqRD_e;)35q;~F{`uy}LunBVI3HK07I}pB*sieDB^}lE3SbI|Z8FFf@U?TXz
zgNPz}%xq4{gI62?A4@4(MQ}PBEan`TOjT_`=0`L<7U|CWqyh5?etRWnxK<~;d4dd|P
z;07C&teYKH=dQohB}qu#!GuAT}p#j6s?%jLSU5vi}SWuWYArY787eV!0
z7_fhIIQ%q-G7P+7)-u=JDcqk5_ssdLB+=j8G+tvU8;xA1Qwf<~N(6(0s
zHdaTm^CcGZ!L6;W%gwo~AHZG7jx-zz@M^u0EFs$S0IVu36roXqK3fpEh*|7^SfB{{
zgfh)jO#{Yl{ByflOdV9VSNmhyS6J^Dz6-24;tw?i+a`WbgUR(Yiw%!+kEaZaGgqy=G>LYGnpb)D153H;IsD{npS3qFwWy6_Ur
z!%1TXx(0zcV{MjJ!~t&se#enqhZdo5CX_Fs=>Y?V^Y^k0Ast&I4sS&Hz*e9?1b|%(
zLvH~7{B{6#F#P%FUv$yn5Pv^=BvZk(#^V2X@7_(bNkm}!VyR2zW8v$PTj<=fYW#k76*bXXVNhfm{bml{2^!qOJJ}YNpjs_Wx?7HcD-Qkc_b|9cy!`8$V%eyJPopz
z&sa@5JL72Z?3xTEF{xoKL}4Ztq8N?L;1PJAE#cgwCoIP$dch*b+OjQ*!9bODL}|2C
zqPyI&`dnbJiwq71lh_$4kp5n4a#x-W-~!Saa(K6+?c7*W1>NSPU0WD&9V{40g;}Ww
zWigmk;%w4^fUaOK=7y~vOKh?NDYVU+v8MOx8BGx+7eRx-j1HztCFg?|w}-_yTFkPx
z$z6tb=&66mq9P!;zXqL6RU>`gHKEUz&U-3h
ziMkff%l*hks5TnnDw&A@aIDoJ{vth@zLQwzkaa|phFAmAD{oV%3_CbN4E^;0-0Y=Q
zj`w1~@m>J@9<_DzcKZE30QUC(ERXO?>966^Syd{wI=sI>thQ_p22|hg9HAwk5MIQ2
z7NG~s-DvJt7Ask!l%Uu#oe#Cq3SSpv{vxaRuOJa$#?(7;P5(mH-@;@COduG9_28*0l9|*iR+L
zuvDMbcXBbU#sJo^M~4=(;w-Nm7#w$8I9Y+;p(UVx}19lFk+k{?eaAOjKBdRtOGpc!ZHx
zAi?IqX-94_=YnC%!9p~%3M24qGb{&py(HSK+2U*~Y}fT#j-WvWu&ysLPSYG`~?
z%uBenl3*CVwTseoDX}nZuKRjcnQ)0+;1s&Tz+cV;bHmDKS)~z4RYgl^u$`^6{sw6u
z(I9h3Iv?yZleT3pX`5oz)g83!3}vB9$12mi4|O`JziMYZQIUpkC6KEsYXJFUMrLqG
zghMhMG0ckOw={38Nq<5HoLRS$ZQ54JirS)2Zlhd7c7o^hVxlWn{6ghwRcgV#NvBA3
zXmF*(U$j2lzhQL!xm^!fa8vU(g@*8vE!{i1-rGsX#jMaLL
z^{;Oy7!_+)j*X4LpkLNxeH#)L7AJvOgII#>k3=mM
zT5v>rzqcK|d%?j-lDKkM9;_tzbr6&!X$`gw{O0}(Kb6#hwl+ujvDHf7>E$5JZm*>qOPj$mxyKJ1N`fCK1=iVM@urk6k2S{9DzvDv)Fv7qFg9k*Ic66e37%W{
zL7XZ@5iJ&3n>Me5hd_7_o-79VzQiz|zEdyKS(MVZtbUPKodu?+@*zmsOL
zdE`K6ziMl0wQ`MET%{LO6=hkD=}-wAwJr$#m3xK(_5_7b8fh4#=Gkd#Vs22EZCs{M
zKx#$COY=>JEuhTYsF}AKt&uQ~1#H1@h)H%!9X3P*?gxz$%^Lx@*U$P30665l-2fbX
zz58GI%>XzNcrZ2k%MEejfC38uOc}JD19n2(tm^o)qT#QoP`C2@%WqO#>IuP2W;mIf
zTbR{wq={qi$6+(-xF}Pc!!FnpB$acgzp`@t?I;Hr*F+vd0z7iU1ec{P&0*+!*=KIg
zVmk`}J}ie(BwYa96afB*R^NZ08R>s`^ZEO90Ni8hXr1<_?_!#FB-x@gd?xtrv-_*w
zpJ^RLbbhtY3q|+rNnyaH104e93IrA`J{-ara)lzZkd#UkBos;8Z`Yv}Rx}T3P}3Mr
zFHgl030z1dSU_L^FiM*9&IfD4_WCUVZ`dG)2ml+>M+V#tz*dR;=+V7L0>H1n_(cFL
zbhrl#4ggpPwg9lu;J43QPD2L^e$!zTZKYX{bw*g~)4`*kSPDg29bVBF7okUGa2wc+
zhG`iJcGg%jltdJs!Y@V@uIO>B<4DpGp3tEr0x(Vy@t2A$l%mBbdO;30^sjyhyrNNw
zR&z>xWcPo3=@O%864h{Nwq=*&E+i>pkaZLdO6o{x2;p}iT8h5z6KSAWa$NhgV4!Z1
zDTM`L!0ZGAf^$r0XxpqLgTC!Lm~aV`0l?cjRaux6PBAq&mHj5`M}t$TO43_IBW^}q
zvYa(m(h9ObhqVir7G0#;V=*~cFc{_>v@Jp-cwcH+Tt{~(tkfal8l5_7tj(4i@7_g>
zD?{dxi0Fa4E7BGenjH}HsQ?%ZSos1aSCSqmw$3qDpBrFoh6n2$WlS8bXvI)2_cJsZ
zHFraYTPQnopOI0jFOuqJ!V}-~UYfIb)Dbe|q&*eSJ?XPD+hz!ekT-W2N5|tgq{hZ?
z>-{!;$ukTVzJZT9304#qGAdm|afBjh0D@owB!13{(pEvUHvUUAShha%{CN`M#2hAE
zaQE$wBO7UMZgzfDw9qt$MiEW3k!)pBT42*dvhU|2GlpdZMz&lJP!kjTS}XyV%mh<6%7@L=^4_=E-n#QoWeD9lca(A8lK7si)AFk7
zl+UYf?ss^9SOp%7RADZ<0<<-bcU6e2%VYS4`p-HiklIdvMKfK|lFB5KbHk$iG@L`~
z?g4A;&DItG_>zn7lExuf{QW_!D4hvbsDj=Q#rvd1U~_H>FH(ZOdl6KiqW~;Pgg%C_
zM+5l1*!y|NgQKR=^rd`dOVA7perAFPX~%DbcWpJ{7x`Ag^#x#)46n)>g2B
z@KG3))E5RdCtQD>nQ@tI=wSm6p6hnGxiEnKCT%z5^bN;BL;3(56HBN{EUf
z8LnbZxN7hT@gT~vt9lB8E|V|og&rJ
z3$7VJVp+M$7_>4F+mJk8eE*CxGL(4z9Yx@cSWKG4v1mb34W2tY++jv?x5DWc1F+Le
z$KRXW@PVva{$y7G@y7zN735+L%a-WNH9L#S8~}4&4X;`{R;gGk2q)=R4Rl)Ny6g^@
z%w2N*5?biNtxFW4F~*Bw(FwZei6sXyIPeH|-7jUph5}D~J34=c)d4ZIC+tnZDPYsE
zu`Q~gF}*;gMjI8S%JyNoWka#M4qm_n;D3JjpG(vK(%1Y`y!jiF--vtL_qNsEa(N5r
zqOeFKrW-p{oy#6tM*KB;Fdft$g7_(?gk~x2Kr)dyi&Up;Zm}q~1v$Fu77FYGtGLu0
zFPTLX?E;HRwKI-k>r|YuPA_Ri=~}>sF`);1Ch0q@cuuGc+BW(*2W$!O&`>Z0d@BII
zdGk61;8!0Hz<>O_qY&L09sCMY!6-<-l{&O&vRqd1z0joc{+o`#!Z%%1SX;yaHGUl0
zb|?Zrbyiv8kM%UDMBnv!!HU4T7Y(&oDuv##K}l0#GkDBuvh5QVuPX@g+ubX
z^W?zYQa_NI^p{y5Bb=0ibgEKG*+P?+_9{+gDpojFg{9ngQP3ApuuyKpB6^$nJG{6v
zOj-2ms)gZIj3?nvM?+YWQ>&~-qe?5o5MoIfw$QW(8=7V{yGzpA8~*eFEO09g%6GCw
zFwD1xz8NG|@1|lq4VTlM@d{D&{Mj2Sj#}cN~`)bw!U`S!z&*yPp
zaTe+1WbO)NNsG|ftaItu@MUOqr56Ym;U~JlE64+0fcYdHAWqnkS~6tpbobu}|6Mx3
z(D$|lfYUqGSdaN5KR_-3eEzU8@ZX1)%KxX=i~VUjzs*j!=Y+L;=1vERWpInF$Ne!c&^ET!%2q7}
zwrNPG3`APGWNPe*wt(lZemD~ime!zI{S-~^)B|gKCID>CGM&$8!RP@v8V2kDIAFk!
zdbWW7_~A!qFZh*`;4cJ#UrFHMqi1SQ833>y3U&be#sjc4tMB{C<&HGN7tTq#Gr=KH
zWIc6)EY}a-3tGWL0S9)?;0J+Cv{yurSz{~fMN-JEUeFfgvLYDU%TR!$Wp0!jaSpAvi6UBX))d
z2iiVatfV!pYq281NamKHC*_g3DT$q!8KqqI_*lIPts2@-s8~x}iA2TL{&;y5+jF#l
z8HI<1z##hguF_^9#gkOUEXP>qm9s^a_m?e!Q#p>
zK}B>JS2*E3qM2+mDkwb5*(9}zhUc7lIyZME_&efMS%&>``T+hMw2I!OEMU_x;H}GX
z6r*<;S*V%8Tf0X}frFqzb6q)+fkWXV)!*AZkRYgm)vcHGqqISVqGI4xO-HP@&LoK@
ztB#&1s{l`P)c2ORoLPq8^X~fJT58`CKy+&
zL#0Y4<%1!@!;5t9r8JtMNn#f*!q%O`!&SI+7>*;x`yn-=kfE7NCv6$iyg64psO`1a}5WE
z(oY=`RiuxPD&ZH$Hr))GKY-yob0ZX9UW*Rv@^Z;=V6(GkY^+wH$Hqbg9#Yw-ctIl+
zcv5uGSTAN5uKwwtMzHZ_e7M?gY*EK!Z`+cX4_J+28rTHre4AX5LD|8wxEkMJEBkiNZJ^rGH^$q-Qv*H0H
z8tCFrtkUI0{|x-)gImWi>``z%V9P+FaljHbw=3R*mtw`Sgc`)02jDYJ16CRIgw{92
z2TSK>m<8;{kfH$m)C2JSFo*#&NKpX(-1Fb}1MnYul%nPDM+DKdhyF}BFh`#7e}4A%
z^*xB9pFMlsQHs8I@BW)0v_Xll`MvwW7X*nFjVYP-Fx(m3U;+54=&{0_Bqxht9Xc#U
zNAXv@u~3U1lL!o2W7&x$Y>1fB;6%|-Locgy3e2%)&7+J4OE-Ao>WA4Yb{DQ(KX^?c
zn9blNim{ep5)F6KOJoKkE@^y_xVyXMMOosE<%Y_S2JCRK3;pm7VV|62n<52PqY=}f
z&M~Q&SrS|S>38M;zo{ETdXB^4#TxSw`KXd6{1dgw)~%A$M~3|I}aNPv;E&g??-rt=Sm
zP=W_Dz<~hO^q2#1aUpI-yOh5=X0{j4Wb>1@8u21G)P?5XaE
ztgLoeGw^FDMU`y1wO)>8m~jL*=qjsyE%n924vVQz|PI
zNhcqtss9|BRwvvknqkc^teFkD3?d>jjWZBikatMc3KZDfS>J#G5BE3Tb)&BX;EVvU
zp}_rvPo50)PDJ{(0NkZ}c7~HJDdnK)qtdH>-jyOQX%k!{igpf2qD)QLmHERujOcDtPTutL;<4iOd`dCF(DwipO}xg>+3HV{~o
z7*t@VsgtnbnDSD00`R0C0~Qr@M;76oJ4%4>`zYWp27E*PSx`3s;6L;t!d8s+$6f&J
z27}GJ0bnYjA&9=$Vb0MzuEB!u{iuU_2C5(b0Ek(7jZj!Q#;Ph~84OZ_R$y*a+?39ve21zcFLHy97@^EezBMZc6{^vi1j
zVU%yK3sz8=>+psy;X*eb+J^n6xCu>x4`)lFO(Y=mlhT1C3Dctk^=KMnrIL0YSk3*i
zt`1#sK3OP1*+Nv>#v^TmoTNPnFA81R-dSA~N%Zh{tBb=_VI9g?68GDzFs`D|s1r*4
zhlW)Ghii>mjKVA_+qTrRQDY0jp$fZS;VZc=s$LUdz4Bz!C+`P=^
z{Ui_|Xkcp$VHdOO2IW?iVcGVVg=epkO^*Jyar
z?xCH?Lqs1Hb))o_J<_p)5