{"version":3,"sources":["portfolio.js"],"names":["data","graph","getLabelAttribute","node","getNodeLabel","label","getNodeYear","n","length","substr","match","getDisplayAttr","attr","replace","jsonLdToGraph","nodeId","nodes","links","i","nodeAttr","Array","isArray","key","currentId","name","Object","keys","source","target","nodeMap","linkMap","breadcrumbs","weights","requestPromise","fetch","then","r","json","rankingPromise","dx","dy","dxAbs","Math","abs","values","dyAbs","pow","_iteratorNormalCompletion","_didIteratorError","_iteratorError","undefined","_step","_iterator","Symbol","iterator","next","done","link","value","id","err","return","Promise","hasOwnProperty","startGraph","nodeSize","selectedNodeSize","firstNodeId","getSizeForNode","min","createBreadcrumbs","srcId","crumbs","newNextIds","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","nextIds","newPath","slice","push","nextSrcIds","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","concat","nodePositions","nodeIdx","currentNodePositionRadius","type","types","document","showMoreTypeLinksEl","getElementById","moreTypeLinksEl","typeCounts","map","sort","first","second","typeCountIdx","typeName","typeLinkEl","createElement","typeLinkAEl","typeLinkCountEl","add","title","addEventListener","centerByType","typeNodeEls","getElementsByClassName","_iteratorNormalCompletion7","_didIteratorError7","_iteratorError7","_step7","_iterator7","createBreadcrumbLayer","_iteratorNormalCompletion8","_didIteratorError8","_iteratorError8","_step8","_iterator8","classList","remove","append","typeLinksEl","appendChild","_loop","body","e","preventDefault","stopPropagation","removeEventListener","hideMoreTypeLinks","getViewbox","svg","split","parseFloat","positionNodesInCenter","idxs","setViewboxForceCenter","_typeof","positionNodesInCircle","forceCx","forceCy","each","d","nIdx","nodeEls","simulation","alpha","relNode","el","titleEl","innerHTML","idx","indexOf","selectNode","typeEl","scrollToY","nodeDetailEl","lastChild","relUp","restart","nodeDetailScalerEl","getZoomValues","drag","viewBox","width","window","innerWidth","clientX","max","nodeDetails","breadcrumbsEl","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_step4","_iterator4","crumbNodeId","crumbEl","nodeYear","updateHistory","crumbWrapEl","pageTitles","_loop2","nodeDatum","titleAttr","deselectNode","history","pushState","replaceState","selectedNodeTransition","skipNodeAttributes","listEl","setDetails","hasChildNodes","removeChild","poster","videoType","valueHtml","relsEl","relDown","a","b","rel","createRelationshipEl","ddEl","attrEl","join","createLinkMap","d3","forceLink","strength","force","forceManyBody","container","selectAll","enter","l","linkLine","linkText","slashpos","baseClasses","lastIndexOf","typeNodeEl","height","zoom","forceSimulation","forceCollide","cos","stepSize","transition","ease","easeLinear","currentCrumbs","linkedIdxs","nodeEl","linkEls","getElementsByTagName","setAttribute","filter","fnodeIdx","classed","posTrg","posSrc","event","state","firstNode","find","closeDetails","transform","baseVal","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_step5","_iterator5","zoomContainer","SVGTransform","SVG_TRANSFORM_TRANSLATE","matrix","f","SVG_TRANSFORM_SCALE","scale","k","fx","fy","graphInitialised","startsWith","vy","vx","x","y","inCircle","random","call","textLength","self","on","active","alphaTarget","select","q","hoverLinkEls","scaleExtent","c","text","nodePath","textLength2","this","titleText","titleTexts","startX","splitPosChar","_iteratorNormalCompletion6","_didIteratorError6","_iteratorError6","_step6","_iterator6","char","mid","tmid","splitPos","text1","trim","splitText","textLength1","tspan","getComputedTextLength","forEach","leftX","rightX","targetX","sourceX","isCircle","midX","angle","atan2","srcSize","tgtSize","sin","nodeTitle","targetY","sourceY","PI","isNaN","distance","location","pathname","t","startNodeId","search","setTimeout","requestAnimationFrame","callback","speed","easing","finishFunction","currentTime","time","scrollY","scrollTargetY","easingEquations","pos","easeInOutQuint","deg","p","reqAnimFrame","tick","scrollTo"],"mappings":"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","file":"portfolio.min.js","sourcesContent":["var data;\n\nfunction getLabelAttribute(node) {\n if(typeof node['https://schema.org/name'] !== \"undefined\"){\n return 'https://schema.org/name';\n }\n switch (node['@type']) {\n case \"https://schema.org/WebSite\":\n if(typeof node['https://schema.org/url'] !== \"undefined\") {return 'https://schema.org/url';}\n break;\n case \"https://schema.org/ImageObject\":\n if(typeof node['https://schema.org/caption'] !== \"undefined\") {return 'https://schema.org/caption';}\n if(typeof node['https://schema.org/contentUrl'] !== \"undefined\") {return 'https://schema.org/contentUrl';}\n break;\n case \"https://schema.org/PostalAddress\":\n if(typeof node['https://schema.org/addressLocality'] !== \"undefined\") {return 'https://schema.org/addressLocality';}\n break;\n case \"https://schema.org/OrganizationRole\":\n if (typeof node['https://schema.org/roleName'] !== \"undefined\") {\n return 'https://schema.org/roleName';\n }\n break;\n }\n return '@id';\n}\nfunction getNodeLabel(node){\n let labelAttr = getLabelAttribute(node);\n let label = node[labelAttr];\n if(typeof label == \"undefined\") label = node[\"@id\"];\n if(typeof label == \"undefined\") label = \"\";\n return label;\n}\nfunction getNodeYear(n){\n if(typeof n['https://schema.org/dateCreated'] !== 'undefined') {\n if(n['https://schema.org/dateCreated'].length == 9){\n return n['https://schema.org/dateCreated'];\n }\n return n['https://schema.org/dateCreated'].substr(0,4);\n }\n if(typeof n['https://schema.org/datePublished'] !== 'undefined') {\n return n['https://schema.org/datePublished'].substr(0,4);\n }\n if(typeof n['https://schema.org/startDate'] !== 'undefined') {\n // console.log(n['https://schema.org/startDate']);\n const year = n['https://schema.org/startDate'].substr(0,4);\n return year;\n }\n if(typeof n['https://schema.org/endDate'] !== 'undefined') {\n return n['https://schema.org/endDate'].substr(0,4);\n }\n if(typeof n['https://schema.org/foundingDate'] !== 'undefined') {\n return n['https://schema.org/foundingDate'].substr(0,4);\n }\n if(typeof n['https://schema.org/temporalCoverage'] !== 'undefined') {\n if(n['https://schema.org/temporalCoverage'].match(/\\d{4}-\\d{4}/)) {\n return n['https://schema.org/temporalCoverage'].substr(5,4);\n }\n }\n return null;\n}\nfunction getDisplayAttr(attr) {\n return attr.replace(/.*[#|\\/]/, \"\");\n}\n/**\nTransform a flattened jsonld into a d3 compatible graph\n@param Object data flattened jsonld data\n@return Object graph has keys \"nodes\" and \"links\"\n*/\nfunction jsonLdToGraph(data){\n let nodes = {};\n let links = [];\n\n // collect all nodes\n for(let nodeId in data){\n // data[nodeId][\"@type\"][0] = data[nodeId][\"@type\"][0];\n nodes[data[nodeId][\"@id\"]] = data[nodeId];\n }\n\n // collect all links (separate loop as we need to check nodes)\n for(let nodeId in data) {\n let node = data[nodeId];\n let currentId = node[\"@id\"];\n for(let key in node){\n let nodeAttr = Array.isArray(node[key]) ? node[key] : [node[key]];\n // // relations should always be lists (eases assumptions)\n // if(typeof node[key] !== \"Array\" && typeof node[key]['id'] !== \"undefined\") {\n // node[key] = [node[key]];\n // }\n // every attribute is an Array after flatten(), loop them\n for(let i in nodeAttr) {\n if(key !== \"@id\" && typeof nodeAttr[i] === \"string\" && nodes[nodeAttr[i]]) {\n links[links.length] = {\n \"source\": currentId,\n \"target\": nodeAttr[i],\n \"name\": key\n };\n }\n else if(typeof nodeAttr[i][\"@id\"] !== \"undefined\") {\n // if there is just one item, flatten/expand has turned urls in objects with just an id\n // reverse this, as we don't want these separate for this project\n if (Object.keys(nodeAttr[i]).length == 1 && typeof nodes[nodeAttr[i][\"@id\"]] === \"undefined\") {\n // skip\n // nodeAttr = nodeAttr[i][\"id\"];\n } else {\n links[links.length] = {\n \"source\": currentId,\n \"target\": nodeAttr[i][\"@id\"],\n \"name\": key\n };\n }\n }\n }\n }\n }\n return {\n \"nodes\": Object.values(nodes),\n \"links\": links\n };\n}\n\nvar graph;\n// map nodes to their ID\nvar nodeMap = {};\nvar linkMap = {};\nvar breadcrumbs = {};\nvar weights = {};\n\n// load the flattened jsonld file\nconst requestPromise = fetch('/assets/js/rubenvandeven.jsonld').then(r => r.json());\nconst rankingPromise = fetch('/assets/js/ranking.json').then(r => r.json());\n\nPromise.all([requestPromise, rankingPromise])\n .then(values => {\n if(values[0].hasOwnProperty('@graph')) {\n data = values[0];\n weights = values[1];\n } else {\n data = values[1];\n weights = values[0];\n }\n graph = jsonLdToGraph(data['@graph']);\n // create a map of nodes by id.\n for(let i in graph.nodes) {\n nodeMap[graph.nodes[i]['@id']] = graph.nodes[i];\n }\n startGraph(graph);\n });\n\nfunction inCircle(dx, dy, r) {\n // fastest check if in circle: https://stackoverflow.com/a/7227057\n let dxAbs = Math.abs(dx);\n let dyAbs = Math.abs(dy);\n\n if(dxAbs > r || dyAbs > r) {\n return false;\n } else if(dxAbs + dyAbs <= r){\n return true;\n } else if( Math.pow(dx,2) + Math.pow(dy, 2) <= Math.pow(r,2)){\n return true;\n } else {\n return false;\n }\n}\n\nfunction createLinkMap(graph) {\n let linkMap = {};\n for(let link of graph['links']){\n if(typeof linkMap[link['source']] == 'undefined') {\n linkMap[link['source']] = [];\n }\n linkMap[link['source']][linkMap[link['source']].length] = {'id': link['target'], 'name': link['name']};\n\n\n if(typeof linkMap[link['target']] == 'undefined') {\n linkMap[link['target']] = [];\n }\n\n linkMap[link['target']][linkMap[link['target']].length] = {'id': link['source'], 'name': link['name']};\n }\n return linkMap;\n}\n\n\n // config\nvar nodeSize = 40;\nvar selectedNodeSize = 140;\nvar firstNodeId = \"https://rubenvandeven.com/\";\n\nfunction getSizeForNode(node) {\n if(node.hasOwnProperty('https://schema.org/thumbnailUrl'))\n return nodeSize;\n if(weights[node['@id']])\n return nodeSize * weights[node['@id']];\n if(node['@id'] == firstNodeId)\n return nodeSize*1.2;\n // everynode has at least one link. these should equal 1\n return nodeSize * (.7 + Math.min(20, linkMap[node['@id']].length) / 40)\n return nodeSize;\n}\n\n// TODO: make sure, 'shortest' path is favoured.\nfunction createBreadcrumbs(linkMap, srcId) {\n let crumbs = {};\n\n let createBreadcrumbLayer = function(srcId) {\n let path = crumbs[srcId];\n let newPath = path.slice();\n newPath.push(srcId);\n\n let nextSrcIds = [];\n for (let link of linkMap[srcId]) {\n if(typeof crumbs[link['id']] !== 'undefined') continue;\n crumbs[link['id']] = newPath;\n nextSrcIds.push(link['id']);\n }\n\n return nextSrcIds;\n }\n crumbs[srcId] = [];\n let nextIds = [srcId];\n while(nextIds.length > 0) {\n let newNextIds = [];\n for (let nextId of nextIds) {\n let r = createBreadcrumbLayer(nextId);\n newNextIds = newNextIds.concat(r);\n }\n nextIds = newNextIds;\n }\n return crumbs;\n}\n\nvar nodePositions = {};\nfunction startGraph(graph){\n\n\n// set some vars\nvar currentNodeIdx = 0;\nvar currentNodePositionRadius = 0;\nvar types = {};\n\nlinkMap = createLinkMap(graph);\nbreadcrumbs = createBreadcrumbs(linkMap, firstNodeId);\n\nfor (let nodeIdx in graph['nodes']) {\n let type = graph['nodes'][nodeIdx][\"@type\"];\n if(typeof types[type] == 'undefined') {\n types[type] = [];\n }\n types[type].push(nodeIdx);\n}\nvar graphControlsEl = document.getElementById('graphControls');\nvar typeLinksEl = document.getElementById('typeLinks');\nvar showMoreTypeLinksEl = document.getElementById('showMoreTypeLinks');\nvar moreTypeLinksEl = document.getElementById('moreTypeLinks');\nvar relLinksEl = document.getElementById('relLinks');\n\n// sort types by count:\nvar typeCounts = Object.keys(types).map(function(key) {\n return [key, types[key].length];\n});\ntypeCounts.sort(function(first, second) {\n return second[1] - first[1];\n});\n\n// make controls\nlet i = 0;\nfor (let typeCountIdx in typeCounts) {\n let typeName = typeCounts[typeCountIdx][0];\n let typeLinkEl = document.createElement(\"li\");\n let typeLinkAEl = document.createElement(\"a\");\n let typeLinkCountEl = document.createElement(\"span\");\n typeLinkCountEl.innerHTML = typeCounts[typeCountIdx][1];\n typeLinkCountEl.classList.add('typeCount');\n typeLinkAEl.innerHTML = getDisplayAttr(typeName);\n typeLinkAEl.title = typeName;\n typeLinkAEl.addEventListener('click', function(){\n centerByType(typeName);\n // positionNodesInCenter(types[typeName]);\n });\n typeLinkAEl.addEventListener('mouseover', function() {\n let typeNodeEls = document.getElementsByClassName(typeName);\n for(let typeNodeEl of typeNodeEls) {\n typeNodeEl.classList.add('typeHighlight');\n }\n });\n typeLinkAEl.addEventListener('mouseout', function() {\n let typeNodeEls = document.getElementsByClassName(typeName);\n for(let typeNodeEl of typeNodeEls) {\n typeNodeEl.classList.remove('typeHighlight');\n }\n });\n typeLinkEl.append(typeLinkAEl);\n typeLinkEl.append(typeLinkCountEl);\n (i < 5 ? typeLinksEl: moreTypeLinksEl).appendChild(typeLinkEl);\n i++;\n // typeLinksEl.appendChild(typeLinkEl);\n}\n\nshowMoreTypeLinksEl.addEventListener('click', function () {\n document.body.classList.add('showMoreLinks');\n var hideMoreTypeLinks = function(e) {\n e.preventDefault();\n e.stopPropagation();\n document.body.removeEventListener('mouseup', hideMoreTypeLinks, true);\n document.body.classList.remove('showMoreLinks');\n }\n document.body.addEventListener('mouseup', hideMoreTypeLinks, true);\n}, false)\n\n\n// make svg\nvar svg = d3.select(\"svg\"),\n width = +svg.attr(\"width\"),\n height = +svg.attr(\"height\");\nvar container = svg.append(\"g\")\n .attr(\"id\", \"container\")\n ;\n\nvar simulation = d3.forceSimulation()\n .force(\"link\", d3.forceLink().id(function(d) { return d[\"@id\"]; }).strength(.005))\n .force(\"charge\", d3.forceManyBody()) // doesn't seem necessary?\n .force(\"collision\", d3.forceCollide(function(d){\n return getSizeForNode(d) * 1.1; // avoid overlapping nodes\n }))\n // .force(\"center\", d3.forceCenter(width / 2, height / 2)) // position around center\n\n // .force(\"x\", d3.forceX())\n // .force(\"y\", d3.forceY())\n // .force(\"y\", d3.forceY())\n ;\n\n\nvar link = container.append(\"g\")\n .attr(\"class\", \"links\")\n .selectAll(\".relationship\")\n .data(graph['links'])\n .enter().append(\"g\")\n .attr(\"class\", function(l){return \"relationship \"+l.name;})\n ;\nvar linkLine = link\n // .append(\"line\");\n .append(\"line\").attr(\"marker-end\", \"url(#arrowHead)\")\n ;\nvar linkText = link\n .append(\"text\")\n .text(function(l){\n // l == Object { source: \"https://rubenvandeven.com/#codesandmodes\", target: \"_:b34\", name: \"https://schema.org/location\" }\n return getDisplayAttr(l.name);\n })\n ;\n\n var node = container.append(\"g\")\n .attr(\"class\", \"nodes\")\n .selectAll(\".node\")\n .data(graph.nodes)\n .enter().append(\"g\")\n .attr(\"class\", function(d) {\n let baseClasses = 'node ' + d['@type'];\n if(d['@type']) {\n let slashpos = d['@type'].lastIndexOf('/');\n if(slashpos > -1) {\n baseClasses += ' ' + d['@type'].substr(slashpos + 1);\n }\n }\n return baseClasses;\n })\n ;\nvar getViewbox = function() {\n return svg.attr(\"viewBox\").split(\" \").map(parseFloat);\n}\nvar positionNodesInCenter = function(idxs) {\n setViewboxForceCenter(); // sets forceCx & forceCy\n if(typeof idxs == \"object\" && idxs !== null && idxs.length == 1) {\n idxs = idxs[0];\n }\n\n nodePositions = {}; // reset\n if(idxs === null) {\n return;\n }\n else if(typeof idxs == \"object\") {\n // array or object -> each\n // calculate grid:\n // let itemsX = 4;\n // let itemsY = Math.ceil(idxs.length/itemsX);\n // console.log(itemsX,itemsY);\n // let rowDiffX = viewBox[3] * (1/(itemsX+1));\n // let rowDiffY = viewBox[2] * (1/(itemsY+1));\n // console.log(rowDiffX, rowDiffY);\n // for (var i = 0; i < idxs.length; i++) {\n // nodePositions[idxs[i]] = [\n // cx - itemsX/2*rowDiffX + rowDiffX * ((i % itemsX)),\n // cy - itemsY/2*rowDiffY + rowDiffY * (Math.floor(i / itemsX))\n // ];\n // }\n positionNodesInCircle(idxs);\n // console.log(nodePositions);\n }\n else{\n nodePositions[idxs] = [\n forceCx,\n forceCy\n ];\n // console.log(\"singleNode\", idxs, nodePositions);\n }\n\n node.each(function(d,nIdx,nodeEls){\n if(typeof nodePositions[nIdx] != 'undefined') {\n nodeEls[nIdx].classList.add('centeredNode');\n nodeEls[nIdx].classList.add('visibleNode');\n } else {\n nodeEls[nIdx].classList.remove('centeredNode');\n nodeEls[nIdx].classList.remove('visibleNode');\n }\n });\n\n // restart animation (they call that 'alpha' in d3 force)\n simulation.alpha(1);\n simulation.restart();\n}\nvar positionNodesInCircle = function(idxs, r) {\n let viewBox = getViewbox();\n let zoom = getZoomValues();\n setViewboxForceCenter(); // sets forceCx & forceCy\n if(typeof r == 'undefined') {\n if(idxs.length == 1) {\n r = viewBox[2] / 6;\n } else {\n r = viewBox[2] / (4 + Math.max(0, 2.5 - idxs.length));\n }\n }\n currentNodePositionRadius = r;\n let forceCx = viewBox[0] + viewBox[2]/2 - zoom['dx'];\n let forceCy = viewBox[1] + viewBox[3]/2 - zoom['dy'];\n\n let stepSize = 2*Math.PI / idxs.length;\n\n for (var i = 0; i < idxs.length; i++) {\n nodePositions[idxs[i]] = [\n forceCx + Math.sin(stepSize * i) * r,\n forceCy + Math.cos(stepSize * i) * r\n ];\n }\n\n // restart animation (they call that 'alpha' in d3 force)\n simulation.alpha(1);\n simulation.restart();\n}\nvar centerByType = function(types, updateHistory) {\n if(typeof updateHistory == 'undefined') {\n updateHistory = true;\n }\n if(!Array.isArray(types)) {\n types = [types];\n }\n let idxs = [];\n for(let idx in graph.nodes) {\n if(types.indexOf(graph.nodes[idx]['@type']) > -1) {\n idxs[idxs.length] = idx;\n }\n }\n deselectNode();\n if(updateHistory) {\n // TODO: working\n // console.log(types[0], getDisplayAttr(types[0]),types.map(getDisplayAttr));\n history.pushState({types: types}, \"\", \"/@type/\"+(types.map(getDisplayAttr).join(\"+\")));\n } else {\n history.replaceState({types: types}, \"\", \"/@type/\"+(types.map(getDisplayAttr).join(\"+\")));\n }\n positionNodesInCenter(idxs.length ? idxs : null);\n}\n\nvar selectedNodeTransition = d3.transition()\n .duration(750)\n .ease(d3.easeLinear);\n\nvar nodeDetailEl = document.getElementById(\"nodeDetails\");\n\nvar createRelationshipEl = function(relNode, i) {\n let el = document.createElement(\"dd\");\n el.classList.add('relLink');\n let titleEl = document.createElement('a');\n titleEl.innerHTML = getNodeLabel(relNode)\n let year = getNodeYear(relNode);\n if(year !== null) {\n titleEl.innerHTML += `${getNodeYear(relNode)}`;\n }\n titleEl.classList.add('nodeTitle');\n titleEl.classList.add('nodeTitleNr'+i);\n titleEl.addEventListener('click',function(e){\n let idx = graph.nodes.indexOf(relNode);\n selectNode(idx);\n });\n let typeEl = document.createElement('a');\n typeEl.classList.add('nodeType');\n typeEl.innerHTML = getDisplayAttr(relNode['@type']);\n typeEl.title = relNode['@type'];\n typeEl.addEventListener('click',function(e){\n centerByType(relNode['@type']);\n });\n el.appendChild(titleEl);\n el.appendChild(typeEl);\n return el;\n}\n\nvar setDetails = function(nodeDatum, nodeIdx) {\n document.body.classList.add(\"detailsOpen\");\n scrollToY(0, 4000);\n while (nodeDetailEl.hasChildNodes()) {\n nodeDetailEl.removeChild(nodeDetailEl.lastChild);\n }\n\n // TODO: replace relUp & relDown with linkMap\n let relUp = [];\n let relDown = [];\n let pageTitles = [];\n let nodeDetailScalerEl = document.createElement('div');\n // nodeDetailScalerEl.innerHTML = `
`;\n nodeDetailScalerEl.id = 'nodeDetailsScaler';\n nodeDetailScalerEl.addEventListener('mousedown', function(e){\n // console.log('go');\n let drag = function(e) {\n // 5px for padding\n nodeDetailEl.style.width = (window.innerWidth - e.clientX + 5) +'px';\n }\n document.body.addEventListener('mousemove', drag);\n document.body.addEventListener('mouseup', function(){\n document.body.removeEventListener('mousemove', drag);\n });\n });\n nodeDetails.appendChild(nodeDetailScalerEl);\n\n let breadcrumbsEl = document.createElement('ul');\n breadcrumbsEl.classList.add('breadcrumbs');\n for(let crumbNodeId of breadcrumbs[nodeDatum['@id']]) {\n let crumbWrapEl = document.createElement('li');\n let crumbEl = document.createElement('span');\n crumbEl.classList.add('crumb');\n crumbEl.addEventListener('click', function(e){\n let idx = graph.nodes.indexOf(nodeMap[crumbNodeId]);\n selectNode(idx);\n });\n crumbEl.innerHTML = `${getNodeLabel(nodeMap[crumbNodeId])}`;\n let nodeYear = getNodeYear(nodeMap[crumbNodeId]);\n if(nodeYear !== null) {\n crumbEl.innerHTML += `${nodeYear}`;\n }\n crumbWrapEl.appendChild(crumbEl);\n breadcrumbsEl.appendChild(crumbWrapEl);\n pageTitles.push(getNodeLabel(nodeMap[crumbNodeId]));\n }\n nodeDetailEl.appendChild(breadcrumbsEl);\n pageTitles.push(getNodeLabel(nodeDatum));\n\n let titleAttr = getLabelAttribute(nodeDatum);\n let titleEl = document.createElement('h2');\n titleEl.innerHTML = getNodeLabel(nodeDatum);\n\n let typeEl = document.createElement('span');\n typeEl.classList.add('nodeType')\n typeEl.innerHTML = getDisplayAttr(nodeDatum['@type']);\n typeEl.title = nodeDatum['@type']\n typeEl.addEventListener('click',function(e){\n centerByType(nodeDatum['@type']);\n });\n titleEl.appendChild(typeEl);\n nodeDetailEl.appendChild(titleEl);\n\n let listEl = document.createElement(\"dl\");\n // listEl.innerHTML += `