mirror of
https://github.com/UnickSoft/graphonline.git
synced 2026-04-12 18:56:05 +00:00
Change script location.
Split js code. Added cache and changed loading mechanism for js sources.
This commit is contained in:
226
script/features/connect_vertices_handler/index.js
Normal file
226
script/features/connect_vertices_handler/index.js
Normal file
@@ -0,0 +1,226 @@
|
||||
|
||||
doInclude ([
|
||||
include ("features/base_handler/index.js")
|
||||
])
|
||||
|
||||
/**
|
||||
* Connection Graph handler.
|
||||
*
|
||||
*/
|
||||
function ConnectionGraphHandler(app)
|
||||
{
|
||||
this.removeStack = true;
|
||||
BaseHandler.apply(this, arguments);
|
||||
this.SelectFirst();
|
||||
this.addContextMenu();
|
||||
}
|
||||
|
||||
// inheritance.
|
||||
ConnectionGraphHandler.prototype = Object.create(BaseHandler.prototype);
|
||||
// First selected.
|
||||
ConnectionGraphHandler.prototype.firstObject = null;
|
||||
|
||||
ConnectionGraphHandler.prototype.GetSelectedVertex = function()
|
||||
{
|
||||
return (this.firstObject instanceof BaseVertex) ? this.firstObject : null;
|
||||
}
|
||||
|
||||
ConnectionGraphHandler.prototype.AddNewEdge = function(selectedObject, isDirect)
|
||||
{
|
||||
let newEdge = this.app.CreateNewArc(this.firstObject, selectedObject, isDirect,
|
||||
document.getElementById('EdgeWeight').value,
|
||||
$("#RadiosReplaceEdge").prop("checked"),
|
||||
document.getElementById('EdgeLable').value);
|
||||
|
||||
if ($("#CheckSaveDefaultEdge").prop("checked")) {
|
||||
let defaultEdge = new BaseEdge();
|
||||
defaultEdge.copyFrom(this.app.graph.edges[newEdge]);
|
||||
this.app.setDefaultEdge(defaultEdge);
|
||||
}
|
||||
|
||||
this.SelectFirst();
|
||||
this.app.NeedRedraw();
|
||||
}
|
||||
|
||||
ConnectionGraphHandler.prototype.AddDefaultEdge = function(selectedObject)
|
||||
{
|
||||
let defaultEdge = this.app.getDefaultEdge();
|
||||
let newEdge = this.app.CreateNewArc(this.firstObject, selectedObject, defaultEdge.isDirect,
|
||||
defaultEdge.weight,
|
||||
false,
|
||||
defaultEdge.upText);
|
||||
this.app.graph.edges[newEdge].useWeight = defaultEdge.useWeight;
|
||||
|
||||
this.SelectFirst();
|
||||
this.app.NeedRedraw();
|
||||
|
||||
userAction("CreateDefaultEdge");
|
||||
}
|
||||
|
||||
ConnectionGraphHandler.prototype.SelectVertex = function(selectedObject)
|
||||
{
|
||||
if (this.firstObject)
|
||||
{
|
||||
var direct = false;
|
||||
var handler = this;
|
||||
|
||||
if (!this.app.hasDefaultEdge() || !document.getElementById('useDefaultEdge').checked) {
|
||||
this.ShowCreateEdgeDialog(this.firstObject, selectedObject, function (firstVertex, secondVertex, direct) {
|
||||
handler.AddNewEdge(secondVertex, direct);
|
||||
});
|
||||
} else {
|
||||
handler.AddDefaultEdge(selectedObject);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.SelectSecond(selectedObject);
|
||||
}
|
||||
this.needRedraw = true;
|
||||
}
|
||||
|
||||
ConnectionGraphHandler.prototype.MouseDown = function(pos)
|
||||
{
|
||||
$('#message').unbind();
|
||||
|
||||
var selectedObject = this.GetSelectedGraph(pos);
|
||||
if (selectedObject && (selectedObject instanceof BaseVertex))
|
||||
{
|
||||
this.SelectVertex(selectedObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.SelectFirst();
|
||||
this.needRedraw = true;
|
||||
}
|
||||
}
|
||||
|
||||
ConnectionGraphHandler.prototype.GetSelectedGroup = function(object)
|
||||
{
|
||||
return (object == this.firstObject) ? 1 : 0;
|
||||
}
|
||||
|
||||
ConnectionGraphHandler.prototype.SelectFirst = function()
|
||||
{
|
||||
this.firstObject = null;
|
||||
|
||||
this.message = g_selectFirstVertexToConnect + this.GetUseDefaultEdgeCheckBox() +
|
||||
this.GetSelect2VertexMenu();
|
||||
this.message = this.AppendSpecialSctionsButton(this.message);
|
||||
}
|
||||
|
||||
ConnectionGraphHandler.prototype.SelectSecond = function(selectedObject)
|
||||
{
|
||||
this.firstObject = selectedObject;
|
||||
this.message = g_selectSecondVertexToConnect + this.GetUseDefaultEdgeCheckBox() +
|
||||
this.GetSelect2VertexMenu();
|
||||
this.message = this.AppendSpecialSctionsButton(this.message);
|
||||
}
|
||||
|
||||
ConnectionGraphHandler.prototype.SelectFirstVertexMenu = function(vertex1Text, vertex)
|
||||
{
|
||||
this.firstObject = null;
|
||||
this.SelectVertex(vertex);
|
||||
}
|
||||
|
||||
ConnectionGraphHandler.prototype.UpdateFirstVertexMenu = function(vertex1Text)
|
||||
{
|
||||
if (this.firstObject)
|
||||
{
|
||||
vertex1Text.value = this.firstObject.mainText;
|
||||
}
|
||||
}
|
||||
|
||||
ConnectionGraphHandler.prototype.SelectSecondVertexMenu = function(vertex2Text, vertex)
|
||||
{
|
||||
this.SelectVertex(vertex);
|
||||
}
|
||||
|
||||
ConnectionGraphHandler.prototype.UpdateSecondVertexMenu = function(vertex2Text)
|
||||
{
|
||||
if (this.secondObject)
|
||||
{
|
||||
vertex2Text.value = this.secondObject.mainText;
|
||||
}
|
||||
}
|
||||
|
||||
ConnectionGraphHandler.prototype.AppendSpecialSctionsButton = function(baseMessage)
|
||||
{
|
||||
let hasEdges = this.app.graph.hasEdges();
|
||||
|
||||
if (!hasEdges) return baseMessage;
|
||||
|
||||
let hasDirectedEdges = this.app.graph.hasDirectEdge();
|
||||
let hasUndirectedEdges = this.app.graph.hasUndirectEdge();
|
||||
|
||||
let handler = this;
|
||||
|
||||
$('#message').on('click', '#reverseAll', function() {
|
||||
handler.app.PushToStack("ReverseAllEdges");
|
||||
|
||||
handler.app.graph.reverseAllEdges();
|
||||
handler.app.redrawGraph();
|
||||
|
||||
userAction("ReverseAllEdges");
|
||||
});
|
||||
$('#message').on('click', '#makeAllUndirected', function(){
|
||||
handler.app.PushToStack("makeAllEdgesUndirected");
|
||||
|
||||
handler.app.graph.makeAllEdgesUndirected();
|
||||
handler.app.redrawGraph();
|
||||
|
||||
userAction("makeAllEdgesUndirected");
|
||||
});
|
||||
$('#message').on('click', '#makeAllDirected', function(){
|
||||
handler.app.PushToStack("makeAllEdgesDirected");
|
||||
|
||||
handler.app.graph.makeAllEdgesDirected();
|
||||
handler.app.redrawGraph();
|
||||
|
||||
userAction("makeAllEdgesDirected");
|
||||
});
|
||||
|
||||
return "<div class=\"btn-group\" style=\"float:right; position: relative; margin-left: 8px\">"
|
||||
+ "<button type=\"button\" class=\"btn btn-default btn-sm dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">"
|
||||
+ g_additionalActions + " <span class=\"caret\"></span>"
|
||||
+ " </button> "
|
||||
+ "<ul class=\"dropdown-menu dropdown-menu-right\" style=\"z-index:15; position: absolute;\">"
|
||||
+ (hasDirectedEdges ? " <li><a href=\"#\" id=\"reverseAll\">" + g_reverseAllEdges + "</a></li>" : "")
|
||||
+ (hasDirectedEdges ? " <li><a href=\"#\" id=\"makeAllUndirected\">" + g_makeAllUndirected + "</a></li>" : "")
|
||||
+ (hasUndirectedEdges ? " <li><a href=\"#\" id=\"makeAllDirected\">" + g_makeAllDirected + "</a></li>" : "")
|
||||
+ "</ul>"
|
||||
+ "</div> " + baseMessage;
|
||||
}
|
||||
|
||||
ConnectionGraphHandler.checkUseDefaultEdge = function (elem, app)
|
||||
{
|
||||
app.setUseDefaultEdge(elem.checked);
|
||||
app.updateMessage();
|
||||
};
|
||||
|
||||
ConnectionGraphHandler.prototype.GetUseDefaultEdgeCheckBox = function() {
|
||||
if (!this.app.hasDefaultEdge()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return " <div class=\"messageSwitcher\" style=\"display:inline\">" +
|
||||
"<span id=\"switcher\"><input type=\"checkbox\" id=\"useDefaultEdge\" >" +
|
||||
"<label for=\"useDefaultEdge\" class=\"Switcher\"></label></span> <label for=\"useDefaultEdge\" class=\"switcherText\">" + g_reuseSavedEdge + "</label>" +
|
||||
"</div>";
|
||||
}
|
||||
|
||||
ConnectionGraphHandler.prototype.InitControls = function() {
|
||||
BaseHandler.prototype.InitControls.call(this)
|
||||
|
||||
if (!this.app.hasDefaultEdge()) {
|
||||
return;
|
||||
}
|
||||
|
||||
let app = this.app;
|
||||
|
||||
$('#useDefaultEdge').unbind();
|
||||
$('#useDefaultEdge').change(function() {
|
||||
app.setUseDefaultEdge(this.checked);
|
||||
});
|
||||
$("#useDefaultEdge").prop("checked", this.app.getUseDefaultEdge());
|
||||
}
|
||||
Reference in New Issue
Block a user