From 665c07035922bd6d4061b8488468b1edeab3e47b Mon Sep 17 00:00:00 2001 From: Paulo Veiga Date: Wed, 27 Jul 2011 14:53:32 -0300 Subject: [PATCH] Extend assert support. --- core-js/src/main/javascript/Utils.js | 2 +- mindplot/src/main/javascript/Board.js | 6 +- mindplot/src/main/javascript/BoardEntry.js | 4 +- mindplot/src/main/javascript/DragTopic.js | 6 +- .../src/main/javascript/FixedDistanceBoard.js | 2 +- mindplot/src/main/javascript/Icon.js | 1 + mindplot/src/main/javascript/IconModel.js | 90 +- mindplot/src/main/javascript/ImageIcon.js | 287 +- mindplot/src/main/javascript/Issue.txt | 6 + mindplot/src/main/javascript/LinkIcon.js | 314 +-- mindplot/src/main/javascript/LinkModel.js | 76 +- .../src/main/javascript/MainTopicBoard.js | 2 +- mindplot/src/main/javascript/Mindmap.js | 1 - .../src/main/javascript/MindmapDesigner.js | 2407 ++++++++--------- mindplot/src/main/javascript/NodeModel.js | 10 +- .../src/main/javascript/RelationshipLine.js | 464 ++-- .../src/main/javascript/RelationshipModel.js | 175 +- mindplot/src/main/javascript/ScreenManager.js | 266 +- .../javascript/SingleCommandDispatcher.js | 6 +- mindplot/src/main/javascript/TextEditor.js | 212 +- .../src/main/javascript/TextEditorFactory.js | 40 +- mindplot/src/main/javascript/Tip.js | 175 +- .../main/javascript/VariableDistanceBoard.js | 352 +-- mindplot/src/main/javascript/Workspace.js | 3 +- .../javascript/XMLMindmapSerializerFactory.js | 75 +- .../javascript/XMLMindmapSerializer_Beta.js | 569 ++-- .../javascript/XMLMindmapSerializer_Pela.js | 704 +++-- mindplot/src/main/javascript/util/Shape.js | 2 +- 28 files changed, 2993 insertions(+), 3264 deletions(-) diff --git a/core-js/src/main/javascript/Utils.js b/core-js/src/main/javascript/Utils.js index ef7d3bae..c6c369c2 100644 --- a/core-js/src/main/javascript/Utils.js +++ b/core-js/src/main/javascript/Utils.js @@ -59,7 +59,7 @@ objects.extend = function(subClass, baseClass) { }; $assert = function(assert, message) { - if (!assert) { + if (!$defined(assert) || !assert) { var stack; try { null.eval(); diff --git a/mindplot/src/main/javascript/Board.js b/mindplot/src/main/javascript/Board.js index 8423252e..8d86507f 100644 --- a/mindplot/src/main/javascript/Board.js +++ b/mindplot/src/main/javascript/Board.js @@ -66,7 +66,7 @@ mindplot.BidirectionalArray = new Class({ }, get :function(index, sign) { - $assert($defined(index), 'Illegal argument, index must be passed.'); + $assert(index, 'Illegal argument, index must be passed.'); if ($defined(sign)) { $assert(index >= 0, 'Illegal absIndex value'); index = index * sign; @@ -82,14 +82,14 @@ mindplot.BidirectionalArray = new Class({ }, set : function(index, elem) { - $assert($defined(index), 'Illegal index value'); + $assert(index, 'Illegal index value'); var array = (index >= 0) ? this._rightElem : this._leftElem; array[Math.abs(index)] = elem; }, length : function(index) { - $assert($defined(index), 'Illegal index value'); + $assert(index, 'Illegal index value'); return (index >= 0) ? this._rightElem.length : this._leftElem.length; }, diff --git a/mindplot/src/main/javascript/BoardEntry.js b/mindplot/src/main/javascript/BoardEntry.js index 1b15a63f..a9c8f64c 100644 --- a/mindplot/src/main/javascript/BoardEntry.js +++ b/mindplot/src/main/javascript/BoardEntry.js @@ -42,7 +42,7 @@ mindplot.BoardEntry = new Class({ }, setUpperLimit : function(value) { - $assert($defined(value), "upper limit can not be null"); + $assert(value, "upper limit can not be null"); $assert(!isNaN(value), "illegal value"); this._upperLimit = value; }, @@ -56,7 +56,7 @@ mindplot.BoardEntry = new Class({ }, setLowerLimit : function(value) { - $assert($defined(value), "upper limit can not be null"); + $assert(value, "upper limit can not be null"); $assert(!isNaN(value), "illegal value"); this._lowerLimit = value; }, diff --git a/mindplot/src/main/javascript/DragTopic.js b/mindplot/src/main/javascript/DragTopic.js index 4df59e76..820ec4a3 100644 --- a/mindplot/src/main/javascript/DragTopic.js +++ b/mindplot/src/main/javascript/DragTopic.js @@ -18,8 +18,8 @@ mindplot.DragTopic = function(dragShape, draggedNode) { - $assert($defined(dragShape), 'Rect can not be null.'); - $assert($defined(draggedNode), 'draggedNode can not be null.'); + $assert(dragShape, 'Rect can not be null.'); + $assert(draggedNode, 'draggedNode can not be null.'); this._elem2d = dragShape; this._order = null; @@ -68,7 +68,7 @@ mindplot.DragTopic.prototype.disconnect = function(workspace) mindplot.DragTopic.prototype.canBeConnectedTo = function(targetTopic) { - $assert($defined(targetTopic), 'parent can not be null'); + $assert(targetTopic, 'parent can not be null'); var result = true; if (!targetTopic.areChildrenShrinked() && !targetTopic.isCollapsed()) diff --git a/mindplot/src/main/javascript/FixedDistanceBoard.js b/mindplot/src/main/javascript/FixedDistanceBoard.js index 70cb950d..7582ae5b 100644 --- a/mindplot/src/main/javascript/FixedDistanceBoard.js +++ b/mindplot/src/main/javascript/FixedDistanceBoard.js @@ -245,7 +245,7 @@ mindplot.FixedDistanceBoard = new Class({ }, lookupEntryByPosition : function(pos) { - $assert($defined(pos), 'position can not be null'); + $assert(pos, 'position can not be null'); var entries = this._entries; var result = null; diff --git a/mindplot/src/main/javascript/Icon.js b/mindplot/src/main/javascript/Icon.js index f31d9169..0149590b 100644 --- a/mindplot/src/main/javascript/Icon.js +++ b/mindplot/src/main/javascript/Icon.js @@ -18,6 +18,7 @@ mindplot.Icon = new Class({ initialize:function(url) { + $assert(url, 'topic can not be null'); this._image = new web2d.Image(); this._image.setHref(url); this._image.setSize(12, 12); diff --git a/mindplot/src/main/javascript/IconModel.js b/mindplot/src/main/javascript/IconModel.js index 7d633655..b508885c 100644 --- a/mindplot/src/main/javascript/IconModel.js +++ b/mindplot/src/main/javascript/IconModel.js @@ -1,64 +1,58 @@ /* -* 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. -*/ + * 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.IconModel = function(iconType, topic) -{ - $assert(iconType, 'Icon id can not be null'); - $assert(topic, 'topic can not be null'); - this._iconType = iconType; - this._id = mindplot.IconModel._nextUUID(); - this._topic = topic; -}; +mindplot.IconModel = new Class({ + initialize:function(iconType, topic) { + $assert(iconType, 'Icon id can not be null'); + $assert(topic, 'topic can not be null'); -mindplot.IconModel.prototype.getId = function() -{ - return this._id; -}; + this._iconType = iconType; + this._id = mindplot.IconModel._nextUUID(); + this._topic = topic; + }, -mindplot.IconModel.prototype.getIconType = function() -{ - return this._iconType; -}; + getId : function() { + return this._id; + }, + + getIconType : function() { + return this._iconType; + }, -mindplot.IconModel.prototype.setIconType = function(iconType) -{ - this._iconType = iconType; -}; + setIconType : function(iconType) { + this._iconType = iconType; + }, -mindplot.IconModel.prototype.getTopic = function() -{ - return this._topic; -}; + getTopic : function() { + return this._topic; + }, -mindplot.IconModel.prototype.isIconModel = function() -{ - return true; -}; + isIconModel : function() { + return true; + }}); /** * @todo: This method must be implemented. */ -mindplot.IconModel._nextUUID = function() -{ - if (!$defined(this._uuid)) - { +mindplot.IconModel._nextUUID = function() { + if (!$defined(this._uuid)) { this._uuid = 0; } diff --git a/mindplot/src/main/javascript/ImageIcon.js b/mindplot/src/main/javascript/ImageIcon.js index af5a0fee..695f924e 100644 --- a/mindplot/src/main/javascript/ImageIcon.js +++ b/mindplot/src/main/javascript/ImageIcon.js @@ -1,155 +1,170 @@ /* -* 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. -*/ + * 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.ImageIcon = function(iconModel, topic, designer) { - - $assert(iconModel, 'iconModel can not be null'); - $assert(topic, 'topic can not be null'); - $assert(designer, 'designer can not be null'); - this._topic = topic; - this._iconModel = iconModel; - this._designer = designer; - - // Build graph image representation ... - var iconType = iconModel.getIconType(); - var imgUrl = this._getImageUrl(iconType); - mindplot.Icon.call(this, imgUrl); - - //Remove - var divContainer = designer.getWorkSpace().getScreenManager().getContainer(); - var tip = mindplot.Tip.getInstance(divContainer); - - var container = new Element('div'); - var removeImage = new Element('img'); - removeImage.src = "../images/bin.png"; - removeImage.inject(container); - - if (!$defined(designer._viewMode)|| ($defined(designer._viewMode) && !designer._viewMode)) +mindplot.ImageIcon = new Class( { + Extends:mindplot.Icon, + initialize:function(iconModel, topic, designer) { + $assert(iconModel, 'iconModel can not be null'); + $assert(topic, 'topic can not be null'); + $assert(designer, 'designer can not be null'); + this._topic = topic; + this._iconModel = iconModel; + this._designer = designer; - removeImage.addEvent('click', function(event) { - var actionRunner = designer._actionRunner; - var command = new mindplot.commands.RemoveIconFromTopicCommand(this._topic.getId(), iconModel); - actionRunner.execute(command); - tip.forceClose(); - }.bindWithEvent(this)); - - //Icon - var image = this.getImage(); - image.addEventListener('click', function(event) { + // Build graph image representation ... var iconType = iconModel.getIconType(); - var newIconType = this._getNextFamilyIconId(iconType); - iconModel.setIconType(newIconType); + var imgUrl = this._getImageUrl(iconType); - var imgUrl = this._getImageUrl(newIconType); - this._image.setHref(imgUrl); + this.parent(imgUrl); - // // @Todo: Support revert of change icon ... - // var actionRunner = designer._actionRunner; - // var command = new mindplot.commands.ChangeIconFromTopicCommand(this._topic.getId()); - // this._actionRunner.execute(command); + //Remove + var divContainer = designer.getWorkSpace().getScreenManager().getContainer(); + var tip = mindplot.Tip.getInstance(divContainer); + + var container = new Element('div'); + var removeImage = new Element('img'); + removeImage.src = "../images/bin.png"; + removeImage.inject(container); + + if (!$defined(designer._viewMode) || ($defined(designer._viewMode) && !designer._viewMode)) { + + removeImage.addEvent('click', function(event) { + var actionRunner = designer._actionRunner; + var command = new mindplot.commands.RemoveIconFromTopicCommand(this._topic.getId(), iconModel); + actionRunner.execute(command); + tip.forceClose(); + }.bindWithEvent(this)); + + //Icon + var image = this.getImage(); + image.addEventListener('click', function(event) { + var iconType = iconModel.getIconType(); + var newIconType = this._getNextFamilyIconId(iconType); + iconModel.setIconType(newIconType); + + var imgUrl = this._getImageUrl(newIconType); + this._image.setHref(imgUrl); + + // // @Todo: Support revert of change icon ... + // var actionRunner = designer._actionRunner; + // var command = new mindplot.commands.ChangeIconFromTopicCommand(this._topic.getId()); + // this._actionRunner.execute(command); - }.bindWithEvent(this)); + }.bindWithEvent(this)); - var imageIcon = this; - image.addEventListener('mouseover', function(event) { - tip.open(event, container, imageIcon); - }); - image.addEventListener('mouseout', function(event) { - tip.close(event); - }); - image.addEventListener('mousemove', function(event) { - tip.updatePosition(event); - }); + var imageIcon = this; + image.addEventListener('mouseover', function(event) { + tip.open(event, container, imageIcon); + }); + image.addEventListener('mouseout', function(event) { + tip.close(event); + }); + image.addEventListener('mousemove', function(event) { + tip.updatePosition(event); + }); - } -}; - -objects.extend(mindplot.ImageIcon, mindplot.Icon); - -mindplot.ImageIcon.prototype.initialize = function() { - -}; - -mindplot.ImageIcon.prototype._getImageUrl = function(iconId) { - return "../icons/"+iconId+".png"; -}; - -mindplot.ImageIcon.prototype.getModel = function() { - return this._iconModel; -}; - - -mindplot.ImageIcon.prototype._getNextFamilyIconId = function(iconId) { - - var familyIcons = this._getFamilyIcons(iconId); - $assert(familyIcons != null, "Family Icon not found!"); - - var result = null; - for (var i = 0; i < familyIcons.length && result == null; i++) - { - if (familyIcons[i] == iconId) { - var nextIconId; - //Is last one? - if (i == (familyIcons.length - 1)) { - result = familyIcons[0]; - } else { - result = familyIcons[i + 1]; } - break; + }, + + _getImageUrl : function(iconId) { + return "../icons/" + iconId + ".png"; + }, + + getModel : function() { + return this._iconModel; + }, + + _getNextFamilyIconId : function(iconId) { + + var familyIcons = this._getFamilyIcons(iconId); + $assert(familyIcons != null, "Family Icon not found!"); + + var result = null; + for (var i = 0; i < familyIcons.length && result == null; i++) { + if (familyIcons[i] == iconId) { + var nextIconId; + //Is last one? + if (i == (familyIcons.length - 1)) { + result = familyIcons[0]; + } else { + result = familyIcons[i + 1]; + } + break; + } + } + + return result; + }, + + _getFamilyIcons : function(iconId) { + $assert(iconId != null, "id must not be null"); + $assert(iconId.indexOf("_") != -1, "Invalid icon id (it must contain '_')"); + + var result = null; + for (var i = 0; i < mindplot.ImageIcon.prototype.ICON_FAMILIES.length; i++) { + var family = mindplot.ImageIcon.prototype.ICON_FAMILIES[i]; + var iconFamilyId = iconId.substr(0, iconId.indexOf("_")); + + if (family.id == iconFamilyId) { + result = family.icons; + break; + } + } + return result; + }, + + getId : function() { + return this._iconType; + }, + + getUiId : function() { + return this._uiId; } } +); - return result; -}; -mindplot.ImageIcon.prototype._getFamilyIcons = function(iconId) { - $assert(iconId != null, "id must not be null"); - $assert(iconId.indexOf("_") != -1, "Invalid icon id (it must contain '_')"); - - var result = null; - for (var i = 0; i < mindplot.ImageIcon.prototype.ICON_FAMILIES.length; i++) - { - var family = mindplot.ImageIcon.prototype.ICON_FAMILIES[i]; - var iconFamilyId = iconId.substr(0, iconId.indexOf("_")); - - if (family.id == iconFamilyId) { - result = family.icons; - break; - } - } - return result; -}; - -mindplot.ImageIcon.prototype.getId = function() -{ - return this._iconType; -}; - -mindplot.ImageIcon.prototype.getUiId = function() -{ - return this._uiId; -}; - - - -mindplot.ImageIcon.prototype.ICON_FAMILIES = [{"id": "face", "icons" : ["face_plain","face_sad","face_crying","face_smile","face_surprise","face_wink"]},{"id": "funy", "icons" : ["funy_angel","funy_devilish","funy_glasses","funy_grin","funy_kiss","funy_monkey"]},{"id": "conn", "icons" : ["conn_connect","conn_disconnect"]},{"id": "sport", "icons" : ["sport_basketball","sport_football","sport_golf","sport_raquet","sport_shuttlecock","sport_soccer","sport_tennis"]},{"id": "bulb", "icons" : ["bulb_light_on","bulb_light_off"]},{"id": "thumb", "icons" : ["thumb_thumb_up","thumb_thumb_down"]},{"id": "tick", "icons" : ["tick_tick","tick_cross"]},{"id": "onoff", "icons" : ["onoff_clock","onoff_clock_red","onoff_add","onoff_delete","onoff_status_offline","onoff_status_online"]},{"id": "money", "icons" : ["money_money","money_dollar","money_euro","money_pound","money_yen","money_coins","money_ruby"]},{"id": "time", "icons" : ["time_calendar","time_clock","time_hourglass"]},{"id": "chart", "icons" : ["chart_bar","chart_line","chart_curve","chart_pie","chart_organisation"]},{"id": "sign", "icons" : ["sign_warning","sign_info","sign_stop","sign_help","sign_cancel"]},{"id": "hard", "icons" : ["hard_cd","hard_computer","hard_controller","hard_driver_disk","hard_ipod","hard_keyboard","hard_mouse","hard_printer"]},{"id": "soft", "icons" : ["soft_bug","soft_cursor","soft_database_table","soft_database","soft_feed","soft_folder_explore","soft_rss","soft_penguin"]},{"id": "arrow", "icons" : ["arrow_up","arrow_down","arrow_left","arrow_right"]},{"id": "arrowc", "icons" : ["arrowc_rotate_anticlockwise","arrowc_rotate_clockwise","arrowc_turn_left","arrowc_turn_right"]},{"id": "people", "icons" : ["people_group","people_male1","people_male2","people_female1","people_female2"]},{"id": "mail", "icons" : ["mail_envelop","mail_mailbox","mail_edit","mail_list"]},{"id": "flag", "icons" : ["flag_blue","flag_green","flag_orange","flag_pink","flag_purple","flag_yellow"]},{"id": "bullet", "icons" : ["bullet_black","bullet_blue","bullet_green","bullet_orange","bullet_red","bullet_pink","bullet_purple"]},{"id": "tag", "icons" : ["tag_blue","tag_green","tag_orange","tag_red","tag_pink","tag_yellow"]},{"id": "object", "icons" : ["object_bell","object_clanbomber","object_key","object_pencil","object_phone","object_magnifier","object_clip","object_music","object_star","object_wizard","object_house","object_cake","object_camera","object_palette","object_rainbow"]}] +mindplot.ImageIcon.prototype.ICON_FAMILIES = [ + {"id": "face", "icons" : ["face_plain","face_sad","face_crying","face_smile","face_surprise","face_wink"]}, + {"id": "funy", "icons" : ["funy_angel","funy_devilish","funy_glasses","funy_grin","funy_kiss","funy_monkey"]}, + {"id": "conn", "icons" : ["conn_connect","conn_disconnect"]}, + {"id": "sport", "icons" : ["sport_basketball","sport_football","sport_golf","sport_raquet","sport_shuttlecock","sport_soccer","sport_tennis"]}, + {"id": "bulb", "icons" : ["bulb_light_on","bulb_light_off"]}, + {"id": "thumb", "icons" : ["thumb_thumb_up","thumb_thumb_down"]}, + {"id": "tick", "icons" : ["tick_tick","tick_cross"]}, + {"id": "onoff", "icons" : ["onoff_clock","onoff_clock_red","onoff_add","onoff_delete","onoff_status_offline","onoff_status_online"]}, + {"id": "money", "icons" : ["money_money","money_dollar","money_euro","money_pound","money_yen","money_coins","money_ruby"]}, + {"id": "time", "icons" : ["time_calendar","time_clock","time_hourglass"]}, + {"id": "chart", "icons" : ["chart_bar","chart_line","chart_curve","chart_pie","chart_organisation"]}, + {"id": "sign", "icons" : ["sign_warning","sign_info","sign_stop","sign_help","sign_cancel"]}, + {"id": "hard", "icons" : ["hard_cd","hard_computer","hard_controller","hard_driver_disk","hard_ipod","hard_keyboard","hard_mouse","hard_printer"]}, + {"id": "soft", "icons" : ["soft_bug","soft_cursor","soft_database_table","soft_database","soft_feed","soft_folder_explore","soft_rss","soft_penguin"]}, + {"id": "arrow", "icons" : ["arrow_up","arrow_down","arrow_left","arrow_right"]}, + {"id": "arrowc", "icons" : ["arrowc_rotate_anticlockwise","arrowc_rotate_clockwise","arrowc_turn_left","arrowc_turn_right"]}, + {"id": "people", "icons" : ["people_group","people_male1","people_male2","people_female1","people_female2"]}, + {"id": "mail", "icons" : ["mail_envelop","mail_mailbox","mail_edit","mail_list"]}, + {"id": "flag", "icons" : ["flag_blue","flag_green","flag_orange","flag_pink","flag_purple","flag_yellow"]}, + {"id": "bullet", "icons" : ["bullet_black","bullet_blue","bullet_green","bullet_orange","bullet_red","bullet_pink","bullet_purple"]}, + {"id": "tag", "icons" : ["tag_blue","tag_green","tag_orange","tag_red","tag_pink","tag_yellow"]}, + {"id": "object", "icons" : ["object_bell","object_clanbomber","object_key","object_pencil","object_phone","object_magnifier","object_clip","object_music","object_star","object_wizard","object_house","object_cake","object_camera","object_palette","object_rainbow"]} +] diff --git a/mindplot/src/main/javascript/Issue.txt b/mindplot/src/main/javascript/Issue.txt index 155b8213..aeb0ea74 100644 --- a/mindplot/src/main/javascript/Issue.txt +++ b/mindplot/src/main/javascript/Issue.txt @@ -17,3 +17,9 @@ Later nodos en vez de borrarlos. * Menu contextual para agregar nodos. * Es necesario manejar para los central topic to main topic correctamente el concepto de height. + + + +From: RelationshipLine +- Falta topic... +XMLMindmapSerializer_Beta \ No newline at end of file diff --git a/mindplot/src/main/javascript/LinkIcon.js b/mindplot/src/main/javascript/LinkIcon.js index 76c22ccd..3d6c38d2 100644 --- a/mindplot/src/main/javascript/LinkIcon.js +++ b/mindplot/src/main/javascript/LinkIcon.js @@ -1,160 +1,161 @@ /* -* 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. -*/ + * 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.LinkIcon = function(urlModel, topic, designer) { - var divContainer=designer.getWorkSpace().getScreenManager().getContainer(); - var bubbleTip = mindplot.BubbleTip.getInstance(divContainer); - mindplot.Icon.call(this, mindplot.LinkIcon.IMAGE_URL); - this._linkModel = urlModel; - this._topic = topic; - this._designer = designer; - var image = this.getImage(); - var imgContainer = new Element('div').setStyles({textAlign:'center', cursor:'pointer'}); - this._img = new Element('img'); - var url = urlModel.getUrl(); - this._img.src = 'http://open.thumbshots.org/image.pxf?url=' + url; +mindplot.LinkIcon = new Class({ - if (url.indexOf('http:') == -1) - { - url = 'http://' + url; + Extends:mindplot.Icon, + initialize:function(urlModel, topic, designer) { + $assert(urlModel, "urlModel can not be null"); + $assert(designer, "designer can not be null"); + $assert(topic, "topic can not be null"); + + this.parent(mindplot.LinkIcon.IMAGE_URL); + + var divContainer = designer.getWorkSpace().getScreenManager().getContainer(); + var bubbleTip = mindplot.BubbleTip.getInstance(divContainer); + + this._linkModel = urlModel; + this._topic = topic; + this._designer = designer; + var image = this.getImage(); + var imgContainer = new Element('div').setStyles({textAlign:'center', cursor:'pointer'}); + this._img = new Element('img'); + var url = urlModel.getUrl(); + this._img.src = 'http://open.thumbshots.org/image.pxf?url=' + url; + + if (url.indexOf('http:') == -1) { + url = 'http://' + url; + } + this._img.alt = url; + this._url = url; + var openWindow = function() { + var wOpen; + var sOptions; + + sOptions = 'status=yes,menubar=yes,scrollbars=yes,resizable=yes,toolbar=yes'; + sOptions = sOptions + ',width=' + (screen.availWidth - 10).toString(); + sOptions = sOptions + ',height=' + (screen.availHeight - 122).toString(); + sOptions = sOptions + ',screenX=0,screenY=0,left=0,top=0'; + var url = this._img.alt; + wOpen = window.open(url, "link", "width=100px, height=100px"); + wOpen.focus(); + wOpen.moveTo(0, 0); + wOpen.resizeTo(screen.availWidth, screen.availHeight); + }; + + this._img.addEvent('click', openWindow.bindWithEvent(this)); + this._img.inject(imgContainer); + + var attribution = new Element('div').setStyles({fontSize:10, textAlign:"center"}); + attribution.innerHTML = "About Thumbshots thumbnails"; + + var container = new Element('div'); + var element = new Element('div').setStyles({borderBottom:'1px solid #e5e5e5'}); + + var title = new Element('div').setStyles({fontSize:12, textAlign:'center'}); + this._link = new Element('span'); + this._link.href = url; + this._link.innerHTML = url; + this._link.setStyle("text-decoration", "underline"); + this._link.setStyle("cursor", "pointer"); + this._link.inject(title); + this._link.addEvent('click', openWindow.bindWithEvent(this)); + title.inject(element); + + imgContainer.inject(element); + attribution.inject(element); + element.inject(container); + + if (!$defined(designer._viewMode) || ($defined(designer._viewMode) && !designer._viewMode)) { + var buttonContainer = new Element('div').setStyles({paddingTop:5, textAlign:'center'}); + var editBtn = new Element('input', {type:'button', 'class':'btn-primary', value:'Edit'}).addClass('button').inject(buttonContainer); + var removeBtn = new Element('input', {type:'button', value:'Remove','class':'btn-primary'}).addClass('button').inject(buttonContainer); + + editBtn.setStyle("margin-right", "3px"); + removeBtn.setStyle("margin-left", "3px"); + + removeBtn.addEvent('click', function(event) { + var command = new mindplot.commands.RemoveLinkFromTopicCommand(this._topic.getId()); + designer._actionRunner.execute(command); + bubbleTip.forceClose(); + }.bindWithEvent(this)); + + var okButtonId = 'okLinkButtonId'; + editBtn.addEvent('click', function(event) { + var topic = this._topic; + var designer = this._designer; + var link = this; + var okFunction = function(e) { + var result = false; + var url = urlInput.value; + if ("" != url.trim()) { + link._img.src = 'http://open.thumbshots.org/image.pxf?url=' + url; + link._img.alt = url; + link._link.href = url; + link._link.innerHTML = url; + this._linkModel.setUrl(url); + result = true; + } + return result; + }; + var msg = new Element('div'); + var urlText = new Element('div').inject(msg); + urlText.innerHTML = "URL:"; + + var formElem = new Element('form', {'action': 'none', 'id':'linkFormId'}); + var urlInput = new Element('input', {'type': 'text', 'size':30,'value':url}); + urlInput.inject(formElem); + formElem.inject(msg); + + formElem.addEvent('submit', function(e) { + $(okButtonId).fireEvent('click', e); + e = new Event(e); + e.stop(); + }); + + + var dialog = mindplot.LinkIcon.buildDialog(designer, okFunction, okButtonId); + dialog.adopt(msg).show(); + + }.bindWithEvent(this)); + buttonContainer.inject(container); + } + + var linkIcon = this; + image.addEventListener('mouseover', function(event) { + bubbleTip.open(event, container, linkIcon); + }); + image.addEventListener('mousemove', function(event) { + bubbleTip.updatePosition(event); + }); + image.addEventListener('mouseout', function(event) { + bubbleTip.close(event); + }); + }, + + getUrl : function() { + return this._url; + }, + + getModel : function() { + return this._linkModel; } - this._img.alt = url; - this._url=url; - var openWindow = function() { - var wOpen; - var sOptions; - - sOptions = 'status=yes,menubar=yes,scrollbars=yes,resizable=yes,toolbar=yes'; - sOptions = sOptions + ',width=' + (screen.availWidth - 10).toString(); - sOptions = sOptions + ',height=' + (screen.availHeight - 122).toString(); - sOptions = sOptions + ',screenX=0,screenY=0,left=0,top=0'; - var url = this._img.alt; - wOpen = window.open(url, "link", "width=100px, height=100px"); - wOpen.focus(); - wOpen.moveTo(0, 0); - wOpen.resizeTo(screen.availWidth, screen.availHeight); - }; - this._img.addEvent('click', openWindow.bindWithEvent(this)); - this._img.inject(imgContainer); - - var attribution = new Element('div').setStyles({fontSize:10, textAlign:"center"}); - attribution.innerHTML = "About Thumbshots thumbnails"; - - var container = new Element('div'); - var element = new Element('div').setStyles({borderBottom:'1px solid #e5e5e5'}); - - var title = new Element('div').setStyles({fontSize:12, textAlign:'center'}); - this._link = new Element('span'); - this._link.href = url; - this._link.innerHTML = url; - this._link.setStyle("text-decoration", "underline"); - this._link.setStyle("cursor", "pointer"); - this._link.inject(title); - this._link.addEvent('click', openWindow.bindWithEvent(this)); - title.inject(element); - - imgContainer.inject(element); - attribution.inject(element); - element.inject(container); - - if(!$defined(designer._viewMode)|| ($defined(designer._viewMode) && !designer._viewMode)){ - var buttonContainer = new Element('div').setStyles({paddingTop:5, textAlign:'center'}); - var editBtn = new Element('input', {type:'button', 'class':'btn-primary', value:'Edit','class':'btn-primary'}).addClass('button').inject(buttonContainer); - var removeBtn = new Element('input', {type:'button', value:'Remove','class':'btn-primary'}).addClass('button').inject(buttonContainer); - - editBtn.setStyle("margin-right", "3px"); - removeBtn.setStyle("margin-left", "3px"); - - removeBtn.addEvent('click', function(event) { - var command = new mindplot.commands.RemoveLinkFromTopicCommand(this._topic.getId()); - designer._actionRunner.execute(command); - bubbleTip.forceClose(); - }.bindWithEvent(this)); - - var okButtonId = 'okLinkButtonId' - editBtn.addEvent('click', function(event) { - var topic = this._topic; - var designer = this._designer; - var link = this; - var okFunction = function(e) { - var result = false; - var url = urlInput.value; - if ("" != url.trim()) - { - link._img.src = 'http://open.thumbshots.org/image.pxf?url=' + url; - link._img.alt = url; - link._link.href = url; - link._link.innerHTML = url; - this._linkModel.setUrl(url); - result = true; - } - return result; - }; - var msg = new Element('div'); - var urlText = new Element('div').inject(msg); - urlText.innerHTML = "URL:" - - var formElem = new Element('form', {'action': 'none', 'id':'linkFormId'}); - var urlInput = new Element('input', {'type': 'text', 'size':30,'value':url}); - urlInput.inject(formElem); - formElem.inject(msg) - - formElem.addEvent('submit', function(e) - { - $(okButtonId).fireEvent('click', e); - e = new Event(e); - e.stop(); - }); - - - var dialog = mindplot.LinkIcon.buildDialog(designer, okFunction, okButtonId); - dialog.adopt(msg).show(); - - }.bindWithEvent(this)); - buttonContainer.inject(container); - } - - - var linkIcon = this; - image.addEventListener('mouseover', function(event) { - bubbleTip.open(event, container, linkIcon); - }); - image.addEventListener('mousemove', function(event) { - bubbleTip.updatePosition(event); - }); - image.addEventListener('mouseout', function(event) { - bubbleTip.close(event); - }); -}; - -objects.extend(mindplot.LinkIcon, mindplot.Icon); - -mindplot.LinkIcon.prototype.initialize = function() { - -}; - -mindplot.LinkIcon.prototype.getUrl=function(){ - return this._url; -}; - -mindplot.LinkIcon.prototype.getModel=function(){ - return this._linkModel; -}; +}); mindplot.LinkIcon.buildDialog = function(designer, okFunction, okButtonId) { var windoo = new Windoo({ @@ -166,18 +167,17 @@ mindplot.LinkIcon.buildDialog = function(designer, okFunction, okButtonId) { height:130 }); - var cancel = new Element('input', {'type': 'button', 'class':'btn-primary', 'value': 'Cancel','class':'btn-primary'}).setStyle('margin-right', "5px"); + var cancel = new Element('input', {'type': 'button', 'class':'btn-primary', 'value': 'Cancel'}).setStyle('margin-right', "5px"); cancel.setStyle('margin-left', "5px"); cancel.addEvent('click', function(event) { $(document).addEvent('keydown', designer.keyEventHandler.bindWithEvent(designer)); windoo.close(); }.bindWithEvent(this)); - var ok = new Element('input', {'type': 'button', 'class':'btn-primary','value': 'Ok','class':'btn-primary','id':okButtonId}).setStyle('marginRight', 10); + var ok = new Element('input', {'type': 'button', 'class':'btn-primary','value': 'Ok','id':okButtonId}).setStyle('marginRight', 10); ok.addEvent('click', function(event) { var couldBeUpdated = okFunction.attempt(); - if (couldBeUpdated) - { + if (couldBeUpdated) { $(document).addEvent('keydown', designer.keyEventHandler.bindWithEvent(designer)); windoo.close(); } diff --git a/mindplot/src/main/javascript/LinkModel.js b/mindplot/src/main/javascript/LinkModel.js index 8a83cec3..54b15691 100644 --- a/mindplot/src/main/javascript/LinkModel.js +++ b/mindplot/src/main/javascript/LinkModel.js @@ -1,44 +1,44 @@ /* -* 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. -*/ + * 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.LinkModel = function(url, topic) -{ - $assert(url, 'link url can not be null'); - $assert(topic, 'mindmap can not be null'); - this._url = url; - this._topic = topic; -}; +mindplot.LinkModel = new Class({ + initialize : function(url, topic) { + $assert(url, 'url can not be null'); + $assert(topic, 'mindmap can not be null'); -mindplot.LinkModel.prototype.getUrl = function() -{ - return this._url; -}; + this._url = url; + this._topic = topic; + }, -mindplot.LinkModel.prototype.setUrl = function(url){ - this._url = url; -} + getUrl : function() { + return this._url; + }, -mindplot.LinkModel.prototype.getTopic = function() -{ - return this._topic; -}; + setUrl : function(url) { + $assert(url, 'url can not be null'); + this._url = url; + }, -mindplot.LinkModel.prototype.isLinkModel = function() -{ - return true; -}; \ No newline at end of file + getTopic : function() { + return this._topic; + }, + + isLinkModel : function() { + return true; + } +}); \ No newline at end of file diff --git a/mindplot/src/main/javascript/MainTopicBoard.js b/mindplot/src/main/javascript/MainTopicBoard.js index 16268849..e30feaf4 100644 --- a/mindplot/src/main/javascript/MainTopicBoard.js +++ b/mindplot/src/main/javascript/MainTopicBoard.js @@ -89,7 +89,7 @@ mindplot.MainTopicBoard = new Class({ addBranch : function(topic) { var order = topic.getOrder(); - $assert($defined(order), "Order must be defined"); + $assert(order, "Order must be defined"); // If the entry is not available, I must swap the the entries... var board = this._getBoard(); diff --git a/mindplot/src/main/javascript/Mindmap.js b/mindplot/src/main/javascript/Mindmap.js index f1bdbfdd..2172f663 100644 --- a/mindplot/src/main/javascript/Mindmap.js +++ b/mindplot/src/main/javascript/Mindmap.js @@ -41,7 +41,6 @@ mindplot.Mindmap = new Class({ this._iconType = id; }, - getVersion : function() { return this._version; }, diff --git a/mindplot/src/main/javascript/MindmapDesigner.js b/mindplot/src/main/javascript/MindmapDesigner.js index 81aa0149..be751562 100644 --- a/mindplot/src/main/javascript/MindmapDesigner.js +++ b/mindplot/src/main/javascript/MindmapDesigner.js @@ -1,1344 +1,1175 @@ /* -* 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. -*/ + * 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.MindmapDesigner = function(profile, divElement) -{ - $assert($defined(profile.zoom), "zoom must be defined"); +mindplot.MindmapDesigner = new Class({ + initialize: function(profile, divElement) { + $assert(profile, "profile must be defined"); + $assert(profile.zoom, "zoom must be defined"); + $assert(divElement, "divElement must be defined"); - // Undo manager ... - this._actionRunner = new mindplot.DesignerActionRunner(this); - mindplot.DesignerActionRunner.setInstance(this._actionRunner); + // Undo manager ... + this._actionRunner = new mindplot.DesignerActionRunner(this); + mindplot.DesignerActionRunner.setInstance(this._actionRunner); - // Initial Zoom - this._zoom = profile.zoom; - this._viewMode = profile.viewMode; + // Initial Zoom + this._zoom = profile.zoom; + this._viewMode = profile.viewMode; - // Init Screen manager.. - var screenManager = new mindplot.ScreenManager(profile.width, profile.height, divElement); + // Init Screen manager.. + var screenManager = new mindplot.ScreenManager(profile.width, profile.height, divElement); - var workspace = new mindplot.Workspace(profile, screenManager, this._zoom); - this._workspace = workspace; + this._workspace = new mindplot.Workspace(profile, screenManager, this._zoom); - //create editor - var editorClass = mindplot.TextEditorFactory.getTextEditorFromName(mindplot.EditorOptions.textEditor); - this._editor = new editorClass(this, this._actionRunner); + //create editor + var editorClass = mindplot.TextEditorFactory.getTextEditorFromName(mindplot.EditorOptions.textEditor); + this._editor = new editorClass(this, this._actionRunner); - // Init layout managers ... - this._topics = []; + // Init layout managers ... + this._topics = []; // var layoutManagerClass = mindplot.layoutManagers.LayoutManagerFactory.getManagerByName(mindplot.EditorOptions.LayoutManager); // this._layoutManager = new layoutManagerClass(this); - this._layoutManager = new mindplot.layoutManagers.OriginalLayoutManager(this); + this._layoutManager = new mindplot.layoutManagers.OriginalLayoutManager(this); - // Register handlers.. - this._registerEvents(); + // Register handlers.. + this._registerEvents(); - this._relationships={}; + this._relationships = {}; - this._events = {}; -}; + this._events = {}; + }, -mindplot.MindmapDesigner.prototype._getTopics = function() -{ - return this._topics; -}; + _getTopics : function() { + return this._topics; + }, -mindplot.MindmapDesigner.prototype.getCentralTopic = function() -{ - var topics = this._getTopics(); - return topics[0]; -}; + getCentralTopic : function() { + var topics = this._getTopics(); + return topics[0]; + }, -mindplot.MindmapDesigner.prototype.addEventListener = function(eventType, listener) -{ + addEventListener : function(eventType, listener) { - this._events[eventType] = listener; + this._events[eventType] = listener; -} + }, -mindplot.MindmapDesigner.prototype._fireEvent = function(eventType, event) -{ - var listener = this._events[eventType]; - if (listener != null) - { - listener(event); - } -} - -mindplot.MindmapDesigner.prototype._registerEvents = function() -{ - var mindmapDesigner = this; - var workspace = this._workspace; - var screenManager = workspace.getScreenManager(); - - if (!$defined(this._viewMode) || ($defined(this._viewMode) && !this._viewMode)) - { - // Initialize workspace event listeners. - // Create nodes on double click... - screenManager.addEventListener('click', function(event) - { - if(workspace.isWorkspaceEventsEnabled()){ - var t = mindmapDesigner.getEditor().isVisible(); - mindmapDesigner.getEditor().lostFocus(); - // @todo: Puaj hack... - mindmapDesigner._cleanScreen(); + _fireEvent : function(eventType, event) { + var listener = this._events[eventType]; + if (listener != null) { + listener(event); } - }); + }, - screenManager.addEventListener('dblclick', function(event) - { - if(workspace.isWorkspaceEventsEnabled()){ - mindmapDesigner.getEditor().lostFocus(); - // Get mouse position - var pos = screenManager.getWorkspaceMousePosition(event); + _registerEvents : function() { + var mindmapDesigner = this; + var workspace = this._workspace; + var screenManager = workspace.getScreenManager(); - // Create a new topic model ... - var mindmap = mindmapDesigner.getMindmap(); - var model = mindmap.createNode(mindplot.NodeModel.MAIN_TOPIC_TYPE); - model.setPosition(pos.x, pos.y); + if (!$defined(this._viewMode) || ($defined(this._viewMode) && !this._viewMode)) { + // Initialize workspace event listeners. + // Create nodes on double click... + screenManager.addEventListener('click', function(event) { + if (workspace.isWorkspaceEventsEnabled()) { + var t = mindmapDesigner.getEditor().isVisible(); + mindmapDesigner.getEditor().lostFocus(); + // @todo: Puaj hack... + mindmapDesigner._cleanScreen(); + } + }); - // Get central topic ... - var centralTopic = mindmapDesigner.getCentralTopic(); - var centralTopicId = centralTopic.getId(); + screenManager.addEventListener('dblclick', function(event) { + if (workspace.isWorkspaceEventsEnabled()) { + mindmapDesigner.getEditor().lostFocus(); + // Get mouse position + var pos = screenManager.getWorkspaceMousePosition(event); + + // Create a new topic model ... + var mindmap = mindmapDesigner.getMindmap(); + var model = mindmap.createNode(mindplot.NodeModel.MAIN_TOPIC_TYPE); + model.setPosition(pos.x, pos.y); + + // Get central topic ... + var centralTopic = mindmapDesigner.getCentralTopic(); + var centralTopicId = centralTopic.getId(); + + // Execute action ... + var command = new mindplot.commands.AddTopicCommand(model, centralTopicId, true); + this._actionRunner.execute(command); + } + }.bind(this)); + } + }, + + _buildNodeGraph : function(model) { + var workspace = this._workspace; + + // Create node graph ... + var topic = mindplot.NodeGraph.create(model); + + this._layoutManager.addHelpers(topic); + + // Append it to the workspace ... + var topics = this._topics; + topics.push(topic); + + // Add Topic events ... + this._layoutManager.registerListenersOnNode(topic); + + // Connect Topic ... + var isConnected = model.isConnected(); + if (isConnected) { + // Improve this ... + var targetTopicModel = model.getParent(); + var targetTopicId = targetTopicModel.getId(); + var targetTopic = null; + + for (var i = 0; i < topics.length; i++) { + var t = topics[i]; + if (t.getModel() == targetTopicModel) { + targetTopic = t; + // Disconnect the node. It will be connected again later ... + model.disconnect(); + break; + } + } + $assert(targetTopic, "Could not find a topic to connect"); + topic.connectTo(targetTopic, workspace); + } + + return topic; + }, + + onObjectFocusEvent : function(currentObject, event) { + this.getEditor().lostFocus(); + var selectableObjects = this.getSelectedObjects(); + // Disable all nodes on focus but not the current if Ctrl key isn't being pressed + if (!$defined(event) || event.ctrlKey == false) { + for (var i = 0; i < selectableObjects.length; i++) { + var selectableObject = selectableObjects[i]; + if (selectableObject.isOnFocus() && selectableObject != currentObject) { + selectableObject.setOnFocus(false); + } + } + } + }, + + zoomOut : function() { + var scale = this._zoom * 1.2; + if (scale <= 4) { + this._zoom = scale; + this._workspace.setZoom(this._zoom); + } + else { + core.Monitor.getInstance().logMessage('Sorry, no more zoom can be applied. \n Why do you need more?'); + } + + }, + + zoomIn : function() { + var scale = this._zoom / 1.2; + if (scale >= 0.3) { + this._zoom = scale; + this._workspace.setZoom(this._zoom); + } + else { + core.Monitor.getInstance().logMessage('Sorry, no more zoom can be applied. \n Why do you need more?'); + } + }, + + createChildForSelectedNode : function() { + + var nodes = this._getSelectedNodes(); + if (nodes.length <= 0) { + // If there are more than one node selected, + core.Monitor.getInstance().logMessage('Could not create a topic. Only one node must be selected.'); + return; + + } + if (nodes.length > 1) { + + // If there are more than one node selected, + core.Monitor.getInstance().logMessage('Could not create a topic. One topic must be selected.'); + return; + } + + // Add new node ... + var centalTopic = nodes[0]; + var parentTopicId = centalTopic.getId(); + var childModel = centalTopic.createChildModel(this._layoutManager.needsPrepositioning()); + + var command = new mindplot.commands.AddTopicCommand(childModel, parentTopicId, true); + this._actionRunner.execute(command); + }, + + createSiblingForSelectedNode : function() { + var nodes = this._getSelectedNodes(); + if (nodes.length <= 0) { + // If there are more than one node selected, + core.Monitor.getInstance().logMessage('Could not create a topic. Only one node must be selected.'); + return; + + } + if (nodes.length > 1) { + // If there are more than one node selected, + core.Monitor.getInstance().logMessage('Could not create a topic. One topic must be selected.'); + return; + } + + var topic = nodes[0]; + if (topic.getType() == mindplot.NodeModel.CENTRAL_TOPIC_TYPE) { + // Central topic doesn't have siblings ... + this.createChildForSelectedNode(); + + } else { + var parentTopic = topic.getOutgoingConnectedTopic(); + var siblingModel = topic.createSiblingModel(this._layoutManager.needsPrepositioning()); + var parentTopicId = parentTopic.getId(); + var command = new mindplot.commands.AddTopicCommand(siblingModel, parentTopicId, true); - // Execute action ... - var command = new mindplot.commands.AddTopicCommand(model, centralTopicId, true); this._actionRunner.execute(command); } - }.bind(this)); - } - ; -}; + }, -mindplot.MindmapDesigner.prototype._buildNodeGraph = function(model) -{ - var workspace = this._workspace; - var elem = this; - - // Create node graph ... - var topic = mindplot.NodeGraph.create(model); - - this._layoutManager.addHelpers(topic); - - // Append it to the workspace ... - var topics = this._topics; - topics.push(topic); - - // Add Topic events ... - this._layoutManager.registerListenersOnNode(topic); - - // Connect Topic ... - var isConnected = model.isConnected(); - if (isConnected) - { - // Improve this ... - var targetTopicModel = model.getParent(); - var targetTopicId = targetTopicModel.getId(); - var targetTopic = null; - - for (var i = 0; i < topics.length; i++) - { - var t = topics[i]; - if (t.getModel() == targetTopicModel) - { - targetTopic = t; - // Disconnect the node. It will be connected again later ... - model.disconnect(); - break; + addRelationShip2SelectedNode : function(event) { + var screen = this._workspace.getScreenManager(); + var pos = screen.getWorkspaceMousePosition(event); + var selectedTopics = this.getSelectedNodes(); + if (selectedTopics.length > 0 && + (!$defined(this._creatingRelationship) || ($defined(this._creatingRelationship) && !this._creatingRelationship))) { + this._workspace.enableWorkspaceEvents(false); + var fromNodePosition = selectedTopics[0].getPosition(); + this._relationship = new web2d.CurvedLine(); + this._relationship.setStyle(web2d.CurvedLine.SIMPLE_LINE); + this._relationship.setDashed(2, 2); + this._relationship.setFrom(fromNodePosition.x, fromNodePosition.y); + this._relationship.setTo(pos.x, pos.y); + this._workspace.appendChild(this._relationship); + this._creatingRelationship = true; + this._relationshipMouseMoveFunction = this._relationshipMouseMove.bindWithEvent(this); + this._relationshipMouseClickFunction = this._relationshipMouseClick.bindWithEvent(this, selectedTopics[0]); + this._workspace.getScreenManager().addEventListener('mousemove', this._relationshipMouseMoveFunction); + this._workspace.getScreenManager().addEventListener('click', this._relationshipMouseClickFunction); } - } - $assert(targetTopic, "Could not find a topic to connect"); - topic.connectTo(targetTopic, workspace); - } + }, - return topic; -}; + _relationshipMouseMove : function(event) { + var screen = this._workspace.getScreenManager(); + var pos = screen.getWorkspaceMousePosition(event); + this._relationship.setTo(pos.x - 1, pos.y - 1); //to prevent click event target to be the line itself + event.preventDefault(); + event.stop(); + return false; + }, -mindplot.MindmapDesigner.prototype.onObjectFocusEvent = function(currentObject, event) -{ - this.getEditor().lostFocus(); - var selectableObjects = this.getSelectedObjects(); - // Disable all nodes on focus but not the current if Ctrl key isn't being pressed - if (!$defined(event) || event.ctrlKey == false) - { - for (var i = 0; i < selectableObjects.length; i++) - { - var selectableObject = selectableObjects[i]; - if (selectableObject.isOnFocus() && selectableObject != currentObject) - { - selectableObject.setOnFocus(false); + _relationshipMouseClick : function (event, fromNode) { + var target = event.target; + while (target.tagName != "g" && $defined(target.parentNode)) { + target = target.parentNode; } - } - } -}; - -mindplot.MindmapDesigner.prototype.zoomOut = function() -{ - var scale = this._zoom * 1.2; - if (scale <= 4) - { - this._zoom = scale; - this._workspace.setZoom(this._zoom); - } - else - { - core.Monitor.getInstance().logMessage('Sorry, no more zoom can be applied. \n Why do you need more?'); - } - -}; - -mindplot.MindmapDesigner.prototype.zoomIn = function() -{ - var scale = this._zoom / 1.2; - if (scale >= 0.3) - { - this._zoom = scale; - this._workspace.setZoom(this._zoom); - } - else - { - core.Monitor.getInstance().logMessage('Sorry, no more zoom can be applied. \n Why do you need more?'); - } -}; - -mindplot.MindmapDesigner.prototype.createChildForSelectedNode = function() -{ - - var nodes = this._getSelectedNodes(); - if (nodes.length <= 0) - { - // If there are more than one node selected, - core.Monitor.getInstance().logMessage('Could not create a topic. Only one node must be selected.'); - return; - - } - if (nodes.length > 1) - { - - // If there are more than one node selected, - core.Monitor.getInstance().logMessage('Could not create a topic. One topic must be selected.'); - return; - } - - // Add new node ... - var centalTopic = nodes[0]; - var parentTopicId = centalTopic.getId(); - var childModel = centalTopic.createChildModel(this._layoutManager.needsPrepositioning()); - - var command = new mindplot.commands.AddTopicCommand(childModel, parentTopicId, true); - this._actionRunner.execute(command); -}; - -mindplot.MindmapDesigner.prototype.createSiblingForSelectedNode = function() -{ - var nodes = this._getSelectedNodes(); - if (nodes.length <= 0) - { - // If there are more than one node selected, - core.Monitor.getInstance().logMessage('Could not create a topic. Only one node must be selected.'); - return; - - } - if (nodes.length > 1) - { - // If there are more than one node selected, - core.Monitor.getInstance().logMessage('Could not create a topic. One topic must be selected.'); - return; - } - - var topic = nodes[0]; - if (topic.getType() == mindplot.NodeModel.CENTRAL_TOPIC_TYPE) - { - // Central topic doesn't have siblings ... - this.createChildForSelectedNode(); - - } else - { - var parentTopic = topic.getOutgoingConnectedTopic(); - var siblingModel = topic.createSiblingModel(this._layoutManager.needsPrepositioning()); - var parentTopicId = parentTopic.getId(); - var command = new mindplot.commands.AddTopicCommand(siblingModel, parentTopicId, true); - - this._actionRunner.execute(command); - } -}; - -mindplot.MindmapDesigner.prototype.addRelationShip2SelectedNode = function(event) -{ - var screen = this._workspace.getScreenManager(); - var pos = screen.getWorkspaceMousePosition(event); - var selectedTopics = this.getSelectedNodes(); - if(selectedTopics.length >0 && - (!$defined(this._creatingRelationship) || ($defined(this._creatingRelationship) && !this._creatingRelationship))){ - this._workspace.enableWorkspaceEvents(false); - var fromNodePosition = selectedTopics[0].getPosition(); - this._relationship = new web2d.CurvedLine(); - this._relationship.setStyle(web2d.CurvedLine.SIMPLE_LINE); - this._relationship.setDashed(2,2); - this._relationship.setFrom(fromNodePosition.x, fromNodePosition.y); - this._relationship.setTo(pos.x, pos.y); - this._workspace.appendChild(this._relationship); - this._creatingRelationship=true; - this._relationshipMouseMoveFunction = this._relationshipMouseMove.bindWithEvent(this); - this._relationshipMouseClickFunction = this._relationshipMouseClick.bindWithEvent(this, selectedTopics[0]); - this._workspace.getScreenManager().addEventListener('mousemove',this._relationshipMouseMoveFunction); - this._workspace.getScreenManager().addEventListener('click',this._relationshipMouseClickFunction); - } -}; - -mindplot.MindmapDesigner.prototype._relationshipMouseMove = function(event){ - var screen = this._workspace.getScreenManager(); - var pos = screen.getWorkspaceMousePosition(event); - this._relationship.setTo(pos.x-1, pos.y-1); //to prevent click event target to be the line itself - event.preventDefault(); - event.stop(); - return false; -}; - -mindplot.MindmapDesigner.prototype._relationshipMouseClick = function (event, fromNode) { - var target = event.target; - while(target.tagName != "g" && $defined(target.parentNode)){ - target=target.parentNode; - } - if($defined(target.virtualRef)){ - var targetNode = target.virtualRef; - this.addRelationship(fromNode, targetNode); - } - this._workspace.removeChild(this._relationship); - this._relationship = null; - this._workspace.getScreenManager().removeEventListener('mousemove',this._relationshipMouseMoveFunction); - this._workspace.getScreenManager().removeEventListener('click',this._relationshipMouseClickFunction); - this._creatingRelationship=false; - this._workspace.enableWorkspaceEvents(true); - event.preventDefault(); - event.stop(); - return false; -}; - -mindplot.MindmapDesigner.prototype.addRelationship= function(fromNode, toNode){ - // Create a new topic model ... - var mindmap = this.getMindmap(); - var model = mindmap.createRelationship(fromNode.getModel().getId(), toNode.getModel().getId()); - - var command = new mindplot.commands.AddRelationshipCommand(model, mindmap); - this._actionRunner.execute(command); -}; - -mindplot.MindmapDesigner.prototype.needsSave = function() -{ - return this._actionRunner.hasBeenChanged(); -} - -mindplot.MindmapDesigner.prototype.autoSaveEnabled = function(value) -{ - if ($defined(value) && value) - { - var autosave = function() { - - if (this.needsSave()) - { - this.save(null, false); + if ($defined(target.virtualRef)) { + var targetNode = target.virtualRef; + this.addRelationship(fromNode, targetNode); } - }; - autosave.bind(this).periodical(30000); - } -} - -mindplot.MindmapDesigner.prototype.save = function(onSavedHandler, saveHistory) -{ - var persistantManager = mindplot.PersistanceManager; - var mindmap = this._mindmap; - - var properties = {zoom:this._zoom, layoutManager:this._layoutManager.getClassName()}; - persistantManager.save(mindmap, properties, onSavedHandler, saveHistory); - this._fireEvent("save", {type:saveHistory}); - - // Refresh undo state... - this._actionRunner.markAsChangeBase(); -}; - -mindplot.MindmapDesigner.prototype.loadFromXML = function(mapId, xmlContent) -{ - $assert(xmlContent, 'mindmapId can not be null'); - $assert(xmlContent, 'xmlContent can not be null'); - - // Explorer Hack with local files ... - var domDocument = core.Utils.createDocumentFromText(xmlContent); - - var serializer = mindplot.XMLMindmapSerializerFactory.getSerializerFromDocument(domDocument); - var mindmap = serializer.loadFromDom(domDocument); - - this._loadMap(mapId, mindmap); - - // Place the focus on the Central Topic - var centralTopic = this.getCentralTopic(); - this._goToNode.attempt(centralTopic, this); - - this._fireEvent("loadsuccess"); - -}; - -mindplot.MindmapDesigner.prototype.load = function(mapId) -{ - $assert(mapId, 'mapName can not be null'); - - // Build load function ... - var persistantManager = mindplot.PersistanceManager; - - // Loading mindmap ... - var mindmap = persistantManager.load(mapId); - - // Finally, load the map in the editor ... - this._loadMap(mapId, mindmap); - - // Place the focus on the Central Topic - var centralTopic = this.getCentralTopic(); - this._goToNode.attempt(centralTopic, this); - - this._fireEvent("loadsuccess"); -}; - -mindplot.MindmapDesigner.prototype._loadMap = function(mapId, mindmapModel) -{ - var designer = this; - if (mindmapModel != null) - { - mindmapModel.setId(mapId); - designer._mindmap = mindmapModel; - - // Building node graph ... - var branches = mindmapModel.getBranches(); - for (var i = 0; i < branches.length; i++) - { - // NodeModel -> NodeGraph ... - var nodeModel = branches[i]; - var nodeGraph = this._nodeModelToNodeGraph(nodeModel); - - // Update shrink render state... - nodeGraph.setBranchVisibility(true); - } - var relationships = mindmapModel.getRelationships(); - for (var j=0; j 0) - { - this._removeNode(node._getChildren()[0]); - } - - this._workspace.removeChild(node); - this._topics.erase(node); - - // Delete this node from the model... - var model = node.getModel(); - model.deleteNode(); - - if ($defined(parent)) - { - this._goToNode(parent); - } - } -}; - -mindplot.MindmapDesigner.prototype.deleteCurrentNode = function() -{ - - var validateFunc = function(selectedObject) { - return selectedObject.getType() == mindplot.RelationshipLine.type || selectedObject.getTopicType() != mindplot.NodeModel.CENTRAL_TOPIC_TYPE - }; - var validateError = 'Central topic can not be deleted.'; - var selectedObjects = this._getValidSelectedObjectsIds(validateFunc, validateError); - if (selectedObjects.nodes.length > 0 || selectedObjects.relationshipLines.length>0) - { - var command = new mindplot.commands.DeleteTopicCommand(selectedObjects); - this._actionRunner.execute(command); - } - -}; - -mindplot.MindmapDesigner.prototype.setFont2SelectedNode = function(font) -{ - var validSelectedObjects = this._getValidSelectedObjectsIds(); - var topicsIds = validSelectedObjects.nodes; - if (topicsIds.length > 0) - { - var commandFunc = function(topic, font) - { - var result = topic.getFontFamily(); - topic.setFontFamily(font, true); - - core.Executor.instance.delay(topic.updateNode, 0,topic); - /*var updated = function() { - topic.updateNode(); - }; - updated.delay(0);*/ - return result; - } - var command = new mindplot.commands.GenericFunctionCommand(commandFunc, font, topicsIds); - this._actionRunner.execute(command); - } -}; - -mindplot.MindmapDesigner.prototype.setStyle2SelectedNode = function() -{ - var validSelectedObjects = this._getValidSelectedObjectsIds(); - var topicsIds = validSelectedObjects.nodes; - if (topicsIds.length > 0) - { - var commandFunc = function(topic) - { - var result = topic.getFontStyle(); - var style = (result == "italic") ? "normal" : "italic"; - topic.setFontStyle(style, true); - return result; - } - var command = new mindplot.commands.GenericFunctionCommand(commandFunc, "", topicsIds); - this._actionRunner.execute(command); - } -}; - -mindplot.MindmapDesigner.prototype.setFontColor2SelectedNode = function(color) -{ - var validSelectedObjects = this._getValidSelectedObjectsIds(); - var topicsIds = validSelectedObjects.nodes; - if (topicsIds.length > 0) - { - var commandFunc = function(topic, color) - { - var result = topic.getFontColor(); - topic.setFontColor(color, true); - return result; - } - var command = new mindplot.commands.GenericFunctionCommand(commandFunc, color, topicsIds); - command.discartDuplicated = "fontColorCommandId"; - this._actionRunner.execute(command); - } -}; - -mindplot.MindmapDesigner.prototype.setBackColor2SelectedNode = function(color) -{ - - var validateFunc = function(topic) { - return topic.getShapeType() != mindplot.NodeModel.SHAPE_TYPE_LINE - }; - var validateError = 'Color can not be setted to line topics.'; - var validSelectedObjects = this._getValidSelectedObjectsIds(validateFunc, validateError);; - var topicsIds = validSelectedObjects.nodes; - - if (topicsIds.length > 0) - { - var commandFunc = function(topic, color) - { - var result = topic.getBackgroundColor(); - topic.setBackgroundColor(color); - return result; - } - var command = new mindplot.commands.GenericFunctionCommand(commandFunc, color, topicsIds); - command.discartDuplicated = "backColor"; - this._actionRunner.execute(command); - } -}; - - -mindplot.MindmapDesigner.prototype._getValidSelectedObjectsIds = function(validate, errorMsg) -{ - var result = {"nodes":[],"relationshipLines":[]}; - var selectedNodes = this._getSelectedNodes(); - var selectedRelationshipLines = this.getSelectedRelationshipLines(); - if (selectedNodes.length == 0 && selectedRelationshipLines.length == 0) - { - core.Monitor.getInstance().logMessage('At least one element must be selected to execute this operation.'); - } else - { - var isValid = true; - for (var i = 0; i < selectedNodes.length; i++) - { - var selectedNode = selectedNodes[i]; - if ($defined(validate)) - { - isValid = validate(selectedNode); - } - - // Add node only if it's valid. - if (isValid) - { - result.nodes.push(selectedNode.getId()); - } else - { - core.Monitor.getInstance().logMessage(errorMsg); - } - } - for( var j = 0; j< selectedRelationshipLines.length; j++){ - var selectedLine = selectedRelationshipLines[j]; - isValid = true; - if($defined(validate)){ - isValid = validate(selectedLine); - } - - if(isValid){ - result.relationshipLines.push(selectedLine.getId()); - } else - { - core.Monitor.getInstance().logMessage(errorMsg); - } - } - } - return result; -} - -mindplot.MindmapDesigner.prototype.setBorderColor2SelectedNode = function(color) -{ - var validateFunc = function(topic) { - return topic.getShapeType() != mindplot.NodeModel.SHAPE_TYPE_LINE - }; - var validateError = 'Color can not be setted to line topics.'; - var validSelectedObjects = this._getValidSelectedObjectsIds(validateFunc, validateError);; - var topicsIds = validSelectedObjects.nodes; - - if (topicsIds.length > 0) - { - var commandFunc = function(topic, color) - { - var result = topic.getBorderColor(); - topic.setBorderColor(color); - return result; - } - var command = new mindplot.commands.GenericFunctionCommand(commandFunc, color, topicsIds); - command.discartDuplicated = "borderColorCommandId"; - this._actionRunner.execute(command); - } -}; - -mindplot.MindmapDesigner.prototype.setFontSize2SelectedNode = function(size) -{ - var validSelectedObjects = this._getValidSelectedObjectsIds(); - var topicsIds = validSelectedObjects.nodes; - if (topicsIds.length > 0) - { - var commandFunc = function(topic, size) - { - var result = topic.getFontSize(); - topic.setFontSize(size, true); - - core.Executor.instance.delay(topic.updateNode, 0,topic); - /*var updated = function() { - topic.updateNode(); - }; - updated.delay(0);*/ - return result; - } - var command = new mindplot.commands.GenericFunctionCommand(commandFunc, size, topicsIds); - this._actionRunner.execute(command); - } -}; - -mindplot.MindmapDesigner.prototype.setShape2SelectedNode = function(shape) -{ - var validateFunc = function(topic) { - return !(topic.getType() == mindplot.NodeModel.CENTRAL_TOPIC_TYPE && shape == mindplot.NodeModel.SHAPE_TYPE_LINE) - }; - var validateError = 'Central Topic shape can not be changed to line figure.'; - var validSelectedObjects = this._getValidSelectedObjectsIds(validateFunc, validateError); - var topicsIds = validSelectedObjects.nodes; - - if (topicsIds.length > 0) - { - var commandFunc = function(topic, size) - { - var result = topic.getShapeType(); - topic.setShapeType(size, true); - return result; - } - var command = new mindplot.commands.GenericFunctionCommand(commandFunc, shape, topicsIds); - this._actionRunner.execute(command); - } -}; - - -mindplot.MindmapDesigner.prototype.setWeight2SelectedNode = function() -{ - var validSelectedObjects = this._getValidSelectedObjectsIds(); - var topicsIds = validSelectedObjects.nodes; - if (topicsIds.length > 0) - { - var commandFunc = function(topic) - { - var result = topic.getFontWeight(); - var weight = (result == "bold") ? "normal" : "bold"; - topic.setFontWeight(weight, true); - - core.Executor.instance.delay(topic.updateNode, 0,topic); - /*var updated = function() { - topic.updateNode(); - }; - updated.delay(0);*/ - return result; - } - var command = new mindplot.commands.GenericFunctionCommand(commandFunc, "", topicsIds); - this._actionRunner.execute(command); - } -}; - -mindplot.MindmapDesigner.prototype.addImage2SelectedNode = function(iconType) -{ - var validSelectedObjects = this._getValidSelectedObjectsIds(); - var topicsIds = validSelectedObjects.nodes; - if (topicsIds.length > 0) - { - - var command = new mindplot.commands.AddIconToTopicCommand(topicsIds[0], iconType); - this._actionRunner.execute(command); - } -}; - -mindplot.MindmapDesigner.prototype.addLink2Node = function(url) -{ - var validSelectedObjects = this._getValidSelectedObjectsIds(); - var topicsIds = validSelectedObjects.nodes; - if (topicsIds.length > 0) - { - var command = new mindplot.commands.AddLinkToTopicCommand(topicsIds[0], url); - this._actionRunner.execute(command); - } -}; - -mindplot.MindmapDesigner.prototype.addLink2SelectedNode = function() -{ - var selectedTopics = this.getSelectedNodes(); - var topic = null; - if (selectedTopics.length > 0) - { - topic = selectedTopics[0]; - if (!$chk(topic._hasLink)) { - var msg = new Element('div'); - var urlText = new Element('div').inject(msg); - urlText.innerHTML = "URL:" - var formElem = new Element('form', {'action': 'none', 'id':'linkFormId'}); - var urlInput = new Element('input', {'type': 'text', 'size':30}); - urlInput.inject(formElem); - formElem.inject(msg) - - var okButtonId = "linkOkButtonId"; - formElem.addEvent('submit', function(e) - { - $(okButtonId).fireEvent('click', e); - e = new Event(e); - e.stop(); - }); - - - var okFunction = function() { - var url = urlInput.value; - var result = false; - if ("" != url.trim()) - { - this.addLink2Node(url); - result = true; + this._workspace.removeChild(this._relationship); + this._relationship = null; + this._workspace.getScreenManager().removeEventListener('mousemove', this._relationshipMouseMoveFunction); + this._workspace.getScreenManager().removeEventListener('click', this._relationshipMouseClickFunction); + this._creatingRelationship = false; + this._workspace.enableWorkspaceEvents(true); + event.preventDefault(); + event.stop(); + return false; + }, + + addRelationship : function(fromNode, toNode) { + // Create a new topic model ... + var mindmap = this.getMindmap(); + var model = mindmap.createRelationship(fromNode.getModel().getId(), toNode.getModel().getId()); + + var command = new mindplot.commands.AddRelationshipCommand(model, mindmap); + this._actionRunner.execute(command); + }, + + needsSave : function() { + return this._actionRunner.hasBeenChanged(); + }, + + autoSaveEnabled : function(value) { + if ($defined(value) && value) { + var autosave = function() { + + if (this.needsSave()) { + this.save(null, false); } - return result; - }.bind(this); - var dialog = mindplot.LinkIcon.buildDialog(this, okFunction, okButtonId); - dialog.adopt(msg).show(); + }; + autosave.bind(this).periodical(30000); + } + }, - // IE doesn't like too much this focus action... - if(!core.UserAgent.isIE()) - { - urlInput.focus(); + save : function(onSavedHandler, saveHistory) { + var persistantManager = mindplot.PersistanceManager; + var mindmap = this._mindmap; + + var properties = {zoom:this._zoom, layoutManager:this._layoutManager.getClassName()}; + persistantManager.save(mindmap, properties, onSavedHandler, saveHistory); + this._fireEvent("save", {type:saveHistory}); + + // Refresh undo state... + this._actionRunner.markAsChangeBase(); + }, + + loadFromXML : function(mapId, xmlContent) { + $assert(xmlContent, 'mindmapId can not be null'); + $assert(xmlContent, 'xmlContent can not be null'); + + // Explorer Hack with local files ... + var domDocument = core.Utils.createDocumentFromText(xmlContent); + + var serializer = mindplot.XMLMindmapSerializerFactory.getSerializerFromDocument(domDocument); + var mindmap = serializer.loadFromDom(domDocument); + + this._loadMap(mapId, mindmap); + + // Place the focus on the Central Topic + var centralTopic = this.getCentralTopic(); + this._goToNode.attempt(centralTopic, this); + + this._fireEvent("loadsuccess"); + + }, + + load : function(mapId) { + $assert(mapId, 'mapName can not be null'); + + // Build load function ... + var persistantManager = mindplot.PersistanceManager; + + // Loading mindmap ... + var mindmap = persistantManager.load(mapId); + + // Finally, load the map in the editor ... + this._loadMap(mapId, mindmap); + + // Place the focus on the Central Topic + var centralTopic = this.getCentralTopic(); + this._goToNode.attempt(centralTopic, this); + + this._fireEvent("loadsuccess"); + }, + + _loadMap : function(mapId, mindmapModel) { + var designer = this; + if (mindmapModel != null) { + mindmapModel.setId(mapId); + designer._mindmap = mindmapModel; + + // Building node graph ... + var branches = mindmapModel.getBranches(); + for (var i = 0; i < branches.length; i++) { + // NodeModel -> NodeGraph ... + var nodeModel = branches[i]; + var nodeGraph = this._nodeModelToNodeGraph(nodeModel); + + // Update shrink render state... + nodeGraph.setBranchVisibility(true); + } + var relationships = mindmapModel.getRelationships(); + for (var j = 0; j < relationships.length; j++) { + var relationship = this._relationshipModelToRelationship(relationships[j]); } } - } else - { - core.Monitor.getInstance().logMessage('At least one topic must be selected to execute this operation.'); - } -}; + core.Executor.instance.setLoading(false); + this._getTopics().forEach(function(topic) { + delete topic.getModel()._finalPosition; + }); + this._fireEvent("loadsuccess"); -mindplot.MindmapDesigner.prototype.addNote2Node = function(text) -{ - var validSelectedObjects = this._getValidSelectedObjectsIds(); - var topicsIds = validSelectedObjects.nodes; - if (topicsIds.length > 0) - { - var command = new mindplot.commands.AddNoteToTopicCommand(topicsIds[0], text); - this._actionRunner.execute(command); - } -}; - -mindplot.MindmapDesigner.prototype.addNote2SelectedNode = function() -{ - var selectedTopics = this.getSelectedNodes(); - var topic = null; - if (selectedTopics.length > 0) - { - topic = selectedTopics[0]; - if (!$chk(topic._hasNote)) { - var msg = new Element('div'); - var text = new Element('div').inject(msg); - var formElem = new Element('form', {'action': 'none', 'id':'noteFormId'}); - var textInput = new Element('textarea').setStyles({'width':280, 'height':50}); - textInput.inject(formElem); - formElem.inject(msg); - - var okButtonId = "noteOkButtonId"; - formElem.addEvent('submit', function(e) - { - $(okButtonId).fireEvent('click', e); - e = new Event(e); - e.stop(); - }); + }, - var okFunction = function() { - var text = textInput.value; - var result = false; - if ("" != text.trim()) - { - this.addNote2Node(text); - result = true; - } - return result; - }.bind(this); - var dialog = mindplot.Note.buildDialog(this, okFunction, okButtonId); - dialog.adopt(msg).show(); + getMindmap : function() { + return this._mindmap; + }, - // IE doesn't like too much this focus action... - if(!core.UserAgent.isIE()) - { - textInput.focus(); + undo : function() { + this._actionRunner.undo(); + }, + + redo : function() { + this._actionRunner.redo(); + }, + + _nodeModelToNodeGraph : function(nodeModel, isVisible) { + $assert(nodeModel, "Node model can not be null"); + var nodeGraph = this._buildNodeGraph(nodeModel); + + if ($defined(isVisible)) + nodeGraph.setVisibility(isVisible); + + var children = nodeModel.getChildren().slice(); + + children = this._layoutManager.prepareNode(nodeGraph, children); + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if ($defined(child)) + this._nodeModelToNodeGraph(child); + } + + var workspace = this._workspace; + workspace.appendChild(nodeGraph); + return nodeGraph; + }, + + _relationshipModelToRelationship : function(model) { + $assert(model, "Node model can not be null"); + var relationship = this._buildRelationship(model); + var sourceTopic = relationship.getSourceTopic(); + sourceTopic.addRelationship(relationship); + var targetTopic = relationship.getTargetTopic(); + targetTopic.addRelationship(relationship); + relationship.setVisibility(sourceTopic.isVisible() && targetTopic.isVisible()); + var workspace = this._workspace; + workspace.appendChild(relationship); + relationship.redraw(); + return relationship; + }, + + createRelationship : function(model) { + this._mindmap.addRelationship(model); + return this._relationshipModelToRelationship(model); + }, + + removeRelationship : function(model) { + this._mindmap.removeRelationship(model); + var relationship = this._relationships[model.getId()]; + var sourceTopic = relationship.getSourceTopic(); + sourceTopic.removeRelationship(relationship); + var targetTopic = relationship.getTargetTopic(); + targetTopic.removeRelationship(relationship); + this._workspace.removeChild(relationship); + delete this._relationships[model.getId()]; + }, + + _buildRelationship : function (model) { + var workspace = this._workspace; + var elem = this; + + var fromNodeId = model.getFromNode(); + var toNodeId = model.getToNode(); + + var fromTopic = null; + var toTopic = null; + var topics = this._topics; + + for (var i = 0; i < topics.length; i++) { + var t = topics[i]; + if (t.getModel().getId() == fromNodeId) { + fromTopic = t; + } + if (t.getModel().getId() == toNodeId) { + toTopic = t; + } + if (toTopic != null && fromTopic != null) { + break; } } - } else - { - core.Monitor.getInstance().logMessage('At least one topic must be selected to execute this operation.'); - } -}; -mindplot.MindmapDesigner.prototype.removeLastImageFromSelectedNode = function() -{ - var nodes = this._getSelectedNodes(); - if (nodes.length == 0) - { - core.Monitor.getInstance().logMessage('A topic must be selected in order to execute this operation.'); - } else - { - var elem = nodes[0]; - elem.removeLastIcon(this); - core.Executor.instance.delay(elem.updateNode, 0,elem); - /*var executor = function(editor) - { - return function() - { - elem.updateNode(); + // Create node graph ... + var relationLine = new mindplot.RelationshipLine(fromTopic, toTopic, 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); + } + + + relationLine.getLine().setDashed(3, 2); + relationLine.setShowEndArrow(model.getEndArrow()); + relationLine.setShowStartArrow(model.getStartArrow()); + relationLine.setModel(model); + + //Add Listeners + var elem = this; + relationLine.addEventListener('onfocus', function(event) { + elem.onObjectFocusEvent.attempt([relationLine, event], elem); + }); + + // Append it to the workspace ... + this._relationships[model.getId()] = relationLine; + + return relationLine; + }, + + getEditor : function() { + return this._editor; + }, + + _removeNode : function(node) { + if (node.getTopicType() != mindplot.NodeModel.CENTRAL_TOPIC_TYPE) { + var parent = node._parent; + node.disconnect(this._workspace); + + //remove children + while (node._getChildren().length > 0) { + this._removeNode(node._getChildren()[0]); + } + + this._workspace.removeChild(node); + this._topics.erase(node); + + // Delete this node from the model... + var model = node.getModel(); + model.deleteNode(); + + if ($defined(parent)) { + this._goToNode(parent); + } + } + }, + + deleteCurrentNode : function() { + + var validateFunc = function(selectedObject) { + return selectedObject.getType() == mindplot.RelationshipLine.type || selectedObject.getTopicType() != mindplot.NodeModel.CENTRAL_TOPIC_TYPE }; - }; + var validateError = 'Central topic can not be deleted.'; + var selectedObjects = this._getValidSelectedObjectsIds(validateFunc, validateError); + if (selectedObjects.nodes.length > 0 || selectedObjects.relationshipLines.length > 0) { + var command = new mindplot.commands.DeleteTopicCommand(selectedObjects); + this._actionRunner.execute(command); + } - setTimeout(executor(this), 0);*/ - } -}; + }, + + setFont2SelectedNode : function(font) { + var validSelectedObjects = this._getValidSelectedObjectsIds(); + var topicsIds = validSelectedObjects.nodes; + if (topicsIds.length > 0) { + var commandFunc = function(topic, font) { + var result = topic.getFontFamily(); + topic.setFontFamily(font, true); + + core.Executor.instance.delay(topic.updateNode, 0, topic); + /*var updated = function() { + topic.updateNode(); + }; + updated.delay(0);*/ + return result; + } + var command = new mindplot.commands.GenericFunctionCommand(commandFunc, font, topicsIds); + this._actionRunner.execute(command); + } + }, + + setStyle2SelectedNode : function() { + var validSelectedObjects = this._getValidSelectedObjectsIds(); + var topicsIds = validSelectedObjects.nodes; + if (topicsIds.length > 0) { + var commandFunc = function(topic) { + var result = topic.getFontStyle(); + var style = (result == "italic") ? "normal" : "italic"; + topic.setFontStyle(style, true); + return result; + } + var command = new mindplot.commands.GenericFunctionCommand(commandFunc, "", topicsIds); + this._actionRunner.execute(command); + } + }, + + setFontColor2SelectedNode : function(color) { + var validSelectedObjects = this._getValidSelectedObjectsIds(); + var topicsIds = validSelectedObjects.nodes; + if (topicsIds.length > 0) { + var commandFunc = function(topic, color) { + var result = topic.getFontColor(); + topic.setFontColor(color, true); + return result; + } + var command = new mindplot.commands.GenericFunctionCommand(commandFunc, color, topicsIds); + command.discartDuplicated = "fontColorCommandId"; + this._actionRunner.execute(command); + } + }, + + setBackColor2SelectedNode : function(color) { + + var validateFunc = function(topic) { + return topic.getShapeType() != mindplot.NodeModel.SHAPE_TYPE_LINE + }; + var validateError = 'Color can not be setted to line topics.'; + var validSelectedObjects = this._getValidSelectedObjectsIds(validateFunc, validateError); + ; + var topicsIds = validSelectedObjects.nodes; + + if (topicsIds.length > 0) { + var commandFunc = function(topic, color) { + var result = topic.getBackgroundColor(); + topic.setBackgroundColor(color); + return result; + } + var command = new mindplot.commands.GenericFunctionCommand(commandFunc, color, topicsIds); + command.discartDuplicated = "backColor"; + this._actionRunner.execute(command); + } + }, -mindplot.MindmapDesigner.prototype._getSelectedNodes = function() -{ - var result = new Array(); - for (var i = 0; i < this._topics.length; i++) - { - if (this._topics[i].isOnFocus()) - { - result.push(this._topics[i]); - } - } - return result; -}; - -mindplot.MindmapDesigner.prototype.getSelectedRelationshipLines = function(){ - var result = new Array(); - for (var id in this._relationships) - { - var relationship = this._relationships[id]; - if (relationship.isOnFocus()) - { - result.push(relationship); - } - } - return result; -}; - -mindplot.MindmapDesigner.prototype.getSelectedNodes = function() -{ - return this._getSelectedNodes(); -}; - -mindplot.MindmapDesigner.prototype.getSelectedObjects = function() -{ - var selectedNodes = this.getSelectedNodes(); - var selectedRelationships = this.getSelectedRelationshipLines(); - selectedRelationships.extend(selectedNodes); - return selectedRelationships; -}; - -mindplot.MindmapDesigner.prototype.keyEventHandler = function(event) -{ - if(this._workspace.isWorkspaceEventsEnabled()){ - var evt = (event) ? event : window.event; - - if (evt.keyCode == 8) - { - if ($defined(event)) - { - if ($defined(event.preventDefault)) { - event.preventDefault(); + _getValidSelectedObjectsIds : function(validate, errorMsg) { + var result = {"nodes":[],"relationshipLines":[]}; + var selectedNodes = this._getSelectedNodes(); + var selectedRelationshipLines = this.getSelectedRelationshipLines(); + if (selectedNodes.length == 0 && selectedRelationshipLines.length == 0) { + core.Monitor.getInstance().logMessage('At least one element must be selected to execute this operation.'); } else { - event.returnValue = false; - } - new Event(event).stop(); - } - else - evt.returnValue = false; - } - else - { - evt = new Event(event); - var key = evt.key; - if (!this._editor.isVisible()) - { - if (((evt.code >= 65 && evt.code <= 90) || (evt.code >= 48 && evt.code <= 57)) && !(evt.control || evt.meta)) - { - if($chk(evt.shift)){ - key = key.toUpperCase(); + var isValid = true; + for (var i = 0; i < selectedNodes.length; i++) { + var selectedNode = selectedNodes[i]; + if ($defined(validate)) { + isValid = validate(selectedNode); + } + + // Add node only if it's valid. + if (isValid) { + result.nodes.push(selectedNode.getId()); + } else { + core.Monitor.getInstance().logMessage(errorMsg); + } } - this._showEditor(key); - } - else - { - switch (key) - { - case 'delete': - this.deleteCurrentNode(); - break; - case 'enter': - if (!evt.meta) - { - this.createSiblingForSelectedNode(); - break; - } - case 'insert': - this.createChildForSelectedNode(); - break; - case 'right': - var nodes = this._getSelectedNodes(); - if (nodes.length > 0) - { - var node = nodes[0]; - if (node.getTopicType() == mindplot.NodeModel.CENTRAL_TOPIC_TYPE) - { - this._goToSideChild(node, 'RIGHT'); - } - else - { - if (node.getPosition().x < 0) - { - this._goToParent(node); - } - else if (!node.areChildrenShrinked()) - { - this._goToChild(node); - } - } - } - break; - case 'left': - var nodes = this._getSelectedNodes(); - if (nodes.length > 0) - { - var node = nodes[0]; - if (node.getTopicType() == mindplot.NodeModel.CENTRAL_TOPIC_TYPE) - { - this._goToSideChild(node, 'LEFT'); - } - else - { - if (node.getPosition().x > 0) - { - this._goToParent(node); - } - else if (!node.areChildrenShrinked()) - { - this._goToChild(node); - } - } - } - break; - case'up': - var nodes = this._getSelectedNodes(); - if (nodes.length > 0) - { - var node = nodes[0]; - if (node.getTopicType() != mindplot.NodeModel.CENTRAL_TOPIC_TYPE) - { - this._goToBrother(node, 'UP'); - } - } - break; - case 'down': - var nodes = this._getSelectedNodes(); - if (nodes.length > 0) - { - var node = nodes[0]; - if (node.getTopicType() != mindplot.NodeModel.CENTRAL_TOPIC_TYPE) - { - this._goToBrother(node, 'DOWN'); - } - } - break; - case 'f2': - this._showEditor(); - break; - case 'space': + for (var j = 0; j < selectedRelationshipLines.length; j++) { + var selectedLine = selectedRelationshipLines[j]; + isValid = true; + if ($defined(validate)) { + isValid = validate(selectedLine); + } - var nodes = this._getSelectedNodes(); - if (nodes.length > 0) - { - var topic = nodes[0]; - - var model = topic.getModel(); - var isShrink = !model.areChildrenShrinked(); - topic.setChildrenShrinked(isShrink); - } - break; - case 'backspace': - evt.preventDefault(); - break; - case 'esc': - var nodes = this._getSelectedNodes(); - for (var i = 0; i < nodes.length; i++) - { - var node = nodes[i]; - node.setOnFocus(false); - } - break; - case 'z': - if (evt.control || evt.meta) - { - if (evt.shift) - { - this.redo(); - } - else - { - this.undo(); - } - } - break; - default: - break; + if (isValid) { + result.relationshipLines.push(selectedLine.getId()); + } else { + core.Monitor.getInstance().logMessage(errorMsg); + } } } - evt.stop(); + return result; + }, + + setBorderColor2SelectedNode : function(color) { + var validateFunc = function(topic) { + return topic.getShapeType() != mindplot.NodeModel.SHAPE_TYPE_LINE + }; + var validateError = 'Color can not be setted to line topics.'; + var validSelectedObjects = this._getValidSelectedObjectsIds(validateFunc, validateError); + ; + var topicsIds = validSelectedObjects.nodes; + + if (topicsIds.length > 0) { + var commandFunc = function(topic, color) { + var result = topic.getBorderColor(); + topic.setBorderColor(color); + return result; + } + var command = new mindplot.commands.GenericFunctionCommand(commandFunc, color, topicsIds); + command.discartDuplicated = "borderColorCommandId"; + this._actionRunner.execute(command); + } + }, + + setFontSize2SelectedNode : function(size) { + var validSelectedObjects = this._getValidSelectedObjectsIds(); + var topicsIds = validSelectedObjects.nodes; + if (topicsIds.length > 0) { + var commandFunc = function(topic, size) { + var result = topic.getFontSize(); + topic.setFontSize(size, true); + + core.Executor.instance.delay(topic.updateNode, 0, topic); + /*var updated = function() { + topic.updateNode(); + }; + updated.delay(0);*/ + return result; + } + var command = new mindplot.commands.GenericFunctionCommand(commandFunc, size, topicsIds); + this._actionRunner.execute(command); + } + }, + + setShape2SelectedNode : function(shape) { + var validateFunc = function(topic) { + return !(topic.getType() == mindplot.NodeModel.CENTRAL_TOPIC_TYPE && shape == mindplot.NodeModel.SHAPE_TYPE_LINE) + }; + var validateError = 'Central Topic shape can not be changed to line figure.'; + var validSelectedObjects = this._getValidSelectedObjectsIds(validateFunc, validateError); + var topicsIds = validSelectedObjects.nodes; + + if (topicsIds.length > 0) { + var commandFunc = function(topic, size) { + var result = topic.getShapeType(); + topic.setShapeType(size, true); + return result; + } + var command = new mindplot.commands.GenericFunctionCommand(commandFunc, shape, topicsIds); + this._actionRunner.execute(command); + } + }, + + + setWeight2SelectedNode : function() { + var validSelectedObjects = this._getValidSelectedObjectsIds(); + var topicsIds = validSelectedObjects.nodes; + if (topicsIds.length > 0) { + var commandFunc = function(topic) { + var result = topic.getFontWeight(); + var weight = (result == "bold") ? "normal" : "bold"; + topic.setFontWeight(weight, true); + + core.Executor.instance.delay(topic.updateNode, 0, topic); + /*var updated = function() { + topic.updateNode(); + }; + updated.delay(0);*/ + return result; + } + var command = new mindplot.commands.GenericFunctionCommand(commandFunc, "", topicsIds); + this._actionRunner.execute(command); + } + }, + + addImage2SelectedNode : function(iconType) { + var validSelectedObjects = this._getValidSelectedObjectsIds(); + var topicsIds = validSelectedObjects.nodes; + if (topicsIds.length > 0) { + + var command = new mindplot.commands.AddIconToTopicCommand(topicsIds[0], iconType); + this._actionRunner.execute(command); + } + }, + + addLink2Node : function(url) { + var validSelectedObjects = this._getValidSelectedObjectsIds(); + var topicsIds = validSelectedObjects.nodes; + if (topicsIds.length > 0) { + var command = new mindplot.commands.AddLinkToTopicCommand(topicsIds[0], url); + this._actionRunner.execute(command); + } + }, + + addLink2SelectedNode : function() { + var selectedTopics = this.getSelectedNodes(); + var topic = null; + if (selectedTopics.length > 0) { + topic = selectedTopics[0]; + if (!$chk(topic._hasLink)) { + var msg = new Element('div'); + var urlText = new Element('div').inject(msg); + urlText.innerHTML = "URL:" + var formElem = new Element('form', {'action': 'none', 'id':'linkFormId'}); + var urlInput = new Element('input', {'type': 'text', 'size':30}); + urlInput.inject(formElem); + formElem.inject(msg) + + var okButtonId = "linkOkButtonId"; + formElem.addEvent('submit', function(e) { + $(okButtonId).fireEvent('click', e); + e = new Event(e); + e.stop(); + }); + + + var okFunction = function() { + var url = urlInput.value; + var result = false; + if ("" != url.trim()) { + this.addLink2Node(url); + result = true; + } + return result; + }.bind(this); + var dialog = mindplot.LinkIcon.buildDialog(this, okFunction, okButtonId); + dialog.adopt(msg).show(); + + // IE doesn't like too much this focus action... + if (!core.UserAgent.isIE()) { + urlInput.focus(); + } + } + } else { + core.Monitor.getInstance().logMessage('At least one topic must be selected to execute this operation.'); + } + }, + + addNote2Node : function(text) { + var validSelectedObjects = this._getValidSelectedObjectsIds(); + var topicsIds = validSelectedObjects.nodes; + if (topicsIds.length > 0) { + var command = new mindplot.commands.AddNoteToTopicCommand(topicsIds[0], text); + this._actionRunner.execute(command); + } + }, + + addNote2SelectedNode : function() { + var selectedTopics = this.getSelectedNodes(); + var topic = null; + if (selectedTopics.length > 0) { + topic = selectedTopics[0]; + if (!$chk(topic._hasNote)) { + var msg = new Element('div'); + var text = new Element('div').inject(msg); + var formElem = new Element('form', {'action': 'none', 'id':'noteFormId'}); + var textInput = new Element('textarea').setStyles({'width':280, 'height':50}); + textInput.inject(formElem); + formElem.inject(msg); + + var okButtonId = "noteOkButtonId"; + formElem.addEvent('submit', function(e) { + $(okButtonId).fireEvent('click', e); + e = new Event(e); + e.stop(); + }); + + + var okFunction = function() { + var text = textInput.value; + var result = false; + if ("" != text.trim()) { + this.addNote2Node(text); + result = true; + } + return result; + }.bind(this); + var dialog = mindplot.Note.buildDialog(this, okFunction, okButtonId); + dialog.adopt(msg).show(); + + // IE doesn't like too much this focus action... + if (!core.UserAgent.isIE()) { + textInput.focus(); + } + } + } else { + core.Monitor.getInstance().logMessage('At least one topic must be selected to execute this operation.'); + } + }, + + removeLastImageFromSelectedNode : function() { + var nodes = this._getSelectedNodes(); + if (nodes.length == 0) { + core.Monitor.getInstance().logMessage('A topic must be selected in order to execute this operation.'); + } else { + var elem = nodes[0]; + elem.removeLastIcon(this); + core.Executor.instance.delay(elem.updateNode, 0, elem); + /*var executor = function(editor) + { + return function() + { + elem.updateNode(); + }; + }; + + setTimeout(executor(this), 0);*/ + } + }, + + + _getSelectedNodes : function() { + var result = new Array(); + for (var i = 0; i < this._topics.length; i++) { + if (this._topics[i].isOnFocus()) { + result.push(this._topics[i]); + } + } + return result; + }, + + getSelectedRelationshipLines : function() { + var result = new Array(); + for (var id in this._relationships) { + var relationship = this._relationships[id]; + if (relationship.isOnFocus()) { + result.push(relationship); + } + } + return result; + }, + + getSelectedNodes : function() { + return this._getSelectedNodes(); + }, + + getSelectedObjects : function() { + var selectedNodes = this.getSelectedNodes(); + var selectedRelationships = this.getSelectedRelationshipLines(); + selectedRelationships.extend(selectedNodes); + return selectedRelationships; + }, + + keyEventHandler : function(event) { + if (this._workspace.isWorkspaceEventsEnabled()) { + var evt = (event) ? event : window.event; + + if (evt.keyCode == 8) { + if ($defined(event)) { + if ($defined(event.preventDefault)) { + event.preventDefault(); + } else { + event.returnValue = false; + } + new Event(event).stop(); + } + else + evt.returnValue = false; + } + else { + evt = new Event(event); + var key = evt.key; + if (!this._editor.isVisible()) { + if (((evt.code >= 65 && evt.code <= 90) || (evt.code >= 48 && evt.code <= 57)) && !(evt.control || evt.meta)) { + if ($chk(evt.shift)) { + key = key.toUpperCase(); + } + this._showEditor(key); + } + else { + switch (key) { + case 'delete': + this.deleteCurrentNode(); + break; + case 'enter': + if (!evt.meta) { + this.createSiblingForSelectedNode(); + break; + } + case 'insert': + this.createChildForSelectedNode(); + break; + case 'right': + var nodes = this._getSelectedNodes(); + if (nodes.length > 0) { + var node = nodes[0]; + if (node.getTopicType() == mindplot.NodeModel.CENTRAL_TOPIC_TYPE) { + this._goToSideChild(node, 'RIGHT'); + } + else { + if (node.getPosition().x < 0) { + this._goToParent(node); + } + else if (!node.areChildrenShrinked()) { + this._goToChild(node); + } + } + } + break; + case 'left': + var nodes = this._getSelectedNodes(); + if (nodes.length > 0) { + var node = nodes[0]; + if (node.getTopicType() == mindplot.NodeModel.CENTRAL_TOPIC_TYPE) { + this._goToSideChild(node, 'LEFT'); + } + else { + if (node.getPosition().x > 0) { + this._goToParent(node); + } + else if (!node.areChildrenShrinked()) { + this._goToChild(node); + } + } + } + break; + case'up': + var nodes = this._getSelectedNodes(); + if (nodes.length > 0) { + var node = nodes[0]; + if (node.getTopicType() != mindplot.NodeModel.CENTRAL_TOPIC_TYPE) { + this._goToBrother(node, 'UP'); + } + } + break; + case 'down': + var nodes = this._getSelectedNodes(); + if (nodes.length > 0) { + var node = nodes[0]; + if (node.getTopicType() != mindplot.NodeModel.CENTRAL_TOPIC_TYPE) { + this._goToBrother(node, 'DOWN'); + } + } + break; + case 'f2': + this._showEditor(); + break; + case 'space': + + var nodes = this._getSelectedNodes(); + if (nodes.length > 0) { + var topic = nodes[0]; + + var model = topic.getModel(); + var isShrink = !model.areChildrenShrinked(); + topic.setChildrenShrinked(isShrink); + } + break; + case 'backspace': + evt.preventDefault(); + break; + case 'esc': + var nodes = this._getSelectedNodes(); + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + node.setOnFocus(false); + } + break; + case 'z': + if (evt.control || evt.meta) { + if (evt.shift) { + this.redo(); + } + else { + this.undo(); + } + } + break; + default: + break; + } + } + evt.stop(); + } + } + } + }, + + _showEditor : function(key) { + var nodes = this._getSelectedNodes(); + if (nodes.length == 1) { + var node = nodes[0]; + if (key && key != "") { + this._editor.setInitialText(key); + } + this._editor.getFocusEvent.attempt(node, this._editor); + } + }, + + _goToBrother : function(node, direction) { + var brothers = node._parent._getChildren(); + var target = node; + var y = node.getPosition().y; + var x = node.getPosition().x; + var dist = null; + for (var i = 0; i < brothers.length; i++) { + var sameSide = (x * brothers[i].getPosition().x) >= 0; + if (brothers[i] != node && sameSide) { + var brother = brothers[i]; + var brotherY = brother.getPosition().y; + if (direction == "DOWN" && brotherY > y) { + var distancia = y - brotherY; + if (distancia < 0) { + distancia = distancia * (-1); + } + if (dist == null || dist > distancia) { + dist = distancia; + target = brothers[i]; + } + } + else if (direction == "UP" && brotherY < y) { + var distancia = y - brotherY; + if (distancia < 0) { + distancia = distancia * (-1); + } + if (dist == null || dist > distancia) { + dist = distancia; + target = brothers[i]; + } + } + } + } + this._goToNode(target); + }, + + _goToNode : function(node) { + node.setOnFocus(true); + this.onObjectFocusEvent.attempt(node, this); + }, + + _goToSideChild : function(node, side) { + var children = node._getChildren(); + if (children.length > 0) { + var target = children[0]; + var top = null; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + var childY = child.getPosition().y; + if (side == 'LEFT' && child.getPosition().x < 0) { + if (top == null || childY < top) { + target = child; + top = childY; + } + } + if (side == 'RIGHT' && child.getPosition().x > 0) { + if (top == null || childY < top) { + target = child; + top = childY; + } + } + } + + this._goToNode(target); + } + }, + + _goToParent : function(node) { + var parent = node._parent; + this._goToNode(parent); + }, + + _goToChild : function(node) { + var children = node._getChildren(); + if (children.length > 0) { + var target = children[0]; + var top = target.getPosition().y; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (child.getPosition().y < top) { + top = child.getPosition().y; + target = child; + } + } + this._goToNode(target); + } + }, + + getWorkSpace : function() { + return this._workspace; + }, + + findRelationShipsByTopicId : function(topicId) { + var result = []; + for (var relationshipId in this._relationships) { + var relationship = this._relationships[relationshipId]; + if (relationship.getModel().getFromNode() == topicId || relationship.getModel().getToNode() == topicId) { + result.push(relationship); + } + } + return result; } } - } -}; - -mindplot.MindmapDesigner.prototype._showEditor = function(key) -{ - var nodes = this._getSelectedNodes(); - if (nodes.length == 1) - { - var node = nodes[0]; - if (key && key != "") - { - this._editor.setInitialText(key); - } - this._editor.getFocusEvent.attempt(node, this._editor); - } -}; - -mindplot.MindmapDesigner.prototype._goToBrother = function(node, direction) -{ - var brothers = node._parent._getChildren(); - var target = node; - var y = node.getPosition().y; - var x = node.getPosition().x; - var dist = null; - for (var i = 0; i < brothers.length; i++) - { - var sameSide = (x * brothers[i].getPosition().x) >= 0; - if (brothers[i] != node && sameSide) - { - var brother = brothers[i]; - var brotherY = brother.getPosition().y; - if (direction == "DOWN" && brotherY > y) - { - var distancia = y - brotherY; - if (distancia < 0) - { - distancia = distancia * (-1); - } - if (dist == null || dist > distancia) - { - dist = distancia; - target = brothers[i]; - } - } - else if (direction == "UP" && brotherY < y) - { - var distancia = y - brotherY; - if (distancia < 0) - { - distancia = distancia * (-1); - } - if (dist == null || dist > distancia) - { - dist = distancia; - target = brothers[i]; - } - } - } - } - this._goToNode(target); -}; - -mindplot.MindmapDesigner.prototype._goToNode = function(node) -{ - node.setOnFocus(true); - this.onObjectFocusEvent.attempt(node, this); -}; - -mindplot.MindmapDesigner.prototype._goToSideChild = function(node, side) -{ - var children = node._getChildren(); - if (children.length > 0) - { - var target = children[0]; - var top = null; - for (var i = 0; i < children.length; i++) - { - var child = children[i]; - var childY = child.getPosition().y; - if (side == 'LEFT' && child.getPosition().x < 0) - { - if (top == null || childY < top) - { - target = child; - top = childY; - } - } - if (side == 'RIGHT' && child.getPosition().x > 0) - { - if (top == null || childY < top) - { - target = child; - top = childY; - } - } - } - - this._goToNode(target); - } -}; - -mindplot.MindmapDesigner.prototype._goToParent = function(node) -{ - var parent = node._parent; - this._goToNode(parent); -}; - -mindplot.MindmapDesigner.prototype._goToChild = function(node) -{ - var children = node._getChildren(); - if (children.length > 0) - { - var target = children[0]; - var top = target.getPosition().y; - for (var i = 0; i < children.length; i++) - { - var child = children[i]; - if (child.getPosition().y < top) - { - top = child.getPosition().y; - target = child; - } - } - this._goToNode(target); - } -}; - -mindplot.MindmapDesigner.prototype.getWorkSpace = function() -{ - return this._workspace; -}; - -mindplot.MindmapDesigner.prototype.findRelationShipsByTopicId = function(topicId){ - var result = []; - for(var relationshipId in this._relationships){ - var relationship = this._relationships[relationshipId]; - if(relationship.getModel().getFromNode()==topicId || relationship.getModel().getToNode()==topicId){ - result.push(relationship); - } - } - return result; -}; +); diff --git a/mindplot/src/main/javascript/NodeModel.js b/mindplot/src/main/javascript/NodeModel.js index 4fac7e23..c67d8cfd 100644 --- a/mindplot/src/main/javascript/NodeModel.js +++ b/mindplot/src/main/javascript/NodeModel.js @@ -183,8 +183,8 @@ mindplot.NodeModel = new Class({ }, setPosition : function(x, y) { - $assert($defined(x), "x coordinate must be defined"); - $assert($defined(y), "y coordinate must be defined"); + $assert(x, "x coordinate must be defined"); + $assert(y, "y coordinate must be defined"); if (!$defined(this._position)) { this._position = new core.Point(); @@ -198,8 +198,8 @@ mindplot.NodeModel = new Class({ }, setFinalPosition : function(x, y) { - $assert($defined(x), "x coordinate must be defined"); - $assert($defined(y), "y coordinate must be defined"); + $assert(x, "x coordinate must be defined"); + $assert(y, "y coordinate must be defined"); if (!$defined(this._finalPosition)) { this._finalPosition = new core.Point(); @@ -253,7 +253,7 @@ mindplot.NodeModel = new Class({ canBeConnected : function(sourceModel, sourcePosition, targetTopicHeight) { $assert(sourceModel != this, 'The same node can not be parent and child if itself.'); $assert(sourcePosition, 'childPosition can not be null.'); - $assert($defined(targetTopicHeight), 'childrenWidth can not be null.'); + $assert(targetTopicHeight, 'childrenWidth can not be null.'); // Only can be connected if the node is in the left or rigth. var targetModel = this; diff --git a/mindplot/src/main/javascript/RelationshipLine.js b/mindplot/src/main/javascript/RelationshipLine.js index 26df1fc0..44f70861 100644 --- a/mindplot/src/main/javascript/RelationshipLine.js +++ b/mindplot/src/main/javascript/RelationshipLine.js @@ -1,283 +1,275 @@ /* -* 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.RelationshipLine = function(sourceNode, targetNode, lineType) -{ - mindplot.ConnectionLine.call(this,sourceNode, targetNode, lineType); - this._line2d.setIsSrcControlPointCustom(false); - this._line2d.setIsDestControlPointCustom(false); - this._isOnfocus = false; - 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]); - this._focusShape.setVisibility(false); - this._onFocus = false; - this._isInWorkspace = false; - this._controlPointsController = new mindplot.ControlPoint(); + * 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.RelationshipLine = new Class({ + Extends: mindplot.ConnectionLine, + initialize:function(sourceNode, targetNode, lineType) { + this.parent(sourceNode, targetNode, lineType); - 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._line2d.setIsSrcControlPointCustom(false); + this._line2d.setIsDestControlPointCustom(false); + this._isOnfocus = false; + 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]); + this._focusShape.setVisibility(false); + this._onFocus = false; + 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); -objects.extend(mindplot.RelationshipLine, mindplot.ConnectionLine); + }, -mindplot.RelationshipLine.getStrokeColor = function() -{ - return '#9b74e6'; -}; + setStroke : function(color, style, opacity) { + // @Todo: How this is supported in mootools ? + mindplot.ConnectionLine.prototype.setStroke.call(this, color, style, opacity); + this._startArrow.setStrokeColor(color); + }, -mindplot.RelationshipLine.prototype.setStroke = function(color, style, opacity) -{ - mindplot.RelationshipLine.superClass.setStroke.call(this, color, style, opacity); - this._startArrow.setStrokeColor(color); -}; + redraw : function() { + var line2d = this._line2d; + var sourceTopic = this._sourceTopic; + var sourcePosition = sourceTopic.getPosition(); -mindplot.RelationshipLine.prototype.redraw = function() -{ - var line2d = this._line2d; - var sourceTopic = this._sourceTopic; - var sourcePosition = sourceTopic.getPosition(); + var targetTopic = this._targetTopic; + var targetPosition = targetTopic.getPosition(); - var targetTopic = this._targetTopic; - var targetPosition = targetTopic.getPosition(); + var sPos,tPos; + this._line2d.setStroke(2); + var ctrlPoints = this._line2d.getControlPoints(); + if (!this._line2d.isDestControlPointCustom() && !this._line2d.isSrcControlPointCustom()) { + var defaultPoints = core.Utils.calculateDefaultControlPoints(sourcePosition, targetPosition); + ctrlPoints[0].x = defaultPoints[0].x; + ctrlPoints[0].y = defaultPoints[0].y; + ctrlPoints[1].x = defaultPoints[1].x; + ctrlPoints[1].y = defaultPoints[1].y; + } + var spoint = new core.Point(); + spoint.x = parseInt(ctrlPoints[0].x) + parseInt(sourcePosition.x); + spoint.y = parseInt(ctrlPoints[0].y) + parseInt(sourcePosition.y); + var tpoint = new core.Point(); + tpoint.x = parseInt(ctrlPoints[1].x) + parseInt(targetPosition.x); + tpoint.y = parseInt(ctrlPoints[1].y) + parseInt(targetPosition.y); + sPos = core.Utils.calculateRelationShipPointCoordinates(sourceTopic, spoint); + tPos = core.Utils.calculateRelationShipPointCoordinates(targetTopic, tpoint); - var sPos,tPos; - this._line2d.setStroke(2); - var ctrlPoints = this._line2d.getControlPoints(); - if(!this._line2d.isDestControlPointCustom() && !this._line2d.isSrcControlPointCustom()){ - var defaultPoints = core.Utils.calculateDefaultControlPoints(sourcePosition, targetPosition); - ctrlPoints[0].x=defaultPoints[0].x; - ctrlPoints[0].y=defaultPoints[0].y; - ctrlPoints[1].x=defaultPoints[1].x; - ctrlPoints[1].y=defaultPoints[1].y; - } - var spoint = new core.Point(); - spoint.x=parseInt(ctrlPoints[0].x)+parseInt(sourcePosition.x); - spoint.y=parseInt(ctrlPoints[0].y)+parseInt(sourcePosition.y); - var tpoint = new core.Point(); - tpoint.x=parseInt(ctrlPoints[1].x)+parseInt(targetPosition.x); - tpoint.y=parseInt(ctrlPoints[1].y)+parseInt(targetPosition.y); - sPos = core.Utils.calculateRelationShipPointCoordinates(sourceTopic,spoint); - tPos = core.Utils.calculateRelationShipPointCoordinates(targetTopic,tpoint); + line2d.setFrom(sPos.x, sPos.y); + line2d.setTo(tPos.x, tPos.y); - line2d.setFrom(sPos.x, sPos.y); - line2d.setTo(tPos.x, tPos.y); + line2d.moveToFront(); - line2d.moveToFront(); + //Positionate Arrows + this._positionateArrows(); - //Positionate Arrows - this._positionateArrows(); + // Add connector ... + this._positionateConnector(targetTopic); - // Add connector ... - this._positionateConnector(targetTopic); + if (this.isOnFocus()) { + this._refreshSelectedShape(); + } + this._focusShape.moveToBack(); + this._controlPointsController.redraw(); + }, - if(this.isOnFocus()){ - this._refreshSelectedShape(); - } - this._focusShape.moveToBack(); - this._controlPointsController.redraw(); -}; + _positionateArrows : function() { + this._endArrow.setVisibility(this.isVisible() && this._showEndArrow); + this._startArrow.setVisibility(this.isVisible() && this._showStartArrow); -mindplot.RelationshipLine.prototype._positionateArrows = function() -{ - this._endArrow.setVisibility(this.isVisible() && this._showEndArrow); - this._startArrow.setVisibility(this.isVisible() && this._showStartArrow); + 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.moveToBack(); - 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.moveToBack(); + if (this._line2d.getType() == "CurvedLine") { + var controlPoints = this._line2d.getControlPoints(); + this._startArrow.setControlPoint(controlPoints[0]); + this._endArrow.setControlPoint(controlPoints[1]); + } else { + this._startArrow.setControlPoint(this._line2d.getTo()); + this._endArrow.setControlPoint(this._line2d.getFrom()); + } + }, - if(this._line2d.getType() == "CurvedLine"){ - var controlPoints = this._line2d.getControlPoints(); - this._startArrow.setControlPoint(controlPoints[0]); - this._endArrow.setControlPoint(controlPoints[1]); - } else { - this._startArrow.setControlPoint(this._line2d.getTo()); - this._endArrow.setControlPoint(this._line2d.getFrom()); - } -}; + addToWorkspace : function(workspace) { + workspace.appendChild(this._focusShape); + workspace.appendChild(this._controlPointsController); + this._controlPointControllerListener = this._initializeControlPointController.bindWithEvent(this, workspace); + this._line2d.addEventListener('click', this._controlPointControllerListener); + this._isInWorkspace = true; -mindplot.RelationshipLine.prototype.addToWorkspace = function(workspace) -{ - workspace.appendChild(this._focusShape); - workspace.appendChild(this._controlPointsController); - this._controlPointControllerListener =this._initializeControlPointController.bindWithEvent(this,workspace); - this._line2d.addEventListener('click', this._controlPointControllerListener); - this._isInWorkspace = true; + workspace.appendChild(this._startArrow); + workspace.appendChild(this._endArrow); - workspace.appendChild(this._startArrow); - workspace.appendChild(this._endArrow); + mindplot.ConnectionLine.prototype.addToWorkspace.call(this, workspace); + }, - mindplot.RelationshipLine.superClass.addToWorkspace.call(this, workspace); -}; - -mindplot.RelationshipLine.prototype._initializeControlPointController = function(event,workspace){ + _initializeControlPointController : function(event, workspace) { this.setOnFocus(true); -}; + }, -mindplot.RelationshipLine.prototype.removeFromWorkspace = function(workspace){ - workspace.removeChild(this._focusShape); - workspace.removeChild(this._controlPointsController); - this._line2d.removeEventListener('click',this._controlPointControllerListener); - this._isInWorkspace = false; - workspace.removeChild(this._startArrow); - workspace.removeChild(this._endArrow); - - mindplot.RelationshipLine.superClass.removeFromWorkspace.call(this,workspace); -}; + removeFromWorkspace : function(workspace) { + workspace.removeChild(this._focusShape); + workspace.removeChild(this._controlPointsController); + this._line2d.removeEventListener('click', this._controlPointControllerListener); + this._isInWorkspace = false; + workspace.removeChild(this._startArrow); + workspace.removeChild(this._endArrow); -mindplot.RelationshipLine.prototype.getType = function(){ - return mindplot.RelationshipLine.type; -}; + mindplot.ConnectionLine.prototype.removeFromWorkspace.call(this, workspace); + }, -mindplot.RelationshipLine.prototype.setOnFocus = function(focus){ - // Change focus shape - if(focus){ - this._refreshSelectedShape(); - this._controlPointsController.setLine(this); - } - this._focusShape.setVisibility(focus); + getType : function() { + return mindplot.RelationshipLine.type; + }, - this._controlPointsController.setVisibility(focus); - this._onFocus = focus; -}; + setOnFocus : function(focus) { + // Change focus shape + if (focus) { + this._refreshSelectedShape(); + this._controlPointsController.setLine(this); + } + this._focusShape.setVisibility(focus); -mindplot.RelationshipLine.prototype._refreshSelectedShape = function () { - var sPos = this._line2d.getFrom(); - var tPos = this._line2d.getTo(); - var ctrlPoints = this._line2d.getControlPoints(); - this._focusShape.setFrom(sPos.x, sPos.y); - this._focusShape.setTo(tPos.x, tPos.y); - var shapeCtrlPoints = this._focusShape.getControlPoints(); - shapeCtrlPoints[0].x = ctrlPoints[0].x; - shapeCtrlPoints[0].y = ctrlPoints[0].y; - shapeCtrlPoints[1].x = ctrlPoints[1].x; - shapeCtrlPoints[1].y = ctrlPoints[1].y; - this._focusShape.updateLine(); - //this._focusShape.setSrcControlPoint(ctrlPoints[0]); - //this._focusShape.setDestControlPoint(ctrlPoints[1]); -}; + this._controlPointsController.setVisibility(focus); + this._onFocus = focus; + }, -mindplot.RelationshipLine.prototype.addEventListener = function(type, listener){ - // Translate to web 2d events ... - if (type == 'onfocus') - { - type = 'mousedown'; - } + _refreshSelectedShape : function () { + var sPos = this._line2d.getFrom(); + var tPos = this._line2d.getTo(); + var ctrlPoints = this._line2d.getControlPoints(); + this._focusShape.setFrom(sPos.x, sPos.y); + this._focusShape.setTo(tPos.x, tPos.y); + var shapeCtrlPoints = this._focusShape.getControlPoints(); + shapeCtrlPoints[0].x = ctrlPoints[0].x; + shapeCtrlPoints[0].y = ctrlPoints[0].y; + shapeCtrlPoints[1].x = ctrlPoints[1].x; + shapeCtrlPoints[1].y = ctrlPoints[1].y; + this._focusShape.updateLine(); + //this._focusShape.setSrcControlPoint(ctrlPoints[0]); + //this._focusShape.setDestControlPoint(ctrlPoints[1]); + }, - var line = this._line2d; - line.addEventListener(type, listener); -}; + addEventListener : function(type, listener) { + // Translate to web 2d events ... + if (type == 'onfocus') { + type = 'mousedown'; + } -mindplot.RelationshipLine.prototype.isOnFocus = function() -{ - return this._onFocus; -}; + var line = this._line2d; + line.addEventListener(type, listener); + }, -mindplot.RelationshipLine.prototype.isInWorkspace = function(){ - return this._isInWorkspace; -}; + isOnFocus : function() { + return this._onFocus; + }, -mindplot.RelationshipLine.prototype.setVisibility = function(value) -{ - mindplot.RelationshipLine.superClass.setVisibility.call(this,value); - this._endArrow.setVisibility(this._showEndArrow && value); - this._startArrow.setVisibility(this._showStartArrow && value); -}; + isInWorkspace : function() { + return this._isInWorkspace; + }, -mindplot.RelationshipLine.prototype.setOpacity = function(opacity){ - mindplot.RelationshipLine.superClass.setOpacity.call(this,opacity); - if(this._showEndArrow) - this._endArrow.setOpacity(opacity); - if(this._showStartArrow) - this._startArrow.setOpacity(opacity); -}; + setVisibility : function(value) { + mindplot.ConnectionLine.prototype.setVisibility.call(this, value); + this._endArrow.setVisibility(this._showEndArrow && value); + this._startArrow.setVisibility(this._showStartArrow && value); + }, -mindplot.RelationshipLine.prototype.setShowEndArrow = function(visible){ - this._showEndArrow = visible; - if(this._isInWorkspace) - this.redraw(); -}; + setOpacity : function(opacity) { + mindplot.ConnectionLine.prototype.setOpacity.call(this, opacity); + if (this._showEndArrow) + this._endArrow.setOpacity(opacity); + if (this._showStartArrow) + this._startArrow.setOpacity(opacity); + }, -mindplot.RelationshipLine.prototype.setShowStartArrow = function(visible){ - this._showStartArrow = visible; - if(this._isInWorkspace) - this.redraw(); -}; + setShowEndArrow : function(visible) { + this._showEndArrow = visible; + if (this._isInWorkspace) + this.redraw(); + }, -mindplot.RelationshipLine.prototype.isShowEndArrow = function(){ - return this._showEndArrow; -}; + setShowStartArrow : function(visible) { + this._showStartArrow = visible; + if (this._isInWorkspace) + this.redraw(); + }, -mindplot.RelationshipLine.prototype.isShowStartArrow = function(){ - return this._showStartArrow; -}; + isShowEndArrow : function() { + return this._showEndArrow; + }, -mindplot.RelationshipLine.prototype.setFrom = function(x,y){ - this._line2d.setFrom(x,y); - this._startArrow.setFrom(x,y); -}; + isShowStartArrow : function() { + return this._showStartArrow; + }, -mindplot.RelationshipLine.prototype.setTo = function(x,y){ - this._line2d.setTo(x,y); - this._endArrow.setFrom(x,y); -}; + setFrom : function(x, y) { + this._line2d.setFrom(x, y); + this._startArrow.setFrom(x, y); + }, -mindplot.RelationshipLine.prototype.setSrcControlPoint = function(control){ - this._line2d.setSrcControlPoint(control); - this._startArrow.setControlPoint(control); -}; + setTo : function(x, y) { + this._line2d.setTo(x, y); + this._endArrow.setFrom(x, y); + }, -mindplot.RelationshipLine.prototype.setDestControlPoint = function(control){ - this._line2d.setDestControlPoint(control); - this._endArrow.setControlPoint(control); -}; + setSrcControlPoint : function(control) { + this._line2d.setSrcControlPoint(control); + this._startArrow.setControlPoint(control); + }, -mindplot.RelationshipLine.prototype.getControlPoints = function(){ - return this._line2d.getControlPoints(); -}; + setDestControlPoint : function(control) { + this._line2d.setDestControlPoint(control); + this._endArrow.setControlPoint(control); + }, -mindplot.RelationshipLine.prototype.isSrcControlPointCustom = function(){ - return this._line2d.isSrcControlPointCustom(); -}; + getControlPoints : function() { + return this._line2d.getControlPoints(); + }, -mindplot.RelationshipLine.prototype.isDestControlPointCustom = function(){ - return this._line2d.isDestControlPointCustom(); -}; + isSrcControlPointCustom : function() { + return this._line2d.isSrcControlPointCustom(); + }, -mindplot.RelationshipLine.prototype.setIsSrcControlPointCustom = function(isCustom){ - this._line2d.setIsSrcControlPointCustom(isCustom); -}; + isDestControlPointCustom : function() { + return this._line2d.isDestControlPointCustom(); + }, -mindplot.RelationshipLine.prototype.setIsDestControlPointCustom = function(isCustom){ - this._line2d.setIsDestControlPointCustom(isCustom); -}; + setIsSrcControlPointCustom : function(isCustom) { + this._line2d.setIsSrcControlPointCustom(isCustom); + }, + + setIsDestControlPointCustom : function(isCustom) { + this._line2d.setIsDestControlPointCustom(isCustom); + }}); -mindplot.RelationshipLine.type = "RelationshipLine"; \ No newline at end of file +mindplot.RelationshipLine.type = "RelationshipLine"; +mindplot.RelationshipLine.getStrokeColor = function() { + return '#9b74e6'; +} diff --git a/mindplot/src/main/javascript/RelationshipModel.js b/mindplot/src/main/javascript/RelationshipModel.js index f1d7263c..9cf7edad 100644 --- a/mindplot/src/main/javascript/RelationshipModel.js +++ b/mindplot/src/main/javascript/RelationshipModel.js @@ -1,116 +1,113 @@ /* -* 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.RelationshipModel = function(fromNode, toNode) -{ - $assert(fromNode, 'from node type can not be null'); - $assert(toNode, 'to node type can not be 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.RelationshipModel = new Class({ + initialize:function(fromNode, toNode) { + $assert(fromNode, 'from node type can not be null'); + $assert(toNode, 'to node type can not be null'); - this._id = mindplot.RelationshipModel._nextUUID(); - this._fromNode = fromNode; - this._toNode = toNode; - this._lineType=mindplot.ConnectionLine.SIMPLE_CURVED; - this._srcCtrlPoint=null; - this._destCtrlPoint=null; - this._endArrow=true; - this._startArrow=false; - this._ctrlPointRelative=false; + this._id = mindplot.RelationshipModel._nextUUID(); + this._fromNode = fromNode; + this._toNode = toNode; + this._lineType = mindplot.ConnectionLine.SIMPLE_CURVED; + this._srcCtrlPoint = null; + this._destCtrlPoint = null; + this._endArrow = true; + this._startArrow = false; + }, -}; + getFromNode : function() { + return this._fromNode; + }, -mindplot.RelationshipModel.prototype.getFromNode=function(){ - return this._fromNode; -}; + getToNode : function() { + return this._toNode; + }, -mindplot.RelationshipModel.prototype.getToNode=function(){ - return this._toNode; -}; + getId : function() { + return this._id; + }, -mindplot.RelationshipModel.prototype.getId=function(){ - return this._id; -}; + getLineType : function() { + return this._lineType; + }, -mindplot.RelationshipModel.prototype.getLineType = function(){ - return this._lineType; -}; + setLineType : function(lineType) { + this._lineType = lineType; + }, -mindplot.RelationshipModel.prototype.setLineType = function(lineType){ - this._lineType = lineType; -}; + getSrcCtrlPoint : function() { + return this._srcCtrlPoint; + }, -mindplot.RelationshipModel.prototype.getSrcCtrlPoint= function(){ - return this._srcCtrlPoint; -}; + setSrcCtrlPoint : function(srcCtrlPoint) { + this._srcCtrlPoint = srcCtrlPoint; + }, -mindplot.RelationshipModel.prototype.setSrcCtrlPoint= function(srcCtrlPoint){ - this._srcCtrlPoint = srcCtrlPoint; -}; + getDestCtrlPoint : function() { + return this._destCtrlPoint; + }, -mindplot.RelationshipModel.prototype.getDestCtrlPoint= function(){ - return this._destCtrlPoint; -}; + setDestCtrlPoint : function(destCtrlPoint) { + this._destCtrlPoint = destCtrlPoint; + }, -mindplot.RelationshipModel.prototype.setDestCtrlPoint= function(destCtrlPoint){ - this._destCtrlPoint = destCtrlPoint; -}; + getEndArrow : function() { + return this._endArrow; + }, -mindplot.RelationshipModel.prototype.getEndArrow= function(){ - return this._endArrow; -}; + setEndArrow : function(endArrow) { + this._endArrow = endArrow; + }, -mindplot.RelationshipModel.prototype.setEndArrow= function(endArrow){ - this._endArrow = endArrow; -}; + getStartArrow : function() { + return this._startArrow; + }, -mindplot.RelationshipModel.prototype.getStartArrow= function(){ - return this._startArrow; -}; + setStartArrow : function(startArrow) { + this._startArrow = startArrow; + }, -mindplot.RelationshipModel.prototype.setStartArrow= function(startArrow){ - this._startArrow = startArrow; -}; + clone : function(model) { + var result = new mindplot.RelationshipModel(this._fromNode, this._toNode); + result._id = this._id; + result._lineType = this._lineType; + result._srcCtrlPoint = this._srcCtrlPoint; + result._destCtrlPoint = this._destCtrlPoint; + result._endArrow = this._endArrow; + result._startArrow = this._startArrow; + return result; + }, + + inspect : function() { + return '(fromNode:' + this.getFromNode().getId() + ' , toNode: ' + this.getToNode().getId() + ')'; + } +}); -mindplot.RelationshipModel.prototype.clone = function(model){ - var result = new mindplot.RelationshipModel(this._fromNode, this._toNode); - result._id = this._id; - result._lineType = this._lineType; - result._srcCtrlPoint = this._srcCtrlPoint; - result._destCtrlPoint = this._destCtrlPoint; - result._endArrow = this._endArrow; - result._startArrow = this._startArrow; - return result; -}; /** * @todo: This method must be implemented. */ -mindplot.RelationshipModel._nextUUID = function() -{ - if (!$defined(this._uuid)) - { +mindplot.RelationshipModel._nextUUID = function() { + if (!$defined(this._uuid)) { this._uuid = 0; } this._uuid = this._uuid + 1; return this._uuid; -}; +} - -mindplot.RelationshipModel.prototype.inspect = function() -{ - return '(fromNode:' + this.getFromNode().getId() + ' , toNode: ' + this.getToNode().getId() + ')'; -}; diff --git a/mindplot/src/main/javascript/ScreenManager.js b/mindplot/src/main/javascript/ScreenManager.js index a5220b7a..1ca5364c 100644 --- a/mindplot/src/main/javascript/ScreenManager.js +++ b/mindplot/src/main/javascript/ScreenManager.js @@ -1,140 +1,134 @@ /* -* 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.ScreenManager = function(width, height, divElement) -{ - this._divContainer = divElement; - this._offset = {x:0,y:0}; -}; - -mindplot.ScreenManager.prototype.setScale = function(scale) -{ - $assert($defined(scale), 'Screen scale can not be null'); - this._workspaceScale = scale; -}; - -mindplot.ScreenManager.prototype.addEventListener=function(event, listener){ - $(this._divContainer).addEvent(event, listener); -}; - -mindplot.ScreenManager.prototype.removeEventListener=function(event, listener){ - $(this._divContainer).removeEvent(event, listener); -}; - -mindplot.ScreenManager.prototype.getWorkspaceElementPosition = function(e) -{ - // Retrive current element position. - var elementPosition = e.getPosition(); - var x = elementPosition.x; - var y = elementPosition.y; - - // Add workspace offset. - x = x - this._offset.x; - y = y - this._offset.y; - - // Scale coordinate in order to be relative to the workspace. That's coordSize/size; - x = x / this._workspaceScale; - y = y / this._workspaceScale; - - // Subtract div position. - /* var containerElem = this.getContainer(); -var containerPosition = core.Utils.workOutDivElementPosition(containerElem); -x = x + containerPosition.x; -y = y + containerPosition.y;*/ - - // Remove decimal part.. - return {x:x,y:y}; -}; - -mindplot.ScreenManager.prototype.getWorkspaceIconPosition = function(e) -{ - // Retrive current icon position. - var image = e.getImage(); - var elementPosition = image.getPosition(); - var imageSize = e.getSize(); - - //Add group offset - var iconGroup = e.getGroup(); - var group = iconGroup.getNativeElement(); - var coordOrigin=group.getCoordOrigin(); - var groupSize = group.getSize(); - var coordSize = group.getCoordSize(); - - var scale={x:coordSize.width/parseInt(groupSize.width), y:coordSize.height/parseInt(groupSize.height)}; - - var x = (elementPosition.x - coordOrigin.x-(parseInt(imageSize.width)/2))/scale.x; - var y = (elementPosition.y - coordOrigin.y-(parseInt(imageSize.height)/2))/scale.y; - - //Retrieve iconGroup Position - var groupPosition = iconGroup.getPosition(); - x = x + groupPosition.x; - y = y + groupPosition.y; - - //Retrieve topic Position - var topic = iconGroup.getTopic(); - var topicPosition = this.getWorkspaceElementPosition(topic); - topicPosition.x = topicPosition.x - (parseInt(topic.getSize().width)/2); - - - // Remove decimal part.. - return {x:x+topicPosition.x,y:y+topicPosition.y}; -}; - -mindplot.ScreenManager.prototype.getWorkspaceMousePosition = function(e) -{ - // Retrive current mouse position. - var mousePosition = this._getMousePosition(e); - var x = mousePosition.x; - var y = mousePosition.y; - - // Subtract div position. - var containerElem = this.getContainer(); - var containerPosition = core.Utils.workOutDivElementPosition(containerElem); - x = x - containerPosition.x; - y = y - containerPosition.y; - - // Scale coordinate in order to be relative to the workspace. That's coordSize/size; - x = x * this._workspaceScale; - y = y * this._workspaceScale; - - // Add workspace offset. - x = x + this._offset.x; - y = y + this._offset.y; - - // Remove decimal part.. - return new core.Point(x, y); -}; - -/** - * http://www.howtocreate.co.uk/tutorials/javascript/eventinfo + * 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.ScreenManager.prototype._getMousePosition = function(event) -{ - return core.Utils.getMousePosition(event); -}; -mindplot.ScreenManager.prototype.getContainer = function() -{ - return this._divContainer; -}; +mindplot.ScreenManager = new Class({ + initialize:function(width, height, divElement) { + $assert(divElement, "can not be null"); + this._divContainer = divElement; + this._offset = {x:0,y:0}; + }, -mindplot.ScreenManager.prototype.setOffset = function(x, y) -{ - this._offset.x = x; - this._offset.y = y; -}; + setScale : function(scale) { + $assert(scale, 'Screen scale can not be null'); + this._workspaceScale = scale; + }, + + addEventListener : function(event, listener) { + $(this._divContainer).addEvent(event, listener); + }, + + removeEventListener : function(event, listener) { + $(this._divContainer).removeEvent(event, listener); + }, + + getWorkspaceElementPosition : function(e) { + // Retrive current element position. + var elementPosition = e.getPosition(); + var x = elementPosition.x; + var y = elementPosition.y; + + // Add workspace offset. + x = x - this._offset.x; + y = y - this._offset.y; + + // Scale coordinate in order to be relative to the workspace. That's coordSize/size; + x = x / this._workspaceScale; + y = y / this._workspaceScale; + + // Subtract div position. + /* var containerElem = this.getContainer(); + var containerPosition = core.Utils.workOutDivElementPosition(containerElem); + x = x + containerPosition.x; + y = y + containerPosition.y;*/ + + // Remove decimal part.. + return {x:x,y:y}; + }, + + getWorkspaceIconPosition : function(e) { + // Retrieve current icon position. + var image = e.getImage(); + var elementPosition = image.getPosition(); + var imageSize = e.getSize(); + + //Add group offset + var iconGroup = e.getGroup(); + var group = iconGroup.getNativeElement(); + var coordOrigin = group.getCoordOrigin(); + var groupSize = group.getSize(); + var coordSize = group.getCoordSize(); + + var scale = {x:coordSize.width / parseInt(groupSize.width), y:coordSize.height / parseInt(groupSize.height)}; + + var x = (elementPosition.x - coordOrigin.x - (parseInt(imageSize.width) / 2)) / scale.x; + var y = (elementPosition.y - coordOrigin.y - (parseInt(imageSize.height) / 2)) / scale.y; + + //Retrieve iconGroup Position + var groupPosition = iconGroup.getPosition(); + x = x + groupPosition.x; + y = y + groupPosition.y; + + //Retrieve topic Position + var topic = iconGroup.getTopic(); + var topicPosition = this.getWorkspaceElementPosition(topic); + topicPosition.x = topicPosition.x - (parseInt(topic.getSize().width) / 2); + + + // Remove decimal part.. + return {x:x + topicPosition.x,y:y + topicPosition.y}; + }, + + getWorkspaceMousePosition : function(e) { + // Retrive current mouse position. + var mousePosition = this._getMousePosition(e); + var x = mousePosition.x; + var y = mousePosition.y; + + // Subtract div position. + var containerElem = this.getContainer(); + var containerPosition = core.Utils.workOutDivElementPosition(containerElem); + x = x - containerPosition.x; + y = y - containerPosition.y; + + // Scale coordinate in order to be relative to the workspace. That's coordSize/size; + x = x * this._workspaceScale; + y = y * this._workspaceScale; + + // Add workspace offset. + x = x + this._offset.x; + y = y + this._offset.y; + + // Remove decimal part.. + return new core.Point(x, y); + }, + + /** + * http://www.howtocreate.co.uk/tutorials/javascript/eventinfo + */ + _getMousePosition : function(event) { + return core.Utils.getMousePosition(event); + }, + + getContainer : function() { + return this._divContainer; + }, + + setOffset : function(x, y) { + this._offset.x = x; + this._offset.y = y; + }}); diff --git a/mindplot/src/main/javascript/SingleCommandDispatcher.js b/mindplot/src/main/javascript/SingleCommandDispatcher.js index 0750ef81..7093aa51 100644 --- a/mindplot/src/main/javascript/SingleCommandDispatcher.js +++ b/mindplot/src/main/javascript/SingleCommandDispatcher.js @@ -16,10 +16,10 @@ * limitations under the License. */ -mindplot.SingleCommandDispatcher = new Class({ +mindplot.SingleCommandDispatcher = new Class( +{ Extends:mindplot.BaseCommandDispatcher, - initialize: function() - { + initialize: function() { }, addIconToTopic: function() { diff --git a/mindplot/src/main/javascript/TextEditor.js b/mindplot/src/main/javascript/TextEditor.js index b44abfb9..cb7a5fd0 100644 --- a/mindplot/src/main/javascript/TextEditor.js +++ b/mindplot/src/main/javascript/TextEditor.js @@ -17,13 +17,12 @@ */ mindplot.TextEditor = new Class({ - initialize:function(designer,actionRunner) - { + initialize:function(designer, actionRunner) { this._designer = designer; this._screenManager = designer.getWorkSpace().getScreenManager(); this._container = this._screenManager.getContainer(); this._actionRunner = actionRunner; - this._isVisible=false; + this._isVisible = false; //Create editor ui this._createUI(); @@ -31,7 +30,8 @@ mindplot.TextEditor = new Class({ this._addListeners(); }, - _createUI:function(){ + + _createUI:function() { this._size = {width:500, height:100}; this._myOverlay = new Element('div').setStyles({position:"absolute", display: "none", zIndex: "8", top: 0, left:0, width:"500px", height:"100px"}); var inputContainer = new Element('div').setStyles({border:"none", overflow:"auto"}).inject(this._myOverlay); @@ -40,21 +40,19 @@ mindplot.TextEditor = new Class({ this._spanText = new Element('span').setProperties({id: "spanText", tabindex:"-1"}).setStyle('white-space', "nowrap").setStyle('nowrap', 'nowrap').inject(spanContainer); this._myOverlay.inject(this._container); }, - _addListeners:function(){ + + _addListeners:function() { var elem = this; - this.applyChanges=true; + this.applyChanges = true; this.inputText.onkeyup = function (evt) { var event = new Event(evt); var key = event.key; - switch(key) - { + switch (key) { case 'esc': - elem.applyChanges=false; + elem.applyChanges = false; case 'enter': - var executor = function(editor) - { - return function() - { + var executor = function(editor) { + return function() { elem.lostFocus(true); $(document.documentElement).fireEvent('focus'); }; @@ -63,13 +61,12 @@ mindplot.TextEditor = new Class({ break; default: - var span =$('spanText'); + var span = $('spanText'); var input = $('inputText'); span.innerHTML = input.value; var size = input.value.length + 1; - input.size= size; - if (span.offsetWidth > (parseInt(elem._myOverlay.style.width) - 100)) - { + input.size = size; + if (span.offsetWidth > (parseInt(elem._myOverlay.style.width) - 100)) { elem._myOverlay.style.width = (span.offsetWidth + 100) + "px"; } break; @@ -84,18 +81,16 @@ mindplot.TextEditor = new Class({ var elem = this; var onComplete = function() { this._myOverlay.setStyle('display', "none"); - this._isVisible=false; + this._isVisible = false; this.inputText.setStyle('opacity', 1); this.setPosition(0, 0); - if (elem._currentNode != null) - { + if (elem._currentNode != null) { this._currentNode.getTextShape().setVisibility(true); - if(this.applyChanges) - { + if (this.applyChanges) { this._updateNode(); } - this.applyChanges=true; + this.applyChanges = true; this._currentNode = null; } @@ -104,76 +99,69 @@ mindplot.TextEditor = new Class({ this.fx = new Fx.Tween(this.inputText, {property: 'opacity', duration: 10}); this.fx.addEvent('onComplete', onComplete.bind(this)); }, - lostFocusEvent : function () - { + + lostFocusEvent : function () { this.fx.options.duration = 10; this.fx.start(1, 0); //myAnim.animate(); }, - isVisible : function () - { + + isVisible : function () { return this._isVisible; }, - getFocusEvent: function (node) - { + + getFocusEvent: function (node) { //console.log('focus event'); - if (this.isVisible()) - { + if (this.isVisible()) { this.getFocusEvent.delay(10, this); } - else - { + else { //console.log('calling init'); this.init(node); } //console.log('focus event done'); }, - setInitialText : function (text) - { - this.initialText=text; - }, - _updateNode : function () - { - if ($defined(this._currentNode) && this._currentNode.getText() != this.getText()) - { + setInitialText : function (text) { + this.initialText = text; + }, + + _updateNode : function () { + + if ($defined(this._currentNode) && this._currentNode.getText() != this.getText()) { var text = this.getText(); var topicId = this._currentNode.getId(); - var commandFunc = function(topic,value) - { + var commandFunc = function(topic, value) { var result = topic.getText(); topic.setText(value); return result; }; - var command = new mindplot.commands.GenericFunctionCommand(commandFunc,text,[topicId]); + var command = new mindplot.commands.GenericFunctionCommand(commandFunc, text, [topicId]); this._actionRunner.execute(command); } }, - listenEventOnNode : function(topic, eventName, stopPropagation) - { + + listenEventOnNode : function(topic, eventName, stopPropagation) { var elem = this; topic.addEventListener(eventName, function (event) { - if(elem._designer.getWorkSpace().isWorkspaceEventsEnabled()){ - mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeMouseOutEvent,[topic ]); + if (elem._designer.getWorkSpace().isWorkspaceEventsEnabled()) { + mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeMouseOutEvent, [topic ]); elem.lostFocus(); elem.getFocusEvent.attempt(topic, elem); - if (stopPropagation) - { - if ($defined(event.stopPropagation)) - { + if (stopPropagation) { + if ($defined(event.stopPropagation)) { event.stopPropagation(true); - } else - { + } else { event.cancelBubble = true; } } } }); }, - init : function (nodeGraph) - { + + init : function (nodeGraph) { //console.log('init method'); nodeGraph.getTextShape().setVisibility(false); this._currentNode = nodeGraph; @@ -181,12 +169,11 @@ mindplot.TextEditor = new Class({ //set Editor Style var nodeText = nodeGraph.getTextShape(); var text; - var selectText=true; - if(this.initialText && this.initialText!="") - { + var selectText = true; + if (this.initialText && this.initialText != "") { text = this.initialText; - this.initialText=null; - selectText=false; + this.initialText = null; + selectText = false; } else text = nodeText.getText(); @@ -202,10 +189,8 @@ mindplot.TextEditor = new Class({ //set editor's initial size var editor = this; - var executor = function(editor) - { - return function() - { + var executor = function(editor) { + return function() { //console.log('setting editor in init thread'); var scale = web2d.peer.utils.TransformUtil.workoutScale(editor._currentNode.getTextShape()._peer); var elemSize = editor._currentNode.getSize(); @@ -216,17 +201,15 @@ mindplot.TextEditor = new Class({ var textHeight = editor._currentNode.getTextShape().getHeight(); var iconGroup = editor._currentNode.getIconGroup(); var iconGroupSize; - if($chk(iconGroup)) - { + if ($chk(iconGroup)) { iconGroupSize = editor._currentNode.getIconGroup().getSize(); } - else - { + else { iconGroupSize = {width:0, height:0}; } var position = {x:0,y:0}; - position.x = pos.x - ((textWidth * scale.width) / 2) + (((iconGroupSize.width) * scale.width)/2); - var fixError =1; + position.x = pos.x - ((textWidth * scale.width) / 2) + (((iconGroupSize.width) * scale.width) / 2); + var fixError = 1; position.y = pos.y - ((textHeight * scale.height) / 2) - fixError; editor.setEditorSize(elemSize.width, elemSize.height, scale); @@ -240,24 +223,20 @@ mindplot.TextEditor = new Class({ setTimeout(executor(this), 10); //console.log('init done'); }, - setStyle : function (fontStyle) - { + + setStyle : function (fontStyle) { var inputField = $("inputText"); var spanField = $("spanText"); - if (!$defined(fontStyle.font)) - { + if (!$defined(fontStyle.font)) { fontStyle.font = "Arial"; } - if (!$defined(fontStyle.style)) - { + if (!$defined(fontStyle.style)) { fontStyle.style = "normal"; } - if (!$defined(fontStyle.weight)) - { + if (!$defined(fontStyle.weight)) { fontStyle.weight = "normal"; } - if (!$defined(fontStyle.size)) - { + if (!$defined(fontStyle.size)) { fontStyle.size = 12; } inputField.style.fontSize = fontStyle.size + "px"; @@ -270,8 +249,8 @@ mindplot.TextEditor = new Class({ spanField.style.fontWeight = fontStyle.weight; spanField.style.fontSize = fontStyle.size + "px"; }, - setText : function(text) - { + + setText : function(text) { var inputField = $("inputText"); inputField.size = text.length + 1; //this._myOverlay.cfg.setProperty("width", (inputField.size * parseInt(inputField.style.fontSize) + 100) + "px"); @@ -280,12 +259,12 @@ mindplot.TextEditor = new Class({ spanField.innerHTML = text; inputField.value = text; }, - getText : function() - { + + getText : function() { return $('inputText').value; }, - setEditorSize : function (width, height, scale) - { + + setEditorSize : function (width, height, scale) { //var scale = web2d.peer.utils.TransformUtil.workoutScale(this._currentNode.getTextShape()._peer); this._size = {width:width * scale.width, height:height * scale.height}; //this._myOverlay.cfg.setProperty("width",this._size.width*2+"px"); @@ -293,17 +272,17 @@ mindplot.TextEditor = new Class({ //this._myOverlay.cfg.setProperty("height",this._size.height+"px"); this._myOverlay.style.height = this._size.height + "px"; }, - getSize : function () - { + + getSize : function () { return {width:$("spanText").offsetWidth,height:$("spanText").offsetHeight}; }, - setPosition : function (x, y, scale) - { + + setPosition : function (x, y, scale) { $(this._myOverlay).setStyles({top : y + "px", left: x + "px"}); //this._myOverlay.style.left = x + "px"; }, - showTextEditor : function(selectText) - { + + showTextEditor : function(selectText) { //this._myOverlay.show(); //var myAnim = new YAHOO.util.Anim('inputText',{opacity: {to:1}}, 0.10, YAHOO.util.Easing.easeOut); //$('inputText').style.opacity='1'; @@ -311,7 +290,7 @@ mindplot.TextEditor = new Class({ //myAnim.onComplete.subscribe(function(){ //elem._myOverlay.show(); elem._myOverlay.setStyle('display', "block"); - this._isVisible=true; + this._isVisible = true; //elem.cfg.setProperty("visible", false); //elem._myOverlay.cfg.setProperty("xy", [0, 0]); //elem._myOverlay.cfg.setProperty("visible", true); @@ -322,31 +301,25 @@ mindplot.TextEditor = new Class({ { var range = $('inputText').createTextRange(); var pos = $('inputText').value.length; - if(selectText) - { + if (selectText) { range.select(); range.move("character", pos); } - else - { + else { range.move("character", pos); range.select(); } } - else if(selectText) - { + else if (selectText) { $('inputText').setSelectionRange(0, $('inputText').value.length); } - var executor = function(editor) - { - return function() - { + var executor = function(editor) { + return function() { try { $('inputText').focus(); } - catch (e) - { + catch (e) { } }; @@ -356,35 +329,30 @@ mindplot.TextEditor = new Class({ //myAnim.animate(); }, - lostFocus : function(bothBrowsers) - { - if (this.isVisible()) - { + + lostFocus : function(bothBrowsers) { + if (this.isVisible()) { //the editor is opened in another node. lets Finish it. var fireOnThis = $('inputText'); fireOnThis.fireEvent('blur'); } }, - clickEvent : function(event){ - if(this.isVisible()){ - if ($defined(event.stopPropagation)) - { + clickEvent : function(event) { + if (this.isVisible()) { + if ($defined(event.stopPropagation)) { event.stopPropagation(true); - } else - { + } else { event.cancelBubble = true; } event.preventDefault(); } }, - mouseDownEvent : function(event){ - if(this.isVisible()){ - if ($defined(event.stopPropagation)) - { + mouseDownEvent : function(event) { + if (this.isVisible()) { + if ($defined(event.stopPropagation)) { event.stopPropagation(true); - } else - { + } else { event.cancelBubble = true; } } diff --git a/mindplot/src/main/javascript/TextEditorFactory.js b/mindplot/src/main/javascript/TextEditorFactory.js index 0e7537b8..32ac8fdc 100644 --- a/mindplot/src/main/javascript/TextEditorFactory.js +++ b/mindplot/src/main/javascript/TextEditorFactory.js @@ -1,27 +1,27 @@ /* -* 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.TextEditorFactory={}; + * 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.TextEditorFactory = {}; -mindplot.TextEditorFactory.getTextEditorFromName = function(name){ +mindplot.TextEditorFactory.getTextEditorFromName = function(name) { var editorClass = null; - if(name == "RichTextEditor"){ + if (name == "RichTextEditor") { editorClass = mindplot.RichTextEditor; - }else { + } else { editorClass = mindplot.TextEditor; } return editorClass; diff --git a/mindplot/src/main/javascript/Tip.js b/mindplot/src/main/javascript/Tip.js index 0e1c634a..f06a2dce 100644 --- a/mindplot/src/main/javascript/Tip.js +++ b/mindplot/src/main/javascript/Tip.js @@ -1,114 +1,115 @@ /* -* 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. -*/ + * 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.Tip = function(divContainer){ - this.initialize(divContainer); -}; - -mindplot.Tip.prototype.initialize=function(divContainer){ - this.options={ - panel:null, - container:null, - divContainer:divContainer, - content:null, - onShowComplete:Class.empty, - onHideComplete:Class.empty, - width:null, - height:null, - form:null - }; +mindplot.Tip = new Class({ + initialize:function(divContainer) { + this.options = { + panel:null, + container:null, + divContainer:divContainer, + content:null, + onShowComplete:Class.empty, + onHideComplete:Class.empty, + width:null, + height:null, + form:null + }; this.buildTip(); - this._isMouseOver=false; - this._open=false; -}; + this._isMouseOver = false; + this._open = false; + }, -mindplot.Tip.prototype.buildTip=function(){ + buildTip : function() { var opts = this.options; var panel = new Element('div').addClass('bubbleContainer'); - if($chk(opts.height)) + if ($chk(opts.height)) panel.setStyle('height', opts.height); - if($chk(opts.width)) + if ($chk(opts.width)) panel.setStyle('width', opts.width); - if(!$chk(opts.divContainer)) - { - opts.divContainer=document.body; + if (!$chk(opts.divContainer)) { + opts.divContainer = document.body; } panel.injectTop(opts.divContainer); opts.panel = $(panel); - opts.panel.setStyle('opacity',0); - opts.panel.addEvent('mouseover',function(){this._isMouseOver=true;}.bind(this)); - opts.panel.addEvent('mouseleave',function(event){this.close(event);}.bindWithEvent(this));//this.close.bindWithEvent(this) + opts.panel.setStyle('opacity', 0); + opts.panel.addEvent('mouseover', function() { + this._isMouseOver = true; + }.bind(this)); + opts.panel.addEvent('mouseleave', function(event) { + this.close(event); + }.bindWithEvent(this));//this.close.bindWithEvent(this) -}; + }, -mindplot.Tip.prototype.click= function(event, el) { + click : function(event, el) { return this.open(event, el); -}; + }, -mindplot.Tip.prototype.open= function(event, content, source){ - this._isMouseOver=true; + open : function(event, content, source) { + this._isMouseOver = true; this._evt = new Event(event); - this.doOpen.delay(500, this,[content,source]); -}; + this.doOpen.delay(500, this, [content,source]); + }, -mindplot.Tip.prototype.doOpen= function(content, source){ - if($chk(this._isMouseOver) &&!$chk(this._open) && !$chk(this._opening)) - { - this._opening=true; + doOpen : function(content, source) { + if ($chk(this._isMouseOver) && !$chk(this._open) && !$chk(this._opening)) { + this._opening = true; var container = new Element('div'); $(content).inject(container); - this.options.content=content; - this.options.container=container; + this.options.content = content; + this.options.container = container; $(this.options.container).inject(this.options.panel); - this.init(this._evt,source); - $(this.options.panel).effect('opacity',{duration:500, onComplete:function(){this._open=true; this._opening = false;}.bind(this)}).start(0,100); + this.init(this._evt, source); + $(this.options.panel).effect('opacity', {duration:500, onComplete:function() { + this._open = true; + this._opening = false; + }.bind(this)}).start(0, 100); } -}; + }, -mindplot.Tip.prototype.updatePosition=function(event){ + updatePosition : function(event) { this._evt = new Event(event); -}; + }, -mindplot.Tip.prototype.close=function(event){ - this._isMouseOver=false; - this.doClose.delay(50,this,new Event(event)); -}; + close : function(event) { + this._isMouseOver = false; + this.doClose.delay(50, this, new Event(event)); + }, -mindplot.Tip.prototype.doClose=function(event){ + doClose : function(event) { - if(!$chk(this._isMouseOver) && $chk(this._opening)) - this.doClose.delay(500,this,this._evt); + if (!$chk(this._isMouseOver) && $chk(this._opening)) + this.doClose.delay(500, this, this._evt); - if(!$chk(this._isMouseOver) && $chk(this._open)) - { + if (!$chk(this._isMouseOver) && $chk(this._open)) { this.forceClose(); } -}; + }, -mindplot.Tip.prototype.forceClose=function(){ - this.options.panel.effect('opacity',{duration:100, onComplete:function(){ - this._open=false; + forceClose : function() { + this.options.panel.effect('opacity', {duration:100, onComplete:function() { + this._open = false; $(this.options.panel).setStyles({left:0,top:0}); $(this.options.container).dispose(); - }.bind(this)}).start(100,0); -}; + }.bind(this)}).start(100, 0); + }, -mindplot.Tip.prototype.init=function(event,source){ + init : function(event, source) { var opts = this.options; var coordinates = $(opts.panel).getCoordinates(); var width = coordinates.width; //not total width, but close enough @@ -124,21 +125,21 @@ mindplot.Tip.prototype.init=function(event,source){ this.buildTip(); $(this.options.container).inject(this.options.panel); this.moveTopic(offset, $(opts.panel).getCoordinates().height); -}; + }, -mindplot.Tip.prototype.moveTopic=function(offset, panelHeight){ + moveTopic : function(offset, panelHeight) { var opts = this.options; var width = $(opts.panel).getCoordinates().width; - $(opts.panel).setStyles({left:offset.x - (width/2), top:offset.y - (panelHeight*2) + 35}); -}; + $(opts.panel).setStyles({left:offset.x - (width / 2), top:offset.y - (panelHeight * 2) + 35}); + } -mindplot.Tip.getInstance = function(divContainer) -{ +}); + +mindplot.Tip.getInstance = function(divContainer) { var result = mindplot.Tip.instance; - if(!$defined(result)) - { + if (!$defined(result)) { mindplot.Tip.instance = new mindplot.Tip(divContainer); result = mindplot.Tip.instance; } return result; -}; \ No newline at end of file +} \ No newline at end of file diff --git a/mindplot/src/main/javascript/VariableDistanceBoard.js b/mindplot/src/main/javascript/VariableDistanceBoard.js index cf80cd58..03244c1c 100644 --- a/mindplot/src/main/javascript/VariableDistanceBoard.js +++ b/mindplot/src/main/javascript/VariableDistanceBoard.js @@ -17,197 +17,197 @@ */ mindplot.VariableDistanceBoard = new Class({ - Extends: mindplot.Board, - initialize: function(defaultHeight, referencePoint) { - this.parent(defaultHeight, referencePoint); - var zeroEntryCoordinate = referencePoint.y; - var entry = this.createBoardEntry(zeroEntryCoordinate - (defaultHeight / 2), zeroEntryCoordinate + (defaultHeight / 2), 0); - this._entries.set(0, entry); - }, + Extends: mindplot.Board, + initialize: function(defaultHeight, referencePoint) { + this.parent(defaultHeight, referencePoint); + var zeroEntryCoordinate = referencePoint.y; + var entry = this.createBoardEntry(zeroEntryCoordinate - (defaultHeight / 2), zeroEntryCoordinate + (defaultHeight / 2), 0); + this._entries.set(0, entry); + }, - lookupEntryByOrder:function(order) { - var entries = this._entries; - var index = this._orderToIndex(order); + lookupEntryByOrder:function(order) { + var entries = this._entries; + var index = this._orderToIndex(order); - var result = entries.get(index); - if (!$defined(result)) { - // I've not found a entry. I have to create a new one. - var i = 1; - var zeroEntry = entries.get(0); - var distance = zeroEntry.getWidth() / 2; - var indexSign = Math.sign(index); - var absIndex = Math.abs(index); - while (i < absIndex) { - // Move to the next entry ... - var entry = entries.get(i, indexSign); - if (entry != null) { - distance += entry.getWidth(); - } else { - distance += this._defaultWidth; - } - i++; - } - - // Calculate limits ... - var upperLimit = -1; - var lowerLimit = -1; - var offset = zeroEntry.workoutEntryYCenter(); - if (index >= 0) { - lowerLimit = offset + distance; - upperLimit = lowerLimit + this._defaultWidth; + var result = entries.get(index); + if (!$defined(result)) { + // I've not found a entry. I have to create a new one. + var i = 1; + var zeroEntry = entries.get(0); + var distance = zeroEntry.getWidth() / 2; + var indexSign = Math.sign(index); + var absIndex = Math.abs(index); + while (i < absIndex) { + // Move to the next entry ... + var entry = entries.get(i, indexSign); + if (entry != null) { + distance += entry.getWidth(); } else { - upperLimit = offset - distance; + distance += this._defaultWidth; + } + i++; + } + + // Calculate limits ... + var upperLimit = -1; + var lowerLimit = -1; + var offset = zeroEntry.workoutEntryYCenter(); + if (index >= 0) { + lowerLimit = offset + distance; + upperLimit = lowerLimit + this._defaultWidth; + } else { + upperLimit = offset - distance; + lowerLimit = upperLimit - this._defaultWidth; + } + + result = this.createBoardEntry(lowerLimit, upperLimit, order); + } + return result; + }, + + createBoardEntry:function(lowerLimit, upperLimit, order) { + return new mindplot.BoardEntry(lowerLimit, upperLimit, order); + }, + + updateReferencePoint:function(position) { + var entries = this._entries; + var referencePoint = this._referencePoint; + + // Update zero entry current position. + this._referencePoint = position.clone(); + var yOffset = position.y - referencePoint.y; + + var i = -entries.lowerLength(); + for (; i <= entries.length(1); i++) { + var entry = entries.get(i); + if (entry != null) { + var upperLimit = entry.getUpperLimit() + yOffset; + var lowerLimit = entry.getLowerLimit() + yOffset; + entry.setUpperLimit(upperLimit); + entry.setLowerLimit(lowerLimit); + + // Update topic position ... + if (!entry.isAvailable()) { + var topic = entry.getTopic(); + var topicPosition = topic.getPosition(); + topicPosition.y = topicPosition.y + yOffset; + + // MainTopicToCentral must be positioned based on the referencePoint. + var xOffset = position.x - referencePoint.x; + topicPosition.x = topicPosition.x + xOffset; + + topic.setPosition(topicPosition); + } + } + } + }, + + lookupEntryByPosition:function(pos) { + $assert(pos, 'position can not be null'); + var entries = this._entries; + var zeroEntry = entries.get(0); + if (zeroEntry.isCoordinateIn(pos.y)) { + return zeroEntry; + } + + // Is Upper or lower ? + var sign = -1; + if (pos.y >= zeroEntry.getUpperLimit()) { + sign = 1; + } + + var i = 1; + var tempEntry = this.createBoardEntry(); + var currentEntry = zeroEntry; + while (true) { + // Move to the next entry ... + var index = i * sign; + var entry = entries.get(index); + if ($defined(entry)) { + currentEntry = entry; + } else { + // Calculate boundaries... + var lowerLimit, upperLimit; + if (sign > 0) { + lowerLimit = currentEntry.getUpperLimit(); + upperLimit = lowerLimit + this._defaultWidth; + } + else { + upperLimit = currentEntry.getLowerLimit(); lowerLimit = upperLimit - this._defaultWidth; } - result = this.createBoardEntry(lowerLimit, upperLimit, order); + // Update current entry. + currentEntry = tempEntry; + currentEntry.setLowerLimit(lowerLimit); + currentEntry.setUpperLimit(upperLimit); + + var order = this._indexToOrder(index); + currentEntry.setOrder(order); } - return result; - }, - createBoardEntry:function(lowerLimit, upperLimit, order) { - return new mindplot.BoardEntry(lowerLimit, upperLimit, order); - }, + // Have I found the item? + if (currentEntry.isCoordinateIn(pos.y)) { + break; + } + i++; + } + return currentEntry; + }, - updateReferencePoint:function(position) { - var entries = this._entries; - var referencePoint = this._referencePoint; + update:function(entry) { + $assert(entry, 'Entry can not be null'); + var order = entry.getOrder(); + var index = this._orderToIndex(order); - // Update zero entry current position. - this._referencePoint = position.clone(); - var yOffset = position.y - referencePoint.y; + this._entries.set(index, entry); - var i = -entries.lowerLength(); - for (; i <= entries.length(1); i++) { - var entry = entries.get(i); - if (entry != null) { - var upperLimit = entry.getUpperLimit() + yOffset; - var lowerLimit = entry.getLowerLimit() + yOffset; - entry.setUpperLimit(upperLimit); - entry.setLowerLimit(lowerLimit); + }, + freeEntry:function(entry) { + var order = entry.getOrder(); + var entries = this._entries; - // Update topic position ... - if (!entry.isAvailable()) { - var topic = entry.getTopic(); - var topicPosition = topic.getPosition(); - topicPosition.y = topicPosition.y + yOffset; + var index = this._orderToIndex(order); + var indexSign = Math.sign(index); - // MainTopicToCentral must be positioned based on the referencePoint. - var xOffset = position.x - referencePoint.x; - topicPosition.x = topicPosition.x + xOffset; + var currentTopic = entry.getTopic(); + var i = Math.abs(index) + 1; + while (currentTopic) { + var e = entries.get(i, indexSign); + if ($defined(currentTopic) && !$defined(e)) { + var entryOrder = this._indexToOrder(i * indexSign); + e = this.lookupEntryByOrder(entryOrder); + } - topic.setPosition(topicPosition); - } + // Move the topic to the next entry ... + var topic = null; + if ($defined(e)) { + topic = e.getTopic(); + if ($defined(currentTopic)) { + e.setTopic(currentTopic); } + this.update(e); } - }, - - lookupEntryByPosition:function(pos) { - $assert($defined(pos), 'position can not be null'); - var entries = this._entries; - var zeroEntry = entries.get(0); - if (zeroEntry.isCoordinateIn(pos.y)) { - return zeroEntry; - } - - // Is Upper or lower ? - var sign = -1; - if (pos.y >= zeroEntry.getUpperLimit()) { - sign = 1; - } - - var i = 1; - var tempEntry = this.createBoardEntry(); - var currentEntry = zeroEntry; - while (true) { - // Move to the next entry ... - var index = i * sign; - var entry = entries.get(index); - if ($defined(entry)) { - currentEntry = entry; - } else { - // Calculate boundaries... - var lowerLimit, upperLimit; - if (sign > 0) { - lowerLimit = currentEntry.getUpperLimit(); - upperLimit = lowerLimit + this._defaultWidth; - } - else { - upperLimit = currentEntry.getLowerLimit(); - lowerLimit = upperLimit - this._defaultWidth; - } - - // Update current entry. - currentEntry = tempEntry; - currentEntry.setLowerLimit(lowerLimit); - currentEntry.setUpperLimit(upperLimit); - - var order = this._indexToOrder(index); - currentEntry.setOrder(order); - } - - // Have I found the item? - if (currentEntry.isCoordinateIn(pos.y)) { - break; - } - i++; - } - return currentEntry; - }, - - update:function(entry) { - $assert(entry, 'Entry can not be null'); - var order = entry.getOrder(); - var index = this._orderToIndex(order); - - this._entries.set(index, entry); - - }, - freeEntry:function(entry) { - var order = entry.getOrder(); - var entries = this._entries; - - var index = this._orderToIndex(order); - var indexSign = Math.sign(index); - - var currentTopic = entry.getTopic(); - var i = Math.abs(index) + 1; - while (currentTopic) { - var e = entries.get(i, indexSign); - if ($defined(currentTopic) && !$defined(e)) { - var entryOrder = this._indexToOrder(i * indexSign); - e = this.lookupEntryByOrder(entryOrder); - } - - // Move the topic to the next entry ... - var topic = null; - if ($defined(e)) { - topic = e.getTopic(); - if ($defined(currentTopic)) { - e.setTopic(currentTopic); - } - this.update(e); - } - currentTopic = topic; - i++; - } - - // Clear the entry topic ... - entry.setTopic(null); - }, - - _orderToIndex:function(order) { - var index = Math.round(order / 2); - return ((order % 2) == 0) ? index : -index; - }, - - _indexToOrder:function(index) { - var order = Math.abs(index) * 2; - return (index >= 0) ? order : order - 1; - }, - - inspect:function() { - return this._entries.inspect(); + currentTopic = topic; + i++; } - }); \ No newline at end of file + // Clear the entry topic ... + entry.setTopic(null); + }, + + _orderToIndex:function(order) { + var index = Math.round(order / 2); + return ((order % 2) == 0) ? index : -index; + }, + + _indexToOrder:function(index) { + var order = Math.abs(index) * 2; + return (index >= 0) ? order : order - 1; + }, + + inspect:function() { + return this._entries.inspect(); + } + +}); \ No newline at end of file diff --git a/mindplot/src/main/javascript/Workspace.js b/mindplot/src/main/javascript/Workspace.js index 487eb110..4a4852a7 100644 --- a/mindplot/src/main/javascript/Workspace.js +++ b/mindplot/src/main/javascript/Workspace.js @@ -150,8 +150,7 @@ mindplot.Workspace = new Class({ var screenManager = this._screenManager; this._dragging = true; var mWorkspace = this; - var mouseDownListener = function(event) - { + var mouseDownListener = function(event) { if (!$defined(workspace.mouseMoveListener)) { if (mWorkspace.isWorkspaceEventsEnabled()) { mWorkspace.enableWorkspaceEvents(false); diff --git a/mindplot/src/main/javascript/XMLMindmapSerializerFactory.js b/mindplot/src/main/javascript/XMLMindmapSerializerFactory.js index abc48f7d..6a891ce1 100644 --- a/mindplot/src/main/javascript/XMLMindmapSerializerFactory.js +++ b/mindplot/src/main/javascript/XMLMindmapSerializerFactory.js @@ -1,45 +1,45 @@ /* -* 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. -*/ + * 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.XMLMindmapSerializerFactory = {}; -mindplot.XMLMindmapSerializerFactory.getSerializerFromMindmap = function(mindmap){ +mindplot.XMLMindmapSerializerFactory.getSerializerFromMindmap = function(mindmap) { return mindplot.XMLMindmapSerializerFactory.getSerializer(mindmap.getVersion()); }; -mindplot.XMLMindmapSerializerFactory.getSerializerFromDocument = function(domDocument){ +mindplot.XMLMindmapSerializerFactory.getSerializerFromDocument = function(domDocument) { var rootElem = domDocument.documentElement; return mindplot.XMLMindmapSerializerFactory.getSerializer(rootElem.getAttribute("version")) }; -mindplot.XMLMindmapSerializerFactory.getSerializer = function(version){ - if(!$defined(version)){ +mindplot.XMLMindmapSerializerFactory.getSerializer = function(version) { + if (!$defined(version)) { version = mindplot.ModelCodeName.BETA; } var codeNames = mindplot.XMLMindmapSerializerFactory._codeNames; var found = false; var serializer = null; - for(var i=0; i0){ + // Create Relationships + var relationships = mindmap.getRelationships(); + if (relationships.length > 0) { // var relationshipDom=document.createElement("relationships"); // mapElem.appendChild(relationshipDom); - for (var j = 0; j