mirror of
https://github.com/Telecominfraproject/oopt-gnpy-web-gui.git
synced 2025-11-01 18:47:45 +00:00
2887 lines
103 KiB
JavaScript
2887 lines
103 KiB
JavaScript
var nodes = null;
|
|
var edges = null;
|
|
var network = null;
|
|
// randomly create some nodes and edges
|
|
var data = getScaleFreeNetwork(0);
|
|
var seed = 2;
|
|
var previousId = 0;
|
|
var currentId = 0;
|
|
var _edgesDB = new TAFFY();
|
|
var _nodesDB = new TAFFY();
|
|
var _insertnodeDB = new TAFFY();
|
|
var container;
|
|
var exportArea;
|
|
var importButton;
|
|
var exportButton;
|
|
var dropdownshape;
|
|
var isService = 0;
|
|
var counter = 0;
|
|
var copy;
|
|
localStorage.setItem("copyedgeid", "");
|
|
localStorage.setItem("copynodeid", "");
|
|
localStorage.setItem("deletenodeconectededge", "");
|
|
var _import_json;
|
|
|
|
$(document).ready(function () {
|
|
$.getJSON("/Data/MasterData.json", function (data) {
|
|
console.log(data.name);
|
|
console.log(data.age);
|
|
}).fail(function () {
|
|
console.log("An error has occurred.");
|
|
});
|
|
});
|
|
|
|
//disabled browser right click menu
|
|
$(document).bind("contextmenu", function (e) {
|
|
return false;
|
|
});
|
|
|
|
if (!window.indexedDB) {
|
|
window.alert("Your browser doesn't support a stable version of IndexedDB.")
|
|
}
|
|
|
|
var jsstoreCon = new JsStore.Connection();
|
|
|
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
|
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
|
|
function readdata() {
|
|
return _readdata.apply(this, arguments);
|
|
}
|
|
|
|
function _readdata() {
|
|
_readdata = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
while (1) {
|
|
switch (_context.prev = _context.next) {
|
|
case 0:
|
|
_context.next = 2;
|
|
return jsstoreCon.select({
|
|
from: 'tbl_network',
|
|
where: {
|
|
id: '1'
|
|
}
|
|
});
|
|
|
|
case 2:
|
|
dat = _context.sent;
|
|
console.log(dat);
|
|
|
|
case 4:
|
|
case "end":
|
|
return _context.stop();
|
|
}
|
|
}
|
|
}, _callee);
|
|
}));
|
|
return _readdata.apply(this, arguments);
|
|
}
|
|
|
|
function initDb() {
|
|
return _initDb.apply(this, arguments);
|
|
}
|
|
|
|
function _initDb() {
|
|
_initDb = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
|
|
var isDbCreated;
|
|
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
while (1) {
|
|
switch (_context2.prev = _context2.next) {
|
|
case 0:
|
|
_context2.next = 2;
|
|
return jsstoreCon.initDb(getDbSchema());
|
|
|
|
case 2:
|
|
isDbCreated = _context2.sent;
|
|
|
|
if (isDbCreated) {
|
|
console.log('db created');
|
|
} else {
|
|
console.log('db opened');
|
|
}
|
|
|
|
case 4:
|
|
case "end":
|
|
return _context2.stop();
|
|
}
|
|
}
|
|
}, _callee2);
|
|
}));
|
|
return _initDb.apply(this, arguments);
|
|
}
|
|
|
|
function addNetworData(_x) {
|
|
return _addNetworData.apply(this, arguments);
|
|
}
|
|
|
|
function _addNetworData() {
|
|
_addNetworData = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(netData) {
|
|
var noOfDataInserted;
|
|
return regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
while (1) {
|
|
switch (_context3.prev = _context3.next) {
|
|
case 0:
|
|
_context3.prev = 0;
|
|
netmodel = {
|
|
id: "1",
|
|
name: netData
|
|
};
|
|
_context3.next = 4;
|
|
return jsstoreCon.insert({
|
|
into: 'tbl_network',
|
|
values: [netmodel]
|
|
});
|
|
|
|
case 4:
|
|
noOfDataInserted = _context3.sent;
|
|
|
|
if (noOfDataInserted === 1) {
|
|
alert('successfully added');
|
|
}
|
|
|
|
_context3.next = 14;
|
|
break;
|
|
|
|
case 8:
|
|
_context3.prev = 8;
|
|
_context3.t0 = _context3["catch"](0);
|
|
_context3.next = 12;
|
|
return jsstoreCon.update({
|
|
in: 'tbl_network',
|
|
set: {
|
|
name: netData
|
|
},
|
|
where: {
|
|
id: "1"
|
|
}
|
|
});
|
|
|
|
case 12:
|
|
noOfDataInserted = _context3.sent;
|
|
|
|
if (noOfDataInserted === 1) {
|
|
alert('successfully updated');
|
|
}
|
|
|
|
case 14:
|
|
case "end":
|
|
return _context3.stop();
|
|
}
|
|
}
|
|
}, _callee3, null, [[0, 8]]);
|
|
}));
|
|
return _addNetworData.apply(this, arguments);
|
|
}
|
|
|
|
function deletedata(_x2) {
|
|
return _deletedata.apply(this, arguments);
|
|
}
|
|
|
|
function _deletedata() {
|
|
_deletedata = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(id) {
|
|
var noOfStudentRemoved;
|
|
return regeneratorRuntime.wrap(function _callee4$(_context4) {
|
|
while (1) {
|
|
switch (_context4.prev = _context4.next) {
|
|
case 0:
|
|
_context4.prev = 0;
|
|
_context4.next = 3;
|
|
return jsstoreCon.remove({
|
|
from: 'tbl_network',
|
|
where: {
|
|
id: id
|
|
}
|
|
});
|
|
|
|
case 3:
|
|
noOfStudentRemoved = _context4.sent;
|
|
_context4.next = 9;
|
|
break;
|
|
|
|
case 6:
|
|
_context4.prev = 6;
|
|
_context4.t0 = _context4["catch"](0);
|
|
alert(_context4.t0.message);
|
|
|
|
case 9:
|
|
case "end":
|
|
return _context4.stop();
|
|
}
|
|
}
|
|
}, _callee4, null, [[0, 6]]);
|
|
}));
|
|
return _deletedata.apply(this, arguments);
|
|
}
|
|
|
|
//async function readdata() {
|
|
// dat = await jsstoreCon.select({
|
|
// from: 'tbl_network', where: { id: '1' }
|
|
// });
|
|
// console.log(dat);
|
|
//}
|
|
//async function initDb() {
|
|
// var isDbCreated = await jsstoreCon.initDb(getDbSchema());
|
|
// if (isDbCreated) {
|
|
// console.log('db created');
|
|
// }
|
|
// else {
|
|
// console.log('db opened');
|
|
// }
|
|
|
|
//}
|
|
|
|
function getDbSchema() {
|
|
var table = {
|
|
name: 'tbl_network',
|
|
columns: {
|
|
id: {
|
|
primaryKey: true,
|
|
dataType: 'string'
|
|
},
|
|
name: {
|
|
notNull: true,
|
|
dataType: 'string'
|
|
},
|
|
}
|
|
}
|
|
|
|
var db = {
|
|
name: 'Db_network',
|
|
tables: [table]
|
|
}
|
|
return db;
|
|
}
|
|
|
|
function drag(ev) {
|
|
disableFiberService();
|
|
ev.dataTransfer.setData("text", ev.target.id);
|
|
}
|
|
|
|
var lastDownTarget, canvas;
|
|
|
|
var copyData = {
|
|
nodes: [],
|
|
edges: [],
|
|
dataCopied: false
|
|
}
|
|
|
|
document.addEventListener('click', function (event) {
|
|
lastDownTarget = event.target.tagName;
|
|
}, false);
|
|
|
|
|
|
document.addEventListener('keydown', function (event) {
|
|
if (lastDownTarget == "CANVAS") {
|
|
if (event.keyCode == 67 && event.ctrlKey) {
|
|
copyData.dataCopied = true;
|
|
}
|
|
if (event.keyCode == 86 && event.ctrlKey) {
|
|
if (copyData.dataCopied)
|
|
getCopiedData();
|
|
}
|
|
}
|
|
}, false);
|
|
|
|
var rand = function () {
|
|
return Math.random().toString(36).substr(2); // remove `0.`
|
|
};
|
|
|
|
var token = function () {
|
|
return rand() + rand(); // to make it longer
|
|
};
|
|
|
|
function setDefaultLocale() {
|
|
var defaultLocal = navigator.language;
|
|
var select = document.getElementById("locale");
|
|
select.selectedIndex = 0; // set fallback value
|
|
for (var i = 0, j = select.options.length; i < j; ++i) {
|
|
if (select.options[i].getAttribute("value") === defaultLocal) {
|
|
select.selectedIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function destroy() {
|
|
if (network !== null) {
|
|
network.destroy();
|
|
network = null;
|
|
}
|
|
}
|
|
|
|
function draw(isImport) {
|
|
destroy();
|
|
nodes = [];
|
|
edges = [];
|
|
|
|
// create a network
|
|
var container = document.getElementById("mynetwork");
|
|
// create an array with nodes
|
|
nodes = new vis.DataSet([
|
|
|
|
]);
|
|
|
|
// create an array with edges
|
|
edges = new vis.DataSet([
|
|
|
|
]);
|
|
|
|
data = {
|
|
nodes: nodes,
|
|
edges: edges
|
|
}
|
|
if (!isImport) {
|
|
|
|
//var tempData = JSON.parse(localStorage.getItem("networkData"));
|
|
var tempData = "";
|
|
try {
|
|
tempData = JSON.parse(dat[0].name);
|
|
if (tempData.nodes.length > 0) {
|
|
var conf = confirm('Are you want to load network data from local storage ?');
|
|
if (conf) {
|
|
//nodes = new vis.DataSet(tempData.nodes);
|
|
//edges = new vis.DataSet(tempData.edges);
|
|
|
|
_edgesDB.insert(tempData)
|
|
|
|
nodes = getNodeData(tempData.nodes);
|
|
edges = getEdgeData(tempData.edges);
|
|
counter = counter + Number(nodes.length);
|
|
localStorage.setItem("nodelength", counter);
|
|
}
|
|
}
|
|
}
|
|
catch (e) {
|
|
}
|
|
|
|
}
|
|
|
|
data = {
|
|
nodes: nodes,
|
|
edges: edges
|
|
}
|
|
var options = {
|
|
//layout: { randomSeed: seed }, // just to make sure the layout is the same when the locale is changed
|
|
//locale: document.getElementById("locale").value,
|
|
interaction: { navigationButtons: true, keyboard: true, dragView: false, multiselect: true, hover: true },
|
|
physics: false,
|
|
//edges: {
|
|
// color: {
|
|
// inherit: falsefunction copy()
|
|
// },
|
|
//},
|
|
nodes: {
|
|
shape: "dot",
|
|
size: 8
|
|
},
|
|
edges: {
|
|
smooth: {
|
|
enabled: false,
|
|
type: 'continuous'
|
|
},
|
|
},
|
|
manipulation: {
|
|
enabled: false,
|
|
addNode: function (data, callback) {
|
|
// filling in the popup DOM elements
|
|
document.getElementById("operation").innerText = "Add Node";
|
|
document.getElementById("node-id").value = data.id;
|
|
document.getElementById("node-label").value = "site 1";
|
|
document.getElementById("node-degree").value = "5";
|
|
document.getElementById("ddlnodeshape").value = "dot";
|
|
document.getElementById("ddlnodeType").value = "ROADM";
|
|
document.getElementById("saveButton").onclick = saveData.bind(
|
|
this,
|
|
data,
|
|
callback
|
|
);
|
|
document.getElementById(
|
|
"cancelButton"
|
|
).onclick = clearPopUp.bind();
|
|
document.getElementById("network-popUp").style.display = "block";
|
|
|
|
},
|
|
editNode: function (data, callback) {
|
|
// filling in the popup DOM elements
|
|
document.getElementById("operation").innerText = "Edit Node";
|
|
document.getElementById("node-id").value = data.id;
|
|
document.getElementById("node-label").value = data.label;
|
|
document.getElementById("node-degree").value = data.nodedegree;
|
|
document.getElementById("ddlnodeType").value = data.nodetype;
|
|
document.getElementById("ddlnodeshape").value = data.shape;
|
|
data.nodeedit = "true";
|
|
document.getElementById("saveButton").onclick = saveData.bind(
|
|
this,
|
|
data,
|
|
callback
|
|
);
|
|
document.getElementById("cancelButton").onclick = cancelEdit.bind(
|
|
this,
|
|
callback
|
|
);
|
|
document.getElementById("addButton").addEventListener('click', function () {
|
|
AddData(this, 0);
|
|
});
|
|
document.getElementById("addAmpButton").addEventListener('click', function () {
|
|
AddData(this, 1);
|
|
});
|
|
document.getElementById("addTraffButton").addEventListener('click', function () {
|
|
AddData(this, 2);
|
|
});
|
|
document.getElementById("network-popUp").style.display = "block";
|
|
},
|
|
|
|
addEdge: function (data, callback) {
|
|
if (data.from == data.to) {
|
|
var r = confirm("Do you want to connect the node to itself?");
|
|
if (r != true) {
|
|
callback(null);
|
|
return;
|
|
}
|
|
}
|
|
document.getElementById("edge-operation").innerText = "Add Edge";
|
|
editEdgeWithoutDrag(data, callback);
|
|
},
|
|
editEdge: {
|
|
editWithoutDrag: function (data, callback) {
|
|
document.getElementById("edge-operation").innerText = "Edit Edge";
|
|
editEdgeWithoutDrag(data, callback);
|
|
},
|
|
},
|
|
},
|
|
};
|
|
network = new vis.Network(container, data, options);
|
|
network.on("click", function (params) {
|
|
params.event = "[original event]";
|
|
console.log(params.pointer);
|
|
if (this.getNodeAt(params.pointer.DOM)) {
|
|
|
|
}
|
|
else if (this.getEdgeAt(params.pointer.DOM)) {
|
|
$("#txtNodeX").val(params.pointer.canvas.x);
|
|
$("#txtNodeY").val(params.pointer.canvas.y);
|
|
}
|
|
else {
|
|
$("#txtNodeX").val(params.pointer.canvas.x);
|
|
$("#txtNodeY").val(params.pointer.canvas.y);
|
|
}
|
|
});
|
|
network.on("selectEdge", function (data) {
|
|
_insertnodeDB().remove();
|
|
|
|
if (data.edges.length > 1 || data.edges.length == 0) {
|
|
copyData.edges = [];
|
|
copyData.nodes = [];
|
|
copyData.dataCopied = false;
|
|
return;
|
|
}
|
|
//var getnodedata = edges.get();
|
|
var clickedEdge = this.body.edges[this.getEdgeAt(data.pointer.DOM)];
|
|
data.label = network.body.edges[data.edges[0]].options.label;
|
|
//data.to = network.body.edges[data.edges].options.to;
|
|
//data.labelFrom = network.body.edges[data.edges].options.labelFrom;
|
|
//data.labelTo = network.body.edges[data.edges].options.labelTo;
|
|
_insertnodeDB.insert({ "id": data.edges[0], "type": "NodeInsert", "label": data.label });
|
|
setCopyData(clickedEdge.options.id, '');
|
|
});
|
|
network.on("selectNode", function (params) {
|
|
var clickedNode = this.body.nodes[this.getNodeAt(params.pointer.DOM)];
|
|
var deletenode = network.getConnectedEdges(clickedNode.id);
|
|
localStorage.setItem("deletenodeconectededge", deletenode.length);
|
|
_nodesDB.insert({ "id": clickedNode.id, "type": "node" });
|
|
setCopyData('', clickedNode.options.id);
|
|
if (isAddEdge == 1) {
|
|
isAddService = 0;
|
|
addServicData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
if (addEdgeData.from == '')
|
|
addEdgeData.from = clickedNode.options.id
|
|
else if (addEdgeData.to == '') {
|
|
if (addEdgeData.from == clickedNode.options.id) {
|
|
alert('pls click destination source');
|
|
return;
|
|
}
|
|
addEdgeData.to = clickedNode.options.id
|
|
}
|
|
|
|
if (addEdgeData.from != '' && addEdgeData.to != '')
|
|
manualAddEdge();
|
|
}
|
|
if (isAddService == 1) {
|
|
isAddEdge = 0;
|
|
addEdgeData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
|
|
if (addServiceData.from == '')
|
|
addServiceData.from = clickedNode.options.id
|
|
else if (addServiceData.to == '') {
|
|
if (addServiceData.from == clickedNode.options.id) {
|
|
alert('pls click destination source');
|
|
return;
|
|
}
|
|
addServiceData.to = clickedNode.options.id
|
|
}
|
|
|
|
console.log(addServiceData);
|
|
if (addServiceData.from != '' && addServiceData.to != '')
|
|
manualAddService();
|
|
|
|
console.log(addServiceData);
|
|
|
|
}
|
|
});
|
|
network.on("doubleClick", function (data) {
|
|
var type = _nodesDB().first();
|
|
if (type.type == "node") {
|
|
network.editNodeMode();
|
|
}
|
|
else {
|
|
network.editEdgeMode();
|
|
}
|
|
_nodesDB().remove();
|
|
});
|
|
network.on("oncontext", function (data) {
|
|
//data.preventDefault();
|
|
var type = _nodesDB().first();
|
|
if (type.type == "node") {
|
|
var getrightclicknode = this.body.nodes[this.getNodeAt(data.pointer.DOM)];
|
|
if (getrightclicknode != undefined) {
|
|
document.getElementById("edgecontextMenu").style.display = "none";
|
|
$("#contextMenu").css({ left: (data.event.pageX + 20) + "px", top: (data.event.pageY + 20) + "px" });
|
|
document.getElementById("contextMenu").style.display = "block";
|
|
var cliNode = this.body.nodes[this.getNodeAt(data.pointer.DOM)];
|
|
document.getElementById("nodeiddetails").value = cliNode.id;
|
|
data.id = cliNode.id
|
|
var clickedNode = network.body.nodes[cliNode.id].options.label;
|
|
document.getElementById("nodeeditlabel").value = clickedNode;
|
|
document.getElementById("nodeedit-degree").value = network.body.nodes[cliNode.id].options.nodedegree;
|
|
document.getElementById("ddleditnodeType").value = network.body.nodes[cliNode.id].options.nodetype;
|
|
//$(`#ddlshape option[value='${network.body.nodes[cliNode.id].options.shape}']`).prop('selected', true);
|
|
//$(`#ddlcolor option[value='${network.body.nodes[cliNode.id].options.color.background}']`).prop('selected', true);
|
|
$('#ddlshape').val(network.body.nodes[cliNode.id].options.shape);
|
|
$('#ddlcolor').val(network.body.nodes[cliNode.id].options.color.background);
|
|
document.getElementById("rightClickNodeEdit").onclick = rightClickNodeEdit.bind();
|
|
document.getElementById("rightClickNodeDelete").onclick = deleteNodeEdge.bind();
|
|
}
|
|
}
|
|
else {
|
|
var getrightclickedge = this.body.edges[this.getEdgeAt(data.pointer.DOM)];
|
|
if (getrightclickedge != undefined) {
|
|
document.getElementById("contextMenu").style.display = "none";
|
|
document.getElementById("edgecontextMenu").style.display = "block";
|
|
$("#edgecontextMenu").css({ left: (data.event.pageX + 20) + "px", top: (data.event.pageY + 20) + "px" });
|
|
var cliEdge = this.body.edges[this.getEdgeAt(data.pointer.DOM)];
|
|
document.getElementById("edgeiddetails").value = cliEdge.id;
|
|
document.getElementById("from").value = network.body.edges[cliEdge.id].options.from;
|
|
document.getElementById("to").value = network.body.edges[cliEdge.id].options.to;
|
|
if (network.body.edges[cliEdge.id].options.label != undefined) {
|
|
var clickedEdge = network.body.edges[cliEdge.id].options.label;
|
|
document.getElementById("edgelabel").value = clickedEdge;
|
|
}
|
|
var arrowto = network.body.edges[cliEdge.id].options.arrows.to.enabled
|
|
var arrowfrom = network.body.edges[cliEdge.id].options.arrows.from.enabled
|
|
//var arrowmiddle = network.body.edges[cliEdge.id].options.arrows.to.enabled
|
|
if (arrowto == true && arrowfrom == true) {
|
|
document.getElementById("edgearrow").value = "to,form";
|
|
}
|
|
else if (arrowto == true) {
|
|
document.getElementById("edgearrow").value = "to";
|
|
}
|
|
else if (arrowfrom == true) {
|
|
document.getElementById("edgearrow").value = "from";
|
|
}
|
|
else {
|
|
document.getElementById("edgearrow").value = "";
|
|
}
|
|
document.getElementById("InsertNode").addEventListener('click', function () {
|
|
AddData(this, 0);
|
|
});
|
|
document.getElementById("Copy").onclick = copy.bind();
|
|
//document.getElementById("Paste").onclick = paste.bind();
|
|
document.getElementById("rightClickEdgeEdit").onclick = rightClickEdgeEdit.bind();
|
|
document.getElementById("rightClickEdgeDelete").onclick = deleteNodeEdge.bind();
|
|
}
|
|
//else {
|
|
// document.getElementById("contextMenu").style.display = "none";
|
|
// document.getElementById("pastecontextMenu").style.display = "block";
|
|
// document.getElementById("Paste").onclick = paste.bind();
|
|
//}
|
|
}
|
|
if (copy == "Yes") {
|
|
document.getElementById("contextMenu").style.display = "none";
|
|
$("#pastecontextMenu").css({ left: (data.event.pageX + 20) + "px", top: (data.event.pageY + 20) + "px" });
|
|
document.getElementById("pastecontextMenu").style.display = "block";
|
|
document.getElementById("Paste").onclick = paste.bind();
|
|
}
|
|
_nodesDB().remove();
|
|
});
|
|
|
|
container.addEventListener("dragover", (function (e) {
|
|
e.preventDefault();
|
|
//console.log("gj")
|
|
}));
|
|
container.addEventListener("dragenter", (function (e) {
|
|
e.target.className += " dragenter";
|
|
//console.log("gj")
|
|
}));
|
|
container.addEventListener("dragleave", (function (e) {
|
|
//alert()
|
|
e.target.className = "whiteBox";
|
|
}));
|
|
|
|
container.addEventListener("drop", (function (e) {
|
|
//let answer = confirm("Do you really want to move it")
|
|
//console.log(e);
|
|
if (e.dataTransfer.getData("text") == "btnAddMode") {
|
|
//var len = network.body.data.nodes.length;
|
|
//var randomid = Number(len) + 1;
|
|
//var counter = 0;
|
|
counter = counter + 1;
|
|
localStorage.setItem("nodelength", counter);
|
|
var nodelength = localStorage.getItem("nodelength");
|
|
if (nodelength != 0) {
|
|
network.body.data.nodes.add({
|
|
id: token(),
|
|
label: "site " + '' + Number(nodelength) + '',
|
|
nodedegree: "5",
|
|
nodetype: "ROADM",
|
|
shape: "dot",
|
|
//x: e.layerX - 399,//center point canvas 0,0 = dom point 399,299
|
|
//y: e.layerY - 299,// current mouse point x - 399 = canvas point x, mouse point y - 299 = canvas point y
|
|
x: e.layerX - ($("#mynetwork").width() / 2),
|
|
y: e.layerY - ($("#mynetwork").height() / 2),
|
|
componentType: 'node'
|
|
})
|
|
} else {
|
|
network.body.data.nodes.add({
|
|
id: token(),
|
|
label: "site " + 1,
|
|
nodedegree: "5",
|
|
nodetype: "ROADM",
|
|
shape: "dot",
|
|
//x: e.layerX - 399,//center point canvas 0,0 = dom point 399,299
|
|
//y: e.layerY - 299,// current mouse point x - 399 = canvas point x, mouse point y - 299 = canvas point y
|
|
x: e.layerX - ($("#mynetwork").width() / 2),
|
|
y: e.layerY - ($("#mynetwork").height() / 2),
|
|
componentType: 'node'
|
|
})
|
|
}
|
|
}
|
|
if (e.dataTransfer.getData("text") == "btnAddAmp") {
|
|
//var len = network.body.data.nodes.length;
|
|
//var randomid = Number(len) + 1;
|
|
//var counter = 0;
|
|
counter = counter + 1;
|
|
localStorage.setItem("nodelength", counter);
|
|
var nodelength = localStorage.getItem("nodelength");
|
|
if (nodelength != 0) {
|
|
network.body.data.nodes.add({
|
|
id: token(),
|
|
label: "site " + '' + Number(nodelength) + '',
|
|
nodedegree: "5",
|
|
//nodetype: "ROADM",
|
|
shape: "triangle",
|
|
color: "red",
|
|
nodedegree: "2",
|
|
//x: e.layerX - 399,//center point canvas 0,0 = dom point 399,299
|
|
//y: e.layerY - 299,// current mouse point x - 399 = canvas point x, mouse point y - 299 = canvas point y
|
|
x: e.layerX - ($("#mynetwork").width() / 2),
|
|
y: e.layerY - ($("#mynetwork").height() / 2),
|
|
componentType: 'node'
|
|
})
|
|
} else {
|
|
network.body.data.nodes.add({
|
|
id: token(),
|
|
label: "site " + 1,
|
|
nodedegree: "5",
|
|
//nodetype: "ROADM",
|
|
shape: "triangle",
|
|
color: "red",
|
|
nodedegree: "2",
|
|
//x: e.layerX - 399,//center point canvas 0,0 = dom point 399,299
|
|
//y: e.layerY - 299,// current mouse point x - 399 = canvas point x, mouse point y - 299 = canvas point y
|
|
x: e.layerX - ($("#mynetwork").width() / 2),
|
|
y: e.layerY - ($("#mynetwork").height() / 2),
|
|
componentType: 'node'
|
|
})
|
|
}
|
|
}
|
|
|
|
e.preventDefault();
|
|
}));
|
|
|
|
network.on("dragStart", function (params) {
|
|
});
|
|
|
|
network.on("dragEnd", function (params) {
|
|
params.event = "[original event]";
|
|
});
|
|
network.on("hoverNode", function (params) {
|
|
try {
|
|
var clickedNode = nodes.get(params.node);
|
|
var fromlabel = clickedNode.label;
|
|
$("#click").css({ left: (params.event.pageX + 20) + "px", top: (params.event.pageY - 40) + "px" });
|
|
$('#click').html(htmlTitle("label : " + fromlabel + "\n" + "type : " + clickedNode.componentType, clickedNode.color));
|
|
$('#click').show();
|
|
}
|
|
catch (e) { }
|
|
});
|
|
network.on("blurNode", function (params) {
|
|
$('#click').hide();
|
|
});
|
|
network.on("hoverEdge", function (params) {
|
|
try {
|
|
var clickedNode = edges.get(params.edge);
|
|
var fromlabel = "(" + nodes.get(clickedNode.from).label + " -> " + nodes.get(clickedNode.to).label + ")";
|
|
$("#click").css({ left: (params.event.pageX + 20) + "px", top: (params.event.pageY - 40) + "px" });
|
|
$('#click').html(htmlTitle("dir : " + fromlabel + "\n" + "type : " + clickedNode.componentType, clickedNode.color));
|
|
$('#click').show();
|
|
}
|
|
catch (e) { }
|
|
});
|
|
network.on("blurEdge", function (params) {
|
|
console.log("blurEdge Event:", params);
|
|
$('#click').hide();
|
|
});
|
|
// removeDefaultElement();
|
|
}
|
|
|
|
/*Remove canvas inside button like edit,delete,add*/
|
|
function removeDefaultElement() {
|
|
$("*.vis-manipulation").remove();
|
|
$("*.vis-edit-mode").remove();
|
|
$("*.vis-close").remove();
|
|
}
|
|
/*Multiple node add start*/
|
|
function AddMultipleNode() {
|
|
disableFiberService();
|
|
var somedata = getScaleFreeNetwork(10);
|
|
console.log(somedata);
|
|
var totalcount = Number($("#txtNofNode").val());
|
|
var x = 0;
|
|
var y = 0;
|
|
for (var i = 1; i <= totalcount; i++) {
|
|
x = x + 10;
|
|
y = y + 10;
|
|
//var len = network.body.data.nodes.length;
|
|
//var randomid = Number(len) + 1;
|
|
//var counter = 0;
|
|
counter = counter + 1;
|
|
localStorage.setItem("nodelength", counter);
|
|
var nodelength = localStorage.getItem("nodelength");
|
|
network.body.data.nodes.add({
|
|
id: token(),
|
|
label: "site " + '' + Number(nodelength) + '',
|
|
nodedegree: "5",
|
|
nodetype: "ROADM",
|
|
shape: "dot",
|
|
x: x,
|
|
y: y,
|
|
componentType: 'node'
|
|
})
|
|
}
|
|
}
|
|
/*Multiple node add End*/
|
|
|
|
function rightClickNodeEdit() {
|
|
//alert();
|
|
disableFiberService();
|
|
document.getElementById("contextMenu").style.display = "none";
|
|
document.getElementById("node-popUpdetails").style.display = "block";
|
|
document.getElementById("nodesaveButton").onclick = popupsaveNodeData.bind(
|
|
);
|
|
document.getElementById("nodecancelButton").onclick = nodecancelNodeEdit.bind(
|
|
);
|
|
}
|
|
function deleteNodeEdge() {
|
|
disableFiberService();
|
|
document.getElementById("contextMenu").style.display = "none";
|
|
document.getElementById("edgecontextMenu").style.display = "none";
|
|
//network.deleteSelected();
|
|
var deletenodeconectededge = localStorage.getItem("deletenodeconectededge");
|
|
if (deletenodeconectededge == "0" || deletenodeconectededge == "") {
|
|
network.deleteSelected();
|
|
} else {
|
|
alert("Unpair node and delete");
|
|
}
|
|
localStorage.setItem("deletenodeconectededge", "");
|
|
}
|
|
function rightClickEdgeEdit() {
|
|
disableFiberService();
|
|
document.getElementById("edgecontextMenu").style.display = "none";
|
|
document.getElementById("edge-popUpdetails").style.display = "block";
|
|
document.getElementById("edgesaveButton").onclick = popupsaveedgeData.bind(
|
|
);
|
|
document.getElementById("edgecancelButton").onclick = edgecancelNodeEdit.bind(
|
|
);
|
|
}
|
|
|
|
|
|
/*start show popup window and update data based on selected node*/
|
|
function popupeditNode(data, cancelAction, callback) {
|
|
document.getElementById("nodeeditlabel").value = data.label;
|
|
document.getElementById("nodesaveButton").onclick = popupsaveNodeData.bind(
|
|
this,
|
|
data,
|
|
callback
|
|
);
|
|
document.getElementById("nodecancelButton").onclick =
|
|
cancelAction.bind(this, callback);
|
|
document.getElementById("node-popUpdetails").style.display = "block";
|
|
}
|
|
|
|
function edgecancelNodeEdit() {
|
|
edgeclearNodePopUp();
|
|
//callback(null);
|
|
}
|
|
function edgeclearNodePopUp() {
|
|
document.getElementById("edgesaveButton").onclick = null;
|
|
document.getElementById("edgecancelButton").onclick = null;
|
|
document.getElementById("edge-popUpdetails").style.display = "none";
|
|
}
|
|
// Callback passed as parameter is ignored
|
|
function nodeclearNodePopUp() {
|
|
document.getElementById("nodesaveButton").onclick = null;
|
|
document.getElementById("nodecancelButton").onclick = null;
|
|
document.getElementById("node-popUpdetails").style.display = "none";
|
|
}
|
|
|
|
function nodecancelNodeEdit() {
|
|
nodeclearNodePopUp();
|
|
//callback(null);
|
|
}
|
|
|
|
function popupsaveNodeData() {
|
|
var id = document.getElementById("nodeiddetails").value;
|
|
var label = document.getElementById("nodeeditlabel").value;
|
|
var shape = document.getElementById("ddlshape").value;
|
|
var color = document.getElementById("ddlcolor").value;
|
|
var type = document.getElementById("ddleditnodeType").value;
|
|
var degree = document.getElementById("nodeedit-degree").value;
|
|
if (color != "" && color != 0) {
|
|
network.body.data.nodes.update({
|
|
id: id, label: label, shape: shape, color: color, nodetype: type, nodedegree: degree
|
|
});
|
|
}
|
|
else {
|
|
network.body.data.nodes.update({
|
|
id: id, label: label, shape: shape, nodetype: type, nodedegree: degree
|
|
});
|
|
}
|
|
document.getElementById("node-popUpdetails").style.display = "none";
|
|
}
|
|
function popupsaveedgeData() {
|
|
var edgelabel = document.getElementById("edgelabel").value;
|
|
var id = document.getElementById("edgeiddetails").value;
|
|
var from = document.getElementById("from").value;
|
|
var to = document.getElementById("to").value;
|
|
var editcolor = document.getElementById("ddleditedgecolor").value;
|
|
var arrow = document.getElementById("edgearrow").value;
|
|
//var color = document.getElementById("ddlcolor").value;
|
|
//network.clustering.updateEdge(originalEdge.id, { label: label});
|
|
if (editcolor != "0") {
|
|
network.body.data.edges.update({
|
|
id: id, length: length, color: editcolor, arrows: arrow, label: edgelabel
|
|
});
|
|
}
|
|
else {
|
|
network.body.data.edges.update({
|
|
id: id, length: length, arrows: arrow, label: edgelabel
|
|
});
|
|
}
|
|
//_edgesDB.insert({ "from": from, "to":to, "edgeLength":length})
|
|
_insertnodeDB({ id: id }).update({ label: edgelabel });
|
|
_edgesDB({ from: from, to: to }).update({ label: edgelabel, color: editcolor });
|
|
document.getElementById("edge-popUpdetails").style.display = "none";
|
|
}
|
|
/*popup end*/
|
|
|
|
function editEdgeWithoutDrag(data, callback) {
|
|
var servicefromedgefrom;
|
|
var servicefromedgeto;
|
|
var servicetoedgefrom;
|
|
var servicetoedgeto;
|
|
if (isService != 1) {
|
|
var fromcounter = 0;
|
|
var tocounter = 0;
|
|
var fromnodedegree = network.body.nodes[data.from].options.nodedegree;
|
|
var tonodedegree = network.body.nodes[data.to].options.nodedegree;
|
|
var fromnodeconnectededge = network.getConnectedEdges(data.from);
|
|
var tonodeconnectededge = network.getConnectedEdges(data.to);
|
|
fromnodeconnectededge.forEach(function (item, index) {
|
|
var formnodeconnecteddataset = edges.get();
|
|
for (i = 0; i < formnodeconnecteddataset.length; i++) {
|
|
if (item == formnodeconnecteddataset[i].id) {
|
|
if (formnodeconnecteddataset[i].componentType == "edge") {
|
|
fromcounter = fromcounter + 1;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
tonodeconnectededge.forEach(function (item, index) {
|
|
var tonodeconnecteddataset = edges.get();
|
|
for (i = 0; i < tonodeconnecteddataset.length; i++) {
|
|
if (item == tonodeconnecteddataset[i].id) {
|
|
if (tonodeconnecteddataset[i].componentType == "edge") {
|
|
tocounter = tocounter + 1;
|
|
//console.log("hi");
|
|
}
|
|
}
|
|
}
|
|
});
|
|
if (fromcounter < Number(fromnodedegree) && tocounter < Number(tonodedegree)) {
|
|
////filling in the popup DOM elements
|
|
//if (data.label != undefined) {
|
|
// document.getElementById("edge-label").value = data.label;
|
|
//}
|
|
////document.getElementById("edge-arrow").value = data.arrows;
|
|
//if (data.id != undefined) {
|
|
// var arrowto = network.body.edges[data.id].options.arrows.to.enabled
|
|
// var arrowfrom = network.body.edges[data.id].options.arrows.from.enabled
|
|
// //var arrowmiddle = network.body.edges[cliEdge.id].options.arrows.to.enabled
|
|
// if (arrowto == true && arrowfrom == true) {
|
|
// document.getElementById("edge-arrow").value = "to,form";
|
|
// }
|
|
// else if (arrowto == true) {
|
|
// document.getElementById("edge-arrow").value = "to";
|
|
// }
|
|
// else if (arrowfrom == true) {
|
|
// document.getElementById("edge-arrow").value = "from";
|
|
// }
|
|
// else {
|
|
// document.getElementById("edge-arrow").value = "";
|
|
// }
|
|
//}
|
|
if (data.label != undefined) {
|
|
document.getElementById("edge-label").value = data.label;
|
|
}
|
|
|
|
//document.getElementById("edge-arrow").value = data.arrows;
|
|
if (data.id != undefined) {
|
|
//$(`#ddledgecolor option[value='${network.body.nodes[data.id].options.color.background}']`).prop('selected', true);
|
|
var arrowto = network.body.edges[data.id].options.arrows.to.enabled
|
|
var arrowfrom = network.body.edges[data.id].options.arrows.from.enabled
|
|
//var arrowmiddle = network.body.edges[cliEdge.id].options.arrows.to.enabled
|
|
if (arrowto == true && arrowfrom == true) {
|
|
document.getElementById("edge-arrow").value = "to,form";
|
|
}
|
|
else if (arrowto == true) {
|
|
document.getElementById("edge-arrow").value = "to";
|
|
}
|
|
else if (arrowfrom == true) {
|
|
document.getElementById("edge-arrow").value = "from";
|
|
}
|
|
else {
|
|
document.getElementById("edge-arrow").value = "";
|
|
}
|
|
}
|
|
document.getElementById("edge-saveButton").onclick = saveEdgeData.bind(
|
|
this,
|
|
data,
|
|
callback
|
|
);
|
|
document.getElementById("edge-cancelButton").onclick = cancelEdgeEdit.bind(
|
|
this,
|
|
callback
|
|
);
|
|
document.getElementById("edge-popUp").style.display = "block";
|
|
}
|
|
//else if (data.id != undefined) {
|
|
// //filling in the popup DOM elements
|
|
// if (data.label != undefined) {
|
|
// document.getElementById("edge-label").value = data.label;
|
|
// }
|
|
|
|
// //document.getElementById("edge-arrow").value = data.arrows;
|
|
// if (data.id != undefined) {
|
|
// //$(`#ddledgecolor option[value='${network.body.nodes[data.id].options.color.background}']`).prop('selected', true);
|
|
// var arrowto = network.body.edges[data.id].options.arrows.to.enabled
|
|
// var arrowfrom = network.body.edges[data.id].options.arrows.from.enabled
|
|
// //var arrowmiddle = network.body.edges[cliEdge.id].options.arrows.to.enabled
|
|
// if (arrowto == true && arrowfrom == true) {
|
|
// document.getElementById("edge-arrow").value = "to,form";
|
|
// }
|
|
// else if (arrowto == true) {
|
|
// document.getElementById("edge-arrow").value = "to";
|
|
// }
|
|
// else if (arrowfrom == true) {
|
|
// document.getElementById("edge-arrow").value = "from";
|
|
// }
|
|
// else {
|
|
// document.getElementById("edge-arrow").value = "";
|
|
// }
|
|
// }
|
|
|
|
// document.getElementById("edge-saveButton").onclick = saveEdgeData.bind(
|
|
// this,
|
|
// data,
|
|
// callback
|
|
// );
|
|
// document.getElementById("edge-cancelButton").onclick = cancelEdgeEdit.bind(
|
|
// this,
|
|
// callback
|
|
// );
|
|
// document.getElementById("edge-popUp").style.display = "block";
|
|
//}
|
|
else {
|
|
alert("Node Degree limit exist");
|
|
}
|
|
}
|
|
else {
|
|
var fromnodeconnectededge = network.getConnectedEdges(data.from);
|
|
var tonodeconnectededge = network.getConnectedEdges(data.to);
|
|
fromnodeconnectededge.forEach(function (item, index) {
|
|
var fromedgefrom = network.body.edges[item].options.from;
|
|
var fromedgeto = network.body.edges[item].options.to;
|
|
if (fromedgefrom == data.from && fromedgeto == data.to || fromedgefrom == data.to && fromedgeto == data.from) {
|
|
servicefromedgefrom = fromedgefrom;
|
|
servicefromedgeto = fromedgeto;
|
|
}
|
|
});
|
|
tonodeconnectededge.forEach(function (item, index) {
|
|
var toedgefrom = network.body.edges[item].options.from
|
|
var toedgeto = network.body.edges[item].options.to
|
|
if (toedgefrom == data.from && toedgeto == data.to || toedgefrom == data.to && toedgeto == data.from) {
|
|
servicetoedgefrom = toedgefrom;
|
|
servicetoedgeto = toedgeto;
|
|
}
|
|
|
|
});
|
|
if (servicefromedgefrom != undefined && servicefromedgeto != undefined || servicetoedgefrom != undefined && servicetoedgeto != undefined) {
|
|
var fromnodetype = network.body.nodes[data.from].options.componentType;
|
|
var tonodetype = network.body.nodes[data.to].options.componentType;
|
|
if (fromnodetype == "node" && tonodetype == "node") {
|
|
if (data.label != undefined) {
|
|
document.getElementById("edge-label").value = data.label;
|
|
}
|
|
//document.getElementById("edge-arrow").value = data.arrows;
|
|
if (data.id != undefined) {
|
|
var arrowto = network.body.edges[data.id].options.arrows.to.enabled
|
|
var arrowfrom = network.body.edges[data.id].options.arrows.from.enabled
|
|
//var arrowmiddle = network.body.edges[cliEdge.id].options.arrows.to.enabled
|
|
if (arrowto == true && arrowfrom == true) {
|
|
document.getElementById("edge-arrow").value = "to,form";
|
|
}
|
|
else if (arrowto == true) {
|
|
document.getElementById("edge-arrow").value = "to";
|
|
}
|
|
else if (arrowfrom == true) {
|
|
document.getElementById("edge-arrow").value = "from";
|
|
}
|
|
else {
|
|
document.getElementById("edge-arrow").value = "";
|
|
}
|
|
}
|
|
document.getElementById("edge-saveButton").onclick = saveEdgeData.bind(
|
|
this,
|
|
data,
|
|
callback
|
|
);
|
|
document.getElementById("edge-cancelButton").onclick = cancelEdgeEdit.bind(
|
|
this,
|
|
callback
|
|
);
|
|
document.getElementById("edge-popUp").style.display = "block";
|
|
}
|
|
else {
|
|
//clearEdgePopUp();
|
|
document.getElementById("edge-popUp").style.display = "none";
|
|
alert("Service not add between amplifier node");
|
|
isAddService = 0;
|
|
}
|
|
}
|
|
else {
|
|
alert("Create fiber then service add");
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
function clearEdgePopUp() {
|
|
document.getElementById("edge-label").value = "";
|
|
document.getElementById("edge-saveButton").onclick = null;
|
|
document.getElementById("edge-cancelButton").onclick = null;
|
|
document.getElementById("edge-popUp").style.display = "none";
|
|
}
|
|
|
|
function cancelEdgeEdit(callback) {
|
|
clearEdgePopUp();
|
|
data.componentType = 'edge';
|
|
if (isService == 1) {
|
|
data.dashes = true;
|
|
data.label = document.getElementById("edge-label").value;
|
|
data.font = fontstyle1;
|
|
data.color = "red";
|
|
data.arrows = document.getElementById("edge-arrow").value;
|
|
data.smooth = smooth1;
|
|
data.componentType = 'service';
|
|
isService = 0;
|
|
}
|
|
callback(null);
|
|
}
|
|
|
|
function AddService() {
|
|
disableFiberService();
|
|
isService = 1;
|
|
data.componentType = 'service';
|
|
network.addEdgeMode();
|
|
}
|
|
function RemoveSelection() {
|
|
disableFiberService();
|
|
var deletenodeconectededge = localStorage.getItem("deletenodeconectededge");
|
|
if (deletenodeconectededge == "0" || deletenodeconectededge == "") {
|
|
network.deleteSelected();
|
|
} else {
|
|
alert("Unpair node and delete");
|
|
}
|
|
localStorage.setItem("deletenodeconectededge", "");
|
|
}
|
|
function AddEdgeMode() {
|
|
disableFiberService();
|
|
isService = 0;
|
|
network.addEdgeMode();
|
|
}
|
|
function EditEdgeMode() {
|
|
disableFiberService();
|
|
network.editEdgeMode();
|
|
}
|
|
function AddNodeMode() {
|
|
disableFiberService();
|
|
network.addNodeMode();
|
|
}
|
|
function EditNodeMode() {
|
|
disableFiberService();
|
|
network.editNode();
|
|
}
|
|
function htmlTitle(html, backcolor) {
|
|
const container = document.createElement("pre");
|
|
container.innerHTML = html;
|
|
container.style.background = backcolor;
|
|
container.style.color = "black";
|
|
container.style.transition = "all 1s ease-in-out";
|
|
return container;
|
|
}
|
|
function saveEdgeData(data, callback) {
|
|
if (isService != 1) {
|
|
if (typeof data.to === "object") data.to = data.to.id;
|
|
if (typeof data.from === "object") data.from = data.from.id;
|
|
//data.length = document.getElementById("edge-length").value;
|
|
data.label = document.getElementById("edge-label").value;
|
|
_insertnodeDB({ id: data.id }).update({ label: data.label });
|
|
//var fromnode = network.getConnectedNodes(data.from)
|
|
//var fromlen = Number(fromnode.length).toString();
|
|
//var tonode = network.getConnectedNodes(data.to)
|
|
//var tolen = Number(tonode.length).toString();
|
|
//var text = 'abcdefghijklmnopqrstuvwxyz';
|
|
//for (var i = 0; i < text.length; i++) {
|
|
// var code = text.toUpperCase().charCodeAt(i)
|
|
// if (code > 64 && code < 91) {
|
|
// var result = (code - 64) + " ";
|
|
// if (result.trim() == Number(fromlen) + 1) {
|
|
// data.labelFrom = text[i];
|
|
// }
|
|
// if (result.trim() == Number(tolen) + 1) {
|
|
// data.labelTo = text[i];
|
|
// }
|
|
// }
|
|
//}
|
|
|
|
data.title = document.getElementById("edge-title").value.toString();
|
|
data.arrows = document.getElementById("edge-arrow").value.toString();
|
|
if (document.getElementById("ddledgecolor").value != 0 && document.getElementById("ddledgecolor").value !== "" && document.getElementById("ddledgecolor").value != undefined) {
|
|
data.color = document.getElementById("ddledgecolor").value;
|
|
}
|
|
data.font = fontstyle1;
|
|
data.componentType = 'edge';
|
|
if (document.getElementById("edgeDashes").value == "true") {
|
|
data.dashes = document.getElementById("edgeDashes").value;
|
|
}
|
|
var existedgedb = _edgesDB({ from: data.from, to: data.to }).get();
|
|
if (existedgedb.length != 0) {
|
|
//_edgesDB({ from: data.from, to: data.to }).update({ edgeLength: data.length, label: data.label, color: data.color, arrows: data.arrows, dashes: data.dashes });
|
|
_edgesDB({ from: data.from, to: data.to }).update({ label: data.label, color: data.color, arrows: data.arrows, dashes: data.dashes });
|
|
}
|
|
else {
|
|
//_edgesDB.insert({ "from": data.from, "to": data.to, "edgeLength": data.length, "dashes": data.dashes, "arrows": data.arrows, "label": data.label })
|
|
_edgesDB.insert({ "from": data.from, "to": data.to, "dashes": data.dashes, "arrows": data.arrows, "label": data.label })
|
|
}
|
|
clearEdgePopUp();
|
|
callback(data);
|
|
}
|
|
else {
|
|
//var fromnodetype = network.body.nodes[data.from].options.nodetype;
|
|
//var tonodetype = network.body.nodes[data.to].options.nodetype;
|
|
//if (fromnodetype == "ROADM" && tonodetype == "ROADM") {
|
|
data.dashes = true;
|
|
data.label = document.getElementById("edge-label").value;
|
|
data.font = fontstyle1;
|
|
data.color = "red";
|
|
data.arrows = document.getElementById("edge-arrow").value;
|
|
data.smooth = smooth1;
|
|
data.componentType = 'service';
|
|
isService = 0;
|
|
document.getElementById("edge-popUp").style.display = "none";
|
|
clearEdgePopUp();
|
|
callback(data);
|
|
//}
|
|
//else {
|
|
// //document.getElementById("edge-popUp").style.display = "none";
|
|
// clearEdgePopUp();
|
|
// //callback(data);
|
|
// alert("Service not add between amplifier node");
|
|
//}
|
|
}
|
|
}
|
|
|
|
var fontstyle1 = {
|
|
align: "top",
|
|
|
|
}
|
|
var Unidirection = {
|
|
to: {
|
|
enabled: false,
|
|
type: "arrow",
|
|
},
|
|
from: {
|
|
enabled: true,
|
|
type: "arrow",
|
|
},
|
|
}
|
|
var Bidirection = {
|
|
to: {
|
|
enabled: true,
|
|
type: "arrow",
|
|
},
|
|
from: {
|
|
enabled: true,
|
|
type: "arrow",
|
|
},
|
|
}
|
|
var smooth1 = {
|
|
enabled: true,
|
|
type: "curvedCW",
|
|
roundness: ".2",
|
|
}
|
|
|
|
|
|
function clearPopUp() {
|
|
document.getElementById("node-degree").value = ""
|
|
document.getElementById("edge-label").value = "";
|
|
document.getElementById("saveButton").onclick = null;
|
|
document.getElementById("cancelButton").onclick = null;
|
|
document.getElementById("network-popUp").style.display = "none";
|
|
}
|
|
|
|
function cancelEdit(callback) {
|
|
clearPopUp();
|
|
callback(null);
|
|
}
|
|
|
|
function saveData(data, callback) {
|
|
if (data.nodeedit != "true") {
|
|
counter = counter + 1;
|
|
//counter = counter + 1;
|
|
localStorage.setItem("nodelength", counter);
|
|
//var nodelength = localStorage.getItem("nodelength");
|
|
}
|
|
data.id = document.getElementById("node-id").value;
|
|
data.label = document.getElementById("node-label").value;
|
|
data.title = document.getElementById("node-title").value;
|
|
var myshape = document.getElementById("ddlnodeshape").value;
|
|
shape = myshape;
|
|
// data.size = 8;
|
|
var mycolor = document.getElementById("ddlnodecolor").value;
|
|
color = mycolor;
|
|
if (shape != undefined && shape != null && shape != "" && shape != 0) {
|
|
data.shape = shape;
|
|
}
|
|
if (color != undefined && color != null && color != "" && color != 0) {
|
|
data.color = color;
|
|
}
|
|
var nodetype = document.getElementById("ddlnodeType").value;
|
|
data.nodetype = nodetype;
|
|
data.componentType = "node";
|
|
data.nodedegree = document.getElementById("node-degree").value;
|
|
//if (document.getElementById("edgeFixed").value == "true") {
|
|
// fixed= document.getElementById("edgeFixed").value;
|
|
// //data.fixed.y = document.getElementById("edgeFixed").value;
|
|
|
|
//}
|
|
clearPopUp();
|
|
callback(data);
|
|
}
|
|
function AddData(data, id) {
|
|
disableFiberService();
|
|
document.getElementById("edgecontextMenu").style.display = "none";
|
|
document.getElementById("network-popUp").style.display = "none";
|
|
document.getElementById("node-popUp").style.display = "block";
|
|
document.getElementById("nodeSaveButton").onclick = AddNode.bind(
|
|
this, id
|
|
);
|
|
|
|
//var from_id = document.getElementById("node-id").value;
|
|
//var myNode = network.getConnectedNodes(from_id)
|
|
//if (myNode.length == 1) {
|
|
// $("#trId").hide();
|
|
//}
|
|
//else {
|
|
// $("#trId").show();
|
|
// document.getElementById("edgeLen").value = "";
|
|
//}
|
|
}
|
|
function AddNode(id) {
|
|
var test;
|
|
var edgeLen;
|
|
var subLen;
|
|
var insertEdgeLabel;
|
|
//var from_id = document.getElementById("node-id").value;
|
|
//test = network.getConnectedEdges(from_id);
|
|
var shape = document.getElementById("ddlinsertnodeshape").value;
|
|
var insetnode = _insertnodeDB().first();
|
|
var myNode = network.getConnectedNodes(insetnode.id);
|
|
to_id = myNode[1];
|
|
from_id = myNode[0];
|
|
var edgelabel = edges.get(insetnode.id).label;
|
|
//if (myNode.length > 1) {
|
|
// to_id = document.getElementById("nodeid").value;
|
|
// var test1 = network.getConnectedEdges(to_id);
|
|
// var edgedata = "";
|
|
// var result = false;
|
|
// for (var i = 0; i < test.length; i++) {
|
|
// if (result == false) {
|
|
// for (var j = 0; j < test.length; j++) {
|
|
// if (test[i] == test1[j]) {
|
|
// edgedata = test1[j];
|
|
// result = true;
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
//}
|
|
//else {
|
|
// $("#trId").hide();
|
|
// to_id = myNode[0];
|
|
//}
|
|
|
|
|
|
var len = network.body.data.nodes.length;
|
|
var randomid = Number(len) + 1;
|
|
//var counter = 0;
|
|
counter = counter + 1;
|
|
localStorage.setItem("nodelength", counter);
|
|
var nodelength = localStorage.getItem("nodelength");
|
|
var dynamicToken = token();
|
|
if (id == 0) {
|
|
if (shape == "triangle") {
|
|
dynamicToken
|
|
network.body.data.nodes.add({
|
|
id: dynamicToken,
|
|
label: "site " + '' + Number(nodelength) + '',
|
|
x: $("#txtNodeX").val(),
|
|
y: $("#txtNodeY").val(),
|
|
//shape: $("#ddlShape").val(),
|
|
shape: shape,
|
|
//shape: "diamond",
|
|
size: 8,
|
|
color: "red",
|
|
nodedegree: "5",
|
|
nodetype: "ROADM",
|
|
//color: $("#txtNodeBGColor").val(),
|
|
componentType: "Amplifier"
|
|
});
|
|
} else {
|
|
network.body.data.nodes.add({
|
|
id: dynamicToken,
|
|
label: "site " + '' + Number(nodelength) + '',
|
|
x: $("#txtNodeX").val(),
|
|
y: $("#txtNodeY").val(),
|
|
//shape: $("#ddlShape").val(),
|
|
shape: shape,
|
|
//shape: "diamond",
|
|
size: 8,
|
|
nodedegree: "5",
|
|
nodetype: "ROADM",
|
|
//color: $("#txtNodeBGColor").val(),
|
|
componentType: "node"
|
|
});
|
|
}
|
|
|
|
}
|
|
else if (id == 1) {
|
|
network.body.data.nodes.add({
|
|
id: dynamicToken,
|
|
label: '' + randomid + '',
|
|
//shape: "icon",
|
|
//icon: {
|
|
// face: "'FontAwesome'",
|
|
// code: "\uf067",
|
|
// size: 15,
|
|
// color: "black",
|
|
//},
|
|
size: 8,
|
|
x: $("#txtNodeX").val(),
|
|
y: $("#txtNodeY").val(),
|
|
componentType: "node"
|
|
});
|
|
}
|
|
else {
|
|
network.body.data.nodes.add({
|
|
id: dynamicToken,
|
|
label: '' + randomid + '',
|
|
shape: shape,
|
|
//shape: "diamond",
|
|
size: 8,
|
|
color: "red",
|
|
x: $("#txtNodeX").val(),
|
|
y: $("#txtNodeY").val(),
|
|
componentType: "node"
|
|
});
|
|
}
|
|
|
|
|
|
//edgeLen = document.getElementById("edgeLen").value;
|
|
//insertEdgeLabel = document.getElementById("InsertEdgeLabel").value;
|
|
//var taffyLen;
|
|
|
|
//taffyLen = _edgesDB({ from: from_id.toString(), to: to_id.toString() }).first();
|
|
|
|
|
|
|
|
//if (taffyLen == false) {
|
|
// taffyLen = _edgesDB({ from: to_id.toString(), to: from_id.toString() }).first();
|
|
//}
|
|
|
|
//if (Number(edgeLen) < Number(taffyLen.edgeLength)) {
|
|
// subLen = Number(taffyLen.edgeLength) - Number(edgeLen);
|
|
//}
|
|
//else if (Number(edgeLen) > Number(taffyLen.edgeLength)) {
|
|
// network.body.data.nodes.remove(randomid);
|
|
// alert('Given length is exceeded in total length.');
|
|
// document.getElementById("node-popUp").style.display = "none";
|
|
// return false;
|
|
//}
|
|
//else if (Number(edgeLen) == Number(taffyLen.edgeLength)) {
|
|
// network.body.data.nodes.remove(randomid);
|
|
// alert('Given length is equal to total length.');
|
|
// document.getElementById("node-popUp").style.display = "none";
|
|
// return false;
|
|
//}
|
|
//else {
|
|
// subLen = 0;
|
|
//}
|
|
|
|
//if (edgedata != "" && edgedata != undefined) {
|
|
// network.body.data.edges.remove(edgedata);
|
|
//}
|
|
//else {
|
|
// network.body.data.edges.remove(test[0]);
|
|
//}
|
|
|
|
|
|
network.body.data.edges.remove(insetnode.id);
|
|
network.body.data.edges.add([{ from: dynamicToken, to: from_id, font: fontstyle1, componentType: "edge", label: edgelabel, color: "blue" }])
|
|
network.body.data.edges.add([{ from: dynamicToken, to: to_id, font: fontstyle1, componentType: "edge", label: edgelabel, color: "blue" }])
|
|
|
|
//network.body.data.edges.add([{ from: randomid, to: from_id, length: edgeLen, label: edgeLen, color: "" }])
|
|
//network.body.data.edges.add([{ from: randomid, to: to_id, length: subLen, label: subLen.toString(), color: "" }])
|
|
_edgesDB.insert({ "from": dynamicToken, "to": from_id })
|
|
_edgesDB.insert({ "from": dynamicToken, "to": to_id })
|
|
_insertnodeDB().remove();
|
|
document.getElementById("node-popUp").style.display = "none";
|
|
|
|
}
|
|
function init(isImport) {
|
|
|
|
|
|
initDb();
|
|
readdata();
|
|
|
|
|
|
|
|
if (isImport) {
|
|
setDefaultLocale();
|
|
draw(isImport);
|
|
|
|
}
|
|
else {
|
|
setTimeout(function () {
|
|
setDefaultLocale();
|
|
draw(isImport);
|
|
}, 1000);
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
//-----------------------Json File---------------------
|
|
|
|
function testing() {
|
|
container = document.getElementById("mynetwork");
|
|
//exportArea = document.getElementById("input_output");
|
|
importButton = document.getElementById("import_button");
|
|
exportButton = document.getElementById("export_button");
|
|
}
|
|
|
|
function clearOutputArea() {
|
|
//exportArea.value = "";
|
|
}
|
|
|
|
function exportNetwork(isSaveNetwork) {
|
|
disableFiberService();
|
|
testing();
|
|
clearOutputArea();
|
|
//counter = 0;
|
|
//var nodes = objectToArray(network.getPositions());
|
|
//nodes.forEach(addConnections);
|
|
// pretty print node data
|
|
//var exportValue = JSON.stringify(nodes, undefined, 2);
|
|
//exportArea.value = exportValue;
|
|
|
|
var nodesModel = [];
|
|
|
|
var edgesModel = [];
|
|
$.each(network.body.nodes, function (i) {
|
|
var data = {
|
|
//options: network.body.nodes[i].options,
|
|
id: network.body.nodes[i].options.id,
|
|
label: network.body.nodes[i].options.label,
|
|
x: network.body.nodes[i].x,
|
|
y: network.body.nodes[i].y,
|
|
shape: network.body.nodes[i].options.shape,
|
|
size: network.body.nodes[i].options.size,
|
|
nodedegree: network.body.nodes[i].options.nodedegree,
|
|
nodetype: network.body.nodes[i].options.nodetype,
|
|
componentType: nodes.get(network.body.nodes[i].options.id).componentType,
|
|
icon:
|
|
network.body.nodes[i].options.icon,
|
|
color: [
|
|
{
|
|
border: network.body.nodes[i].options.color.border,
|
|
background: network.body.nodes[i].options.color.background,
|
|
highlight: [
|
|
{
|
|
border: network.body.nodes[i].options.color.border,
|
|
background: network.body.nodes[i].options.color.background,
|
|
}
|
|
],
|
|
hover: [
|
|
{
|
|
border: network.body.nodes[i].options.color.border,
|
|
background: network.body.nodes[i].options.color.background,
|
|
}
|
|
]
|
|
}
|
|
],
|
|
edges: network.getConnectedNodes(network.body.nodes[i].options.id)
|
|
};
|
|
|
|
|
|
let str = network.body.nodes[i].options.id;
|
|
let checktext;
|
|
try {
|
|
checktext = str.substring(0, 7);
|
|
}
|
|
catch (e) { }
|
|
|
|
if (data.x != undefined && data.y != undefined && checktext != "edgeId:")
|
|
nodesModel.push(data);
|
|
});
|
|
|
|
|
|
$.each(network.body.edges, function (i) {
|
|
var data = {
|
|
//options: network.body.nodes[i].options,
|
|
id: network.body.edges[i].id,
|
|
//label: network.body.edges[i].length,
|
|
label: network.body.edges[i].options.label,
|
|
//title: network.body.edges[i].title,
|
|
from: network.body.edges[i].fromId,
|
|
to: network.body.edges[i].toId,
|
|
dashes: network.body.edges[i].options.dashes,
|
|
length: network.body.edges[i].options.length,
|
|
value: network.body.edges[i].options.value,
|
|
componentType: edges.get(network.body.edges[i].id).componentType,
|
|
options: [
|
|
{
|
|
color: [
|
|
{
|
|
color: network.body.edges[i].options.color.color,
|
|
highlight: network.body.edges[i].options.color.highlight,
|
|
hover: network.body.edges[i].options.color.hover,
|
|
inherit: network.body.edges[i].options.color.inherit,
|
|
opacity: network.body.edges[i].options.color.opacity,
|
|
|
|
}
|
|
],
|
|
background: [
|
|
{
|
|
color: network.body.edges[i].options.background.color,
|
|
dashes: network.body.edges[i].options.background.dashes,
|
|
enabled: network.body.edges[i].options.background.enabled,
|
|
size: network.body.edges[i].options.background.size,
|
|
}
|
|
],
|
|
arrows: [
|
|
{
|
|
from: [
|
|
{
|
|
enabled: network.body.edges[i].options.arrows.from.enabled,
|
|
type: network.body.edges[i].options.arrows.from.type
|
|
}
|
|
],
|
|
to: [
|
|
{
|
|
enabled: network.body.edges[i].options.arrows.to.enabled,
|
|
type: network.body.edges[i].options.arrows.to.type
|
|
}
|
|
],
|
|
}
|
|
],
|
|
font: [
|
|
{
|
|
align: network.body.edges[i].options.font.align
|
|
}
|
|
],
|
|
smooth: [
|
|
{
|
|
enabled: network.body.edges[i].options.smooth.enabled,
|
|
roundness: network.body.edges[i].options.smooth.roundness,
|
|
type: network.body.edges[i].options.smooth.type
|
|
}
|
|
],
|
|
|
|
}
|
|
]
|
|
|
|
};
|
|
edgesModel.push(data);
|
|
});
|
|
|
|
var model = {
|
|
nodes: nodesModel,
|
|
edges: edgesModel
|
|
}
|
|
//counter = counter + Number(nodes.length);
|
|
//localStorage.setItem("nodelength", counter);
|
|
var exportValue = JSON.stringify(model, undefined, 2);
|
|
|
|
if (isSaveNetwork) {
|
|
//localStorage.setItem("networkData", exportValue);
|
|
addNetworData(exportValue);
|
|
return;
|
|
}
|
|
|
|
//$("#jsondiv").text(exportValue);
|
|
// console.log(JSON.stringify(edges, undefined, 2));
|
|
// exportArea.value = exportValue;
|
|
//
|
|
//$("<a />", {
|
|
// "download": "NetworkFile.json",
|
|
// "href": "data:application/json;charset=utf-8," + encodeURIComponent(exportValue),
|
|
//}).appendTo("body")
|
|
// .click(function () {
|
|
// $(this).remove()
|
|
// })[0].click()
|
|
|
|
// any kind of extension (.txt,.cpp,.cs,.bat)
|
|
var filename = "NetworkFile.json";
|
|
|
|
var blob = new Blob([exportValue], {
|
|
type: "text/plain;charset=utf-8"
|
|
});
|
|
|
|
saveAs(blob, filename);
|
|
}
|
|
|
|
function download(exportValue) {
|
|
|
|
}
|
|
|
|
//async function addNetworData(netData) {
|
|
// try {
|
|
// netmodel = {
|
|
// id: "1",
|
|
// name: netData
|
|
// }
|
|
// var noOfDataInserted = await jsstoreCon.insert({
|
|
// into: 'tbl_network',
|
|
// values: [netmodel]
|
|
// });
|
|
|
|
// if (noOfDataInserted === 1) {
|
|
// alert('successfully added');
|
|
// }
|
|
// } catch (ex) {
|
|
// var noOfDataInserted = await jsstoreCon.update({
|
|
// in: 'tbl_network',
|
|
// set: {
|
|
// name: netData,
|
|
// },
|
|
// where: {
|
|
// id: "1"
|
|
// }
|
|
// });
|
|
// if (noOfDataInserted === 1) {
|
|
// alert('successfully updated');
|
|
// }
|
|
// }
|
|
//}
|
|
|
|
var importNodes = [];
|
|
var importEdges = [];
|
|
function handleFileSelect(event) {
|
|
const reader = new FileReader()
|
|
reader.onload = handleFileLoad;
|
|
reader.readAsText(event.target.files[0])
|
|
}
|
|
|
|
function handleFileLoad(event) {
|
|
//document.getElementById('input_output').textContent = "";
|
|
//_import_json = document.getElementById('input_output').textContent = event.target.result;
|
|
_import_json = event.target.result;
|
|
importNetwork();
|
|
}
|
|
function importNetwork() {
|
|
disableFiberService();
|
|
init(true);
|
|
nodes = [];
|
|
edges = [];
|
|
|
|
testing();
|
|
document.getElementById('import_button').addEventListener('change', handleFileSelect, false);
|
|
|
|
var inputValue = _import_json;
|
|
//var inputValue = exportArea.value;
|
|
var inputData = JSON.parse(inputValue);
|
|
_edgesDB.insert(inputData)
|
|
|
|
nodes = getNodeData(inputData.nodes);
|
|
edges = getEdgeData(inputData.edges);
|
|
data = {
|
|
nodes: nodes,
|
|
edges: edges
|
|
};
|
|
counter = counter + Number(nodes.length);
|
|
localStorage.setItem("nodelength", counter);
|
|
var options = {
|
|
layout: { randomSeed: seed }, // just to make sure the layout is the same when the locale is changed
|
|
locale: document.getElementById("locale").value,
|
|
interaction: { navigationButtons: true, keyboard: true, multiselect: true, hover: true },
|
|
physics: false,
|
|
//edges: {
|
|
// color: {
|
|
// inherit: falsefunction copy()
|
|
// },
|
|
//},
|
|
nodes: {
|
|
shape: "dot",
|
|
size: 8
|
|
},
|
|
edges: {
|
|
smooth: {
|
|
enabled: false,
|
|
type: 'continuous'
|
|
},
|
|
},
|
|
manipulation: {
|
|
enabled: false,
|
|
addNode: function (data, callback) {
|
|
// filling in the popup DOM elements
|
|
document.getElementById("operation").innerText = "Add Node";
|
|
document.getElementById("node-id").value = data.id;
|
|
document.getElementById("node-label").value = "site 1";
|
|
document.getElementById("node-degree").value = "5";
|
|
document.getElementById("ddlnodeshape").value = "dot";
|
|
document.getElementById("ddlnodeType").value = "ROADM";
|
|
document.getElementById("saveButton").onclick = saveData.bind(
|
|
this,
|
|
data,
|
|
callback
|
|
);
|
|
document.getElementById(
|
|
"cancelButton"
|
|
).onclick = clearPopUp.bind();
|
|
document.getElementById("network-popUp").style.display = "block";
|
|
|
|
},
|
|
editNode: function (data, callback) {
|
|
// filling in the popup DOM elements
|
|
document.getElementById("operation").innerText = "Edit Node";
|
|
document.getElementById("node-id").value = data.id;
|
|
document.getElementById("node-label").value = data.label;
|
|
document.getElementById("node-degree").value = data.nodedegree;
|
|
document.getElementById("ddlnodeType").value = data.nodetype;
|
|
document.getElementById("ddlnodeshape").value = data.shape;
|
|
data.nodeedit = "true";
|
|
document.getElementById("saveButton").onclick = saveData.bind(
|
|
this,
|
|
data,
|
|
callback
|
|
);
|
|
document.getElementById("cancelButton").onclick = cancelEdit.bind(
|
|
this,
|
|
callback
|
|
);
|
|
document.getElementById("addButton").addEventListener('click', function () {
|
|
AddData(this, 0);
|
|
});
|
|
document.getElementById("addAmpButton").addEventListener('click', function () {
|
|
AddData(this, 1);
|
|
});
|
|
document.getElementById("addTraffButton").addEventListener('click', function () {
|
|
AddData(this, 2);
|
|
});
|
|
document.getElementById("network-popUp").style.display = "block";
|
|
},
|
|
|
|
addEdge: function (data, callback) {
|
|
if (data.from == data.to) {
|
|
var r = confirm("Do you want to connect the node to itself?");
|
|
if (r != true) {
|
|
callback(null);
|
|
return;
|
|
}
|
|
}
|
|
document.getElementById("edge-operation").innerText = "Add Edge";
|
|
editEdgeWithoutDrag(data, callback);
|
|
},
|
|
editEdge: {
|
|
editWithoutDrag: function (data, callback) {
|
|
document.getElementById("edge-operation").innerText = "Edit Edge";
|
|
editEdgeWithoutDrag(data, callback);
|
|
},
|
|
},
|
|
},
|
|
};
|
|
network = new vis.Network(container, data, options);
|
|
network.on("click", function (params) {
|
|
params.event = "[original event]";
|
|
console.log(params.pointer);
|
|
if (this.getNodeAt(params.pointer.DOM)) {
|
|
|
|
}
|
|
else if (this.getEdgeAt(params.pointer.DOM)) {
|
|
$("#txtNodeX").val(params.pointer.canvas.x);
|
|
$("#txtNodeY").val(params.pointer.canvas.y);
|
|
}
|
|
else {
|
|
$("#txtNodeX").val(params.pointer.canvas.x);
|
|
$("#txtNodeY").val(params.pointer.canvas.y);
|
|
}
|
|
});
|
|
network.on("selectEdge", function (data) {
|
|
_insertnodeDB().remove();
|
|
|
|
if (data.edges.length > 1 || data.edges.length == 0) {
|
|
copyData.edges = [];
|
|
copyData.nodes = [];
|
|
copyData.dataCopied = false;
|
|
return;
|
|
}
|
|
|
|
//var getnodedata = edges.get();
|
|
var clickedEdge = this.body.edges[this.getEdgeAt(data.pointer.DOM)];
|
|
data.label = network.body.edges[data.edges[0]].options.label;
|
|
//data.to = network.body.edges[data.edges].options.to;
|
|
//data.labelFrom = network.body.edges[data.edges].options.labelFrom;
|
|
//data.labelTo = network.body.edges[data.edges].options.labelTo;
|
|
_insertnodeDB.insert({ "id": data.edges[0], "type": "NodeInsert", "label": data.label });
|
|
setCopyData(clickedEdge.options.id, '');
|
|
});
|
|
network.on("selectNode", function (params) {
|
|
var clickedNode = this.body.nodes[this.getNodeAt(params.pointer.DOM)];
|
|
var deletenode = network.getConnectedEdges(clickedNode.id);
|
|
localStorage.setItem("deletenodeconectededge", deletenode.length);
|
|
_nodesDB.insert({ "id": clickedNode.id, "type": "node" });
|
|
setCopyData('', clickedNode.options.id);
|
|
if (isAddEdge == 1) {
|
|
isAddService = 0;
|
|
addServicData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
if (addEdgeData.from == '')
|
|
addEdgeData.from = clickedNode.options.id
|
|
else if (addEdgeData.to == '') {
|
|
if (addEdgeData.from == clickedNode.options.id) {
|
|
alert('pls click destination source');
|
|
return;
|
|
}
|
|
addEdgeData.to = clickedNode.options.id
|
|
}
|
|
|
|
if (addEdgeData.from != '' && addEdgeData.to != '')
|
|
manualAddEdge();
|
|
}
|
|
if (isAddService == 1) {
|
|
isAddEdge = 0;
|
|
addEdgeData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
|
|
if (addServiceData.from == '')
|
|
addServiceData.from = clickedNode.options.id
|
|
else if (addServiceData.to == '') {
|
|
if (addServiceData.from == clickedNode.options.id) {
|
|
alert('pls click destination source');
|
|
return;
|
|
}
|
|
addServiceData.to = clickedNode.options.id
|
|
}
|
|
|
|
console.log(addServiceData);
|
|
if (addServiceData.from != '' && addServiceData.to != '')
|
|
manualAddService();
|
|
|
|
console.log(addServiceData);
|
|
|
|
}
|
|
});
|
|
network.on("doubleClick", function (data) {
|
|
var type = _nodesDB().first();
|
|
if (type.type == "node") {
|
|
network.editNodeMode();
|
|
}
|
|
else {
|
|
network.editEdgeMode();
|
|
}
|
|
_nodesDB().remove();
|
|
});
|
|
network.on("oncontext", function (data) {
|
|
//data.preventDefault();
|
|
var type = _nodesDB().first();
|
|
if (type.type == "node") {
|
|
var getrightclicknode = this.body.nodes[this.getNodeAt(data.pointer.DOM)];
|
|
if (getrightclicknode != undefined) {
|
|
document.getElementById("edgecontextMenu").style.display = "none";
|
|
$("#contextMenu").css({ left: (data.event.pageX + 20) + "px", top: (data.event.pageY + 20) + "px" });
|
|
document.getElementById("contextMenu").style.display = "block";
|
|
var cliNode = this.body.nodes[this.getNodeAt(data.pointer.DOM)];
|
|
document.getElementById("nodeiddetails").value = cliNode.id;
|
|
data.id = cliNode.id
|
|
var clickedNode = network.body.nodes[cliNode.id].options.label;
|
|
document.getElementById("nodeeditlabel").value = clickedNode;
|
|
document.getElementById("nodeedit-degree").value = network.body.nodes[cliNode.id].options.nodedegree;
|
|
document.getElementById("ddleditnodeType").value = network.body.nodes[cliNode.id].options.nodetype;
|
|
//$(`#ddlshape option[value='${network.body.nodes[cliNode.id].options.shape}']`).prop('selected', true);
|
|
//$(`#ddlcolor option[value='${network.body.nodes[cliNode.id].options.color.background}']`).prop('selected', true);
|
|
$('#ddlshape').val(network.body.nodes[cliNode.id].options.shape);
|
|
$('#ddlcolor').val(network.body.nodes[cliNode.id].options.color.background);
|
|
document.getElementById("rightClickNodeEdit").onclick = rightClickNodeEdit.bind();
|
|
document.getElementById("rightClickNodeDelete").onclick = deleteNodeEdge.bind();
|
|
}
|
|
}
|
|
else {
|
|
var getrightclickedge = this.body.edges[this.getEdgeAt(data.pointer.DOM)];
|
|
if (getrightclickedge != undefined) {
|
|
document.getElementById("contextMenu").style.display = "none";
|
|
$("#edgecontextMenu").css({ left: (data.event.pageX + 20) + "px", top: (data.event.pageY + 20) + "px" });
|
|
document.getElementById("edgecontextMenu").style.display = "block";
|
|
var cliEdge = this.body.edges[this.getEdgeAt(data.pointer.DOM)];
|
|
document.getElementById("edgeiddetails").value = cliEdge.id;
|
|
document.getElementById("from").value = network.body.edges[cliEdge.id].options.from;
|
|
document.getElementById("to").value = network.body.edges[cliEdge.id].options.to;
|
|
if (network.body.edges[cliEdge.id].options.label != undefined) {
|
|
var clickedEdge = network.body.edges[cliEdge.id].options.label;
|
|
document.getElementById("edgelabel").value = clickedEdge;
|
|
}
|
|
var arrowto = network.body.edges[cliEdge.id].options.arrows.to.enabled
|
|
var arrowfrom = network.body.edges[cliEdge.id].options.arrows.from.enabled
|
|
//var arrowmiddle = network.body.edges[cliEdge.id].options.arrows.to.enabled
|
|
if (arrowto == true && arrowfrom == true) {
|
|
document.getElementById("edgearrow").value = "to,form";
|
|
}
|
|
else if (arrowto == true) {
|
|
document.getElementById("edgearrow").value = "to";
|
|
}
|
|
else if (arrowfrom == true) {
|
|
document.getElementById("edgearrow").value = "from";
|
|
}
|
|
else {
|
|
document.getElementById("edgearrow").value = "";
|
|
}
|
|
document.getElementById("InsertNode").addEventListener('click', function () {
|
|
AddData(this, 0);
|
|
});
|
|
document.getElementById("Copy").onclick = copy.bind();
|
|
//document.getElementById("Paste").onclick = paste.bind();
|
|
document.getElementById("rightClickEdgeEdit").onclick = rightClickEdgeEdit.bind();
|
|
document.getElementById("rightClickEdgeDelete").onclick = deleteNodeEdge.bind();
|
|
}
|
|
//else {
|
|
// document.getElementById("contextMenu").style.display = "none";
|
|
// document.getElementById("pastecontextMenu").style.display = "block";
|
|
// document.getElementById("Paste").onclick = paste.bind();
|
|
//}
|
|
}
|
|
if (copy == "Yes") {
|
|
document.getElementById("contextMenu").style.display = "none";
|
|
$("#pastecontextMenu").css({ left: (data.event.pageX + 20) + "px", top: (data.event.pageY + 20) + "px" });
|
|
document.getElementById("pastecontextMenu").style.display = "block";
|
|
document.getElementById("Paste").onclick = paste.bind();
|
|
}
|
|
_nodesDB().remove();
|
|
});
|
|
|
|
container.addEventListener("dragover", (function (e) {
|
|
e.preventDefault();
|
|
//console.log("gj")
|
|
}));
|
|
container.addEventListener("dragenter", (function (e) {
|
|
e.target.className += " dragenter";
|
|
//console.log("gj")
|
|
}));
|
|
container.addEventListener("dragleave", (function (e) {
|
|
//alert()
|
|
e.target.className = "whiteBox";
|
|
}));
|
|
|
|
container.addEventListener("drop", (function (e) {
|
|
//let answer = confirm("Do you really want to move it")
|
|
//console.log(e);
|
|
if (e.dataTransfer.getData("text") == "btnAddMode") {
|
|
//var len = network.body.data.nodes.length;
|
|
//var randomid = Number(len) + 1;
|
|
//var counter = 0;
|
|
counter = counter + 1;
|
|
localStorage.setItem("nodelength", counter);
|
|
var nodelength = localStorage.getItem("nodelength");
|
|
if (nodelength != 0) {
|
|
network.body.data.nodes.add({
|
|
id: token(),
|
|
label: "site " + '' + Number(nodelength) + '',
|
|
nodedegree: "5",
|
|
nodetype: "ROADM",
|
|
shape: "dot",
|
|
//x: e.layerX - 399,//center point canvas 0,0 = dom point 399,299
|
|
//y: e.layerY - 299,// current mouse point x - 399 = canvas point x, mouse point y - 299 = canvas point y
|
|
x: e.layerX - ($("#mynetwork").width() / 2),
|
|
y: e.layerY - ($("#mynetwork").height() / 2),
|
|
componentType: 'node'
|
|
})
|
|
} else {
|
|
network.body.data.nodes.add({
|
|
id: token(),
|
|
label: "site " + 1,
|
|
nodedegree: "5",
|
|
nodetype: "ROADM",
|
|
shape: "dot",
|
|
//x: e.layerX - 399,//center point canvas 0,0 = dom point 399,299
|
|
//y: e.layerY - 299,// current mouse point x - 399 = canvas point x, mouse point y - 299 = canvas point y
|
|
x: e.layerX - ($("#mynetwork").width() / 2),
|
|
y: e.layerY - ($("#mynetwork").height() / 2),
|
|
componentType: 'node'
|
|
})
|
|
}
|
|
}
|
|
if (e.dataTransfer.getData("text") == "btnAddAmp") {
|
|
//var len = network.body.data.nodes.length;
|
|
//var randomid = Number(len) + 1;
|
|
//var counter = 0;
|
|
counter = counter + 1;
|
|
localStorage.setItem("nodelength", counter);
|
|
var nodelength = localStorage.getItem("nodelength");
|
|
if (nodelength != 0) {
|
|
network.body.data.nodes.add({
|
|
id: token(),
|
|
label: "site " + '' + Number(nodelength) + '',
|
|
nodedegree: "5",
|
|
//nodetype: "ROADM",
|
|
shape: "triangle",
|
|
color: "red",
|
|
nodedegree: "2",
|
|
//x: e.layerX - 399,//center point canvas 0,0 = dom point 399,299
|
|
//y: e.layerY - 299,// current mouse point x - 399 = canvas point x, mouse point y - 299 = canvas point y
|
|
x: e.layerX - ($("#mynetwork").width() / 2),
|
|
y: e.layerY - ($("#mynetwork").height() / 2),
|
|
componentType: 'node'
|
|
})
|
|
} else {
|
|
network.body.data.nodes.add({
|
|
id: token(),
|
|
label: "site " + 1,
|
|
nodedegree: "5",
|
|
//nodetype: "ROADM",
|
|
shape: "triangle",
|
|
color: "red",
|
|
nodedegree: "2",
|
|
//x: e.layerX - 399,//center point canvas 0,0 = dom point 399,299
|
|
//y: e.layerY - 299,// current mouse point x - 399 = canvas point x, mouse point y - 299 = canvas point y
|
|
x: e.layerX - ($("#mynetwork").width() / 2),
|
|
y: e.layerY - ($("#mynetwork").height() / 2),
|
|
componentType: 'node'
|
|
})
|
|
}
|
|
}
|
|
|
|
e.preventDefault();
|
|
}));
|
|
|
|
network.on("dragStart", function (params) {
|
|
});
|
|
|
|
network.on("dragEnd", function (params) {
|
|
params.event = "[original event]";
|
|
});
|
|
network.on("hoverNode", function (params) {
|
|
try {
|
|
var clickedNode = nodes.get(params.node);
|
|
var fromlabel = clickedNode.label;
|
|
$("#click").css({ left: (params.event.pageX + 20) + "px", top: (params.event.pageY - 40) + "px" });
|
|
$('#click').html(htmlTitle("label : " + fromlabel + "\n" + "type : " + clickedNode.componentType, clickedNode.color));
|
|
$('#click').show();
|
|
}
|
|
catch (e) { }
|
|
});
|
|
network.on("blurNode", function (params) {
|
|
$('#click').hide();
|
|
});
|
|
network.on("hoverEdge", function (params) {
|
|
try {
|
|
var clickedNode = edges.get(params.edge);
|
|
var fromlabel = "(" + nodes.get(clickedNode.from).label + " -> " + nodes.get(clickedNode.to).label + ")";
|
|
$("#click").css({ left: (params.event.pageX + 20) + "px", top: (params.event.pageY - 40) + "px" });
|
|
$('#click').html(htmlTitle("dir : " + fromlabel + "\n" + "type : " + clickedNode.componentType, clickedNode.color));
|
|
$('#click').show();
|
|
}
|
|
catch (e) { }
|
|
});
|
|
network.on("blurEdge", function (params) {
|
|
console.log("blurEdge Event:", params);
|
|
$('#click').hide();
|
|
});
|
|
|
|
testing();
|
|
}
|
|
|
|
function getNodeData(data) {
|
|
data.forEach(function (elem, index, array) {
|
|
importNodes.push({
|
|
id: elem.id,
|
|
label: elem.label,
|
|
shape: elem.shape,
|
|
icon: elem.icon,
|
|
color: elem.color[0],
|
|
edges: elem.edges[0],
|
|
x: elem.x,
|
|
y: elem.y,
|
|
title: elem.title,
|
|
size: elem.size,
|
|
componentType: elem.componentType,
|
|
nodedegree: elem.nodedegree,
|
|
nodetype: elem.nodetype
|
|
|
|
});
|
|
});
|
|
|
|
////old node json
|
|
//data.forEach(function (elem, index, array) {
|
|
// nodes.push({
|
|
// id: elem.id,
|
|
// label: elem.label,
|
|
// shape: elem.shape,
|
|
// icon: elem.icon,
|
|
// color: elem.color,
|
|
// x: elem.x,
|
|
// y: elem.y,
|
|
// title: elem.title,
|
|
// });
|
|
//});
|
|
|
|
|
|
return new vis.DataSet(importNodes);
|
|
}
|
|
|
|
|
|
function getNodeById(data, id) {
|
|
for (var n = 0; n < data.length; n++) {
|
|
if (data[n].id == id) {
|
|
// double equals since id can be numeric or string
|
|
return data[n];
|
|
}
|
|
}
|
|
|
|
throw "Can not find id '" + id + "' in data";
|
|
}
|
|
|
|
function getEdgeData(data) {
|
|
|
|
data.forEach(function (elem) {
|
|
// add the connection
|
|
|
|
var fontstyle = {
|
|
align: '' + elem.options[0].font[0].align + '',
|
|
}
|
|
var arrows = {
|
|
to: {
|
|
enabled: elem.options[0].arrows[0].to[0].enabled,
|
|
type: elem.options[0].arrows[0].to[0].type,
|
|
},
|
|
from: {
|
|
enabled: elem.options[0].arrows[0].from[0].enabled,
|
|
type: elem.options[0].arrows[0].from[0].type,
|
|
},
|
|
}
|
|
|
|
var smooth = {
|
|
enabled: elem.options[0].smooth[0].enabled,
|
|
type: elem.options[0].smooth[0].type,
|
|
roundness: elem.options[0].smooth[0].roundness,
|
|
}
|
|
|
|
//var options = {
|
|
// font: fontstyle,
|
|
// arrows: arrows,
|
|
// smooth: smooth
|
|
//}
|
|
var fromlabel = "(" + nodes.get(elem.from).label + " -> " + nodes.get(elem.to).label + ")";
|
|
importEdges.push({
|
|
id: elem.id,
|
|
from: elem.from,
|
|
to: elem.to,
|
|
dashes: elem.dashes,
|
|
label: elem.label,
|
|
//options: options,
|
|
font: fontstyle,
|
|
arrows: arrows,
|
|
smooth: smooth,
|
|
color: elem.options[0].color[0].color,
|
|
componentType: elem.componentType,
|
|
// title: htmlTitle("uid : " + fromlabel + "\n" + "type : " + elem.componentType),
|
|
//label: elem.label,
|
|
//font: elem.font,
|
|
//arrows: elem.arrows,
|
|
|
|
});
|
|
|
|
|
|
});
|
|
|
|
//old json edges
|
|
//data.forEach(function (node) {
|
|
// // add the connection
|
|
// node.edges.forEach(function (connId, cIndex, conns) {
|
|
// edges.push({ from: node.id, to: connId });
|
|
// let cNode = getNodeById(data, connId);
|
|
|
|
// var elementConnections = cNode.edges;
|
|
|
|
// // remove the connection from the other node to prevent duplicate connections
|
|
// var duplicateIndex = elementConnections.findIndex(function (
|
|
// connection
|
|
// ) {
|
|
// return connection == node.id; // double equals since id can be numeric or string
|
|
// });
|
|
|
|
// if (duplicateIndex != -1) {
|
|
// elementConnections.splice(duplicateIndex, 1);
|
|
// }
|
|
// _edgesDB.insert({ "from": node.id, "to": connId, "edgeLength": 100 })
|
|
|
|
// });
|
|
|
|
//});
|
|
|
|
return new vis.DataSet(importEdges);
|
|
}
|
|
|
|
function objectToArray(obj) {
|
|
return Object.keys(obj).map(function (key) {
|
|
obj[key].id = key;
|
|
return obj[key];
|
|
});
|
|
}
|
|
function addConnections(elem, index) {
|
|
// need to replace this with a tree of the network, then get child direct children of the element
|
|
index = elem.id;
|
|
elem.edges = network.getConnectedNodes(index);
|
|
}
|
|
|
|
/*copy and paste*/
|
|
function setCopyData(edgeID, nodeID) {
|
|
copyData.edges = [];
|
|
copyData.nodes = [];
|
|
|
|
var edgeData = [];
|
|
var nodeDataFrom = '';
|
|
var nodeDataTo = '';
|
|
|
|
|
|
//copy edge/node pair
|
|
if (nodeID == '' && edgeID != '') {
|
|
edgeData = network.body.edges[edgeID];
|
|
nodeDataFrom = network.body.nodes[edgeData.fromId];
|
|
nodeDataTo = network.body.nodes[edgeData.toId];
|
|
}
|
|
//copy node
|
|
if (nodeID != '' && edgeID == '') {
|
|
edgeData = [];
|
|
nodeDataFrom = network.body.nodes[nodeID];
|
|
nodeDataTo = '';
|
|
}
|
|
|
|
var tempnode = [];
|
|
tempnode.push(nodeDataFrom);
|
|
tempnode.push(nodeDataTo);
|
|
copyData.edges = edgeData;
|
|
copyData.nodes = tempnode;
|
|
}
|
|
|
|
function getCopiedData() {
|
|
|
|
var dynamicid = [];
|
|
copyData.nodes.forEach(function (elem, index, array) {
|
|
counter = counter + 1;
|
|
localStorage.setItem("nodelength", counter);
|
|
//var nodelength = localStorage.getItem("nodelength");
|
|
if (elem == '')
|
|
return;
|
|
var dyid = token();
|
|
var xdir = Number($("#txtNodeX").val());
|
|
network.body.data.nodes.add({
|
|
id: dyid,
|
|
label: elem.options.label,
|
|
shape: elem.options.shape,
|
|
icon: elem.options.icon,
|
|
color: elem.options.color.background,
|
|
x: elem.x + 10,
|
|
y: elem.y + 10,
|
|
//x:Number($("#txtNodeX").val()),
|
|
//y:Number($("#txtNodeY").val()),
|
|
title: elem.options.title,
|
|
size: elem.options.size,
|
|
nodedegree: elem.options.nodedegree,
|
|
nodetype: elem.options.nodetype,
|
|
componentType: nodes.get(elem.options.id).componentType
|
|
|
|
});
|
|
dynamicid.push(dyid);
|
|
});
|
|
|
|
if (copyData.edges.length == 0)
|
|
return;
|
|
var elem = copyData.edges;
|
|
// add the connection
|
|
var fontstyle = {
|
|
align: '' + elem.options.font.align + '',
|
|
}
|
|
var arrows = {
|
|
to: {
|
|
enabled: elem.options.arrows.to.enabled,
|
|
type: elem.options.arrows.to.type,
|
|
},
|
|
from: {
|
|
enabled: elem.options.arrows.from.enabled,
|
|
type: elem.options.arrows.from.type,
|
|
},
|
|
}
|
|
|
|
var smooth = {
|
|
enabled: elem.options.smooth.enabled,
|
|
type: elem.options.smooth.type,
|
|
roundness: elem.options.smooth.roundness,
|
|
}
|
|
|
|
//var options = {
|
|
// font: fontstyle,
|
|
// arrows: arrows,
|
|
// smooth: smooth
|
|
//}
|
|
network.body.data.edges.add({
|
|
|
|
id: 'eid' + Math.random().toString().replace('.', '0'),
|
|
from: dynamicid[0],
|
|
to: dynamicid[1],
|
|
dashes: elem.options.dashes,
|
|
label: elem.options.label,
|
|
//options: options,
|
|
font: fontstyle,
|
|
arrows: arrows,
|
|
smooth: smooth,
|
|
color: elem.options.color.color,
|
|
componentType: edges.get(elem.id).componentType
|
|
//label: elem.label,
|
|
//font: elem.font,
|
|
//arrows: elem.arrows,
|
|
|
|
});
|
|
|
|
copyData = {
|
|
edges: [],
|
|
nodes: [],
|
|
dataCopied: false
|
|
}
|
|
|
|
|
|
}
|
|
|
|
var storageData = {
|
|
nodes: [],
|
|
edges: []
|
|
}
|
|
function SaveNetwork() {
|
|
disableFiberService();
|
|
exportNetwork(true);
|
|
//storageData.nodes = nodes.get();
|
|
//storageData.edges = edges.get();
|
|
//localStorage.setItem("networkData", JSON.stringify(storageData));
|
|
}
|
|
function StorageClear() {
|
|
//localStorage.removeItem("networkData");
|
|
disableFiberService();
|
|
counter = 0;
|
|
deletedata("1");
|
|
init();
|
|
}
|
|
|
|
//async function deletedata(id) {
|
|
// try {
|
|
// var noOfStudentRemoved = await jsstoreCon.remove({
|
|
// from: 'tbl_network',
|
|
// where: {
|
|
// id: id
|
|
// }
|
|
// });
|
|
// } catch (ex) {
|
|
// alert(ex.message);
|
|
// }
|
|
//}
|
|
|
|
var isAddEdge = 0;
|
|
var addEdgeData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
function manualAddEdge() {
|
|
var fromcounter = 0;
|
|
var tocounter = 0;
|
|
var fromnodedegree = network.body.nodes[addEdgeData.from].options.nodedegree;
|
|
var tonodedegree = network.body.nodes[addEdgeData.to].options.nodedegree;
|
|
var fromnodeconnectededge = network.getConnectedEdges(addEdgeData.from);
|
|
var tonodeconnectededge = network.getConnectedEdges(addEdgeData.to);
|
|
fromnodeconnectededge.forEach(function (item, index) {
|
|
var formnodeconnecteddataset = edges.get();
|
|
for (i = 0; i < formnodeconnecteddataset.length; i++) {
|
|
if (item == formnodeconnecteddataset[i].id) {
|
|
if (formnodeconnecteddataset[i].componentType == "edge") {
|
|
fromcounter = fromcounter + 1;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
tonodeconnectededge.forEach(function (item, index) {
|
|
var tonodeconnecteddataset = edges.get();
|
|
for (i = 0; i < tonodeconnecteddataset.length; i++) {
|
|
if (item == tonodeconnecteddataset[i].id) {
|
|
if (tonodeconnecteddataset[i].componentType == "edge") {
|
|
tocounter = tocounter + 1;
|
|
//console.log("hi");
|
|
}
|
|
}
|
|
}
|
|
});
|
|
if (fromcounter < Number(fromnodedegree) && tocounter < Number(tonodedegree)) {
|
|
var labelvalue = '[' + nodes.get(addEdgeData.from).label + ' - ' + nodes.get(addEdgeData.to).label + ']';
|
|
network.body.data.edges.add({
|
|
id: token(), from: addEdgeData.from, to: addEdgeData.to, label: labelvalue, font: { align: 'top' },
|
|
componentType: "edge"
|
|
});
|
|
//isAddEdge = 0;
|
|
//addEdgeData = {
|
|
// from: '',
|
|
// to: ''
|
|
//};
|
|
addEdgeData = {
|
|
from: addEdgeData.to,
|
|
to: ''
|
|
};
|
|
UnSelectAll();
|
|
}
|
|
else {
|
|
alert("Node Degree limit exist");
|
|
}
|
|
}
|
|
function manualAddEdgeMode() {
|
|
UnSelectAll();
|
|
isAddEdge = 1;
|
|
isAddService = 0;
|
|
addEdgeData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
}
|
|
|
|
var isAddService = 0;
|
|
var addServiceData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
function manualAddService() {
|
|
var servicefromedgefrom;
|
|
var servicefromedgeto;
|
|
var servicetoedgefrom;
|
|
var servicetoedgeto;
|
|
var fromnodeconnectededge = network.getConnectedEdges(addServiceData.from);
|
|
var tonodeconnectededge = network.getConnectedEdges(addServiceData.to);
|
|
fromnodeconnectededge.forEach(function (item, index) {
|
|
var fromedgefrom = network.body.edges[item].options.from;
|
|
var fromedgeto = network.body.edges[item].options.to;
|
|
if (fromedgefrom == addServiceData.from && fromedgeto == addServiceData.to || fromedgefrom == addServiceData.to && fromedgeto == addServiceData.from) {
|
|
servicefromedgefrom = fromedgefrom;
|
|
servicefromedgeto = fromedgeto;
|
|
}
|
|
});
|
|
tonodeconnectededge.forEach(function (item, index) {
|
|
var toedgefrom = network.body.edges[item].options.from
|
|
var toedgeto = network.body.edges[item].options.to
|
|
if (toedgefrom == addServiceData.from && toedgeto == addServiceData.to || toedgefrom == addServiceData.to && toedgeto == addServiceData.from) {
|
|
servicetoedgefrom = toedgefrom;
|
|
servicetoedgeto = toedgeto;
|
|
}
|
|
|
|
});
|
|
if (servicefromedgefrom != undefined && servicefromedgeto != undefined || servicetoedgefrom != undefined && servicetoedgeto != undefined) {
|
|
var fromnodetype = network.body.nodes[addServiceData.from].options.componentType;
|
|
var tonodetype = network.body.nodes[addServiceData.to].options.componentType;
|
|
if (fromnodetype == "node" && tonodetype == "node") {
|
|
var labelvalue = '[' + nodes.get(addServiceData.from).label + ' - ' + nodes.get(addServiceData.to).label + ']';
|
|
network.body.data.edges.add({
|
|
id: token(), from: addServiceData.from, to: addServiceData.to, label: labelvalue, dashes: true, color: 'red', font: { align: 'top' }
|
|
, arrows: arrows1,
|
|
smooth: smooth1,
|
|
componentType: "service"
|
|
});
|
|
|
|
//isAddService = 0;
|
|
//addServiceData = {
|
|
// from: '',
|
|
// to: ''
|
|
//};
|
|
addServiceData = {
|
|
from: addServiceData.to,
|
|
to: ''
|
|
};
|
|
UnSelectAll();
|
|
} else {
|
|
//clearEdgePopUp();
|
|
document.getElementById("edge-popUp").style.display = "none";
|
|
alert("Service not add between amplifier node");
|
|
}
|
|
}
|
|
else {
|
|
alert("Create fiber then service add");
|
|
}
|
|
}
|
|
function manualAddServiceMode() {
|
|
UnSelectAll();
|
|
isAddService = 1;
|
|
isAddEdge = 0;
|
|
addServiceData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
}
|
|
|
|
var fontstyle1 = {
|
|
align: "top",
|
|
|
|
}
|
|
var arrows1 = {
|
|
to: {
|
|
enabled: true,
|
|
type: "arrow",
|
|
},
|
|
from: {
|
|
enabled: true,
|
|
type: "arrow",
|
|
},
|
|
}
|
|
|
|
var smooth1 = {
|
|
enabled: true,
|
|
type: "curvedCW",
|
|
roundness: ".2",
|
|
}
|
|
|
|
|
|
|
|
function copy() {
|
|
disableFiberService();
|
|
document.getElementById("edgecontextMenu").style.display = "none";
|
|
copyData.dataCopied = true;
|
|
copy = "Yes";
|
|
}
|
|
function paste() {
|
|
if (copy == "Yes") {
|
|
document.getElementById("pastecontextMenu").style.display = "none";
|
|
getCopiedData();
|
|
copy = "No"
|
|
}
|
|
}
|
|
function UnSelectAll() {
|
|
network.unselectAll();
|
|
}
|
|
|
|
function wholePage() {
|
|
disableFiberService();
|
|
html2canvas(document.body, {
|
|
onrendered: function (canvas) {
|
|
var img = canvas.toDataURL();
|
|
$("#result-image").attr('src', img).show();
|
|
|
|
canvas.toBlob(function (blob) {
|
|
saveAs(blob, "wholePage.png");
|
|
});
|
|
}
|
|
});
|
|
return false;
|
|
}
|
|
|
|
function networkPage() {
|
|
disableFiberService();
|
|
html2canvas(document.querySelector("#mynetwork"), {
|
|
onrendered: function (canvas) {
|
|
var img = canvas.toDataURL();
|
|
$("#result-image").attr('src', img).show();
|
|
|
|
canvas.toBlob(function (blob) {
|
|
saveAs(blob, "NetworkPage.png");
|
|
});
|
|
}
|
|
});
|
|
return false;
|
|
}
|
|
|
|
//function zoomin() {
|
|
// var myImg = document.getElementById("mynetwork");
|
|
// var currWidth = myImg.clientWidth;
|
|
// if (currWidth == 500) {
|
|
// alert("Maximum zoom-in level reached.");
|
|
// } else {
|
|
// myImg.style.width = (currWidth + 50) + "px";
|
|
// }
|
|
//}
|
|
//function zoomout() {
|
|
// var myImg = document.getElementById("mynetwork");
|
|
// var currWidth = myImg.clientWidth;
|
|
// if (currWidth == 50) {
|
|
// alert("Maximum zoom-out level reached.");
|
|
// } else {
|
|
// myImg.style.width = (currWidth - 50) + "px";
|
|
// }
|
|
//}
|
|
|
|
function disableFiberService() {
|
|
isAddEdge = 0;
|
|
isAddService = 0;
|
|
addEdgeData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
addServiceData = {
|
|
from: '',
|
|
to: ''
|
|
};
|
|
}
|
|
|
|
function generateMatrix() {
|
|
$("#matrixDiv").empty();
|
|
var nodearray = nodes.get();
|
|
if (nodearray.length > 0) {
|
|
|
|
//$("#matrixDiv").append(table);
|
|
|
|
var tblheader = "";
|
|
var tblrow = "";
|
|
var ric = 2;
|
|
var ris = 2;
|
|
|
|
for (var i = 0; i < nodearray.length; i++) {
|
|
|
|
// let rdynamicid = "r1_" + rid;
|
|
let firstrowid = "r1_" + ric;
|
|
var hiddenField = "<input id=h" + firstrowid + " value=" + nodearray[i].id + " type=hidden />";
|
|
tblheader += "<th id=" + firstrowid + ">" + nodearray[i].label + " " + hiddenField + "</th>";
|
|
rdynamicid = "r" + ris + "_1";
|
|
|
|
var hiddenFieldL = "<input id=h" + rdynamicid + " value=" + nodearray[i].id + " type=hidden />";
|
|
tblrow += "<tr><td id=" + rdynamicid + ">" + nodearray[i].label + " " + hiddenFieldL + "</td>" + addEmptyRC(nodearray.length, "r" + ris + "_", i, nodearray[i].id) + "</tr>";
|
|
|
|
ric++;
|
|
ris++;
|
|
|
|
}
|
|
//$("#matrixDiv").append(tblheader);
|
|
//$("#matrixDiv").append(tblrow);
|
|
// tblheader += "</tr>";
|
|
//tblrow += "";
|
|
//table += tblheader+tblrow+"</table>"
|
|
var table = "<table id='matrixTable'><tr><th id=r1_1></th>" + tblheader + "</tr>" + tblrow + "</table>"
|
|
$("#matrixDiv").append(table);
|
|
console.log(multiarr);
|
|
|
|
$('#matrixTable tr td').click(function () {
|
|
var cid = $(this).attr('id');
|
|
|
|
if (cid == undefined) {
|
|
return;
|
|
}
|
|
|
|
var arsplit = cid.split('_');
|
|
var sfirst = "#h" + arsplit[0] + "_1";
|
|
var ssecond = "#hr" + arsplit[1] + "_1";
|
|
var txtFrom = $(sfirst).val();
|
|
var txtTo = $(ssecond).val();
|
|
var otherDir = "#r" + arsplit[1] + "_" + arsplit[0].replace('r', '');
|
|
//console.log('cond ',txtFrom, txtTo);
|
|
if ($(this).text() == 'yes') {
|
|
|
|
var confirmation = confirm('are you sure , want to remove ?')
|
|
if (confirmation) {
|
|
var edgesarr = edges.get();
|
|
for (var i = 0; i < edgesarr.length; i++) {
|
|
|
|
//console.log(edgesarr[i].from, edgesarr[i].to);
|
|
//alert('edgefrom - '+edgesarr[i].from +', txtfrom - '+ txtFrom +', edgeto - '+ edgesarr[i].to +', txtTo - '+ txtTo);
|
|
if ((edgesarr[i].from == txtFrom && edgesarr[i].to == txtTo) || (edgesarr[i].from == txtTo && edgesarr[i].to == txtFrom)) {
|
|
//console.log('condition',edgesarr[i].from, edgesarr[i].to);
|
|
network.body.data.edges.remove(edgesarr[i].id)
|
|
//alert('fiber removed');
|
|
$(this).text('X');
|
|
$(otherDir).text('X');
|
|
$(this).removeClass('tdback');
|
|
$(otherDir).removeClass('tdback');
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
else
|
|
return;
|
|
}
|
|
|
|
//alert(cid);
|
|
//alert(sfirst + ', ' + ssecond);
|
|
$(this).text('yes');
|
|
$(otherDir).text('yes');
|
|
|
|
$(this).addClass('tdback');
|
|
$(otherDir).addClass('tdback');
|
|
|
|
var labelvalue = '[' + nodes.get(txtFrom).label + ' - ' + nodes.get(txtTo).label + ']';
|
|
network.body.data.edges.add({
|
|
id: token(), from: txtFrom, to: txtTo, label: labelvalue, font: { align: 'top' },
|
|
componentType: "edge"
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
$("#myModal").show();
|
|
}
|
|
|
|
|
|
|
|
function closemodal() {
|
|
$("#myModal").hide();
|
|
}
|
|
|
|
var multiarr = [];
|
|
function addEmptyRC(numberofRC, dyid, restrictRC, nodeid) {
|
|
var emptycol = "";
|
|
var ldid = 2;
|
|
var localnodearray = nodes.get();
|
|
for (var i = 0; i < numberofRC; i++) {
|
|
if (i == restrictRC)
|
|
emptycol += "<td></td>";
|
|
else {
|
|
let cll = restrictRC + '_' + i;
|
|
//var spanEle = "<Span id=" + cll + ">X</Span>";
|
|
let roid = dyid + ldid;
|
|
//var nodecol = network.getConnectedEdges(nodeid);
|
|
//var noderow = network.getConnectedEdges(localnodearray[i].id);
|
|
//console.log(nodeid, nodeEdgeLength.length)
|
|
//alert(nodecol.length + ', ' + noderow.length);
|
|
//console.log(nodecol.length + ', ' + noderow.length);
|
|
|
|
//console.log(checkfiberconnection(nodeid, localnodearray[i].id));
|
|
|
|
|
|
if (checkfiberconnection(nodeid, localnodearray[i].id))
|
|
emptycol += "<td style='cursor:pointer;' class='tdback' id=" + roid + ">yes</td>";
|
|
else
|
|
emptycol += "<td style='cursor:pointer;' id=" + roid + ">X</td>";
|
|
|
|
//var arrmultidata = nodeid + ',' + localnodearray[i].id;
|
|
//multiarr.push(arrmultidata);
|
|
}
|
|
|
|
ldid++;
|
|
}
|
|
return emptycol;
|
|
}
|
|
|
|
function checkfiberconnection(fromNode, toNode) {
|
|
var edgesarr = edges.get();
|
|
var flag = false;
|
|
for (var i = 0; i < edgesarr.length; i++) {
|
|
//console.log(edgesarr[i].from, edgesarr[i].to);
|
|
//alert('edgefrom - '+edgesarr[i].from +', txtfrom - '+ txtFrom +', edgeto - '+ edgesarr[i].to +', txtTo - '+ txtTo);
|
|
if ((edgesarr[i].from == fromNode && edgesarr[i].to == toNode) || (edgesarr[i].from == toNode && edgesarr[i].to == fromNode)) {
|
|
flag = true;
|
|
return true;
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
function getAllNode() {
|
|
$("#nodeDiv").empty();
|
|
var nodelist = nodes.get();
|
|
for (var i = 0; i < nodelist.length; i++) {
|
|
|
|
var topnode = "<button class='accordion'>"+nodelist[i].label+"</button>"
|
|
$("#nodeDiv").append(topnode);
|
|
var connodelist = network.getConnectedNodes(nodelist[i].id);
|
|
var spannode = "";
|
|
for (var j = 0; j < connodelist.length; j++) {
|
|
spannode += "<p style='padding-left:10px;'>" + nodes.get(connodelist[j]).label + "</p>";
|
|
|
|
}
|
|
spannode = "<div class='panel'>Connected Nodes : <br /><br />" + spannode + "</div>"
|
|
$("#nodeDiv").append(spannode);
|
|
}
|
|
$("#nodeModal").show();
|
|
|
|
var acc = document.getElementsByClassName("accordion");
|
|
var i;
|
|
|
|
for (i = 0; i < acc.length; i++) {
|
|
acc[i].addEventListener("click", function () {
|
|
this.classList.toggle("active");
|
|
var panel = this.nextElementSibling;
|
|
if (panel.style.display === "block") {
|
|
panel.style.display = "none";
|
|
} else {
|
|
panel.style.display = "block";
|
|
}
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
function closenodemodal() {
|
|
$("#nodeModal").hide();
|
|
} |