diff --git a/assets/cn_default.js b/assets/cn_default.js index f165d7f0c88391422d56f9b002a0354ead4b5cad..a40d75c8caae452806d0c22b4d60583db75027cd 100644 --- a/assets/cn_default.js +++ b/assets/cn_default.js @@ -106,7 +106,7 @@ legend_arrow.append("text") .attr("y", 10) .attr("dy", ".35em") .style("text-anchor", "start") - .text(function(d,i){return arrow_group_names[i]}); + .text(function(d,i) {return arrow_group_names[i]}); /** * creates a new simulation @@ -155,13 +155,13 @@ function failure(graph) { * checks at a fixed interval whether the contents of the JSON file have changed and reloads the program if necessary */ -var intervalId = window.setInterval(check_if_json_changed, 5000) +var intervalId = window.setInterval(check_if_json_changed, 1000) function check_if_json_changed() { d3.json("json_text.json").then(function(graph) { newjson_string = JSON.stringify(graph) var newjson = CryptoJS.MD5(newjson_string).toString(); oldjson=localStorage.getItem("oldjson") - if(newjson !== oldjson){ + if(newjson !== oldjson) { localStorage.setItem("oldjson", newjson); window.location.reload() } @@ -221,7 +221,7 @@ function update_nodes(nodes) { node.append("circle") .attr("class", "circle") .attr("r", function(d) {return 1.5*r+d.citations*0.15}) - .style("fill", function(d){ return color(d.group)}) + .style("fill", function(d) {return color(d.group)}) .on('click', click_node); node.append("text") @@ -264,7 +264,7 @@ function update_marker(color, target) { function click_node(node) { d3.select(this.parentNode).raise(); fix_nodes(node); - if(to_remove){ + if(to_remove) { d3.select(to_remove).selectAll(".circle").style("stroke","none") } to_remove = this.parentNode; @@ -415,10 +415,10 @@ function dragged_node(node) { */ function fix_nodes(this_node) { node.each(function(d) { - if (this_node != d) { - d.fx = d.x; - d.fy = d.y; - } + if (this_node != d) { + d.fx = d.x; + d.fy = d.y; + } }); } @@ -440,8 +440,7 @@ function zoom_to_graph() { perc_y = height/(node_bounds.height+100); zoom_perc = d3.min([perc_x, perc_y]) - d3.select('svg') - .call(zoom.scaleBy, zoom_perc); + d3.select('svg').call(zoom.scaleBy, zoom_perc); } /** @@ -450,99 +449,97 @@ function zoom_to_graph() { function reset_view() { d3.select('svg') .call(zoom.scaleTo, 1) - d3.select('svg') - .call(zoom.translateTo, 0.5 * width, 0.5 * height); - d3.select('svg') - .call(zoom.scaleBy, zoom_perc); + .call(zoom.translateTo, 0.5 * width, 0.5 * height) + .call(zoom.scaleBy, zoom_perc); } /** -* save svg as png +* saves svg as png */ -function save_svg(){ - var svgString = get_svg_string(svg.node()); - svg_string_to_image(svgString, 2*width, 2*height, 'png', save); // passes Blob and filesize String to the callback +function save_svg() { + var svgString = get_svg_string(svg.node()); + svg_string_to_image(svgString, 2*width, 2*height, 'png', save); // passes Blob and filesize String to the callback - function save( dataBlob, filesize ){ - saveAs(dataBlob, 'D3 vis exported to PNG.png'); // FileSaver.js function - } + function save( dataBlob, filesize ) { + saveAs(dataBlob, 'D3 vis exported to PNG.png'); // FileSaver.js function + } }; /** -* generate svgString +* generates svgString * @param {object} svgNode - node */ function get_svg_string(svgNode) { - svgNode.setAttribute('xlink', 'http://www.w3.org/1999/xlink'); - var cssStyleText = get_css_styles(svgNode); - append_css(cssStyleText, svgNode); - - var serializer = new XMLSerializer(); - var svgString = serializer.serializeToString(svgNode); - svgString = svgString.replace(/(\w+)?:?xlink=/g, 'xmlns:xlink='); // Fix root xlink without namespace - svgString = svgString.replace(/NS\d+:href/g, 'xlink:href'); // Safari NS namespace fix - - return svgString; - - function get_css_styles(parentElement) { - var selectorTextArr = []; - - // Add Parent element Id and Classes to the list - selectorTextArr.push('#' + parentElement.id); - for (var c = 0; c < parentElement.classList.length; c++) - if (!contains('.'+parentElement.classList[c], selectorTextArr)) - selectorTextArr.push('.'+parentElement.classList[c]); - - // Add Children element Ids and Classes to the list - var nodes = parentElement.getElementsByTagName("*"); - for (var i = 0; i < nodes.length; i++) { - var id = nodes[i].id; - if (!contains('#'+id, selectorTextArr)) - selectorTextArr.push('#' + id); - - var classes = nodes[i].classList; - for (var c = 0; c < classes.length; c++) - if (!contains('.'+classes[c], selectorTextArr)) - selectorTextArr.push('.'+classes[c]); - } - - // Extract CSS Rules - var extractedCSSText = ""; - for (var i = 0; i < document.styleSheets.length; i++) { - var s = document.styleSheets[i]; - - try { - if(!s.cssRules) continue; - } + svgNode.setAttribute('xlink', 'http://www.w3.org/1999/xlink'); + var cssStyleText = get_css_styles(svgNode); + append_css(cssStyleText, svgNode); + + var serializer = new XMLSerializer(); + var svgString = serializer.serializeToString(svgNode); + svgString = svgString.replace(/(\w+)?:?xlink=/g, 'xmlns:xlink='); // Fix root xlink without namespace + svgString = svgString.replace(/NS\d+:href/g, 'xlink:href'); // Safari NS namespace fix + + return svgString; + + function get_css_styles(parentElement) { + var selectorTextArr = []; + + // Add Parent element Id and Classes to the list + selectorTextArr.push('#' + parentElement.id); + for (var c = 0; c < parentElement.classList.length; c++) + if (!contains('.'+parentElement.classList[c], selectorTextArr)) + selectorTextArr.push('.'+parentElement.classList[c]); + + // Add Children element Ids and Classes to the list + var nodes = parentElement.getElementsByTagName("*"); + for (var i = 0; i < nodes.length; i++) { + var id = nodes[i].id; + if (!contains('#'+id, selectorTextArr)) + selectorTextArr.push('#' + id); + + var classes = nodes[i].classList; + for (var c = 0; c < classes.length; c++) + if (!contains('.'+classes[c], selectorTextArr)) + selectorTextArr.push('.'+classes[c]); + } + + // Extract CSS Rules + var extractedCSSText = ""; + for (var i = 0; i < document.styleSheets.length; i++) { + var s = document.styleSheets[i]; + + try { + if(!s.cssRules) continue; + } catch(e) { - if(e.name !== 'SecurityError') throw e; // for Firefox - continue; - } - - var cssRules = s.cssRules; - for (var r = 0; r < cssRules.length; r++) { - if (contains(cssRules[r].selectorText, selectorTextArr)) - extractedCSSText += cssRules[r].cssText; - } - } - return extractedCSSText; - - function contains(str,arr) { - return arr.indexOf(str) === -1 ? false : true; - } - } - - function append_css(cssText, element) { - var styleElement = document.createElement("style"); - styleElement.setAttribute("type","text/css"); - styleElement.innerHTML = cssText; - var refNode = element.hasChildNodes() ? element.children[0] : null; - element.insertBefore(styleElement, refNode); - } + if(e.name !== 'SecurityError') throw e; // for Firefox + continue; + } + + var cssRules = s.cssRules; + for (var r = 0; r < cssRules.length; r++) { + if (contains(cssRules[r].selectorText, selectorTextArr)) + extractedCSSText += cssRules[r].cssText; + } + } + return extractedCSSText; + + function contains(str,arr) { + return arr.indexOf(str) === -1 ? false : true; + } + } + + function append_css(cssText, element) { + var styleElement = document.createElement("style"); + styleElement.setAttribute("type","text/css"); + styleElement.innerHTML = cssText; + var refNode = element.hasChildNodes() ? element.children[0] : null; + element.insertBefore(styleElement, refNode); + } } /** -* convert svgString to image and export it +* converts svgString to image and export it * @param {object} svgString - svgString * @param {object} width - width of image * @param {object} height - height of image @@ -550,25 +547,25 @@ function get_svg_string(svgNode) { * @param {object} callback - callback function */ function svg_string_to_image( svgString, width, height, format, callback ) { - var format = format ? format : 'png'; + var format = format ? format : 'png'; - var imgsrc = 'data:image/svg+xml;base64,'+ btoa(unescape(encodeURIComponent(svgString))); // Convert SVG string to data URL + var imgsrc = 'data:image/svg+xml;base64,'+ btoa(unescape(encodeURIComponent(svgString))); // Convert SVG string to data URL - var canvas = document.createElement("canvas"); - var context = canvas.getContext("2d"); + var canvas = document.createElement("canvas"); + var context = canvas.getContext("2d"); - canvas.width = width; - canvas.height = height; + canvas.width = width; + canvas.height = height; - var image = new Image(); - image.onload = function() { - context.clearRect(0, 0, width, height); - context.drawImage(image, 0, 0, width, height); + var image = new Image(); + image.onload = function() { + context.clearRect(0, 0, width, height); + context.drawImage(image, 0, 0, width, height); - canvas.toBlob(function(blob) { - var filesize = Math.round(blob.length/1024) + ' KB'; - if (callback) callback(blob, filesize); - }); - }; - image.src = imgsrc; -} \ No newline at end of file + canvas.toBlob(function(blob) { + var filesize = Math.round(blob.length/1024) + ' KB'; + if (callback) callback(blob, filesize); + }); + }; + image.src = imgsrc; +} diff --git a/assets/cn_timeline.js b/assets/cn_timeline.js index f51e1bab60fd215a89758905d72e18d1f86eb5a1..176d323f4768fb54e58f7159fda5194941a42de1 100644 --- a/assets/cn_timeline.js +++ b/assets/cn_timeline.js @@ -106,7 +106,7 @@ legend_arrow.append("text") .attr("y", 10) .attr("dy", ".35em") .style("text-anchor", "start") - .text(function(d,i){return arrow_group_names[i]}); + .text(function(d,i) {return arrow_group_names[i]}); /** * creates a new simulation @@ -171,13 +171,13 @@ function failure(graph) { * checks at a fixed interval whether the contents of the JSON file have changed and reloads the program if necessary */ -var intervalId = window.setInterval(check_if_json_changed, 5000) +var intervalId = window.setInterval(check_if_json_changed, 1000) function check_if_json_changed() { d3.json("json_text.json").then(function(graph) { newjson_string = JSON.stringify(graph) var newjson = CryptoJS.MD5(newjson_string).toString(); oldjson=localStorage.getItem("oldjson") - if(newjson !== oldjson){ + if(newjson !== oldjson) { localStorage.setItem("oldjson", newjson); window.location.reload() } @@ -256,7 +256,7 @@ function update_nodes(nodes) { node.append("circle") .attr("class", "circle") .attr("r", function(d) {return 1.5*r+d.citations*0.15}) - .style("fill", function(d){ return color(d.group)}) + .style("fill", function(d) {return color(d.group)}) .on('click', click_node); node.append("text") @@ -299,7 +299,7 @@ function update_marker(color, target) { function click_node(node) { d3.select(this.parentNode).raise(); fix_nodes(node); - if(to_remove){ + if(to_remove) { d3.select(to_remove).selectAll(".circle").style("stroke","none") } to_remove = this.parentNode; @@ -448,10 +448,10 @@ function dragged_node(node) { */ function fix_nodes(this_node) { node.each(function(d) { - if (this_node != d) { - d.fx = d.x; - d.fy = d.y; - } + if (this_node != d) { + d.fx = d.x; + d.fy = d.y; + } }); } @@ -475,8 +475,7 @@ function zoom_to_graph() { perc_y = height/(node_bounds.height+100); zoom_perc = d3.min([perc_x, perc_y]) - d3.select('svg') - .call(zoom.scaleBy, zoom_perc); + d3.select('svg').call(zoom.scaleBy, zoom_perc); } /** @@ -485,99 +484,97 @@ function zoom_to_graph() { function reset_view() { d3.select('svg') .call(zoom.scaleTo, 1) - d3.select('svg') - .call(zoom.translateTo, 0.5 * width, 0.5 * height); - d3.select('svg') - .call(zoom.scaleBy, zoom_perc); + .call(zoom.translateTo, 0.5 * width, 0.5 * height) + .call(zoom.scaleBy, zoom_perc); } /** -* save svg as png +* saves svg as png */ -function save_svg(){ - var svgString = get_svg_string(svg.node()); - svg_string_to_image(svgString, 2*width, 2*height, 'png', save); // passes Blob and filesize String to the callback +function save_svg() { + var svgString = get_svg_string(svg.node()); + svg_string_to_image(svgString, 2*width, 2*height, 'png', save); // passes Blob and filesize String to the callback - function save( dataBlob, filesize ){ - saveAs(dataBlob, 'D3 vis exported to PNG.png'); // FileSaver.js function - } + function save( dataBlob, filesize ) { + saveAs(dataBlob, 'D3 vis exported to PNG.png'); // FileSaver.js function + } }; /** -* generate svgString +* generates svgString * @param {object} svgNode - node */ function get_svg_string(svgNode) { - svgNode.setAttribute('xlink', 'http://www.w3.org/1999/xlink'); - var cssStyleText = get_css_styles(svgNode); - append_css(cssStyleText, svgNode); - - var serializer = new XMLSerializer(); - var svgString = serializer.serializeToString(svgNode); - svgString = svgString.replace(/(\w+)?:?xlink=/g, 'xmlns:xlink='); // Fix root xlink without namespace - svgString = svgString.replace(/NS\d+:href/g, 'xlink:href'); // Safari NS namespace fix - - return svgString; - - function get_css_styles(parentElement) { - var selectorTextArr = []; - - // Add Parent element Id and Classes to the list - selectorTextArr.push('#' + parentElement.id); - for (var c = 0; c < parentElement.classList.length; c++) - if (!contains('.'+parentElement.classList[c], selectorTextArr)) - selectorTextArr.push('.'+parentElement.classList[c]); - - // Add Children element Ids and Classes to the list - var nodes = parentElement.getElementsByTagName("*"); - for (var i = 0; i < nodes.length; i++) { - var id = nodes[i].id; - if (!contains('#'+id, selectorTextArr)) - selectorTextArr.push('#' + id); - - var classes = nodes[i].classList; - for (var c = 0; c < classes.length; c++) - if (!contains('.'+classes[c], selectorTextArr)) - selectorTextArr.push('.'+classes[c]); - } - - // Extract CSS Rules - var extractedCSSText = ""; - for (var i = 0; i < document.styleSheets.length; i++) { - var s = document.styleSheets[i]; - - try { - if(!s.cssRules) continue; - } + svgNode.setAttribute('xlink', 'http://www.w3.org/1999/xlink'); + var cssStyleText = get_css_styles(svgNode); + append_css(cssStyleText, svgNode); + + var serializer = new XMLSerializer(); + var svgString = serializer.serializeToString(svgNode); + svgString = svgString.replace(/(\w+)?:?xlink=/g, 'xmlns:xlink='); // Fix root xlink without namespace + svgString = svgString.replace(/NS\d+:href/g, 'xlink:href'); // Safari NS namespace fix + + return svgString; + + function get_css_styles(parentElement) { + var selectorTextArr = []; + + // Add Parent element Id and Classes to the list + selectorTextArr.push('#' + parentElement.id); + for (var c = 0; c < parentElement.classList.length; c++) + if (!contains('.'+parentElement.classList[c], selectorTextArr)) + selectorTextArr.push('.'+parentElement.classList[c]); + + // Add Children element Ids and Classes to the list + var nodes = parentElement.getElementsByTagName("*"); + for (var i = 0; i < nodes.length; i++) { + var id = nodes[i].id; + if (!contains('#'+id, selectorTextArr)) + selectorTextArr.push('#' + id); + + var classes = nodes[i].classList; + for (var c = 0; c < classes.length; c++) + if (!contains('.'+classes[c], selectorTextArr)) + selectorTextArr.push('.'+classes[c]); + } + + // Extract CSS Rules + var extractedCSSText = ""; + for (var i = 0; i < document.styleSheets.length; i++) { + var s = document.styleSheets[i]; + + try { + if(!s.cssRules) continue; + } catch(e) { - if(e.name !== 'SecurityError') throw e; // for Firefox - continue; - } - - var cssRules = s.cssRules; - for (var r = 0; r < cssRules.length; r++) { - if (contains(cssRules[r].selectorText, selectorTextArr)) - extractedCSSText += cssRules[r].cssText; - } - } - return extractedCSSText; - - function contains(str,arr) { - return arr.indexOf(str) === -1 ? false : true; - } - } - - function append_css(cssText, element) { - var styleElement = document.createElement("style"); - styleElement.setAttribute("type","text/css"); - styleElement.innerHTML = cssText; - var refNode = element.hasChildNodes() ? element.children[0] : null; - element.insertBefore(styleElement, refNode); - } + if(e.name !== 'SecurityError') throw e; // for Firefox + continue; + } + + var cssRules = s.cssRules; + for (var r = 0; r < cssRules.length; r++) { + if (contains(cssRules[r].selectorText, selectorTextArr)) + extractedCSSText += cssRules[r].cssText; + } + } + return extractedCSSText; + + function contains(str,arr) { + return arr.indexOf(str) === -1 ? false : true; + } + } + + function append_css(cssText, element) { + var styleElement = document.createElement("style"); + styleElement.setAttribute("type","text/css"); + styleElement.innerHTML = cssText; + var refNode = element.hasChildNodes() ? element.children[0] : null; + element.insertBefore(styleElement, refNode); + } } /** -* convert svgString to image and export it +* converts svgString to image and export it * @param {object} svgString - svgString * @param {object} width - width of image * @param {object} height - height of image @@ -585,25 +582,25 @@ function get_svg_string(svgNode) { * @param {object} callback - callback function */ function svg_string_to_image( svgString, width, height, format, callback ) { - var format = format ? format : 'png'; + var format = format ? format : 'png'; - var imgsrc = 'data:image/svg+xml;base64,'+ btoa(unescape(encodeURIComponent(svgString))); // Convert SVG string to data URL + var imgsrc = 'data:image/svg+xml;base64,'+ btoa(unescape(encodeURIComponent(svgString))); // Convert SVG string to data URL - var canvas = document.createElement("canvas"); - var context = canvas.getContext("2d"); + var canvas = document.createElement("canvas"); + var context = canvas.getContext("2d"); - canvas.width = width; - canvas.height = height; + canvas.width = width; + canvas.height = height; - var image = new Image(); - image.onload = function() { - context.clearRect(0, 0, width, height); - context.drawImage(image, 0, 0, width, height); + var image = new Image(); + image.onload = function() { + context.clearRect(0, 0, width, height); + context.drawImage(image, 0, 0, width, height); - canvas.toBlob(function(blob) { - var filesize = Math.round(blob.length/1024) + ' KB'; - if (callback) callback(blob, filesize); - }); - }; - image.src = imgsrc; -} \ No newline at end of file + canvas.toBlob(function(blob) { + var filesize = Math.round(blob.length/1024) + ' KB'; + if (callback) callback(blob, filesize); + }); + }; + image.src = imgsrc; +}