mirror of
https://bitbucket.org/wisemapping/wisemapping-open-source.git
synced 2024-11-22 22:27:55 +01:00
-Fix Uncaught RangeError: Maximum call stack size exceeded, line:114
This commit is contained in:
parent
04a221799a
commit
ca37d3f384
@ -1,107 +1,112 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright [2011] [wisemapping]
|
* Copyright [2011] [wisemapping]
|
||||||
*
|
*
|
||||||
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
|
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
|
||||||
* It is basically the Apache License, Version 2.0 (the "License") plus the
|
* It is basically the Apache License, Version 2.0 (the "License") plus the
|
||||||
* "powered by wisemapping" text requirement on every single page;
|
* "powered by wisemapping" text requirement on every single page;
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the license at
|
* You may obtain a copy of the license at
|
||||||
*
|
*
|
||||||
* http://www.wisemapping.org/license
|
* http://www.wisemapping.org/license
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
mindplot.DragConnector = new Class({
|
mindplot.DragConnector = new Class({
|
||||||
initialize:function (designerModel, workspace) {
|
initialize:function (designerModel, workspace) {
|
||||||
$assert(designerModel, 'designerModel can not be null');
|
$assert(designerModel, 'designerModel can not be null');
|
||||||
$assert(workspace, 'workspace can not be null');
|
$assert(workspace, 'workspace can not be null');
|
||||||
|
|
||||||
// this._layoutManager = layoutManager;
|
// this._layoutManager = layoutManager;
|
||||||
this._designerModel = designerModel;
|
this._designerModel = designerModel;
|
||||||
this._workspace = workspace;
|
this._workspace = workspace;
|
||||||
},
|
},
|
||||||
|
|
||||||
checkConnection:function (dragTopic) {
|
checkConnection:function (dragTopic) {
|
||||||
var topics = this._designerModel.getTopics();
|
var topics = this._designerModel.getTopics();
|
||||||
|
|
||||||
// Must be disconnected from their current connection ?.
|
// Must be disconnected from their current connection ?.
|
||||||
var candidates = this._searchConnectionCandidates(dragTopic);
|
var candidates = this._searchConnectionCandidates(dragTopic);
|
||||||
var currentConnection = dragTopic.getConnectedToTopic();
|
var currentConnection = dragTopic.getConnectedToTopic();
|
||||||
|
|
||||||
|
|
||||||
if (currentConnection && (candidates.length == 0 || candidates[0] != currentConnection)) {
|
if (currentConnection && (candidates.length == 0 || candidates[0] != currentConnection)) {
|
||||||
dragTopic.disconnect(this._workspace);
|
dragTopic.disconnect(this._workspace);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finally, connect nodes ...
|
// Finally, connect nodes ...
|
||||||
if (!dragTopic.isConnected() && candidates.length > 0) {
|
if (!dragTopic.isConnected() && candidates.length > 0) {
|
||||||
dragTopic.connectTo(candidates[0]);
|
dragTopic.connectTo(candidates[0]);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_searchConnectionCandidates:function (dragTopic) {
|
_searchConnectionCandidates:function (dragTopic) {
|
||||||
var topics = this._designerModel.getTopics();
|
var topics = this._designerModel.getTopics();
|
||||||
var draggedNode = dragTopic.getDraggedTopic();
|
var draggedNode = dragTopic.getDraggedTopic();
|
||||||
|
|
||||||
// Drag node connects to the border ...
|
// Drag node connects to the border ...
|
||||||
var dragTopicWidth = dragTopic.getSize ? dragTopic.getSize().width : 0; // Hack...
|
var dragTopicWidth = dragTopic.getSize ? dragTopic.getSize().width : 0; // Hack...
|
||||||
var xMouseGap = dragTopic.getPosition().x > 0 ? 0 : dragTopicWidth;
|
var xMouseGap = dragTopic.getPosition().x > 0 ? 0 : dragTopicWidth;
|
||||||
var sPos = {x:dragTopic.getPosition().x - xMouseGap, y:dragTopic.getPosition().y};
|
var sPos = {x:dragTopic.getPosition().x - xMouseGap, y:dragTopic.getPosition().y};
|
||||||
|
|
||||||
// Perform a initial filter to discard topics:
|
// Perform a initial filter to discard topics:
|
||||||
// - Exclude dragged topic
|
// - Exclude dragged topic
|
||||||
// - Exclude dragTopic pivot
|
// - Exclude dragTopic pivot
|
||||||
// - Nodes that are collapsed
|
// - Nodes that are collapsed
|
||||||
topics = topics.filter(function (topic) {
|
// - It's not part of the branch dragged itself
|
||||||
return draggedNode != topic && topic != draggedNode && !topic.areChildrenShrunken() && !topic.isCollapsed();
|
topics = topics.filter(function (topic) {
|
||||||
});
|
var result = draggedNode != topic;
|
||||||
|
result = result && topic != draggedNode;
|
||||||
// Filter all the nodes that are outside the vertical boundary:
|
result = result && !topic.areChildrenShrunken() && !topic.isCollapsed();
|
||||||
// * The node is to out of the x scope
|
result = result && !draggedNode.isChildTopic(topic);
|
||||||
// * The x distance greater the vertical tolerated distance
|
return result;
|
||||||
topics = topics.filter(function (topic) {
|
});
|
||||||
var tpos = topic.getPosition();
|
|
||||||
// Center topic has different alignment than the rest of the nodes. That's why i need to divide it by two...
|
// Filter all the nodes that are outside the vertical boundary:
|
||||||
var txborder = tpos.x + (topic.getSize().width / 2) * Math.sign(sPos.x);
|
// * The node is to out of the x scope
|
||||||
var distance = (sPos.x - txborder) * Math.sign(sPos.x);
|
// * The x distance greater the vertical tolerated distance
|
||||||
return distance > 0 && (distance < mindplot.DragConnector.MAX_VERTICAL_CONNECTION_TOLERANCE);
|
topics = topics.filter(function (topic) {
|
||||||
|
var tpos = topic.getPosition();
|
||||||
});
|
// Center topic has different alignment than the rest of the nodes. That's why i need to divide it by two...
|
||||||
|
var txborder = tpos.x + (topic.getSize().width / 2) * Math.sign(sPos.x);
|
||||||
// Assign a priority based on the distance:
|
var distance = (sPos.x - txborder) * Math.sign(sPos.x);
|
||||||
// - Alignment with the targetNode
|
return distance > 0 && (distance < mindplot.DragConnector.MAX_VERTICAL_CONNECTION_TOLERANCE);
|
||||||
// - Vertical distance
|
|
||||||
// - Horizontal proximity
|
});
|
||||||
// - It's already connected.
|
|
||||||
var currentConnection = dragTopic.getConnectedToTopic();
|
// Assign a priority based on the distance:
|
||||||
topics = topics.sort(function (a, b) {
|
// - Alignment with the targetNode
|
||||||
var aPos = a.getPosition();
|
// - Vertical distance
|
||||||
var bPos = b.getPosition();
|
// - Horizontal proximity
|
||||||
|
// - It's already connected.
|
||||||
var av = this._isVerticallyAligned(a.getSize(), aPos, sPos);
|
var currentConnection = dragTopic.getConnectedToTopic();
|
||||||
var bv = this._isVerticallyAligned(b.getSize(), bPos, sPos);
|
topics = topics.sort(function (a, b) {
|
||||||
return this._proximityWeight(av, a, sPos, currentConnection) - this._proximityWeight(bv, b, sPos, currentConnection);
|
var aPos = a.getPosition();
|
||||||
|
var bPos = b.getPosition();
|
||||||
}.bind(this));
|
|
||||||
return topics;
|
var av = this._isVerticallyAligned(a.getSize(), aPos, sPos);
|
||||||
},
|
var bv = this._isVerticallyAligned(b.getSize(), bPos, sPos);
|
||||||
|
return this._proximityWeight(av, a, sPos, currentConnection) - this._proximityWeight(bv, b, sPos, currentConnection);
|
||||||
_proximityWeight:function (isAligned, target, sPos, currentConnection) {
|
|
||||||
var tPos = target.getPosition();
|
}.bind(this));
|
||||||
return (isAligned ? 0 : 200 ) + Math.abs(tPos.x - sPos.x) + Math.abs(tPos.y - sPos.y) + (currentConnection == target ? 0 : 100);
|
return topics;
|
||||||
},
|
},
|
||||||
|
|
||||||
_isVerticallyAligned:function (targetSize, targetPosition, sourcePosition) {
|
_proximityWeight:function (isAligned, target, sPos, currentConnection) {
|
||||||
|
var tPos = target.getPosition();
|
||||||
return Math.abs(sourcePosition.y - targetPosition.y) < targetSize.height / 2;
|
return (isAligned ? 0 : 200 ) + Math.abs(tPos.x - sPos.x) + Math.abs(tPos.y - sPos.y) + (currentConnection == target ? 0 : 100);
|
||||||
|
},
|
||||||
}
|
|
||||||
|
_isVerticallyAligned:function (targetSize, targetPosition, sourcePosition) {
|
||||||
});
|
|
||||||
|
return Math.abs(sourcePosition.y - targetPosition.y) < targetSize.height / 2;
|
||||||
mindplot.DragConnector.MAX_VERTICAL_CONNECTION_TOLERANCE = 80;
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
mindplot.DragConnector.MAX_VERTICAL_CONNECTION_TOLERANCE = 80;
|
||||||
|
@ -669,7 +669,6 @@ mindplot.Topic = new Class({
|
|||||||
|
|
||||||
showNoteEditor:function () {
|
showNoteEditor:function () {
|
||||||
|
|
||||||
|
|
||||||
var topicId = this.getId();
|
var topicId = this.getId();
|
||||||
var model = this.getModel();
|
var model = this.getModel();
|
||||||
var editorModel = {
|
var editorModel = {
|
||||||
@ -1198,8 +1197,22 @@ mindplot.Topic = new Class({
|
|||||||
result = result.concat(innerChilds);
|
result = result.concat(innerChilds);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
},
|
||||||
|
|
||||||
|
isChildTopic:function (childTopic) {
|
||||||
|
var result = (this.getId() == childTopic.getId());
|
||||||
|
if (!result) {
|
||||||
|
var children = this.getChildren();
|
||||||
|
for (var i = 0; i < children.length; i++) {
|
||||||
|
var parent = children[i];
|
||||||
|
result = parent.isChildTopic(childTopic);
|
||||||
|
if (result) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user