diff --git a/mindplot/pom.xml b/mindplot/pom.xml
index 2cf48a70..d46f812e 100644
--- a/mindplot/pom.xml
+++ b/mindplot/pom.xml
@@ -106,7 +106,7 @@
DragManager.js
DragPivot.js
ConnectionLine.js
- RelationshipLine.js
+ Relationship.js
DragConnector.js
TextEditor.js
MultilineTextEditor.js
diff --git a/mindplot/src/main/javascript/ActionDispatcher.js b/mindplot/src/main/javascript/ActionDispatcher.js
index 6d8dfb36..4505789b 100644
--- a/mindplot/src/main/javascript/ActionDispatcher.js
+++ b/mindplot/src/main/javascript/ActionDispatcher.js
@@ -31,7 +31,7 @@ mindplot.ActionDispatcher = new Class({
throw "method must be implemented.";
},
- deleteTopics: function(topicsIds, relIds) {
+ deleteEntities: function(topicsIds, relIds) {
throw "method must be implemented.";
},
diff --git a/mindplot/src/main/javascript/CentralTopic.js b/mindplot/src/main/javascript/CentralTopic.js
index 647a6b08..4ac5040d 100644
--- a/mindplot/src/main/javascript/CentralTopic.js
+++ b/mindplot/src/main/javascript/CentralTopic.js
@@ -1,98 +1,106 @@
-/*
- * Copyright [2011] [wisemapping]
- *
- * Licensed under WiseMapping Public License, Version 1.0 (the "License").
- * It is basically the Apache License, Version 2.0 (the "License") plus the
- * "powered by wisemapping" text requirement on every single page;
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the license at
- *
- * http://www.wisemapping.org/license
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-mindplot.CentralTopic = new Class({
-
- Extends:mindplot.Topic,
- initialize: function(model, options) {
- this.parent(model, options);
- },
-
- _registerEvents : function() {
- this.parent();
-
- // This disable the drag of the central topic. But solves the problem of deselecting the nodes when the screen is clicked.
- this.addEvent('mousedown', function(event) {
- event.stopPropagation();
- });
- },
-
- workoutIncomingConnectionPoint : function() {
- return this.getPosition();
- },
-
- _getInnerPadding : function() {
- return 11;
- },
-
- getTopicType : function() {
- return mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE;
- },
-
- setCursor : function(type) {
- type = (type == 'move') ? 'default' : type;
- this.parent(type);
- },
-
- isConnectedToCentralTopic : function() {
- return false;
- },
-
-
- _defaultShapeType : function() {
- return mindplot.model.TopicShape.ROUNDED_RECT;
- },
-
-
- updateTopicShape : function() {
-
- },
-
- _updatePositionOnChangeSize : function(oldSize, newSize, updatePosition) {
-
- // Center main topic ...
- var zeroPoint = new core.Point(0, 0);
- this.setPosition(zeroPoint);
- },
-
- _defaultText : function() {
- return $msg('CENTRAL_TOPIC');
- },
-
- _defaultBackgroundColor : function() {
- return "rgb(80,157,192)";
- },
-
- _defaultBorderColor : function() {
- return "rgb(57,113,177)";
- },
-
- _defaultFontStyle : function() {
- return {
- font:"Verdana",
- size: 10,
- style:"normal",
- weight:"bold",
- color:"#ffffff"
- };
- },
-
- getShrinkConnector : function() {
- return null;
- }
+/*
+ * Copyright [2011] [wisemapping]
+ *
+ * Licensed under WiseMapping Public License, Version 1.0 (the "License").
+ * It is basically the Apache License, Version 2.0 (the "License") plus the
+ * "powered by wisemapping" text requirement on every single page;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the license at
+ *
+ * http://www.wisemapping.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+mindplot.CentralTopic = new Class({
+
+ Extends:mindplot.Topic,
+ initialize:function (model, options) {
+ this.parent(model, options);
+ },
+
+ _registerEvents:function () {
+ this.parent();
+
+ // This disable the drag of the central topic. But solves the problem of deselecting the nodes when the screen is clicked.
+ this.addEvent('mousedown', function (event) {
+ event.stopPropagation();
+ });
+ },
+
+ workoutIncomingConnectionPoint:function () {
+ return this.getPosition();
+ },
+
+ _getInnerPadding:function () {
+ return 11;
+ },
+
+ getTopicType:function () {
+ return mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE;
+ },
+
+ setCursor:function (type) {
+ type = (type == 'move') ? 'default' : type;
+ this.parent(type);
+ },
+
+ isConnectedToCentralTopic:function () {
+ return false;
+ },
+
+
+ _defaultShapeType:function () {
+ return mindplot.model.TopicShape.ROUNDED_RECT;
+ },
+
+
+ updateTopicShape:function () {
+
+ },
+
+ _updatePositionOnChangeSize:function () {
+
+ // Center main topic ...
+ var zeroPoint = new core.Point(0, 0);
+ this.setPosition(zeroPoint);
+ },
+
+ _defaultText:function () {
+ return $msg('CENTRAL_TOPIC');
+ },
+
+ _defaultBackgroundColor:function () {
+ return "rgb(80,157,192)";
+ },
+
+ _defaultBorderColor:function () {
+ return "rgb(57,113,177)";
+ },
+
+ _defaultFontStyle:function () {
+ return {
+ font:"Verdana",
+ size:10,
+ style:"normal",
+ weight:"bold",
+ color:"#ffffff"
+ };
+ },
+
+ getShrinkConnector:function () {
+ return null;
+ },
+
+ workoutOutgoingConnectionPoint:function (targetPosition) {
+ $assert(targetPosition, 'targetPoint can not be null');
+ var pos = this.getPosition();
+ var isAtRight = mindplot.util.Shape.isAtRight(targetPosition, pos);
+ var size = this.getSize();
+ return mindplot.util.Shape.calculateRectConnectionPoint(pos, size, !isAtRight);
+ }
});
\ No newline at end of file
diff --git a/mindplot/src/main/javascript/CollabActionDispatcher.js b/mindplot/src/main/javascript/CollabActionDispatcher.js
index 0aeef814..a8999f23 100644
--- a/mindplot/src/main/javascript/CollabActionDispatcher.js
+++ b/mindplot/src/main/javascript/CollabActionDispatcher.js
@@ -139,7 +139,7 @@ mindplot.BrixActionDispatcher = new Class({
}.bind(this));
},
- deleteTopics : function(topicsIds, relIds) {
+ deleteEntities : function(topicsIds, relIds) {
$assert(topicsIds, "topicsIds can not be null");
var framework = this._getFramework();
var mindmap = framework.getModel();
diff --git a/mindplot/src/main/javascript/Designer.js b/mindplot/src/main/javascript/Designer.js
index b3987858..e0ce97cf 100644
--- a/mindplot/src/main/javascript/Designer.js
+++ b/mindplot/src/main/javascript/Designer.js
@@ -248,7 +248,7 @@ mindplot.Designer = new Class({
topic.addEvent('ontblur', function () {
var topics = this.getModel().filterSelectedTopics();
- var rels = this.getModel().filterSelectedRelations();
+ var rels = this.getModel().filterSelectedRelationships();
if (topics.length == 0 || rels.length == 0) {
this.fireEvent('onblur');
@@ -257,7 +257,7 @@ mindplot.Designer = new Class({
topic.addEvent('ontfocus', function () {
var topics = this.getModel().filterSelectedTopics();
- var rels = this.getModel().filterSelectedRelations();
+ var rels = this.getModel().filterSelectedRelationships();
if (topics.length == 1 || rels.length == 1) {
this.fireEvent('onfocus');
@@ -275,7 +275,7 @@ mindplot.Designer = new Class({
});
var model = this.getModel();
- var objects = model.getObjects();
+ var objects = model.getEntities();
objects.forEach(function (object) {
// Disable all nodes on focus but not the current if Ctrl key isn't being pressed
if (!$defined(event) || (!event.control && !event.meta)) {
@@ -289,14 +289,14 @@ mindplot.Designer = new Class({
selectAll:function () {
var model = this.getModel();
- var objects = model.getObjects();
+ var objects = model.getEntities();
objects.forEach(function (object) {
object.setOnFocus(true);
});
},
deselectAll:function () {
- var objects = this.getModel().getObjects();
+ var objects = this.getModel().getEntities();
objects.forEach(function (object) {
object.setOnFocus(false);
});
@@ -475,13 +475,20 @@ mindplot.Designer = new Class({
},
showRelPivot:function (event) {
+
+ var nodes = this.getModel().filterSelectedTopics();
+ if (nodes.length <= 0) {
+ // This could not happen ...
+ $notify("Could not create relationship. Parent relationship topic must be selected first.");
+ return;
+ }
+
// Current mouse position ....
var screen = this._workspace.getScreenManager();
var pos = screen.getWorkspaceMousePosition(event);
- var selectedTopic = this.getModel().selectedTopic();
// create a connection ...
- this._relPivot.start(selectedTopic, pos);
+ this._relPivot.start(nodes[0], pos);
},
connectByRelation:function (sourceTopic, targetTopic) {
@@ -489,10 +496,8 @@ mindplot.Designer = new Class({
$assert(targetTopic, "targetTopic can not be null");
// Create a new topic model ...
- // @Todo: Model should not be modified from here ...
var mindmap = this.getMindmap();
var model = mindmap.createRelationship(sourceTopic.getModel().getId(), targetTopic.getModel().getId());
-
this._actionDispatcher.connectByRelation(model);
},
@@ -614,77 +619,46 @@ mindplot.Designer = new Class({
return this._relationshipModelToRelationship(model);
},
- removeRelationship:function (model) {
- this._mindmap.removeRelationship(model);
- var relationship = this._relationships[model.getId()];
+ _deleteRelationship:function (relationship) {
var sourceTopic = relationship.getSourceTopic();
- sourceTopic.removeRelationship(relationship);
+ sourceTopic.deleteRelationship(relationship);
+
var targetTopic = relationship.getTargetTopic();
- targetTopic.removeRelationship(relationship);
+ targetTopic.deleteRelationship(relationship);
+
this._workspace.removeChild(relationship);
- delete this._relationships[model.getId()];
+
+ this.getModel().removeRelationship(relationship);
},
_buildRelationship:function (model) {
- var elem = this;
-
- var fromNodeId = model.getFromNode();
- var toNodeId = model.getToNode();
-
- var sourceTopic = null;
- var targetTopic = null;
var dmodel = this.getModel();
- var topics = dmodel.getTopics();
- for (var i = 0; i < topics.length; i++) {
- var t = topics[i];
- if (t.getModel().getId() == fromNodeId) {
- sourceTopic = t;
- }
- if (t.getModel().getId() == toNodeId) {
- targetTopic = t;
- }
- if (targetTopic != null && sourceTopic != null) {
- break;
- }
- }
+ var sourceTopicId = model.getFromNode();
+ var sourceTopic = dmodel.findTopicById(sourceTopicId);
- // Create node graph ...
- var relationLine = new mindplot.RelationshipLine(sourceTopic, targetTopic, model.getLineType());
- if ($defined(model.getSrcCtrlPoint())) {
- var srcPoint = model.getSrcCtrlPoint().clone();
- relationLine.setSrcControlPoint(srcPoint);
- }
- if ($defined(model.getDestCtrlPoint())) {
- var destPoint = model.getDestCtrlPoint().clone();
- relationLine.setDestControlPoint(destPoint);
- }
+ var targetTopicId = model.getToNode();
+ var targetTopic = dmodel.findTopicById(targetTopicId);
-
- relationLine.getLine().setDashed(3, 2);
- relationLine.setShowEndArrow(model.getEndArrow());
- relationLine.setShowStartArrow(model.getStartArrow());
- relationLine.setModel(model);
-
- //Add Listeners
- relationLine.addEvent('onfocus', function (event) {
- elem.onObjectFocusEvent(relationLine, event);
- });
+ // Build relationship line ....
+ var relationship = new mindplot.Relationship(sourceTopic, targetTopic, model);
+ relationship.addEvent('onfocus', function (event) {
+ this.onObjectFocusEvent(relationship, event);
+ }.bind(this));
// Append it to the workspace ...
- dmodel.addRelationship(model.getId(), relationLine);
-
- return relationLine;
+ dmodel.addRelationship(relationship);
+ return relationship;
},
- _removeNode:function (node) {
+ _removeTopic:function (node) {
if (node.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
var parent = node._parent;
node.disconnect(this._workspace);
//remove children
while (node.getChildren().length > 0) {
- this._removeNode(node.getChildren()[0]);
+ this._removeTopic(node.getChildren()[0]);
}
this._workspace.removeChild(node);
@@ -700,19 +674,30 @@ mindplot.Designer = new Class({
}
},
- deleteCurrentNode:function () {
+ deleteSelectedEntities:function () {
+ var topics = this.getModel().filterSelectedTopics();
+ var relation = this.getModel().filterSelectedRelationships();
+ if (topics.length <= 0 && relation.length <= 0) {
+ // If there are more than one node selected,
+ $notify($msg('ENTITIES_COULD_NOT_BE_DELETED'));
+ return;
+ }
+
+ // Filter the lists ...
var validateFunc = function (object) {
- return object.getType() == mindplot.RelationshipLine.type || object.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE
+ return object.getType() == mindplot.Relationship.type || object.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE
};
- var validateError = 'Central topic can not be deleted.';
-
+ var validateError = $msg('CENTRAL_TOPIC_CAN_NOT_BE_DELETED');
var model = this.getModel();
- var topicsIds = model.filterTopicsIds(validateFunc, validateError);
- var relIds = model.filterRelationIds(validateFunc, validateError);
+ var topicIds = model.filterTopicsIds(validateFunc, validateError);
+ var relIds = model.filterSelectedRelationships().map(function (rel) {
+ return rel.getId();
+ });
- if (topicsIds.length > 0 || relIds.length > 0) {
- this._actionDispatcher.deleteTopics(topicsIds, relIds);
+ // Finally delete the topics ...
+ if (topicIds.length > 0 || relIds.length > 0) {
+ this._actionDispatcher.deleteEntities(topicIds, relIds);
}
},
diff --git a/mindplot/src/main/javascript/DesignerKeyboard.js b/mindplot/src/main/javascript/DesignerKeyboard.js
index 875409f0..d3ffed21 100644
--- a/mindplot/src/main/javascript/DesignerKeyboard.js
+++ b/mindplot/src/main/javascript/DesignerKeyboard.js
@@ -42,7 +42,7 @@ mindplot.DesignerKeyboard = new Class({
var model = designer.getModel();
var keyboardEvents = {
'backspace':function (event) {
- designer.deleteCurrentNode();
+ designer.deleteSelectedEntities();
event.preventDefault();
event.stopPropagation();
@@ -61,7 +61,7 @@ mindplot.DesignerKeyboard = new Class({
}.bind(this),
'delete':function () {
- designer.deleteCurrentNode();
+ designer.deleteSelectedEntities();
}.bind(this),
'enter':function () {
diff --git a/mindplot/src/main/javascript/DesignerModel.js b/mindplot/src/main/javascript/DesignerModel.js
index fac2ee6a..e42b47ea 100644
--- a/mindplot/src/main/javascript/DesignerModel.js
+++ b/mindplot/src/main/javascript/DesignerModel.js
@@ -17,31 +17,35 @@
*/
mindplot.DesignerModel = new Class({
- Implements: [Events],
- initialize : function(options) {
+ Implements:[Events],
+ initialize:function (options) {
this._zoom = options.zoom;
this._topics = [];
- this._relationships = {};
+ this._relationships = [];
},
- getZoom : function() {
+ getZoom:function () {
return this._zoom;
},
- setZoom : function(zoom) {
+ setZoom:function (zoom) {
this._zoom = zoom;
},
- getTopics : function() {
+ getTopics:function () {
return this._topics;
},
- getCentralTopic : function() {
+ getRelationships:function () {
+ return this._relationships;
+ },
+
+ getCentralTopic:function () {
var topics = this.getTopics();
return topics[0];
},
- filterSelectedTopics : function() {
+ filterSelectedTopics:function () {
var result = [];
for (var i = 0; i < this._topics.length; i++) {
if (this._topics[i].isOnFocus()) {
@@ -51,43 +55,43 @@ mindplot.DesignerModel = new Class({
return result;
},
- filterSelectedRelations : function() {
+ filterSelectedRelationships:function () {
var result = [];
- for (var id in this._relationships) {
- var relationship = this._relationships[id];
- if (relationship.isOnFocus()) {
- result.push(relationship);
+ for (var i = 0; i < this._relationships.length; i++) {
+ if (this._relationships[i].isOnFocus()) {
+ result.push(this._relationships[i]);
}
}
return result;
},
- getObjects : function() {
+ getEntities:function () {
var result = [].append(this._topics);
- for (var id in this._relationships) {
- result.push(this._relationships[id]);
- }
+ result.append(this._relationships);
return result;
},
- removeTopic : function(topic) {
+ removeTopic:function (topic) {
$assert(topic, "topic can not be null");
this._topics.erase(topic);
},
- addTopic : function(topic) {
+ removeRelationship:function (rel) {
+ $assert(rel, "rel can not be null");
+ this._relationships.erase(rel);
+ },
+
+ addTopic:function (topic) {
$assert(topic, "topic can not be null");
this._topics.push(topic);
},
- addRelationship : function(id, rel) {
+ addRelationship:function (rel) {
$assert(rel, "rel can not be null");
- $assert(id, "id can not be null");
-
- this._relationships[id] = rel;
+ this._relationships.push(rel);
},
- filterTopicsIds : function(validate, errorMsg) {
+ filterTopicsIds:function (validate, errorMsg) {
var result = [];
var topics = this.filterSelectedTopics();
@@ -109,41 +113,17 @@ mindplot.DesignerModel = new Class({
return result;
},
- filterRelationIds : function(validate, errorMsg) {
- var result = [];
- var relationships = this.filterSelectedRelations();
- var isValid = true;
- for (var j = 0; j < relationships.length; j++) {
- var selectedLine = relationships[j];
- isValid = true;
- if ($defined(validate)) {
- isValid = validate(selectedLine);
- }
-
- if (isValid) {
- result.push(selectedLine.getId());
- } else {
- $notify(errorMsg);
- }
- }
- return result;
- },
-
- getRelationshipsById : function() {
- return this._relationships;
- },
-
- selectedTopic : function() {
+ selectedTopic:function () {
var topics = this.filterSelectedTopics();
return (topics.length > 0) ? topics[0] : null;
},
- findTopicById: function(id) {
+ findTopicById:function (id) {
var result = null;
for (var i = 0; i < this._topics.length; i++) {
var topic = this._topics[i];
- if(topic.getId()==id){
+ if (topic.getId() == id) {
result = topic;
break;
}
diff --git a/mindplot/src/main/javascript/Messages.js b/mindplot/src/main/javascript/Messages.js
index 88769fb1..0d120a7f 100644
--- a/mindplot/src/main/javascript/Messages.js
+++ b/mindplot/src/main/javascript/Messages.js
@@ -1,229 +1,231 @@
-/*
- * Copyright [2011] [wisemapping]
- *
- * Licensed under WiseMapping Public License, Version 1.0 (the "License").
- * It is basically the Apache License, Version 2.0 (the "License") plus the
- * "powered by wisemapping" text requirement on every single page;
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the license at
- *
- * http://www.wisemapping.org/license
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-mindplot.Messages = new Class({
- Static:{
- init:function (locale) {
- locale = $defined(locale) ? locale : 'en';
- var bundle = mindplot.Messages.BUNDLES[locale];
- if (bundle == null && locale.indexOf("_") != -1) {
- // Try to locate without the specialization ...
- locale = locale.substring(0, locale.indexOf("_"));
- bundle = mindplot.Messages.BUNDLES[locale];
- }
- mindplot.Messages.__bundle = bundle;
- }
- }
-});
-
-$msg = function (key) {
- if (!mindplot.Messages.__bundle) {
- mindplot.Messages.init('en');
- }
- return mindplot.Messages.__bundle[key];
-};
-
-mindplot.Messages.BUNDLES = {
- 'en':{
-
- ZOOM_IN:'Zoom In',
- ZOOM_OUT:'Zoom Out',
- TOPIC_SHAPE:'Topic Shape',
- TOPIC_ADD:'Add Topic',
- TOPIC_DELETE:'Delete Topic',
- TOPIC_ICON:'Add Icon',
- TOPIC_LINK:'Add Link',
- TOPIC_RELATIONSHIP:'Relationship',
- TOPIC_COLOR:'Topic Color',
- TOPIC_BORDER_COLOR:'Topic Border Color',
- TOPIC_NOTE:'Add Note',
- FONT_FAMILY:'Font Type',
- FONT_SIZE:'Text Size',
- FONT_BOLD:'Text Bold',
- FONT_ITALIC:'Text Italic',
- UNDO_EDITION:'Undo Edition',
- REDO_EDITION:'Redo Edition',
- UNDO:'Undo',
- REDO:'Redo',
- INSERT:'Insert',
- SAVE:'Save',
- NOTE:'Note',
- ADD_TOPIC:'Add Topic',
- LOADING:'Loading ...',
- EXPORT:'Export',
- PRINT:'Print',
- PUBLISH:'Publish',
- COLLABORATE:'Share',
- HISTORY:'History',
- DISCARD_CHANGES:'Discard Changes',
- FONT_COLOR:'Text Color',
- SAVING:'Saving ...',
- SAVE_COMPLETE:'Save Complete',
- ZOOM_IN_ERROR:'Zoom too high.',
- ZOOM_ERROR:'No more zoom can be applied.',
- ONLY_ONE_TOPIC_MUST_BE_SELECTED:'Could not create a topic. Only one topic must be selected.',
- ONE_TOPIC_MUST_BE_SELECTED:'Could not create a topic. One topic must be selected.',
- SAVE_COULD_NOT_BE_COMPLETED:'Save could not be completed. Try latter.',
- UNEXPECTED_ERROR_LOADING:"We're sorry, an unexpected error has occurred. Try again reloading the editor.\nIf the problem persists, contact us to support@wisemapping.com.",
- MAIN_TOPIC:'Main Topic',
- SUB_TOPIC:'Sub Topic',
- ISOLATED_TOPIC:'Isolated Topic',
- CENTRAL_TOPIC:'Central Topic',
- ONLY_ONE_TOPIC_MUST_BE_SELECTED_COLLAPSE:'Children can not be collapsed. One topic must be selected.',
- SHORTCUTS:'Keyboard Shortcuts'
- },
- 'es':{
- DISCARD_CHANGES:'Descartar Cambios',
- SAVE:'Guardar',
- INSERT:'Insertar',
- ZOOM_IN:'Acercar',
- ZOOM_OUT:'Alejar',
- TOPIC_BORDER_COLOR:'Color del Borde',
- TOPIC_SHAPE:'Forma del Tópico',
- TOPIC_ADD:'Agregar Tópico',
- TOPIC_DELETE:'Borrar Tópico',
- TOPIC_ICON:'Agregar Icono',
- TOPIC_LINK:'Agregar Enlace',
- TOPIC_NOTE:'Agregar Nota',
- TOPIC_COLOR:'Color Tópico',
- TOPIC_RELATIONSHIP:'Relación',
- FONT_FAMILY:'Tipo de Fuente',
- FONT_SIZE:'Tamaño de Texto',
- FONT_BOLD:'Negrita',
- FONT_ITALIC:'Italica',
- FONT_COLOR:'Color de Texto',
- UNDO_EDITION:'Undo Edition',
- REDO_EDITION:'Redo Edition',
- UNDO:'Rehacer',
- NOTE:'Nota',
- LOADING:'Cargando ...',
- PRINT:'Imprimir',
- PUBLISH:'Publicar',
- REDO:'Deshacer',
- ADD_TOPIC:'Agregar Tópico',
- COLLABORATE:'Compartir',
- EXPORT:'Exportar',
- HISTORY:'History',
- SAVE_COMPLETE:'Grabado Completo',
- SAVING:'Grabando ...',
- ONE_TOPIC_MUST_BE_SELECTED:'No ha sido posible crear un nuevo tópico. Al menos un tópico debe ser seleccionado.',
- ONLY_ONE_TOPIC_MUST_BE_SELECTED:'No ha sido posible crear un nuevo tópico. Solo un tópico debe ser seleccionado.',
- SAVE_COULD_NOT_BE_COMPLETED:'Grabación no pudo ser completada. Intentelo mas tarde.',
- UNEXPECTED_ERROR_LOADING:"Lo sentimos, un error inesperado ha ocurrido. Intentelo nuevamente recargando el editor.\n Si el problema persiste, contactenos a support@wisemapping.com.",
- ZOOM_ERROR:'No es posible aplicar mas zoom.',
- ZOOM_IN_ERROR:'El zoom es muy alto.',
- MAIN_TOPIC:'Tópico Principal',
- SUB_TOPIC:'Tópico Secundario',
- ISOLATED_TOPIC:'Tópico Aislado',
- CENTRAL_TOPIC:'Tópico Central',
- ONLY_ONE_TOPIC_MUST_BE_SELECTED_COLLAPSE:'Tópicos hijos no pueden ser colapsados. Solo un topic debe ser seleccionado.',
- SHORTCUTS:'Accesos directos'
- },
- zh_cn:{
- ZOOM_IN:'放大',
- ZOOM_OUT:'缩小',
- TOPIC_SHAPE:'节点外形',
- TOPIC_ADD:'添加节点',
- TOPIC_DELETE:'删除节点',
- TOPIC_ICON:'加入图标',
- TOPIC_LINK:'添加链接',
- TOPIC_RELATIONSHIP:'关系',
- TOPIC_COLOR:'节点颜色',
- TOPIC_BORDER_COLOR:'边框颜色',
- TOPIC_NOTE:'添加注释',
- FONT_FAMILY:'字体',
- FONT_SIZE:'文字大小',
- FONT_BOLD:'粗体',
- FONT_ITALIC:'斜体',
- UNDO:'撤销',
- REDO:'重做',
- INSERT:'插入',
- SAVE:'保存',
- NOTE:'注释',
- ADD_TOPIC:'添加节点',
- LOADING:'载入中……',
- EXPORT:'导出',
- PRINT:'打印',
- PUBLISH:'公开',
- COLLABORATE:'共享',
- HISTORY:'历史',
- DISCARD_CHANGES:'清除改变',
- FONT_COLOR:'文本颜色',
- SAVING:'保存中……',
- SAVE_COMPLETE:'完成保存',
- ZOOM_IN_ERROR:'缩放过多。',
- ZOOM_ERROR:'不能再缩放。',
- ONLY_ONE_TOPIC_MUST_BE_SELECTED:'不能创建节点。仅能选择一个节点。',
- ONE_TOPIC_MUST_BE_SELECTED:'不能创建节点。必须选择一个节点。',
- ONLY_ONE_TOPIC_MUST_BE_SELECTED_COLLAPSE:'子节点不能折叠。必须选择一个节点。',
- SAVE_COULD_NOT_BE_COMPLETED:'保存未完成。稍后再试。',
- UNEXPECTED_ERROR_LOADING:'抱歉,突遭错误,我们无法处理你的请求。\n尝试重新装载编辑器。如果问题依然存在请联系support@wisemapping.com。',
- MAIN_TOPIC:'主节点',
- SUB_TOPIC:'子节点',
- ISOLATED_TOPIC:'独立节点',
- CENTRAL_TOPIC:'中心节点',
- SHORTCUTS:'快捷键'
- },
- zh_tw:{
- ZOOM_IN:'放大',
- ZOOM_OUT:'縮小',
- TOPIC_SHAPE:'節點外形',
- TOPIC_ADD:'添加節點',
- TOPIC_DELETE:'刪除節點',
- TOPIC_ICON:'加入圖示',
- TOPIC_LINK:'添加鏈接',
- TOPIC_RELATIONSHIP:'關係',
- TOPIC_COLOR:'節點顏色',
- TOPIC_BORDER_COLOR:'邊框顏色',
- TOPIC_NOTE:'添加注釋',
- FONT_FAMILY:'字體',
- FONT_SIZE:'文字大小',
- FONT_BOLD:'粗體',
- FONT_ITALIC:'斜體',
- UNDO:'撤銷',
- REDO:'重做',
- INSERT:'插入',
- SAVE:'保存',
- NOTE:'注釋',
- ADD_TOPIC:'添加節點',
- LOADING:'載入中……',
- EXPORT:'導出',
- PRINT:'列印',
- PUBLISH:'公開',
- COLLABORATE:'共用',
- HISTORY:'歷史',
- DISCARD_CHANGES:'清除改變',
- FONT_COLOR:'文本顏色',
- SAVING:'保存中……',
- SAVE_COMPLETE:'完成保存',
- ZOOM_IN_ERROR:'縮放過多。',
- ZOOM_ERROR:'不能再縮放。',
- ONLY_ONE_TOPIC_MUST_BE_SELECTED:'不能創建節點。僅能選擇一個節點。',
- ONE_TOPIC_MUST_BE_SELECTED:'不能創建節點。必須選擇一個節點。',
- ONLY_ONE_TOPIC_MUST_BE_SELECTED_COLLAPSE:'子節點不能折疊。必須選擇一個節點。',
- SAVE_COULD_NOT_BE_COMPLETED:'保存未完成。稍後再試。',
- UNEXPECTED_ERROR_LOADING:'抱歉,突遭錯誤,我們無法處理你的請求。\n嘗試重新裝載編輯器。如果問題依然存在請聯繫support@wisemapping.com。',
- MAIN_TOPIC:'主節點',
- SUB_TOPIC:'子節點',
- ISOLATED_TOPIC:'獨立節點',
- CENTRAL_TOPIC:'中心節點',
- SHORTCUTS:'快捷鍵'
- }
-};
-mindplot.Messages.BUNDLES['zh'] = mindplot.Messages.zh_tw;
-
+/*
+ * Copyright [2011] [wisemapping]
+ *
+ * Licensed under WiseMapping Public License, Version 1.0 (the "License").
+ * It is basically the Apache License, Version 2.0 (the "License") plus the
+ * "powered by wisemapping" text requirement on every single page;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the license at
+ *
+ * http://www.wisemapping.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+mindplot.Messages = new Class({
+ Static:{
+ init:function (locale) {
+ locale = $defined(locale) ? locale : 'en';
+ var bundle = mindplot.Messages.BUNDLES[locale];
+ if (bundle == null && locale.indexOf("_") != -1) {
+ // Try to locate without the specialization ...
+ locale = locale.substring(0, locale.indexOf("_"));
+ bundle = mindplot.Messages.BUNDLES[locale];
+ }
+ mindplot.Messages.__bundle = bundle;
+ }
+ }
+});
+
+$msg = function (key) {
+ if (!mindplot.Messages.__bundle) {
+ mindplot.Messages.init('en');
+ }
+ return mindplot.Messages.__bundle[key];
+};
+
+mindplot.Messages.BUNDLES = {
+ 'en':{
+
+ ZOOM_IN:'Zoom In',
+ ZOOM_OUT:'Zoom Out',
+ TOPIC_SHAPE:'Topic Shape',
+ TOPIC_ADD:'Add Topic',
+ TOPIC_DELETE:'Delete Topic',
+ TOPIC_ICON:'Add Icon',
+ TOPIC_LINK:'Add Link',
+ TOPIC_RELATIONSHIP:'Relationship',
+ TOPIC_COLOR:'Topic Color',
+ TOPIC_BORDER_COLOR:'Topic Border Color',
+ TOPIC_NOTE:'Add Note',
+ FONT_FAMILY:'Font Type',
+ FONT_SIZE:'Text Size',
+ FONT_BOLD:'Text Bold',
+ FONT_ITALIC:'Text Italic',
+ UNDO_EDITION:'Undo Edition',
+ REDO_EDITION:'Redo Edition',
+ UNDO:'Undo',
+ REDO:'Redo',
+ INSERT:'Insert',
+ SAVE:'Save',
+ NOTE:'Note',
+ ADD_TOPIC:'Add Topic',
+ LOADING:'Loading ...',
+ EXPORT:'Export',
+ PRINT:'Print',
+ PUBLISH:'Publish',
+ COLLABORATE:'Share',
+ HISTORY:'History',
+ DISCARD_CHANGES:'Discard Changes',
+ FONT_COLOR:'Text Color',
+ SAVING:'Saving ...',
+ SAVE_COMPLETE:'Save Complete',
+ ZOOM_IN_ERROR:'Zoom too high.',
+ ZOOM_ERROR:'No more zoom can be applied.',
+ ONLY_ONE_TOPIC_MUST_BE_SELECTED:'Could not create a topic. Only one topic must be selected.',
+ ONE_TOPIC_MUST_BE_SELECTED:'Could not create a topic. One topic must be selected.',
+ SAVE_COULD_NOT_BE_COMPLETED:'Save could not be completed. Try latter.',
+ UNEXPECTED_ERROR_LOADING:"We're sorry, an unexpected error has occurred. Try again reloading the editor.\nIf the problem persists, contact us to support@wisemapping.com.",
+ MAIN_TOPIC:'Main Topic',
+ SUB_TOPIC:'Sub Topic',
+ ISOLATED_TOPIC:'Isolated Topic',
+ CENTRAL_TOPIC:'Central Topic',
+ ONLY_ONE_TOPIC_MUST_BE_SELECTED_COLLAPSE:'Children can not be collapsed. One topic must be selected.',
+ SHORTCUTS:'Keyboard Shortcuts',
+ ENTITIES_COULD_NOT_BE_DELETED: 'Could not delete topic or relation. At least one map entity must be selected.',
+ CENTRAL_TOPIC_CAN_NOT_BE_DELETED: 'Central topic can not be deleted.'
+ },
+ 'es':{
+ DISCARD_CHANGES:'Descartar Cambios',
+ SAVE:'Guardar',
+ INSERT:'Insertar',
+ ZOOM_IN:'Acercar',
+ ZOOM_OUT:'Alejar',
+ TOPIC_BORDER_COLOR:'Color del Borde',
+ TOPIC_SHAPE:'Forma del Tópico',
+ TOPIC_ADD:'Agregar Tópico',
+ TOPIC_DELETE:'Borrar Tópico',
+ TOPIC_ICON:'Agregar Icono',
+ TOPIC_LINK:'Agregar Enlace',
+ TOPIC_NOTE:'Agregar Nota',
+ TOPIC_COLOR:'Color Tópico',
+ TOPIC_RELATIONSHIP:'Relación',
+ FONT_FAMILY:'Tipo de Fuente',
+ FONT_SIZE:'Tamaño de Texto',
+ FONT_BOLD:'Negrita',
+ FONT_ITALIC:'Italica',
+ FONT_COLOR:'Color de Texto',
+ UNDO_EDITION:'Undo Edition',
+ REDO_EDITION:'Redo Edition',
+ UNDO:'Rehacer',
+ NOTE:'Nota',
+ LOADING:'Cargando ...',
+ PRINT:'Imprimir',
+ PUBLISH:'Publicar',
+ REDO:'Deshacer',
+ ADD_TOPIC:'Agregar Tópico',
+ COLLABORATE:'Compartir',
+ EXPORT:'Exportar',
+ HISTORY:'History',
+ SAVE_COMPLETE:'Grabado Completo',
+ SAVING:'Grabando ...',
+ ONE_TOPIC_MUST_BE_SELECTED:'No ha sido posible crear un nuevo tópico. Al menos un tópico debe ser seleccionado.',
+ ONLY_ONE_TOPIC_MUST_BE_SELECTED:'No ha sido posible crear un nuevo tópico. Solo un tópico debe ser seleccionado.',
+ SAVE_COULD_NOT_BE_COMPLETED:'Grabación no pudo ser completada. Intentelo mas tarde.',
+ UNEXPECTED_ERROR_LOADING:"Lo sentimos, un error inesperado ha ocurrido. Intentelo nuevamente recargando el editor.\n Si el problema persiste, contactenos a support@wisemapping.com.",
+ ZOOM_ERROR:'No es posible aplicar mas zoom.',
+ ZOOM_IN_ERROR:'El zoom es muy alto.',
+ MAIN_TOPIC:'Tópico Principal',
+ SUB_TOPIC:'Tópico Secundario',
+ ISOLATED_TOPIC:'Tópico Aislado',
+ CENTRAL_TOPIC:'Tópico Central',
+ ONLY_ONE_TOPIC_MUST_BE_SELECTED_COLLAPSE:'Tópicos hijos no pueden ser colapsados. Solo un topic debe ser seleccionado.',
+ SHORTCUTS:'Accesos directos'
+ },
+ zh_cn:{
+ ZOOM_IN:'放大',
+ ZOOM_OUT:'缩小',
+ TOPIC_SHAPE:'节点外形',
+ TOPIC_ADD:'添加节点',
+ TOPIC_DELETE:'删除节点',
+ TOPIC_ICON:'加入图标',
+ TOPIC_LINK:'添加链接',
+ TOPIC_RELATIONSHIP:'关系',
+ TOPIC_COLOR:'节点颜色',
+ TOPIC_BORDER_COLOR:'边框颜色',
+ TOPIC_NOTE:'添加注释',
+ FONT_FAMILY:'字体',
+ FONT_SIZE:'文字大小',
+ FONT_BOLD:'粗体',
+ FONT_ITALIC:'斜体',
+ UNDO:'撤销',
+ REDO:'重做',
+ INSERT:'插入',
+ SAVE:'保存',
+ NOTE:'注释',
+ ADD_TOPIC:'添加节点',
+ LOADING:'载入中……',
+ EXPORT:'导出',
+ PRINT:'打印',
+ PUBLISH:'公开',
+ COLLABORATE:'共享',
+ HISTORY:'历史',
+ DISCARD_CHANGES:'清除改变',
+ FONT_COLOR:'文本颜色',
+ SAVING:'保存中……',
+ SAVE_COMPLETE:'完成保存',
+ ZOOM_IN_ERROR:'缩放过多。',
+ ZOOM_ERROR:'不能再缩放。',
+ ONLY_ONE_TOPIC_MUST_BE_SELECTED:'不能创建节点。仅能选择一个节点。',
+ ONE_TOPIC_MUST_BE_SELECTED:'不能创建节点。必须选择一个节点。',
+ ONLY_ONE_TOPIC_MUST_BE_SELECTED_COLLAPSE:'子节点不能折叠。必须选择一个节点。',
+ SAVE_COULD_NOT_BE_COMPLETED:'保存未完成。稍后再试。',
+ UNEXPECTED_ERROR_LOADING:'抱歉,突遭错误,我们无法处理你的请求。\n尝试重新装载编辑器。如果问题依然存在请联系support@wisemapping.com。',
+ MAIN_TOPIC:'主节点',
+ SUB_TOPIC:'子节点',
+ ISOLATED_TOPIC:'独立节点',
+ CENTRAL_TOPIC:'中心节点',
+ SHORTCUTS:'快捷键'
+ },
+ zh_tw:{
+ ZOOM_IN:'放大',
+ ZOOM_OUT:'縮小',
+ TOPIC_SHAPE:'節點外形',
+ TOPIC_ADD:'添加節點',
+ TOPIC_DELETE:'刪除節點',
+ TOPIC_ICON:'加入圖示',
+ TOPIC_LINK:'添加鏈接',
+ TOPIC_RELATIONSHIP:'關係',
+ TOPIC_COLOR:'節點顏色',
+ TOPIC_BORDER_COLOR:'邊框顏色',
+ TOPIC_NOTE:'添加注釋',
+ FONT_FAMILY:'字體',
+ FONT_SIZE:'文字大小',
+ FONT_BOLD:'粗體',
+ FONT_ITALIC:'斜體',
+ UNDO:'撤銷',
+ REDO:'重做',
+ INSERT:'插入',
+ SAVE:'保存',
+ NOTE:'注釋',
+ ADD_TOPIC:'添加節點',
+ LOADING:'載入中……',
+ EXPORT:'導出',
+ PRINT:'列印',
+ PUBLISH:'公開',
+ COLLABORATE:'共用',
+ HISTORY:'歷史',
+ DISCARD_CHANGES:'清除改變',
+ FONT_COLOR:'文本顏色',
+ SAVING:'保存中……',
+ SAVE_COMPLETE:'完成保存',
+ ZOOM_IN_ERROR:'縮放過多。',
+ ZOOM_ERROR:'不能再縮放。',
+ ONLY_ONE_TOPIC_MUST_BE_SELECTED:'不能創建節點。僅能選擇一個節點。',
+ ONE_TOPIC_MUST_BE_SELECTED:'不能創建節點。必須選擇一個節點。',
+ ONLY_ONE_TOPIC_MUST_BE_SELECTED_COLLAPSE:'子節點不能折疊。必須選擇一個節點。',
+ SAVE_COULD_NOT_BE_COMPLETED:'保存未完成。稍後再試。',
+ UNEXPECTED_ERROR_LOADING:'抱歉,突遭錯誤,我們無法處理你的請求。\n嘗試重新裝載編輯器。如果問題依然存在請聯繫support@wisemapping.com。',
+ MAIN_TOPIC:'主節點',
+ SUB_TOPIC:'子節點',
+ ISOLATED_TOPIC:'獨立節點',
+ CENTRAL_TOPIC:'中心節點',
+ SHORTCUTS:'快捷鍵'
+ }
+};
+mindplot.Messages.BUNDLES['zh'] = mindplot.Messages.zh_tw;
+
diff --git a/mindplot/src/main/javascript/NodeGraph.js b/mindplot/src/main/javascript/NodeGraph.js
index 4715d7b5..daf2997c 100644
--- a/mindplot/src/main/javascript/NodeGraph.js
+++ b/mindplot/src/main/javascript/NodeGraph.js
@@ -1,168 +1,168 @@
-/*
- * Copyright [2011] [wisemapping]
- *
- * Licensed under WiseMapping Public License, Version 1.0 (the "License").
- * It is basically the Apache License, Version 2.0 (the "License") plus the
- * "powered by wisemapping" text requirement on every single page;
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the license at
- *
- * http://www.wisemapping.org/license
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-mindplot.NodeGraph = new Class({
- initialize:function(nodeModel, options) {
- $assert(nodeModel, "model can not be null");
-
- this._options = options;
- this._mouseEvents = true;
- this.setModel(nodeModel);
- this._onFocus = false;
- this._event = new Events();
- this._size = {width:50,height:20};
- },
-
- isReadOnly : function(){
- return this._options.readOnly;
- },
-
- getType : function() {
- var model = this.getModel();
- return model.getType();
- },
-
- setId : function(id) {
- this.getModel().setId(id);
- },
-
- _set2DElement : function(elem2d) {
- this._elem2d = elem2d;
- },
-
- get2DElement : function() {
- $assert(this._elem2d, 'NodeGraph has not been initialized properly');
- return this._elem2d;
- },
-
- setPosition : function(point, fireEvent) {
- throw "Unsupported operation";
- },
-
- addEvent : function(type, listener) {
- var elem = this.get2DElement();
- elem.addEvent(type, listener);
- },
-
- removeEvent : function(type, listener) {
- var elem = this.get2DElement();
- elem.removeEvent(type, listener);
- },
-
- fireEvent: function(type, event) {
- var elem = this.get2DElement();
- elem.fireEvent(type, event);
- },
-
- setMouseEventsEnabled : function(isEnabled) {
- this._mouseEvents = isEnabled;
- },
-
- isMouseEventsEnabled : function() {
- return this._mouseEvents;
- },
-
- getSize : function() {
- return this._size;
- },
-
- setSize : function(size) {
- this._size.width = parseInt(size.width);
- this._size.height = parseInt(size.height);
- },
-
- getModel:function() {
- $assert(this._model, 'Model has not been initialized yet');
- return this._model;
- },
-
- setModel : function(model) {
- $assert(model, 'Model can not be null');
- this._model = model;
- },
-
- getId : function() {
- return this._model.getId();
- },
-
- setOnFocus : function(focus) {
- if (this._onFocus != focus) {
-
- this._onFocus = focus;
- var outerShape = this.getOuterShape();
- if (focus) {
- outerShape.setFill(mindplot.Topic.OUTER_SHAPE_ATTRIBUTES_FOCUS.fillColor);
- outerShape.setOpacity(1);
-
- } else {
- outerShape.setFill(mindplot.Topic.OUTER_SHAPE_ATTRIBUTES.fillColor);
- outerShape.setOpacity(0);
- }
- this.setCursor('move');
-
- // In any case, always try to hide the editor ...
- this.closeEditors();
-
- // Fire event ...
- this.fireEvent(focus ? 'ontfocus' : 'ontblur');
-
- }
- },
-
- isOnFocus : function() {
- return this._onFocus;
- },
-
- dispose : function(workspace) {
- this.setOnFocus(false);
- workspace.removeChild(this);
- },
-
- createDragNode : function(layoutManager) {
- var dragShape = this._buildDragShape();
- return new mindplot.DragTopic(dragShape, this, layoutManager);
- },
-
- _buildDragShape : function() {
- $assert(false, '_buildDragShape must be implemented by all nodes.');
- },
-
- getPosition : function() {
- var model = this.getModel();
- return model.getPosition();
- }
-});
-
-mindplot.NodeGraph.create = function(nodeModel, options) {
- $assert(nodeModel, 'Model can not be null');
-
- var type = nodeModel.getType();
- $assert(type, 'Node model type can not be null');
-
- var result;
- if (type == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
- result = new mindplot.CentralTopic(nodeModel, options);
- } else
- if (type == mindplot.model.INodeModel.MAIN_TOPIC_TYPE) {
- result = new mindplot.MainTopic(nodeModel, options);
- } else {
- $assert(false, "unsupported node type:" + type);
- }
-
- return result;
+/*
+ * Copyright [2011] [wisemapping]
+ *
+ * Licensed under WiseMapping Public License, Version 1.0 (the "License").
+ * It is basically the Apache License, Version 2.0 (the "License") plus the
+ * "powered by wisemapping" text requirement on every single page;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the license at
+ *
+ * http://www.wisemapping.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+mindplot.NodeGraph = new Class({
+ initialize:function(nodeModel, options) {
+ $assert(nodeModel, "model can not be null");
+
+ this._options = options;
+ this._mouseEvents = true;
+ this.setModel(nodeModel);
+ this._onFocus = false;
+ this._event = new Events();
+ this._size = {width:50,height:20};
+ },
+
+ isReadOnly : function(){
+ return this._options.readOnly;
+ },
+
+ getType : function() {
+ var model = this.getModel();
+ return model.getType();
+ },
+
+ setId : function(id) {
+ this.getModel().setId(id);
+ },
+
+ _set2DElement : function(elem2d) {
+ this._elem2d = elem2d;
+ },
+
+ get2DElement : function() {
+ $assert(this._elem2d, 'NodeGraph has not been initialized properly');
+ return this._elem2d;
+ },
+
+ setPosition : function(point, fireEvent) {
+ throw "Unsupported operation";
+ },
+
+ addEvent : function(type, listener) {
+ var elem = this.get2DElement();
+ elem.addEvent(type, listener);
+ },
+
+ removeEvent : function(type, listener) {
+ var elem = this.get2DElement();
+ elem.removeEvent(type, listener);
+ },
+
+ fireEvent: function(type, event) {
+ var elem = this.get2DElement();
+ elem.fireEvent(type, event);
+ },
+
+ setMouseEventsEnabled : function(isEnabled) {
+ this._mouseEvents = isEnabled;
+ },
+
+ isMouseEventsEnabled : function() {
+ return this._mouseEvents;
+ },
+
+ getSize : function() {
+ return this._size;
+ },
+
+ setSize : function(size) {
+ this._size.width = parseInt(size.width);
+ this._size.height = parseInt(size.height);
+ },
+
+ getModel:function() {
+ $assert(this._model, 'Model has not been initialized yet');
+ return this._model;
+ },
+
+ setModel : function(model) {
+ $assert(model, 'Model can not be null');
+ this._model = model;
+ },
+
+ getId : function() {
+ return this._model.getId();
+ },
+
+ setOnFocus : function(focus) {
+ if (this._onFocus != focus) {
+
+ this._onFocus = focus;
+ var outerShape = this.getOuterShape();
+ if (focus) {
+ outerShape.setFill(mindplot.Topic.OUTER_SHAPE_ATTRIBUTES_FOCUS.fillColor);
+ outerShape.setOpacity(1);
+
+ } else {
+ outerShape.setFill(mindplot.Topic.OUTER_SHAPE_ATTRIBUTES.fillColor);
+ outerShape.setOpacity(0);
+ }
+ this.setCursor('move');
+
+ // In any case, always try to hide the editor ...
+ this.closeEditors();
+
+ // Fire event ...
+ this.fireEvent(focus ? 'ontfocus' : 'ontblur',this);
+
+ }
+ },
+
+ isOnFocus : function() {
+ return this._onFocus;
+ },
+
+ dispose : function(workspace) {
+ this.setOnFocus(false);
+ workspace.removeChild(this);
+ },
+
+ createDragNode : function(layoutManager) {
+ var dragShape = this._buildDragShape();
+ return new mindplot.DragTopic(dragShape, this, layoutManager);
+ },
+
+ _buildDragShape : function() {
+ $assert(false, '_buildDragShape must be implemented by all nodes.');
+ },
+
+ getPosition : function() {
+ var model = this.getModel();
+ return model.getPosition();
+ }
+});
+
+mindplot.NodeGraph.create = function(nodeModel, options) {
+ $assert(nodeModel, 'Model can not be null');
+
+ var type = nodeModel.getType();
+ $assert(type, 'Node model type can not be null');
+
+ var result;
+ if (type == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
+ result = new mindplot.CentralTopic(nodeModel, options);
+ } else
+ if (type == mindplot.model.INodeModel.MAIN_TOPIC_TYPE) {
+ result = new mindplot.MainTopic(nodeModel, options);
+ } else {
+ $assert(false, "unsupported node type:" + type);
+ }
+
+ return result;
};
\ No newline at end of file
diff --git a/mindplot/src/main/javascript/RelationshipLine.js b/mindplot/src/main/javascript/Relationship.js
similarity index 66%
rename from mindplot/src/main/javascript/RelationshipLine.js
rename to mindplot/src/main/javascript/Relationship.js
index bfd19450..b18f5af7 100644
--- a/mindplot/src/main/javascript/RelationshipLine.js
+++ b/mindplot/src/main/javascript/Relationship.js
@@ -15,15 +15,25 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-mindplot.RelationshipLine = new Class({
- Extends: mindplot.ConnectionLine,
- initialize:function(sourceNode, targetNode, lineType) {
- this.parent(sourceNode, targetNode, lineType);
+mindplot.Relationship = new Class({
+ Extends:mindplot.ConnectionLine,
+ initialize:function (sourceNode, targetNode, model) {
+ $assert(sourceNode,"sourceNode can not be null");
+ $assert(targetNode,"targetNode can not be null");
+
+ this.parent(sourceNode, targetNode, model.getLineType());
+ this.setModel(model);
+
+ var strokeColor = mindplot.Relationship.getStrokeColor();
this._line2d.setIsSrcControlPointCustom(false);
this._line2d.setIsDestControlPointCustom(false);
+ this._line2d.setCursor('pointer');
+ this._line2d.setStroke(1, 'solid', strokeColor);
+ this._line2d.setDashed(4, 2);
this._focusShape = this._createLine(this.getLineType(), mindplot.ConnectionLine.SIMPLE_CURVED);
this._focusShape.setStroke(2, "solid", "#3f96ff");
+
var ctrlPoints = this._line2d.getControlPoints();
this._focusShape.setSrcControlPoint(ctrlPoints[0]);
this._focusShape.setDestControlPoint(ctrlPoints[1]);
@@ -32,23 +42,35 @@ mindplot.RelationshipLine = new Class({
this._isInWorkspace = false;
this._controlPointsController = new mindplot.ControlPoint();
- var strokeColor = mindplot.RelationshipLine.getStrokeColor();
this._startArrow = new web2d.Arrow();
- this._endArrow = new web2d.Arrow();
this._startArrow.setStrokeColor(strokeColor);
this._startArrow.setStrokeWidth(2);
- this._endArrow.setStrokeColor(strokeColor);
- this._endArrow.setStrokeWidth(2);
- this._line2d.setStroke(1, 'solid', strokeColor);
+ this.setShowStartArrow(true);
+ // Share style is disable ...
+ if (this._showEndArrow) {
+ this._endArrow = new web2d.Arrow();
+ this._endArrow.setStrokeColor(strokeColor);
+ this._endArrow.setStrokeWidth(2);
+ }
+
+ // Position the line ...
+ if ($defined(model.getSrcCtrlPoint())) {
+ var srcPoint = model.getSrcCtrlPoint().clone();
+ this.setSrcControlPoint(srcPoint);
+ }
+ if ($defined(model.getDestCtrlPoint())) {
+ var destPoint = model.getDestCtrlPoint().clone();
+ this.setDestControlPoint(destPoint);
+ }
},
- setStroke : function(color, style, opacity) {
+ setStroke:function (color, style, opacity) {
this.parent(color, style, opacity);
this._startArrow.setStrokeColor(color);
},
- redraw : function() {
+ redraw:function () {
var line2d = this._line2d;
var sourceTopic = this._sourceTopic;
var sourcePosition = sourceTopic.getPosition();
@@ -56,7 +78,7 @@ mindplot.RelationshipLine = new Class({
var targetTopic = this._targetTopic;
var targetPosition = targetTopic.getPosition();
- var sPos,tPos;
+ var sPos, tPos;
this._line2d.setStroke(2);
var ctrlPoints = this._line2d.getControlPoints();
if (!this._line2d.isDestControlPointCustom() && !this._line2d.isSrcControlPointCustom()) {
@@ -82,7 +104,7 @@ mindplot.RelationshipLine = new Class({
line2d.moveToFront();
//Positionate Arrows
- this._positionateArrows();
+ this._positionArrows();
// Add connector ...
this._positionateConnector(targetTopic);
@@ -94,62 +116,74 @@ mindplot.RelationshipLine = new Class({
this._controlPointsController.redraw();
},
- _positionateArrows : function() {
+ _positionArrows:function () {
var tpos = this._line2d.getTo();
- this._endArrow.setFrom(tpos.x, tpos.y);
-
var spos = this._line2d.getFrom();
- this._startArrow.setFrom(spos.x, spos.y);
- this._endArrow.moveToBack();
+ this._startArrow.setFrom(spos.x, spos.y);
this._startArrow.moveToBack();
+ if (this._endArrow) {
+ this._endArrow.setFrom(tpos.x, tpos.y);
+ this._endArrow.moveToBack();
+ }
+
if (this._line2d.getType() == "CurvedLine") {
var controlPoints = this._line2d.getControlPoints();
this._startArrow.setControlPoint(controlPoints[0]);
- this._endArrow.setControlPoint(controlPoints[1]);
+ if (this._endArrow) {
+ this._endArrow.setControlPoint(controlPoints[1]);
+ }
} else {
this._startArrow.setControlPoint(this._line2d.getTo());
- this._endArrow.setControlPoint(this._line2d.getFrom());
+ if (this._endArrow) {
+ this._endArrow.setControlPoint(this._line2d.getFrom());
+ }
}
- this._endArrow.setVisibility(this.isVisible() && this._showEndArrow);
+ if (this._showEndArrow) {
+ this._endArrow.setVisibility(this.isVisible());
+ }
this._startArrow.setVisibility(this.isVisible() && this._showStartArrow);
},
- addToWorkspace : function(workspace) {
+ addToWorkspace:function (workspace) {
workspace.appendChild(this._focusShape);
workspace.appendChild(this._controlPointsController);
+
this._controlPointControllerListener = this._initializeControlPointController.bind(this);
this._line2d.addEvent('click', this._controlPointControllerListener);
this._isInWorkspace = true;
workspace.appendChild(this._startArrow);
- workspace.appendChild(this._endArrow);
+ if (this._endArrow)
+ workspace.appendChild(this._endArrow);
this.parent(workspace);
+ this._positionArrows();
},
- _initializeControlPointController : function() {
+ _initializeControlPointController:function () {
this.setOnFocus(true);
},
- removeFromWorkspace : function(workspace) {
+ removeFromWorkspace:function (workspace) {
workspace.removeChild(this._focusShape);
workspace.removeChild(this._controlPointsController);
this._line2d.removeEvent('click', this._controlPointControllerListener);
this._isInWorkspace = false;
workspace.removeChild(this._startArrow);
- workspace.removeChild(this._endArrow);
+ if (this._endArrow)
+ workspace.removeChild(this._endArrow);
this.parent(workspace);
},
- getType : function() {
- return mindplot.RelationshipLine.type;
+ getType:function () {
+ return mindplot.Relationship.type;
},
- setOnFocus : function(focus) {
+ setOnFocus:function (focus) {
// Change focus shape
if (this.isOnFocus() != focus) {
if (focus) {
@@ -160,12 +194,12 @@ mindplot.RelationshipLine = new Class({
this._controlPointsController.setVisibility(focus);
this._onFocus = focus;
- this._line2d.setCursor(this.isOnFocus() ? 'default' : 'pointer');
+ console.log("foucus:....");
}
},
- _refreshShape : function () {
+ _refreshShape:function () {
var sPos = this._line2d.getFrom();
var tPos = this._line2d.getTo();
var ctrlPoints = this._line2d.getControlPoints();
@@ -179,7 +213,7 @@ mindplot.RelationshipLine = new Class({
this._focusShape.updateLine();
},
- addEvent : function(type, listener) {
+ addEvent:function (type, listener) {
// Translate to web 2d events ...
if (type == 'onfocus') {
type = 'mousedown';
@@ -189,21 +223,22 @@ mindplot.RelationshipLine = new Class({
line.addEvent(type, listener);
},
- isOnFocus : function() {
+ isOnFocus:function () {
return this._onFocus;
},
- isInWorkspace : function() {
+ isInWorkspace:function () {
return this._isInWorkspace;
},
- setVisibility : function(value) {
+ setVisibility:function (value) {
this.parent(value);
- this._endArrow.setVisibility(this._showEndArrow && value);
+ if (this._showEndArrow)
+ this._endArrow.setVisibility(this._showEndArrow);
this._startArrow.setVisibility(this._showStartArrow && value);
},
- setOpacity : function(opacity) {
+ setOpacity:function (opacity) {
this.parent(opacity);
if (this._showEndArrow)
this._endArrow.setOpacity(opacity);
@@ -211,74 +246,73 @@ mindplot.RelationshipLine = new Class({
this._startArrow.setOpacity(opacity);
},
- setShowEndArrow : function(visible) {
+ setShowEndArrow:function (visible) {
this._showEndArrow = visible;
if (this._isInWorkspace)
this.redraw();
},
- setShowStartArrow : function(visible) {
+ setShowStartArrow:function (visible) {
this._showStartArrow = visible;
if (this._isInWorkspace)
this.redraw();
},
- isShowEndArrow : function() {
- return this._showEndArrow;
- },
-
- isShowStartArrow : function() {
- return this._showStartArrow;
- },
-
- setFrom : function(x, y) {
- $assert(x, "x must be defined");
- $assert(y, "y must be defined");
+ setFrom:function (x, y) {
+ $assert($defined(x), "x must be defined");
+ $assert($defined(y), "y must be defined");
this._line2d.setFrom(x, y);
this._startArrow.setFrom(x, y);
},
- setTo : function(x, y) {
- $assert(y, "x must be defined");
- $assert(y, "y must be defined");
+ setTo:function (x, y) {
+ $assert($defined(x), "x must be defined");
+ $assert($defined(y), "y must be defined");
this._line2d.setTo(x, y);
- this._endArrow.setFrom(x, y);
+ if (this._endArrow)
+ this._endArrow.setFrom(x, y);
},
- setSrcControlPoint : function(control) {
+ setSrcControlPoint:function (control) {
this._line2d.setSrcControlPoint(control);
this._startArrow.setControlPoint(control);
},
- setDestControlPoint : function(control) {
+ setDestControlPoint:function (control) {
this._line2d.setDestControlPoint(control);
- this._endArrow.setControlPoint(control);
+ if (this._showEndArrow)
+ this._endArrow.setControlPoint(control);
},
- getControlPoints : function() {
+ getControlPoints:function () {
return this._line2d.getControlPoints();
},
- isSrcControlPointCustom : function() {
+ isSrcControlPointCustom:function () {
return this._line2d.isSrcControlPointCustom();
},
- isDestControlPointCustom : function() {
+ isDestControlPointCustom:function () {
return this._line2d.isDestControlPointCustom();
},
- setIsSrcControlPointCustom : function(isCustom) {
+ setIsSrcControlPointCustom:function (isCustom) {
this._line2d.setIsSrcControlPointCustom(isCustom);
},
- setIsDestControlPointCustom : function(isCustom) {
+ setIsDestControlPointCustom:function (isCustom) {
this._line2d.setIsDestControlPointCustom(isCustom);
- }});
+ },
+
+ getId: function(){
+ return this._model.getId();
+ }
+});
-mindplot.RelationshipLine.type = "RelationshipLine";
-mindplot.RelationshipLine.getStrokeColor = function() {
+mindplot.Relationship.type = "Relationship";
+mindplot.Relationship.getStrokeColor = function () {
return '#9b74e6';
};
diff --git a/mindplot/src/main/javascript/StandaloneActionDispatcher.js b/mindplot/src/main/javascript/StandaloneActionDispatcher.js
index ae368c99..0c0ca2d4 100644
--- a/mindplot/src/main/javascript/StandaloneActionDispatcher.js
+++ b/mindplot/src/main/javascript/StandaloneActionDispatcher.js
@@ -17,45 +17,45 @@
*/
mindplot.StandaloneActionDispatcher = new Class({
- Extends: mindplot.ActionDispatcher,
- initialize: function(commandContext) {
+ Extends:mindplot.ActionDispatcher,
+ initialize:function (commandContext) {
this.parent(commandContext);
this._actionRunner = new mindplot.DesignerActionRunner(commandContext, this);
},
- hasBeenChanged: function() {
+ hasBeenChanged:function () {
// @todo: This don't seems to belong here.
this._actionRunner.hasBeenChanged();
},
- addTopic:function(nodeModel, parentTopicId, animated) {
+ addTopic:function (nodeModel, parentTopicId, animated) {
var command = new mindplot.commands.AddTopicCommand(nodeModel, parentTopicId, animated);
this.execute(command);
},
- connectByRelation: function(model) {
+ connectByRelation:function (model) {
var command = new mindplot.commands.AddRelationshipCommand(model);
this.execute(command);
},
- deleteTopics: function(topicsIds, relIds) {
+ deleteEntities:function (topicsIds, relIds) {
var command = new mindplot.commands.DeleteCommand(topicsIds, relIds);
this.execute(command);
},
- dragTopic: function(topicId, position, order, parentTopic) {
+ dragTopic:function (topicId, position, order, parentTopic) {
var command = new mindplot.commands.DragTopicCommand(topicId, position, order, parentTopic);
this.execute(command);
},
- moveTopic: function(topicId, position) {
+ moveTopic:function (topicId, position) {
$assert($defined(topicId), "topicsId can not be null");
$assert($defined(position), "position can not be null");
- var commandFunc = function(topic, value) {
+ var commandFunc = function (topic, value) {
var result = topic.getPosition();
- mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeMoveEvent, {node:topic.getModel(),position:value});
+ mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeMoveEvent, {node:topic.getModel(), position:value});
return result;
};
@@ -63,14 +63,14 @@ mindplot.StandaloneActionDispatcher = new Class({
this.execute(command);
},
- moveControlPoint: function(ctrlPoint, point) {
+ moveControlPoint:function (ctrlPoint, point) {
var command = new mindplot.commands.MoveControlPointCommand(ctrlPoint, point);
this.execute(command);
},
- changeFontStyleToTopic: function(topicsIds) {
+ changeFontStyleToTopic:function (topicsIds) {
- var commandFunc = function(topic) {
+ var commandFunc = function (topic) {
var result = topic.getFontStyle();
var style = (result == "italic") ? "normal" : "italic";
topic.setFontStyle(style, true);
@@ -81,10 +81,10 @@ mindplot.StandaloneActionDispatcher = new Class({
},
- changeTextToTopic : function(topicsIds, text) {
+ changeTextToTopic:function (topicsIds, text) {
$assert($defined(topicsIds), "topicsIds can not be null");
- var commandFunc = function(topic, value) {
+ var commandFunc = function (topic, value) {
var result = topic.getText();
topic.setText(value);
return result;
@@ -94,12 +94,12 @@ mindplot.StandaloneActionDispatcher = new Class({
this.execute(command);
},
- changeFontFamilyToTopic: function(topicIds, fontFamily) {
+ changeFontFamilyToTopic:function (topicIds, fontFamily) {
$assert(topicIds, "topicIds can not be null");
$assert(fontFamily, "fontFamily can not be null");
- var commandFunc = function(topic, fontFamily) {
+ var commandFunc = function (topic, fontFamily) {
var result = topic.getFontFamily();
topic.setFontFamily(fontFamily, true);
@@ -111,11 +111,11 @@ mindplot.StandaloneActionDispatcher = new Class({
this.execute(command);
},
- changeFontColorToTopic: function(topicsIds, color) {
+ changeFontColorToTopic:function (topicsIds, color) {
$assert(topicsIds, "topicIds can not be null");
$assert(color, "color can not be null");
- var commandFunc = function(topic, color) {
+ var commandFunc = function (topic, color) {
var result = topic.getFontColor();
topic.setFontColor(color, true);
return result;
@@ -126,11 +126,11 @@ mindplot.StandaloneActionDispatcher = new Class({
this.execute(command);
},
- changeBackgroundColorToTopic: function(topicsIds, color) {
+ changeBackgroundColorToTopic:function (topicsIds, color) {
$assert(topicsIds, "topicIds can not be null");
$assert(color, "color can not be null");
- var commandFunc = function(topic, color) {
+ var commandFunc = function (topic, color) {
var result = topic.getBackgroundColor();
topic.setBackgroundColor(color);
return result;
@@ -141,11 +141,11 @@ mindplot.StandaloneActionDispatcher = new Class({
this.execute(command);
},
- changeBorderColorToTopic : function(topicsIds, color) {
+ changeBorderColorToTopic:function (topicsIds, color) {
$assert(topicsIds, "topicIds can not be null");
$assert(color, "topicIds can not be null");
- var commandFunc = function(topic, color) {
+ var commandFunc = function (topic, color) {
var result = topic.getBorderColor();
topic.setBorderColor(color);
return result;
@@ -156,11 +156,11 @@ mindplot.StandaloneActionDispatcher = new Class({
this.execute(command);
},
- changeFontSizeToTopic : function(topicsIds, size) {
+ changeFontSizeToTopic:function (topicsIds, size) {
$assert(topicsIds, "topicIds can not be null");
$assert(size, "size can not be null");
- var commandFunc = function(topic, size) {
+ var commandFunc = function (topic, size) {
var result = topic.getFontSize();
topic.setFontSize(size, true);
@@ -172,11 +172,11 @@ mindplot.StandaloneActionDispatcher = new Class({
this.execute(command);
},
- changeShapeTypeToTopic : function(topicsIds, shapeType) {
+ changeShapeTypeToTopic:function (topicsIds, shapeType) {
$assert(topicsIds, "topicsIds can not be null");
$assert(shapeType, "shapeType can not be null");
- var commandFunc = function(topic, shapeType) {
+ var commandFunc = function (topic, shapeType) {
var result = topic.getShapeType();
topic.setShapeType(shapeType, true);
return result;
@@ -186,10 +186,10 @@ mindplot.StandaloneActionDispatcher = new Class({
this.execute(command);
},
- changeFontWeightToTopic : function(topicsIds) {
+ changeFontWeightToTopic:function (topicsIds) {
$assert(topicsIds, "topicsIds can not be null");
- var commandFunc = function(topic) {
+ var commandFunc = function (topic) {
var result = topic.getFontWeight();
var weight = (result == "bold") ? "normal" : "bold";
topic.setFontWeight(weight, true);
@@ -202,10 +202,10 @@ mindplot.StandaloneActionDispatcher = new Class({
this.execute(command);
},
- shrinkBranch : function(topicsIds, collapse) {
+ shrinkBranch:function (topicsIds, collapse) {
$assert(topicsIds, "topicsIds can not be null");
- var commandFunc = function(topic, isShrink) {
+ var commandFunc = function (topic, isShrink) {
topic.setChildrenShrunken(isShrink);
return !isShrink;
};
@@ -214,22 +214,22 @@ mindplot.StandaloneActionDispatcher = new Class({
this.execute(command, false);
},
- addFeatureToTopic : function(topicId, featureType, attributes) {
+ addFeatureToTopic:function (topicId, featureType, attributes) {
var command = new mindplot.commands.AddFeatureToTopicCommand(topicId, featureType, attributes);
this.execute(command);
},
- changeFeatureToTopic : function(topicId, featureId, attributes) {
+ changeFeatureToTopic:function (topicId, featureId, attributes) {
var command = new mindplot.commands.ChangeFeatureToTopicCommand(topicId, featureId, attributes);
this.execute(command);
},
- removeFeatureFromTopic : function(topicId, featureId) {
+ removeFeatureFromTopic:function (topicId, featureId) {
var command = new mindplot.commands.RemoveFeatureFromTopicCommand(topicId, featureId);
this.execute(command);
},
- execute:function(command) {
+ execute:function (command) {
this._actionRunner.execute(command);
mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.DoLayout);
}
@@ -237,62 +237,64 @@ mindplot.StandaloneActionDispatcher = new Class({
});
mindplot.CommandContext = new Class({
- initialize: function(designer) {
+ initialize:function (designer) {
$assert(designer, "designer can not be null");
this._designer = designer;
},
- findTopics:function(topicsIds) {
+ findTopics:function (topicsIds) {
$assert($defined(topicsIds), "topicsIds can not be null");
if (!(topicsIds instanceof Array)) {
topicsIds = [topicsIds];
}
var designerTopics = this._designer.getModel().getTopics();
- return designerTopics.filter(function(topic) {
+ return designerTopics.filter(function (topic) {
return topicsIds.contains(topic.getId());
});
},
- deleteTopic:function(topic) {
- this._designer._removeNode(topic);
+ deleteTopic:function (topic) {
+ this._designer._removeTopic(topic);
},
- createTopic:function(model, isVisible) {
+ createTopic:function (model, isVisible) {
$assert(model, "model can not be null");
return this._designer._nodeModelToNodeGraph(model, isVisible);
},
- createModel:function() {
+ createModel:function () {
var mindmap = this._designer.getMindmap();
return mindmap.createNode(mindplot.NodeModel.MAIN_TOPIC_TYPE);
},
- connect:function(childTopic, parentTopic, isVisible) {
+ connect:function (childTopic, parentTopic, isVisible) {
childTopic.connectTo(parentTopic, this._designer._workspace, isVisible);
- } ,
+ },
- disconnect:function(topic) {
+ disconnect:function (topic) {
topic.disconnect(this._designer._workspace);
},
- createRelationship:function(model) {
+ createRelationship:function (model) {
$assert(model, "model cannot be null");
return this._designer.createRelationship(model);
},
- removeRelationship:function(model) {
- this._designer.removeRelationship(model);
+
+ deleteRelationship:function (relationship) {
+ this._designer._deleteRelationship(relationship);
},
- findRelationships:function(lineIds) {
- var result = [];
- lineIds.forEach(function(lineId) {
- var line = this._designer.getModel().getRelationshipsById()[lineId];
- if ($defined(line)) {
- result.push(line);
- }
- }.bind(this));
- return result;
+ findRelationships:function (relIds) {
+ $assert($defined(relIds), "relId can not be null");
+ if (!(relIds instanceof Array)) {
+ relIds = [relIds];
+ }
+
+ var designerRel = this._designer.getModel().getRelationships();
+ return designerRel.filter(function (rel) {
+ return relIds.contains(rel.getId());
+ });
}
});
diff --git a/mindplot/src/main/javascript/Topic.js b/mindplot/src/main/javascript/Topic.js
index 2e6984b2..195b128e 100644
--- a/mindplot/src/main/javascript/Topic.js
+++ b/mindplot/src/main/javascript/Topic.js
@@ -315,7 +315,7 @@ mindplot.Topic = new Class({
this._relationships.push(relationship);
},
- removeRelationship : function(relationship) {
+ deleteRelationship : function(relationship) {
this._relationships.erase(relationship);
},
diff --git a/mindplot/src/main/javascript/collaboration/framework/collab/model/NodeModel.js b/mindplot/src/main/javascript/collaboration/framework/collab/model/NodeModel.js
index bac6c41e..e880d6be 100644
--- a/mindplot/src/main/javascript/collaboration/framework/collab/model/NodeModel.js
+++ b/mindplot/src/main/javascript/collaboration/framework/collab/model/NodeModel.js
@@ -76,7 +76,7 @@ mindplot.collaboration.framework.brix.model.NodeModel = new Class({
for (var i = 0; i < brixChildren.size(); i++) {
var brixNodeModel = brixChildren.get(i);
var cmodel = new mindplot.collaboration.framework.brix.model.NodeModel(this._brixFramework, brixNodeModel, this.getMindmap());
- actionDispatcher.deleteTopics([cmodel.getId()]);
+ actionDispatcher.deleteEntities([cmodel.getId()]);
}
} catch(e) {
console.trace();
diff --git a/mindplot/src/main/javascript/commands/AddRelationshipCommand.js b/mindplot/src/main/javascript/commands/AddRelationshipCommand.js
index 72825571..4b5cce71 100644
--- a/mindplot/src/main/javascript/commands/AddRelationshipCommand.js
+++ b/mindplot/src/main/javascript/commands/AddRelationshipCommand.js
@@ -32,7 +32,7 @@ mindplot.commands.AddRelationshipCommand = new Class({
relationship.setOnFocus(true);
},
undoExecute: function(commandContext) {
- var relationship = commandContext.removeRelationship(this._model);
+ var relationship = commandContext.deleteRelationship(this._model);
// @Todo: Esto esta mal. Designer toca el mindmap ...
// this._mindmap.removeRelationship(this._model);
diff --git a/mindplot/src/main/javascript/commands/DeleteCommand.js b/mindplot/src/main/javascript/commands/DeleteCommand.js
index 7e0c4a6f..57771d1d 100644
--- a/mindplot/src/main/javascript/commands/DeleteCommand.js
+++ b/mindplot/src/main/javascript/commands/DeleteCommand.js
@@ -18,7 +18,7 @@
mindplot.commands.DeleteCommand = new Class({
Extends:mindplot.Command,
- initialize: function(topicIds, relIds) {
+ initialize:function (topicIds, relIds) {
$assert($defined(topicIds), 'topicIds can not be null');
this.parent();
@@ -30,19 +30,20 @@ mindplot.commands.DeleteCommand = new Class({
this._id = mindplot.Command._nextUUID();
},
- execute: function(commandContext) {
+ execute:function (commandContext) {
var topics = commandContext.findTopics(this._topicIds);
if (topics.length > 0) {
topics.forEach(
- function(topic, index) {
+ function (topic, index) {
var model = topic.getModel();
// Delete relationships
var relationships = topic.getRelationships();
while (relationships.length > 0) {
var relationship = relationships[0];
- this._deletedRelationships.push(relationship.getModel().clone());
- commandContext.removeRelationship(relationship.getModel());
+
+ this._deletedRelationships.push(relationship);
+ commandContext.deleteRelationship(relationship);
}
this._deletedTopicModels.push(model);
@@ -61,24 +62,22 @@ mindplot.commands.DeleteCommand = new Class({
}.bind(this)
);
}
- var lines = commandContext.findRelationships(this._relIds);
- if (lines.length > 0) {
- lines.forEach(function(line, index) {
- if (line.isInWorkspace()) {
- this._deletedRelationships.push(line.getModel().clone());
- commandContext.removeRelationship(line.getModel());
- }
+ var rels = commandContext.findRelationships(this._relIds);
+ if (rels.length > 0) {
+ rels.forEach(function (rel) {
+ this._deletedRelationships.push(rel.getModel().clone());
+ commandContext.deleteRelationship(rel);
}.bind(this));
}
},
- undoExecute: function(commandContext) {
+ undoExecute:function (commandContext) {
var topics = commandContext.findTopics(this._topicIds);
var parent = commandContext.findTopics(this._parentTopicIds);
this._deletedTopicModels.forEach(
- function(model, index) {
+ function (model, index) {
var topic = commandContext.createTopic(model);
// Was the topic connected?
@@ -90,8 +89,8 @@ mindplot.commands.DeleteCommand = new Class({
}.bind(this)
);
this._deletedRelationships.forEach(
- function(relationship, index) {
- commandContext.createRelationship(relationship);
+ function (rel) {
+ commandContext.createRelationship(rel);
}.bind(this));
this._deletedTopicModels = [];
diff --git a/mindplot/src/main/javascript/model/IMindmap.js b/mindplot/src/main/javascript/model/IMindmap.js
index dc703a70..8b09c5fe 100644
--- a/mindplot/src/main/javascript/model/IMindmap.js
+++ b/mindplot/src/main/javascript/model/IMindmap.js
@@ -1,144 +1,144 @@
-/*
- * Copyright [2011] [wisemapping]
- *
- * Licensed under WiseMapping Public License, Version 1.0 (the "License").
- * It is basically the Apache License, Version 2.0 (the "License") plus the
- * "powered by wisemapping" text requirement on every single page;
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the license at
- *
- * http://www.wisemapping.org/license
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-mindplot.model.IMindmap = new Class({
- initialize : function() {
- throw "Unsupported operation";
- },
-
- getCentralTopic : function() {
- return this.getBranches()[0];
- },
-
- getDescription : function() {
- throw "Unsupported operation";
- },
-
- setDescription : function(value) {
- throw "Unsupported operation";
- },
-
- getId : function() {
- throw "Unsupported operation";
- },
-
- setId : function(id) {
- throw "Unsupported operation";
- },
-
- getVersion : function() {
- throw "Unsupported operation";
- },
-
- setVersion : function(version) {
- throw "Unsupported operation";
- },
-
- addBranch : function(nodeModel) {
- throw "Unsupported operation";
- },
-
- getBranches : function() {
- throw "Unsupported operation";
- },
-
- removeBranch : function(node) {
- throw "Unsupported operation";
- },
-
- getRelationships : function() {
- throw "Unsupported operation";
- },
-
- connect : function(parent, child) {
- // Child already has a parent ?
- $assert(!child.getParent(), 'Child model seems to be already connected');
-
- // Connect node...
- parent.appendChild(child);
-
- // Remove from the branch ...
- this.removeBranch(child);
- },
-
- disconnect : function(child) {
- var parent = child.getParent();
- $assert(child, 'Child can not be null.');
- $assert(parent, 'Child model seems to be already connected');
-
- parent.removeChild(child);
- this.addBranch(child);
- },
-
- hasAlreadyAdded : function(node) {
- throw "Unsupported operation";
- },
-
- createNode : function(type, id) {
- throw "Unsupported operation";
- },
-
- createRelationship : function(fromNode, toNode) {
- throw "Unsupported operation";
- },
-
- addRelationship : function(rel) {
- throw "Unsupported operation";
- },
-
- removeRelationship : function(relationship) {
- throw "Unsupported operation";
- },
-
- inspect : function() {
- var result = '';
- result = '{ ';
-
- var branches = this.getBranches();
- result = result + "version:" + this.getVersion();
- result = result + " , [";
-
- for (var i = 0; i < branches.length; i++) {
- var node = branches[i];
- if (i != 0) {
- result = result + ',\n ';
- }
- result = result + "(" + i + ") =>" + node.inspect();
- }
- result = result + "]";
-
- result = result + ' } ';
- return result;
- },
-
- copyTo : function(target) {
- var source = this;
- var version = source.getVersion();
- target.setVersion(version);
-
- var desc = this.getDescription();
- target.setDescription(desc);
-
- // Then the rest of the branches ...
- var sbranchs = source.getBranches();
- sbranchs.forEach(function(snode) {
- var tnode = target.createNode(snode.getType(), snode.getId());
- snode.copyTo(tnode);
- target.addBranch(tnode);
- });
- }
+/*
+ * Copyright [2011] [wisemapping]
+ *
+ * Licensed under WiseMapping Public License, Version 1.0 (the "License").
+ * It is basically the Apache License, Version 2.0 (the "License") plus the
+ * "powered by wisemapping" text requirement on every single page;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the license at
+ *
+ * http://www.wisemapping.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+mindplot.model.IMindmap = new Class({
+ initialize : function() {
+ throw "Unsupported operation";
+ },
+
+ getCentralTopic : function() {
+ return this.getBranches()[0];
+ },
+
+ getDescription : function() {
+ throw "Unsupported operation";
+ },
+
+ setDescription : function(value) {
+ throw "Unsupported operation";
+ },
+
+ getId : function() {
+ throw "Unsupported operation";
+ },
+
+ setId : function(id) {
+ throw "Unsupported operation";
+ },
+
+ getVersion : function() {
+ throw "Unsupported operation";
+ },
+
+ setVersion : function(version) {
+ throw "Unsupported operation";
+ },
+
+ addBranch : function(nodeModel) {
+ throw "Unsupported operation";
+ },
+
+ getBranches : function() {
+ throw "Unsupported operation";
+ },
+
+ removeBranch : function(node) {
+ throw "Unsupported operation";
+ },
+
+ getRelationships : function() {
+ throw "Unsupported operation";
+ },
+
+ connect : function(parent, child) {
+ // Child already has a parent ?
+ $assert(!child.getParent(), 'Child model seems to be already connected');
+
+ // Connect node...
+ parent.appendChild(child);
+
+ // Remove from the branch ...
+ this.removeBranch(child);
+ },
+
+ disconnect : function(child) {
+ var parent = child.getParent();
+ $assert(child, 'Child can not be null.');
+ $assert(parent, 'Child model seems to be already connected');
+
+ parent.removeChild(child);
+ this.addBranch(child);
+ },
+
+ hasAlreadyAdded : function(node) {
+ throw "Unsupported operation";
+ },
+
+ createNode : function(type, id) {
+ throw "Unsupported operation";
+ },
+
+ createRelationship : function(fromNode, toNode) {
+ throw "Unsupported operation";
+ },
+
+ addRelationship : function(rel) {
+ throw "Unsupported operation";
+ },
+
+ deleteRelationship : function(relationship) {
+ throw "Unsupported operation";
+ },
+
+ inspect : function() {
+ var result = '';
+ result = '{ ';
+
+ var branches = this.getBranches();
+ result = result + "version:" + this.getVersion();
+ result = result + " , [";
+
+ for (var i = 0; i < branches.length; i++) {
+ var node = branches[i];
+ if (i != 0) {
+ result = result + ',\n ';
+ }
+ result = result + "(" + i + ") =>" + node.inspect();
+ }
+ result = result + "]";
+
+ result = result + ' } ';
+ return result;
+ },
+
+ copyTo : function(target) {
+ var source = this;
+ var version = source.getVersion();
+ target.setVersion(version);
+
+ var desc = this.getDescription();
+ target.setDescription(desc);
+
+ // Then the rest of the branches ...
+ var sbranchs = source.getBranches();
+ sbranchs.forEach(function(snode) {
+ var tnode = target.createNode(snode.getType(), snode.getId());
+ snode.copyTo(tnode);
+ target.addBranch(tnode);
+ });
+ }
});
\ No newline at end of file
diff --git a/mindplot/src/main/javascript/model/Mindmap.js b/mindplot/src/main/javascript/model/Mindmap.js
index 99227896..983eb46f 100644
--- a/mindplot/src/main/javascript/model/Mindmap.js
+++ b/mindplot/src/main/javascript/model/Mindmap.js
@@ -106,7 +106,7 @@ mindplot.model.Mindmap = new Class({
this._relationships.push(relationship);
},
- removeRelationship : function(relationship) {
+ deleteRelationship : function(relationship) {
this._relationships.erase(relationship);
}
}
diff --git a/mindplot/src/main/javascript/model/RelationshipModel.js b/mindplot/src/main/javascript/model/RelationshipModel.js
index f0e6b85a..6f26f1a5 100644
--- a/mindplot/src/main/javascript/model/RelationshipModel.js
+++ b/mindplot/src/main/javascript/model/RelationshipModel.js
@@ -16,7 +16,17 @@
* limitations under the License.
*/
mindplot.model.RelationshipModel = new Class({
- initialize:function(sourceTopicId, targetTopicId) {
+ Static:{
+ _nextUUID:function () {
+ if (!$defined(mindplot.model.RelationshipModel._uuid)) {
+ mindplot.model.RelationshipModel._uuid = 0;
+ }
+ mindplot.model.RelationshipModel._uuid = mindplot.model.RelationshipModel._uuid + 1;
+ return mindplot.model.RelationshipModel._uuid;
+ }
+ },
+
+ initialize:function (sourceTopicId, targetTopicId) {
$assert($defined(sourceTopicId), 'from node type can not be null');
$assert($defined(targetTopicId), 'to node type can not be null');
@@ -30,59 +40,60 @@ mindplot.model.RelationshipModel = new Class({
this._startArrow = false;
},
- getFromNode : function() {
+ getFromNode:function () {
return this._sourceTargetId;
},
- getToNode : function() {
+ getToNode:function () {
return this._targetTopicId;
},
- getId : function() {
+ getId:function () {
+ $assert(this._id, "id is null");
return this._id;
},
- getLineType : function() {
+ getLineType:function () {
return this._lineType;
},
- setLineType : function(lineType) {
+ setLineType:function (lineType) {
this._lineType = lineType;
},
- getSrcCtrlPoint : function() {
+ getSrcCtrlPoint:function () {
return this._srcCtrlPoint;
},
- setSrcCtrlPoint : function(srcCtrlPoint) {
+ setSrcCtrlPoint:function (srcCtrlPoint) {
this._srcCtrlPoint = srcCtrlPoint;
},
- getDestCtrlPoint : function() {
+ getDestCtrlPoint:function () {
return this._destCtrlPoint;
},
- setDestCtrlPoint : function(destCtrlPoint) {
+ setDestCtrlPoint:function (destCtrlPoint) {
this._destCtrlPoint = destCtrlPoint;
},
- getEndArrow : function() {
+ getEndArrow:function () {
return this._endArrow;
},
- setEndArrow : function(endArrow) {
+ setEndArrow:function (endArrow) {
this._endArrow = endArrow;
},
- getStartArrow : function() {
+ getStartArrow:function () {
return this._startArrow;
},
- setStartArrow : function(startArrow) {
+ setStartArrow:function (startArrow) {
this._startArrow = startArrow;
},
- clone : function(model) {
+ clone:function (model) {
var result = new mindplot.model.RelationshipModel(this._sourceTargetId, this._targetTopicId);
result._id = this._id;
result._lineType = this._lineType;
@@ -93,21 +104,9 @@ mindplot.model.RelationshipModel = new Class({
return result;
},
- inspect : function() {
+ inspect:function () {
return '(fromNode:' + this.getFromNode().getId() + ' , toNode: ' + this.getToNode().getId() + ')';
}
});
-/**
- * @todo: This method must be implemented.
- */
-mindplot.model.RelationshipModel._nextUUID = function() {
- if (!$defined(this._uuid)) {
- this._uuid = 0;
- }
-
- this._uuid = this._uuid + 1;
- return this._uuid;
-}
-
diff --git a/mindplot/src/main/javascript/persistence/XMLSerializer_Pela.js b/mindplot/src/main/javascript/persistence/XMLSerializer_Pela.js
index 77c187a8..d2b07e3f 100644
--- a/mindplot/src/main/javascript/persistence/XMLSerializer_Pela.js
+++ b/mindplot/src/main/javascript/persistence/XMLSerializer_Pela.js
@@ -176,24 +176,25 @@ mindplot.persistence.XMLSerializer_Pela = new Class({
},
_relationshipToXML : function(document, relationship) {
- var relationDom = document.createElement("relationship");
- relationDom.setAttribute("srcTopicId", relationship.getFromNode());
- relationDom.setAttribute("destTopicId", relationship.getToNode());
+ var result = document.createElement("relationship");
+ result.setAttribute("srcTopicId", relationship.getFromNode());
+ result.setAttribute("destTopicId", relationship.getToNode());
+
var lineType = relationship.getLineType();
- relationDom.setAttribute("lineType", lineType);
+ result.setAttribute("lineType", lineType);
if (lineType == mindplot.ConnectionLine.CURVED || lineType == mindplot.ConnectionLine.SIMPLE_CURVED) {
if ($defined(relationship.getSrcCtrlPoint())) {
var srcPoint = relationship.getSrcCtrlPoint();
- relationDom.setAttribute("srcCtrlPoint", Math.round(srcPoint.x) + "," + Math.round(srcPoint.y));
+ result.setAttribute("srcCtrlPoint", Math.round(srcPoint.x) + "," + Math.round(srcPoint.y));
}
if ($defined(relationship.getDestCtrlPoint())) {
var destPoint = relationship.getDestCtrlPoint();
- relationDom.setAttribute("destCtrlPoint", Math.round(destPoint.x) + "," + Math.round(destPoint.y));
+ result.setAttribute("destCtrlPoint", Math.round(destPoint.x) + "," + Math.round(destPoint.y));
}
}
- relationDom.setAttribute("endArrow", relationship.getEndArrow());
- relationDom.setAttribute("startArrow", relationship.getStartArrow());
- return relationDom;
+ result.setAttribute("endArrow", relationship.getEndArrow());
+ result.setAttribute("startArrow", relationship.getStartArrow());
+ return result;
},
loadFromDom : function(dom, mapId) {
diff --git a/mindplot/src/main/javascript/widget/Menu.js b/mindplot/src/main/javascript/widget/Menu.js
index 9cb10c2e..df636b0e 100644
--- a/mindplot/src/main/javascript/widget/Menu.js
+++ b/mindplot/src/main/javascript/widget/Menu.js
@@ -258,7 +258,7 @@ mindplot.widget.Menu = new Class({
this._addButton('deleteTopic', true, true, function () {
- designer.deleteCurrentNode();
+ designer.deleteSelectedEntities();
});
this._registerTooltip('deleteTopic', $msg('TOPIC_DELETE'), "Delete");
@@ -446,7 +446,7 @@ mindplot.widget.Menu = new Class({
designer.addEvent('onblur', function () {
var topics = designer.getModel().filterSelectedTopics();
- var rels = designer.getModel().filterSelectedRelations();
+ var rels = designer.getModel().filterSelectedRelationships();
this._toolbarElems.forEach(function (button) {
var disable = false;
@@ -472,7 +472,7 @@ mindplot.widget.Menu = new Class({
designer.addEvent('onfocus', function () {
var topics = designer.getModel().filterSelectedTopics();
- var rels = designer.getModel().filterSelectedRelations();
+ var rels = designer.getModel().filterSelectedRelationships();
this._toolbarElems.forEach(function (button) {
if (button.isTopicAction() && topics.length > 0) {
diff --git a/mindplot/src/main/resources/messages_en.properties b/mindplot/src/main/resources/messages_en.properties
index 9c23210e..ca497be2 100644
--- a/mindplot/src/main/resources/messages_en.properties
+++ b/mindplot/src/main/resources/messages_en.properties
@@ -43,3 +43,5 @@ SUB_TOPIC=Sub Topic
ISOLATED_TOPIC=Isolated Topic
CENTRAL_TOPIC=Central Topic
SHORTCUTS=Keyboard Shortcuts
+ENTITIES_COULD_NOT_BE_DELETED=Could not delete topic or relation. At least one map entity must be selected.
+CENTRAL_TOPIC_CAN_NOT_BE_DELETED=Central topic can not be deleted.
\ No newline at end of file
diff --git a/wise-webapp/src/main/java/com/wisemapping/service/UserServiceImpl.java b/wise-webapp/src/main/java/com/wisemapping/service/UserServiceImpl.java
index df30dd56..3444a77e 100755
--- a/wise-webapp/src/main/java/com/wisemapping/service/UserServiceImpl.java
+++ b/wise-webapp/src/main/java/com/wisemapping/service/UserServiceImpl.java
@@ -90,6 +90,9 @@ public class UserServiceImpl
@Override
public void auditLogin(@NotNull User user) {
+ if(user==null){
+ throw new IllegalArgumentException("User can not be null");
+ }
final AccessAuditory accessAuditory = new AccessAuditory();
accessAuditory.setUser(user);
accessAuditory.setLoginDate(Calendar.getInstance());