|
|
|
|
|
|
|
|
|
|
|
var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); |
|
|
|
|
|
sigma.publicPrototype.parseJson = function(gzippedJsonPath, callback) { |
|
var sigmaInstance = this; |
|
|
|
|
|
var xhr = new XMLHttpRequest(); |
|
xhr.open('GET', gzippedJsonPath, true); |
|
xhr.responseType = 'arraybuffer'; |
|
|
|
xhr.onload = function() { |
|
if (xhr.status === 200) { |
|
try { |
|
|
|
var inflatedData = pako.inflate(new Uint8Array(xhr.response)); |
|
|
|
|
|
var jsonString = new TextDecoder('utf-8').decode(inflatedData); |
|
|
|
|
|
var jsonData = JSON.parse(jsonString); |
|
|
|
|
|
for (var i = 0; i < jsonData.nodes.length; i++) { |
|
var id = jsonData.nodes[i].id; |
|
sigmaInstance.addNode(id, jsonData.nodes[i]); |
|
} |
|
|
|
|
|
for (var j = 0; j < jsonData.edges.length; j++) { |
|
var edgeNode = jsonData.edges[j]; |
|
var source = edgeNode.source; |
|
var target = edgeNode.target; |
|
var label = edgeNode.label; |
|
var eid = edgeNode.id; |
|
|
|
sigmaInstance.addEdge(eid, source, target, edgeNode); |
|
} |
|
|
|
|
|
if (callback) { |
|
callback.call(sigmaInstance); |
|
} |
|
} catch (error) { |
|
console.error("Error processing gzipped JSON:", error); |
|
} |
|
} else { |
|
console.error("Error fetching gzipped JSON. Status:", xhr.status); |
|
} |
|
}; |
|
|
|
xhr.onerror = function() { |
|
console.error("Network error while fetching gzipped JSON"); |
|
}; |
|
|
|
xhr.send(); |
|
}; |
|
|
|
|
|
|
|
|
|
var loadGzippedGraphData = function(gzippedJsonPath, callback) { |
|
|
|
var xhr = new XMLHttpRequest(); |
|
xhr.open('GET', gzippedJsonPath, true); |
|
xhr.responseType = 'arraybuffer'; |
|
|
|
xhr.onload = function() { |
|
if (xhr.status === 200) { |
|
try { |
|
|
|
var inflatedData = pako.inflate(new Uint8Array(xhr.response)); |
|
|
|
|
|
var jsonString; |
|
try { |
|
jsonString = new TextDecoder('utf-8').decode(inflatedData); |
|
} catch (e) { |
|
|
|
jsonString = ""; |
|
var array = inflatedData; |
|
var i = 0, len = array.length; |
|
var c, char2, char3; |
|
|
|
while (i < len) { |
|
c = array[i++]; |
|
switch (c >> 4) { |
|
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: |
|
|
|
jsonString += String.fromCharCode(c); |
|
break; |
|
case 12: case 13: |
|
|
|
char2 = array[i++]; |
|
jsonString += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); |
|
break; |
|
case 14: |
|
|
|
char2 = array[i++]; |
|
char3 = array[i++]; |
|
jsonString += String.fromCharCode(((c & 0x0F) << 12) | |
|
((char2 & 0x3F) << 6) | |
|
((char3 & 0x3F) << 0)); |
|
break; |
|
} |
|
} |
|
} |
|
|
|
|
|
var jsonData = JSON.parse(jsonString); |
|
|
|
|
|
if (callback) { |
|
callback(jsonData); |
|
} |
|
} catch (error) { |
|
console.error("Error processing gzipped JSON:", error); |
|
if (callback) { |
|
callback(null, error); |
|
} |
|
} |
|
} else { |
|
console.error("Error fetching gzipped JSON. Status:", xhr.status); |
|
if (callback) { |
|
callback(null, new Error("HTTP status: " + xhr.status)); |
|
} |
|
} |
|
}; |
|
|
|
xhr.onerror = function() { |
|
console.error("Network error while fetching gzipped JSON"); |
|
if (callback) { |
|
callback(null, new Error("Network error")); |
|
} |
|
}; |
|
|
|
xhr.send(); |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
function initSigmaWithGzippedData(containerId, gzippedJsonPath, options, callbackFn) { |
|
|
|
if (typeof options === 'function') { |
|
callbackFn = options; |
|
options = {}; |
|
} |
|
|
|
options = options || {}; |
|
|
|
|
|
if (isSafari) { |
|
|
|
loadGzippedGraphData(gzippedJsonPath, function(data, error) { |
|
if (error || !data) { |
|
console.error("Failed to load graph data:", error); |
|
return; |
|
} |
|
|
|
|
|
jQuery(document).ready(function() { |
|
|
|
var container = document.getElementById(containerId); |
|
if (!container) { |
|
console.error("Container not found:", containerId); |
|
return; |
|
} |
|
|
|
|
|
if (!container.offsetWidth || !container.offsetHeight) { |
|
container.style.width = container.style.width || "100%"; |
|
container.style.height = container.style.height || "500px"; |
|
container.style.display = "block"; |
|
} |
|
|
|
|
|
requestAnimationFrame(function() { |
|
|
|
var sigmaSettings = Object.assign({}, options); |
|
|
|
|
|
setTimeout(function() { |
|
try { |
|
|
|
var sigmaInstance = new sigma(containerId); |
|
|
|
|
|
for (var i = 0; i < data.nodes.length; i++) { |
|
var id = data.nodes[i].id; |
|
sigmaInstance.addNode(id, data.nodes[i]); |
|
} |
|
|
|
for (var j = 0; j < data.edges.length; j++) { |
|
var edgeNode = data.edges[j]; |
|
var source = edgeNode.source; |
|
var target = edgeNode.target; |
|
var label = edgeNode.label || ""; |
|
var eid = edgeNode.id; |
|
|
|
sigmaInstance.addEdge(eid, source, target, edgeNode); |
|
} |
|
|
|
|
|
sigmaInstance.refresh(); |
|
|
|
|
|
if (callbackFn) { |
|
callbackFn(sigmaInstance); |
|
} |
|
} catch (e) { |
|
console.error("Error initializing sigma:", e); |
|
} |
|
}, 300); |
|
}); |
|
}); |
|
}); |
|
} else { |
|
|
|
jQuery(document).ready(function() { |
|
try { |
|
var sigmaInstance = new sigma(containerId); |
|
sigmaInstance.parseGzippedJson(gzippedJsonPath, function() { |
|
this.refresh(); |
|
if (callbackFn) callbackFn(this); |
|
}); |
|
} catch (e) { |
|
console.error("Error initializing sigma:", e); |
|
} |
|
}); |
|
} |
|
} |