From 17e7df17fcebc50e0bcb1358685964fc8116f74a Mon Sep 17 00:00:00 2001 From: esikkala <esko.ikkala@aalto.fi> Date: Mon, 10 Jan 2022 19:11:14 +0200 Subject: [PATCH] Update library configs --- .../Cytoscape.js/NetworkConfig.js | 87 ++++++++++++++++++- .../library_configs/Leaflet/LeafletConfig.js | 50 +++++++++++ 2 files changed, 136 insertions(+), 1 deletion(-) diff --git a/src/client/library_configs/Cytoscape.js/NetworkConfig.js b/src/client/library_configs/Cytoscape.js/NetworkConfig.js index a5a3e823..4ad28a11 100644 --- a/src/client/library_configs/Cytoscape.js/NetworkConfig.js +++ b/src/client/library_configs/Cytoscape.js/NetworkConfig.js @@ -1,3 +1,4 @@ +import { has } from 'lodash' import { constrainValue, ValueScaler, ColorScaler } from './NetworkTools' // preprocess by pagerank @@ -32,7 +33,91 @@ export const preprocessPagerank = elements => { }) } -// preprocessRelationNetwork +export const preprocessLetterSampo = elements => { + const maxEdgeWidth = 8 + + /** + const rankSort = arr => { + const arr2 = arr.map(function (o, i) { return { idx: i, obj: o } }).sort((a, b) => a.obj - b.obj) + return arr2.map(function (o, i) { o.ord = i; return o }).sort((a, b) => a.idx - b.idx).map(o => o.ord) + } + */ + + // edges + let arr = elements.edges.map(ele => ele.data.weight || 1) + + // edge width + let res = (new ValueScaler(1.0, maxEdgeWidth)).fitTransform(arr) + elements.edges.forEach((ele, i) => { ele.data.weight = res[i] }) + + // edge color + // https://www.w3schools.com/colors/colors_hsl.asp + res = (new ColorScaler('hsl(30, 64%, 85%)', 'hsl(30, 64%, 35%)')).fitTransform(arr) + elements.edges.forEach((ele, i) => { ele.data.color = res[i] }) + + // nodes + arr = elements.nodes.map(ele => Math.sqrt(ele.data.numLetters || 0)) + + // TODO: adjust node sizes e.g. https://stackoverflow.com/questions/30167117/get-the-current-index-in-sort-function + // node size + res = (new ColorScaler('8px', '40px')).fitTransform(arr) + elements.nodes.forEach((ele, i) => { ele.data.size = res[i] }) + + // node color + res = (new ColorScaler('rgb(0,0,0)', 'rgb(255,0,0)')).fitTransform(arr) + elements.nodes.forEach((ele, i) => { ele.data.color = res[i] }) +} + +export const preprocessEgo = elements => { + const maxEdgeWidth = 8 + // edges + let arr = elements.edges.map(ele => ele.data.weight || 1) + + // edge width + let res = (new ValueScaler(1.0, maxEdgeWidth)).fitTransform(arr) + elements.edges.forEach((ele, i) => { ele.data.weight = res[i] }) + + // edge color + // https://www.w3schools.com/colors/colors_hsl.asp + res = (new ColorScaler('hsl(30, 64%, 85%)', 'hsl(30, 64%, 35%)')).fitTransform(arr) + elements.edges.forEach((ele, i) => { ele.data.color = res[i] }) + + // nodes + arr = elements.nodes.map(ele => has(ele.data, 'distance') ? ele.data.distance : 3) + // node size + res = (new ColorScaler('20px', '8px')).fitTransform(arr) + elements.nodes.forEach((ele, i) => { ele.data.size = res[i] }) + + // node color + res = (new ColorScaler('rgb(255,0,0)', 'rgb(0,0,0)')).fitTransform(arr) + elements.nodes.forEach((ele, i) => { ele.data.color = res[i] }) +} + +export const preprocessTie = elements => { + const maxEdgeWidth = 8 + // edges + let arr = elements.edges.map(ele => ele.data.weight) + + // edge width + let res = (new ValueScaler(1.0, maxEdgeWidth)).fitTransform(arr) + elements.edges.forEach((ele, i) => { ele.data.weight = res[i] }) + + // edge color + res = (new ColorScaler('hsl(30, 64%, 85%)', 'hsl(30, 64%, 35%)')).fitTransform(arr) + elements.edges.forEach((ele, i) => { ele.data.color = res[i] }) + + // nodes + arr = elements.nodes.map(ele => ele.data.pagerank) + + // node size + res = (new ColorScaler('8px', '20px')).fitTransform(arr) + elements.nodes.forEach((ele, i) => { ele.data.size = res[i] }) + + // node color + res = (new ColorScaler('rgb(0,0,0)', 'rgb(255,0,0)')).fitTransform(arr) + elements.nodes.forEach((ele, i) => { ele.data.color = res[i] }) +} + export const preprocessRelationNetwork = elements => { preprocessPagerank(elements) diff --git a/src/client/library_configs/Leaflet/LeafletConfig.js b/src/client/library_configs/Leaflet/LeafletConfig.js index 3f3c66f0..160c86dd 100644 --- a/src/client/library_configs/Leaflet/LeafletConfig.js +++ b/src/client/library_configs/Leaflet/LeafletConfig.js @@ -28,6 +28,56 @@ export const createPopUpContentDefault = ({ data, resultClass }) => { return container } +export const createPopUpContentAs = ({ data, resultClass }) => { + if (Array.isArray(data.prefLabel)) { + data.prefLabel = data.prefLabel[0] + } + const container = document.createElement('div') + const h3 = document.createElement('h3') + if (has(data.prefLabel, 'dataProviderUrl')) { + const link = document.createElement('a') + link.addEventListener('click', () => history.push(data.prefLabel.dataProviderUrl)) + link.textContent = data.prefLabel.prefLabel + link.style.cssText = 'cursor: pointer; text-decoration: underline' + h3.appendChild(link) + } else { + h3.textContent = data.prefLabel.prefLabel + } + container.appendChild(h3) + if (resultClass === 'peoplePlaces' || resultClass === 'placesPeople') { + const p = document.createElement('p') + p.textContent = 'People:' + container.appendChild(p) + container.appendChild(createInstanceListing(data.related)) + } + return container +} + +export const createPopUpContentLetterSampo = ({ data, resultClass }) => { + if (Array.isArray(data.prefLabel)) { + data.prefLabel = data.prefLabel[0] + } + const container = document.createElement('div') + const h3 = document.createElement('h3') + if (has(data.prefLabel, 'dataProviderUrl')) { + const link = document.createElement('a') + link.addEventListener('click', () => history.push(data.prefLabel.dataProviderUrl)) + link.textContent = data.prefLabel.prefLabel + link.style.cssText = 'cursor: pointer; text-decoration: underline' + h3.appendChild(link) + } else { + h3.textContent = data.prefLabel.prefLabel + } + container.appendChild(h3) + if (resultClass === 'placesActors') { + const p = document.createElement('p') + p.textContent = 'Actors:' + container.appendChild(p) + container.appendChild(createInstanceListing(data.related)) + } + return container +} + export const createPopUpContentSotasurmat = ({ data, resultClass }) => { if (Array.isArray(data.prefLabel)) { data.prefLabel = data.prefLabel[0] -- GitLab