...
This commit is contained in:
parent
c84a95a47d
commit
e71bbc741e
172
components/graph.js
Normal file
172
components/graph.js
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
import Cytoscape from "cytoscape";
|
||||||
|
var nodeHtmlLabel = require('cytoscape-node-html-label');
|
||||||
|
|
||||||
|
|
||||||
|
const Graph = ({ el, graphdata, current }) => {
|
||||||
|
nodeHtmlLabel( Cytoscape );
|
||||||
|
|
||||||
|
var cy = Cytoscape({
|
||||||
|
container:el,
|
||||||
|
elements:graphdata,
|
||||||
|
style:[{
|
||||||
|
selector: "node",
|
||||||
|
style:{
|
||||||
|
"background-color" : el => el.data("id") === current ? '#5221c4' : "#666",
|
||||||
|
"font-size": "10px",
|
||||||
|
"width": "20px",
|
||||||
|
"height": "20px"
|
||||||
|
//"label": el => el.data("id") === current ? "" : el.data('title') ? el.data("title").slice(0,16) : el.data("id")
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
selector: "label",
|
||||||
|
style: {"font-size": "12px"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
selector: 'edge',
|
||||||
|
style: {
|
||||||
|
'width': 2,
|
||||||
|
"height":200,
|
||||||
|
'line-color': '#5221c4',
|
||||||
|
'target-arrow-color': '#ccc',
|
||||||
|
'target-arrow-shape': 'triangle',
|
||||||
|
'curve-style': 'bezier'
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
layout: {
|
||||||
|
name: 'circle',
|
||||||
|
|
||||||
|
fit: true, // whether to fit the viewport to the graph
|
||||||
|
padding: 32, // the padding on fit
|
||||||
|
boundingBox: undefined, // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
|
||||||
|
avoidOverlap: true, // prevents node overlap, may overflow boundingBox and radius if not enough space
|
||||||
|
nodeDimensionsIncludeLabels: false, // Excludes the label when calculating node bounding boxes for the layout algorithm
|
||||||
|
spacingFactor: 0.9, // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up
|
||||||
|
radius: 180, // the radius of the circle
|
||||||
|
startAngle: -2 / 4 * Math.PI, // where nodes start in radians
|
||||||
|
//sweep: undefined, // how many radians should be between the first and last node (defaults to full circle)
|
||||||
|
clockwise: true, // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false)
|
||||||
|
sort: undefined, // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') }
|
||||||
|
animate: false, // whether to transition the node positions
|
||||||
|
animationDuration: 500, // duration of animation in ms if enabled
|
||||||
|
animationEasing: undefined, // easing of animation if enabled
|
||||||
|
//animateFilter: function ( node, i ){ return true; }, // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts
|
||||||
|
ready: undefined, // callback on layoutready
|
||||||
|
stop: undefined, // callback on layoutstop
|
||||||
|
transform: function (node, position ){ return position; } // transform a given node position. Useful for changing flow direction in discrete layouts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
zoom: 10,
|
||||||
|
hideEdgesOnViewport:false,
|
||||||
|
wheelSensitivity:0.2,
|
||||||
|
})
|
||||||
|
|
||||||
|
cy.nodeHtmlLabel( [{
|
||||||
|
query: "node",
|
||||||
|
halign:"top",
|
||||||
|
valign:"center",
|
||||||
|
cssClass: 'label',
|
||||||
|
tpl: el => {
|
||||||
|
//el.data("id") === current ? "" : el.data('title') ? el.data("title").slice(0,16) : el.data("id")
|
||||||
|
const label = el.id === current ? "" : el.title ? el.title : el.id
|
||||||
|
return `<div title="${el.title ? el.title : el.id}" style='font-weight:400; margin-top:32px;max-width:180px;font-size:12px;color:white;cursor:pointer;'>${label}</div>`
|
||||||
|
}}],
|
||||||
|
{
|
||||||
|
enablePointerEvents: true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return cy
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export const Network = ({ el, graphdata, current, router, allNodes }) => {
|
||||||
|
var jsnx = require('jsnetworkx');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var currentnode = graphdata.filter(g => g.data.id === current)[0]
|
||||||
|
currentnode = [currentnode.data.id, { href:current==="index" ? "/" : `/note/${currentnode.data.id}` }];
|
||||||
|
|
||||||
|
var othernodes, edges;
|
||||||
|
if (allNodes){
|
||||||
|
othernodes = graphdata.filter(g => g.data.id !== current)
|
||||||
|
othernodes = othernodes.map(on => [on.data.id ,{
|
||||||
|
title:on.data.title ? on.data.title : on.data.id,
|
||||||
|
href: current === "index" ? "/" : `/note/${on.data.id}`
|
||||||
|
}
|
||||||
|
])
|
||||||
|
edges = graphdata.filter(g => g.data.source)
|
||||||
|
edges = edges.map(e => [e.data.source, e.data.target])
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var indexnode = graphdata.filter(g => g.data.id === "index")[0]
|
||||||
|
indexnode = ["Home", {
|
||||||
|
width:30,
|
||||||
|
height:30,
|
||||||
|
weight:10,
|
||||||
|
href:`/`,
|
||||||
|
title: "Home",
|
||||||
|
fill:"blueviolet",
|
||||||
|
|
||||||
|
}]
|
||||||
|
|
||||||
|
var currentRawEdges = graphdata.filter(g => g.data.source === current)
|
||||||
|
edges = currentRawEdges.map(ce => [ce.data.source, ce.data.target, {weight:5 } ])
|
||||||
|
|
||||||
|
var currentTargetNames = currentRawEdges.map(ie => ie.data.target)
|
||||||
|
var currentTargets = graphdata.filter(g => currentTargetNames.includes(g.data.id))
|
||||||
|
othernodes = currentTargets.map(ct => [ct.data.id, {size:6, href:`/note/${ct.data.id}`}])
|
||||||
|
othernodes = [indexnode, ...othernodes]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var G = new jsnx.completeGraph();
|
||||||
|
G.addNodesFrom(
|
||||||
|
[
|
||||||
|
currentnode,
|
||||||
|
...othernodes,
|
||||||
|
],
|
||||||
|
{color: 'black', width:60, height:60}
|
||||||
|
);
|
||||||
|
G.addEdgesFrom(edges);
|
||||||
|
|
||||||
|
jsnx.draw(G, {
|
||||||
|
element: el,
|
||||||
|
withLabels: true,
|
||||||
|
labelStyle:{
|
||||||
|
color:"#ffffff"
|
||||||
|
},
|
||||||
|
labelAttr:{
|
||||||
|
class: "node-label",
|
||||||
|
y:16,
|
||||||
|
click:function(l){
|
||||||
|
this.addEventListener("click", function(){
|
||||||
|
router.push(l.data.href)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
layoutAttr:{
|
||||||
|
linkDistance:260,
|
||||||
|
},
|
||||||
|
nodeStyle: {
|
||||||
|
fill:"black"
|
||||||
|
},
|
||||||
|
nodeAttr:{
|
||||||
|
|
||||||
|
click:function(l){
|
||||||
|
//console.log("lll",this, "\n", l);
|
||||||
|
this.addEventListener("click", function(){
|
||||||
|
router.push(l.data.href)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
edgeStyle:{
|
||||||
|
height:120
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
return G
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Graph;
|
@ -9,7 +9,7 @@ export default function Layout({ children, home }) {
|
|||||||
const [isOpen, setIsOpen] = useState(null)
|
const [isOpen, setIsOpen] = useState(null)
|
||||||
const toggle = () => setIsOpen(!isOpen)
|
const toggle = () => setIsOpen(!isOpen)
|
||||||
|
|
||||||
const sidebarposition = isOpen ? "0px" : "-250px"
|
const sidebarposition = isOpen ? "0px" : "-350px"
|
||||||
//console.log("effect: ", isOpen, sidebarposition)
|
//console.log("effect: ", isOpen, sidebarposition)
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
|
@ -27,5 +27,6 @@ export const Node = {
|
|||||||
},
|
},
|
||||||
readFileSync:function(fullPath){
|
readFileSync:function(fullPath){
|
||||||
return fs.readFileSync(fullPath, "utf8")
|
return fs.readFileSync(fullPath, "utf8")
|
||||||
}
|
},
|
||||||
|
|
||||||
}
|
}
|
198
lib/post.js
198
lib/post.js
@ -2,7 +2,7 @@ import path from 'path'
|
|||||||
import matter, { test } from 'gray-matter'
|
import matter, { test } from 'gray-matter'
|
||||||
import fs from "fs"
|
import fs from "fs"
|
||||||
import { Node } from "./node"
|
import { Node } from "./node"
|
||||||
import { Remark } from "./remark";
|
import { Transformer } from "./transformer";
|
||||||
import BiMap from "bimap";
|
import BiMap from "bimap";
|
||||||
|
|
||||||
|
|
||||||
@ -10,110 +10,170 @@ import BiMap from "bimap";
|
|||||||
|
|
||||||
const postsDirectory = path.join(process.cwd(), 'posts')
|
const postsDirectory = path.join(process.cwd(), 'posts')
|
||||||
|
|
||||||
export function getSinglePost(filename, permalink) {
|
export function getSinglePost(filename) {
|
||||||
|
console.log("\n\nFile is scanning: ", filename)
|
||||||
// Check if sidebar or not
|
// Check if sidebar or not
|
||||||
var filePaths = Node.getFiles(postsDirectory).filter(fn => fn.endsWith(".md"))
|
var filePaths = Node.getFiles(postsDirectory).filter(fn => fn.endsWith(".md"))
|
||||||
console.log("permalink", filename, filePaths)
|
|
||||||
|
// IF filename is not sidebar.md THEN Exclude sidebar.md from file list
|
||||||
filePaths = filename === "sidebar.md" ? filePaths : filePaths.filter(f => !f.endsWith("sidebar.md"))
|
filePaths = filename === "sidebar.md" ? filePaths : filePaths.filter(f => !f.endsWith("sidebar.md"))
|
||||||
|
|
||||||
const fileNames = filePaths.map(f => f.split("/")[f.split("/").length - 1].replace(".md", ""))
|
// List of filenames that will provide existing links to wikilink
|
||||||
const filesFrontMatterData = filePaths.map(fp => Remark.getFrontMatterData(fp))
|
const fileNames = filePaths.map(f => Transformer.parseFileNameFromPath(f))
|
||||||
|
|
||||||
|
//console.log("\tDirectory is scanning to find corresponding filename")
|
||||||
|
const currentFilePath = Transformer.pairCurrentFile(filename, filePaths)
|
||||||
|
//console.log("\tScan is finished. Founded filepath", currentFilePath, "\n")
|
||||||
|
|
||||||
|
|
||||||
const currentFile = filePaths.filter(f => {
|
var fileContent = Node.readFileSync(currentFilePath)
|
||||||
var testFileName = f.split("/")[f.split("/").length - 1].replace(".md", "")
|
|
||||||
//testFileName = testFileName.replace("Ç","c").replace("ç","c").replace("ı","i").replace("ş","s")
|
|
||||||
const testFileNameAlternative = testFileName.toLowerCase().split(" ").join("-")
|
|
||||||
return (filename.replace(".md", "") === testFileName || filename.replace(".md", "") === testFileNameAlternative)
|
|
||||||
})[0]
|
|
||||||
console.log("currenFile: ", currentFile)
|
|
||||||
//const currentFileFrontMatter = filesFrontMatterData.filter(f => f.permalink === permalink)[0]
|
|
||||||
//console.log("Current File By Name: ", currentFile)
|
|
||||||
//const currentFileFrontMatter = Remark.getFrontMatterData(currentFile)
|
|
||||||
//console.log("Current File By FrontMatter: ", currentFileFrontMatter)
|
|
||||||
|
|
||||||
const fileContent = fs.readFileSync(currentFile, 'utf8')
|
//console.log("\tSearching any front matter data")
|
||||||
|
const currentFileFrontMatter = Transformer.getFrontMatterData(fileContent)
|
||||||
|
//console.log("\tFounded front matter data: ", currentFileFrontMatter, "\n")
|
||||||
|
|
||||||
const [htmlContent, backlinks] = Remark.getHtmlContent(fileContent, {
|
//fileContent = fileContent.split("---").join("")
|
||||||
|
//console.log("filecontent end")
|
||||||
|
|
||||||
|
const [htmlContent, backlinks] = Transformer.getHtmlContent(fileContent, {
|
||||||
fileNames:fileNames,
|
fileNames:fileNames,
|
||||||
})
|
})
|
||||||
|
//console.log("hrmlcontents and backlinks")
|
||||||
return {
|
return {
|
||||||
id:filename,
|
id:filename,
|
||||||
//...currentFileFrontMatter,
|
...currentFileFrontMatter,
|
||||||
data:htmlContent
|
data:htmlContent
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getAllBacklinks(){
|
export function getAllBacklinks(){
|
||||||
|
//console.log("\n\nBacklinks are scanning")
|
||||||
//var bimap = new BiMap
|
//var bimap = new BiMap
|
||||||
var backlinkList = []
|
var internalLinks = []
|
||||||
//bimap.push("key", "value");
|
|
||||||
//bimap.key("key"); // => "value"
|
|
||||||
//bimap.val("value"); // => "key"
|
|
||||||
//bimap.push("France", ["Paris", "Lyon", "Marseille"]);
|
|
||||||
|
|
||||||
// Get file names under /posts
|
// Get file names under /posts
|
||||||
const filePaths = Node.getFiles(postsDirectory).filter(fn => fn.endsWith(".md")).filter(f => !f.endsWith("sidebar.md"))
|
const filePaths = Node.getFiles(postsDirectory).filter(fn => fn.endsWith(".md")).filter(f => !f.endsWith("sidebar.md"))
|
||||||
const fileNames = filePaths.map(f => f.split("/")[f.split("/").length - 1].replace(".md", ""))
|
const fileNames = filePaths.map(f => Transformer.parseFileNameFromPath(f))
|
||||||
//console.log("filePaths", fileNames)
|
//console.log("\tFounded filePaths: ", fileNames)
|
||||||
|
|
||||||
var allBacklinkData = filePaths.map(fileName => {
|
var allBacklinkData = filePaths.map(fileName => {
|
||||||
//console.log("filename", fileNames)
|
|
||||||
// Remove ".md" from file name to get id
|
// Remove ".md" from file name to get id
|
||||||
const slug = fileName.replace(/\.md$/, '').split("/")[fileName.split("/").length - 1]
|
const slug = Transformer.parseFileNameFromPath(fileName)
|
||||||
|
|
||||||
|
//console.log("filename", fileNames)
|
||||||
|
const fileData = {
|
||||||
|
id:slug
|
||||||
|
}
|
||||||
|
|
||||||
//console.log("AllBacklinks slug", slug)
|
//console.log("AllBacklinks slug", slug)
|
||||||
|
|
||||||
// Read markdown file as string
|
// Read markdown file as string
|
||||||
const fileContent = fs.readFileSync(fileName, 'utf8')
|
var fileContent = Node.readFileSync(fileName, 'utf8')
|
||||||
|
|
||||||
const [htmlContent, backlinks] = Remark.getHtmlContent(fileContent, {
|
const frontmatterData = Transformer.getFrontMatterData(fileContent)
|
||||||
|
const requiredParameters = ["title", "description"]
|
||||||
|
requiredParameters.forEach(param => {
|
||||||
|
if (frontmatterData[param])
|
||||||
|
fileData[param] = frontmatterData[param]
|
||||||
|
})
|
||||||
|
|
||||||
|
//fileContent = fileContent.split("---").join("")
|
||||||
|
const [htmlContent, backlinks] = Transformer.getHtmlContent(fileContent, {
|
||||||
fileNames:fileNames,
|
fileNames:fileNames,
|
||||||
})
|
})
|
||||||
// Check if scanned slug post has any internal links
|
// Check if scanned slug post has any internal links
|
||||||
if (backlinks.length > 0){
|
const existingInternalLink = backlinks.filter(bl => fileNames.includes(bl))
|
||||||
//console.log("backlinks",[ slug, [backlinks]] )
|
fileData.to = existingInternalLink
|
||||||
//bimap.push(slug, backlinks)
|
fileData.href = slug === "index" ? "/" : `/note/${slug}`
|
||||||
|
//console.log("\n\nbacklinks",[ slug, [backlinks]] )
|
||||||
|
//bimap.push(slug, backlinks)
|
||||||
|
|
||||||
|
// Check if internal link exists
|
||||||
|
//const internalLinks = backlinks.filter(bl => fileNames.includes(bl))
|
||||||
|
internalLinks.push(fileData)
|
||||||
|
//console.log("bimap: ", bimap.key(slug))
|
||||||
|
|
||||||
// Check if internal link exists
|
// Combine the data with the slug
|
||||||
const internalLinks = backlinks.filter(bl => fileNames.includes(bl))
|
//return backlinkList.length > 0 ? JSON.stringify(backlinkList) : null
|
||||||
backlinkList.push([slug, internalLinks])
|
})
|
||||||
//console.log("bimap: ", bimap.key(slug))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Combine the data with the slug
|
//console.log("founded internal links for ", internalLinks)
|
||||||
return backlinkList.length > 0 ? JSON.stringify(backlinkList) : null
|
//console.log("\n\ninternal list: ", internalLinks)
|
||||||
})
|
return internalLinks
|
||||||
|
//return [allBacklinkData.filter(bl => bl !== null), JSON.stringify(fileNames)]
|
||||||
return [allBacklinkData.filter(bl => bl !== null), JSON.stringify(fileNames)]
|
}
|
||||||
|
|
||||||
|
export function getGraphData(){
|
||||||
|
const backlinkData = getAllBacklinks()
|
||||||
|
|
||||||
|
const elements = []
|
||||||
|
|
||||||
|
// First create Nodes
|
||||||
|
backlinkData.forEach(el => {
|
||||||
|
const node = {data: {id: el.id}};
|
||||||
|
|
||||||
|
if(el.title){
|
||||||
|
node.data.title = el.title
|
||||||
|
}
|
||||||
|
if (el.description){
|
||||||
|
node.data.description = el.description
|
||||||
|
}
|
||||||
|
elements.push(node)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
// Second create Edges
|
||||||
|
backlinkData.forEach(el => {
|
||||||
|
// check if has any internal link
|
||||||
|
if (el.to.length > 0){
|
||||||
|
// create edge from element to its links
|
||||||
|
el.to.forEach(linkElement => {
|
||||||
|
const edge = {
|
||||||
|
data: {
|
||||||
|
id: `${el.id}-${linkElement}`,
|
||||||
|
source: el.id,
|
||||||
|
target: linkElement
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elements.push(edge)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return elements
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getPostListData() {
|
export function getPostListData() {
|
||||||
// Get file names under /posts
|
//console.log("\n\nAll Posts are scanning")
|
||||||
const filePaths = Node.getFiles(postsDirectory).filter(fn => fn.endsWith(".md"))
|
// Get file names under /posts
|
||||||
const fileNames = filePaths.map(f => f.split("/")[f.split("/").length - 1].replace(".md", ""))
|
const filePaths = Node.getFiles(postsDirectory).filter(fn => fn.endsWith(".md"))
|
||||||
//console.log("filePaths", filePaths)
|
const fileNames = filePaths.map(f => Transformer.parseFileNameFromPath(f))
|
||||||
|
//console.log("filePaths", filePaths)
|
||||||
|
|
||||||
var allPostsData = filePaths.map(fileName => {
|
var allPostsData = filePaths.map(filePath => {
|
||||||
//console.log("filename", fileNames)
|
//console.log("filePath", filePaths)
|
||||||
// Remove ".md" from file name to get id
|
// Remove ".md" from file name to get id
|
||||||
const slug = fileName.replace(/\.md$/, '').split("/")[fileName.split("/").length - 1]
|
const slug = Transformer.parseFileNameFromPath(filePath)
|
||||||
//console.log("slug", slug)
|
//console.log("slug", slug)
|
||||||
|
|
||||||
// Read markdown file as string
|
// Read markdown file as string
|
||||||
const fileContent = fs.readFileSync(fileName, 'utf8')
|
var fileContent = Transformer.preprocessThreeDashes(Node.readFileSync(filePath))
|
||||||
|
//console.log("all backlinks fn")
|
||||||
// Use gray-matter to parse the post metadata section
|
// Use gray-matter to parse the post metadata section
|
||||||
const matterResult = Remark.getFrontMatterData(fileContent)// matter(fileContent).data
|
const matterResult = Transformer.getFrontMatterData(fileContent) || [] // matter(fileContent).data
|
||||||
const permalink = matterResult.permalink
|
//console.log("all post fn....")
|
||||||
const content = fileContent.split("---\n")[fileContent.split("---").length -1 ]
|
|
||||||
|
|
||||||
// Combine the data with the slug
|
//const permalink = matterResult.permalink
|
||||||
return {
|
//const content = fileContent.split("---\n")[fileContent.split("---").length -1 ]
|
||||||
id:slug.toLowerCase().split(" ").join("-"),
|
|
||||||
...matterResult,
|
// Combine the data with the slug
|
||||||
}
|
return {
|
||||||
})
|
id:slug.toLowerCase().split(" ").join("-"),
|
||||||
|
...matterResult,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
return allPostsData
|
return allPostsData
|
||||||
}
|
}
|
@ -1,58 +0,0 @@
|
|||||||
import matter from 'gray-matter'
|
|
||||||
var remark = require('remark')
|
|
||||||
import path from 'path'
|
|
||||||
import fs from "fs"
|
|
||||||
import remark2react from 'remark-react'
|
|
||||||
|
|
||||||
const unified = require('unified')
|
|
||||||
const markdown = require('remark-parse')
|
|
||||||
const { wikiLinkPlugin } = require('remark-wiki-link');
|
|
||||||
|
|
||||||
var guide = require('remark-preset-lint-markdown-style-guide')
|
|
||||||
var html = require('remark-html')
|
|
||||||
var report = require('vfile-reporter')
|
|
||||||
var frontmatter = require('remark-frontmatter')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const postsDirectory = path.join(process.cwd(), 'posts')
|
|
||||||
const isFile = fileName => {
|
|
||||||
return fs.lstatSync(fileName).isFile()
|
|
||||||
}
|
|
||||||
|
|
||||||
export const Remark = {
|
|
||||||
getFrontMatterData:function(filecontent){return matter(filecontent).data},
|
|
||||||
|
|
||||||
getHtmlContent:function(content, {fileNames}){
|
|
||||||
let htmlContent = []
|
|
||||||
let backlinks = []
|
|
||||||
unified()
|
|
||||||
.use(markdown, { gfm: true })
|
|
||||||
.use(frontmatter, ['yaml', 'toml'])
|
|
||||||
.use(wikiLinkPlugin, {
|
|
||||||
permalinks:fileNames,
|
|
||||||
pageResolver: function(pageName){
|
|
||||||
const name = [pageName.replace(/ /g, "-").toLowerCase()]
|
|
||||||
backlinks.push(name[0]);
|
|
||||||
//console.log("backlinks", backlinks);
|
|
||||||
return name
|
|
||||||
},
|
|
||||||
hrefTemplate: function(permalink){
|
|
||||||
//console.log("wiki pemalink", permalink);
|
|
||||||
permalink = permalink.replace("ç","c").replace("ı","i").replace("ş","s")
|
|
||||||
return `/note/${permalink}`
|
|
||||||
}
|
|
||||||
}).use(html)
|
|
||||||
.process(content,
|
|
||||||
function (err, file) {
|
|
||||||
//console.log("asd", String(file).slice(0,50))
|
|
||||||
//console.error("remark: ", report(err || file))
|
|
||||||
htmlContent.push(String(file).replace("\n", ""))
|
|
||||||
}
|
|
||||||
)
|
|
||||||
htmlContent = htmlContent.join("")
|
|
||||||
htmlContent = htmlContent.split("---")
|
|
||||||
//console.log("ffffff ", htmlContent)
|
|
||||||
return [htmlContent, backlinks]
|
|
||||||
}
|
|
||||||
}
|
|
143
lib/transformer.js
Normal file
143
lib/transformer.js
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
import matter from 'gray-matter'
|
||||||
|
import path from 'path'
|
||||||
|
import fs from "fs"
|
||||||
|
var remark = require('remark')
|
||||||
|
//import remark2react from 'remark-react'
|
||||||
|
|
||||||
|
var remark2react = require("remark-react");
|
||||||
|
const unified = require('unified')
|
||||||
|
const markdown = require('remark-parse')
|
||||||
|
const { wikiLinkPlugin } = require('remark-wiki-link');
|
||||||
|
|
||||||
|
var guide = require('remark-preset-lint-markdown-style-guide')
|
||||||
|
var html = require('remark-html')
|
||||||
|
var report = require('vfile-reporter')
|
||||||
|
var vfile = require('to-vfile')
|
||||||
|
var frontmatter = require('remark-frontmatter')
|
||||||
|
var stringify = require('remark-stringify')
|
||||||
|
var externalLinks = require('remark-external-links')
|
||||||
|
const highlight = require('remark-highlight.js')
|
||||||
|
|
||||||
|
|
||||||
|
const postsDirectory = path.join(process.cwd(), 'posts')
|
||||||
|
const isFile = fileName => {
|
||||||
|
return fs.lstatSync(fileName).isFile()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const Transformer = {
|
||||||
|
haveFrontMatter:function(content){
|
||||||
|
//console.log("\t Front matter data content", content)
|
||||||
|
if (!content) return false
|
||||||
|
var indexOfFirst = content.indexOf("---")
|
||||||
|
//console.log("\t Front matter data firstIndex ", indexOfFirst)
|
||||||
|
//console.log("index first", indexOfFirst)
|
||||||
|
if (indexOfFirst === -1){
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
var indexOfSecond = content.indexOf("---", (indexOfFirst + 1))
|
||||||
|
if (indexOfSecond !== -1) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
},
|
||||||
|
getFrontMatterData:function(filecontent){
|
||||||
|
if (Transformer.haveFrontMatter(filecontent)){
|
||||||
|
return matter(filecontent).data
|
||||||
|
}
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
getHtmlContent:function(content, {fileNames}){
|
||||||
|
let htmlContent = []
|
||||||
|
let internalLinks = []
|
||||||
|
const sanitizedContent = Transformer.preprocessThreeDashes(content)
|
||||||
|
unified()
|
||||||
|
.use(markdown, { gfm: true })
|
||||||
|
.use(highlight)
|
||||||
|
.use(externalLinks, {target: "_blank", rel: ['nofollow']})
|
||||||
|
.use(frontmatter, ['yaml', 'toml'])
|
||||||
|
.use(wikiLinkPlugin, {
|
||||||
|
permalinks:fileNames,
|
||||||
|
pageResolver: function(pageName){
|
||||||
|
const name = [Transformer.parseFileNameFromPath(pageName)]
|
||||||
|
//console.log("\n\nwiki internal links", Transformer.parseFileNameFromPath(name[0]));
|
||||||
|
internalLinks.push(Transformer.parseFileNameFromPath(name[0]));
|
||||||
|
return name
|
||||||
|
},
|
||||||
|
hrefTemplate: function(permalink){
|
||||||
|
permalink = Transformer.normalizeFileName(permalink)
|
||||||
|
permalink = permalink.replace("ç","c").replace("ı","i").replace("ş","s")
|
||||||
|
//console.log("wiki pemalink", permalink);
|
||||||
|
return `/note/${permalink}`
|
||||||
|
}
|
||||||
|
}).use(html)
|
||||||
|
.process(sanitizedContent,
|
||||||
|
function (err, file) {
|
||||||
|
//console.log("asd", String(file).slice(0,50))
|
||||||
|
//console.error("remark: ", report(err || file))
|
||||||
|
htmlContent.push(String(file).replace("\n", ""))
|
||||||
|
}
|
||||||
|
)
|
||||||
|
htmlContent = htmlContent.join("")
|
||||||
|
htmlContent = htmlContent.split("---")
|
||||||
|
//console.log("ffffff ", htmlContent)
|
||||||
|
return [htmlContent, internalLinks]
|
||||||
|
},
|
||||||
|
|
||||||
|
/* SANITIZE MARKDOWN FOR --- */
|
||||||
|
preprocessThreeDashes:function(content){
|
||||||
|
var indexOfFirst = content.indexOf("---")
|
||||||
|
if (indexOfFirst === -1){
|
||||||
|
return content
|
||||||
|
}
|
||||||
|
var indexOfSecond = content.indexOf("---", (indexOfFirst + 1))
|
||||||
|
const frontPart = content.slice(0, indexOfSecond);
|
||||||
|
const contentPart = content.slice(indexOfSecond);
|
||||||
|
const processedContent = contentPart.split("---").join("")
|
||||||
|
//console.log("preprocess", indexOfFirst, indexOfSecond)
|
||||||
|
//return frontPart.concat(processedContent)
|
||||||
|
return processedContent
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Normalize File Names */
|
||||||
|
normalizeFileName:function(filename){
|
||||||
|
var processedFileName = filename.replace(".md", "")
|
||||||
|
processedFileName = processedFileName.split(" ").join("-")
|
||||||
|
processedFileName = processedFileName.toLowerCase()
|
||||||
|
const conversionLetters = [["ç", "c"], ["ş","s"], ["ı", "i"], ["ü","u"], ["ö","o"], ["ğ","g"]];
|
||||||
|
conversionLetters.forEach(letterPair => {
|
||||||
|
processedFileName = processedFileName.replace(letterPair[0], letterPair[1])
|
||||||
|
}
|
||||||
|
)
|
||||||
|
//console.log("filename", processedFileName)
|
||||||
|
return processedFileName
|
||||||
|
},
|
||||||
|
/* Parse file name from path then sanitize it */
|
||||||
|
parseFileNameFromPath:function(filepath){
|
||||||
|
const parsedFileFromPath = filepath.split("/")[filepath.split("/").length - 1]
|
||||||
|
const parsedFileName = parsedFileFromPath.replace(".md", "")
|
||||||
|
return Transformer.normalizeFileName(parsedFileName)
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Pair provided and existing Filenames*/
|
||||||
|
pairCurrentFile: function(provided, ListOfFilePaths){
|
||||||
|
//console.log(provided, ListOfFilePaths)
|
||||||
|
const providedSanitizedFileName = Transformer.normalizeFileName(provided);
|
||||||
|
|
||||||
|
// Map file paths and return true if it pairs with provided
|
||||||
|
const possibleFilePath = ListOfFilePaths.filter(possibleFilePath => {
|
||||||
|
const possibleFileName = Transformer.parseFileNameFromPath(possibleFilePath);
|
||||||
|
const possibleSanitizedFileName = Transformer.normalizeFileName(possibleFileName)
|
||||||
|
//console.log("----", providedSanitizedFileName, possibleSanitizedFileName)
|
||||||
|
|
||||||
|
//console.log("---", possibleSanitizedFileName, providedSanitizedFileName)
|
||||||
|
if (providedSanitizedFileName === possibleSanitizedFileName){
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
//console.log("p---", possibleFilePath)
|
||||||
|
return possibleFilePath[0]
|
||||||
|
}
|
||||||
|
}
|
10
package.json
10
package.json
@ -8,6 +8,9 @@
|
|||||||
"start": "next start"
|
"start": "next start"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"cytoscape-d3-force": "^1.1.4",
|
||||||
|
"cytoscape-node-html-label": "^1.2.1",
|
||||||
|
"d3": "^6.2.0",
|
||||||
"fs": "^0.0.1-security",
|
"fs": "^0.0.1-security",
|
||||||
"gray-matter": "^4.0.2",
|
"gray-matter": "^4.0.2",
|
||||||
"jsnetworkx": "^0.3.4",
|
"jsnetworkx": "^0.3.4",
|
||||||
@ -16,16 +19,21 @@
|
|||||||
"react": "16.13.1",
|
"react": "16.13.1",
|
||||||
"react-dom": "16.13.1",
|
"react-dom": "16.13.1",
|
||||||
"remark": "^13.0.0",
|
"remark": "^13.0.0",
|
||||||
|
"remark-external-links": "^8.0.0",
|
||||||
|
"remark-highlight.js": "^6.0.0",
|
||||||
"remark-html": "^13.0.1",
|
"remark-html": "^13.0.1",
|
||||||
"remark-parse": "^9.0.0",
|
"remark-parse": "^9.0.0",
|
||||||
"remark-preset-lint-markdown-style-guide": "^4.0.0",
|
"remark-preset-lint-markdown-style-guide": "^4.0.0",
|
||||||
"remark-wiki-link": "^1.0.0",
|
"remark-wiki-link": "^1.0.0",
|
||||||
|
"to-vfile": "^6.1.0",
|
||||||
"unified": "^9.2.0",
|
"unified": "^9.2.0",
|
||||||
"vfile-reporter": "^6.0.1"
|
"vfile-reporter": "^6.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"bimap": "^0.0.15",
|
"bimap": "^0.0.15",
|
||||||
|
"cytoscape": "^3.17.0",
|
||||||
"remark-frontmatter": "^3.0.0",
|
"remark-frontmatter": "^3.0.0",
|
||||||
"remark-react": "^8.0.0"
|
"remark-react": "^8.0.0",
|
||||||
|
"remark-stringify": "^9.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,5 +3,6 @@ import '../styles/webflow-layout.css'
|
|||||||
|
|
||||||
|
|
||||||
export default function App({ Component, pageProps }) {
|
export default function App({ Component, pageProps }) {
|
||||||
return <Component {...pageProps} />
|
|
||||||
|
return <Component { ...pageProps} />
|
||||||
}
|
}
|
||||||
|
@ -1,42 +1,46 @@
|
|||||||
import Document, { Html, Head, Main, NextScript } from 'next/document'
|
import Document, { Html, Head, Main, NextScript } from 'next/document'
|
||||||
|
import { useRouter } from 'next/router'
|
||||||
|
import { useMemo } from "react";
|
||||||
import { getSinglePost } from "../lib/post";
|
import { getSinglePost } from "../lib/post";
|
||||||
import Link from 'next/link'
|
import Link from 'next/link';
|
||||||
|
|
||||||
class MyDocument extends Document {
|
class MyDocument extends Document {
|
||||||
|
|
||||||
static async getInitialProps(ctx) {
|
static async getInitialProps(ctx) {
|
||||||
const initialProps = await Document.getInitialProps(ctx)
|
const initialProps = await Document.getInitialProps(ctx)
|
||||||
|
//console.log("doc", initialProps)
|
||||||
const sidebar = getSinglePost("sidebar.md")
|
const sidebar = getSinglePost("sidebar.md")
|
||||||
|
|
||||||
//console.log("document: ", sidebar)
|
|
||||||
return { sidebar, ...initialProps }
|
return { sidebar, ...initialProps }
|
||||||
}
|
}
|
||||||
|
|
||||||
render(props) {
|
render(props) {
|
||||||
|
//console.log("document: ", this.props)
|
||||||
return (
|
return (
|
||||||
<Html data-wf-page="5fb1bacf34bc79d543fcd389" data-wf-site="5fb1bacf34bc79b9c4fcd388">
|
<Html data-wf-page="5fb1bacf34bc79d543fcd389" data-wf-site="5fb1bacf34bc79b9c4fcd388">
|
||||||
<link rel="stylesheet"
|
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.3.2/styles/atom-one-dark.min.css" />
|
||||||
href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.3.2/styles/default.min.css">
|
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.3.2/highlight.min.js"></script>
|
|
||||||
|
|
||||||
<Head />
|
<Head />
|
||||||
<script src="https://d3js.org/d3.v6.min.js"></script>
|
<script src="https://d3js.org/d3.v3.min.js"></script>
|
||||||
|
|
||||||
<body className="body">
|
<body className="body">
|
||||||
|
|
||||||
{/* NAVBAR */}
|
{/* NAVBAR */}
|
||||||
<div data-collapse="medium" data-animation="default" data-duration="400" role="banner" class="navbar w-nav">
|
<div data-collapse="medium" data-animation="default"
|
||||||
<div class="container w-container">
|
data-duration="400" role="banner" className="navbar w-nav"
|
||||||
<div data-w-id="d4658744-8b5f-bf5e-9b20-4c31718a793d" class="w-nav-button" >
|
id="navbar"
|
||||||
<div class="w-icon-nav-menu" id="nav-button">
|
>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#000000" strokeWidth="3.5" strokeLinecap="round" strokeLinejoin="round"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg> </div>
|
<div class="container w-container">
|
||||||
|
<div data-w-id="d4658744-8b5f-bf5e-9b20-4c31718a793d" class="w-nav-button" >
|
||||||
|
<div class="w-icon-nav-menu" id="nav-button">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#000000" strokeWidth="3.5" strokeLinecap="round" strokeLinejoin="round"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<Link href="/">
|
||||||
|
<a class="brand-3 w-nav-brand">
|
||||||
|
<p class="heading">Digital Backroom</p>
|
||||||
|
</a>
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Link href="/">
|
|
||||||
<a class="brand-3 w-nav-brand">
|
|
||||||
<p class="heading">Digital Backroom</p>
|
|
||||||
</a>
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<section className="section">
|
<section className="section">
|
||||||
@ -45,16 +49,19 @@ class MyDocument extends Document {
|
|||||||
data-w-id="71d5791f-856a-b6c4-e8ee-0ab2729e1de3"
|
data-w-id="71d5791f-856a-b6c4-e8ee-0ab2729e1de3"
|
||||||
className="sidebar"
|
className="sidebar"
|
||||||
id="sidebar"
|
id="sidebar"
|
||||||
dangerouslySetInnerHTML={{__html:this.props.sidebar.data}}
|
|
||||||
>
|
>
|
||||||
|
<div dangerouslySetInnerHTML={{__html:this.props.sidebar.data}} />
|
||||||
|
<div id="side-graph-box" />
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* CONTENT */}
|
{/* CONTENT */}
|
||||||
<main className="main">
|
<main className="main">
|
||||||
<Main/>
|
<Main ppp="" />
|
||||||
</main>
|
</main>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<NextScript />
|
<NextScript />
|
||||||
</body>
|
</body>
|
||||||
</Html>
|
</Html>
|
||||||
|
@ -1,28 +1,37 @@
|
|||||||
import Head from "next/head";
|
import Head from "next/head";
|
||||||
|
import { useRouter } from 'next/router'
|
||||||
import { useEffect,useRef } from "react";
|
import { useEffect,useRef } from "react";
|
||||||
import Link from 'next/link'
|
import Link from 'next/link'
|
||||||
import Layout, { siteTitle } from "../components/layout";
|
import Layout, { siteTitle } from "../components/layout";
|
||||||
import { getSinglePost, getAllBacklinks } from "../lib/post";
|
import { getSinglePost, getGraphData } from "../lib/post";
|
||||||
var jsnx = require('jsnetworkx');
|
import { Network } from "../components/graph";
|
||||||
|
|
||||||
export default function Home({ content, backlinks, filenames }) {
|
|
||||||
|
export default function Home({ content, graphdata, filenames, ...props }) {
|
||||||
|
//console.log("Index Page Props: ", props /* backlinks, filenames*/)
|
||||||
const ref = useRef(null);
|
const ref = useRef(null);
|
||||||
//console.log("Index Page Props: ", backlinks, filenames)
|
const router = useRouter()
|
||||||
|
|
||||||
//var G = jsnx.binomialGraph(filenames.length, 1)
|
//var G = jsnx.binomialGraph(filenames.length, 1)
|
||||||
//var G = jsnx.completeGraph(filenames.length);
|
//var G = jsnx.completeGraph(filenames.length);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
if (ref && ref.current){
|
||||||
|
|
||||||
})
|
const G = Network({el:ref.current, graphdata, current:"index", router, allNodes:true})
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
return (
|
return (
|
||||||
<Layout home>
|
<Layout home>
|
||||||
<Head>…</Head>
|
<Head></Head>
|
||||||
<section
|
<img src="https://cbsofyalioglu.fra1.digitaloceanspaces.com/cbs/digital-garden.jpg" />
|
||||||
>
|
<section>
|
||||||
<div
|
<div dangerouslySetInnerHTML={{__html: content.data}} />
|
||||||
dangerouslySetInnerHTML={{__html: content.data}}
|
|
||||||
></div>
|
|
||||||
<div id="demo-canvas" ref={ref}></div>
|
|
||||||
</section>
|
</section>
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div id="graph-box" ref={ref}>
|
||||||
|
|
||||||
|
</div>
|
||||||
</Layout>
|
</Layout>
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -30,11 +39,11 @@ export default function Home({ content, backlinks, filenames }) {
|
|||||||
|
|
||||||
export function getStaticProps() {
|
export function getStaticProps() {
|
||||||
const contentData = getSinglePost("index.md");
|
const contentData = getSinglePost("index.md");
|
||||||
const [backlinksRaw, filenamesRaw] = getAllBacklinks();
|
const graphdata = getGraphData();
|
||||||
return {
|
return {
|
||||||
props: {
|
props: {
|
||||||
content:contentData,
|
content:contentData,
|
||||||
//backlinks:JSON.parse(backlinksRaw),
|
graphdata:graphdata,
|
||||||
//filenames:JSON.parse(filenamesRaw)
|
//filenames:JSON.parse(filenamesRaw)
|
||||||
//sidebar:sidebarData
|
//sidebar:sidebarData
|
||||||
},
|
},
|
||||||
|
@ -1,29 +1,76 @@
|
|||||||
import Head from "next/head";
|
import Head from "next/head";
|
||||||
import Link from 'next/link'
|
import Link from 'next/link'
|
||||||
|
import { useRouter } from 'next/router'
|
||||||
|
import { useEffect,useRef } from "react";
|
||||||
import Layout, { siteTitle } from "../../components/layout";
|
import Layout, { siteTitle } from "../../components/layout";
|
||||||
import { getPostListData, getSinglePost} from "../../lib/post";
|
import { getPostListData, getSinglePost, getGraphData} from "../../lib/post";
|
||||||
|
import { Network } from "../../components/graph";
|
||||||
|
import Cytoscape from "cytoscape";
|
||||||
|
|
||||||
|
|
||||||
|
export default function Home({ note, graphdata, ...props }) {
|
||||||
|
var jsnx = require('jsnetworkx');
|
||||||
|
|
||||||
|
//console.log("Note Page: ")
|
||||||
|
//console.log("Index Page Props: ", props /* backlinks, filenames*/)
|
||||||
|
|
||||||
|
const backlinks = graphdata.filter(g => g.data.target === note.id)
|
||||||
|
|
||||||
|
const ref = useRef(null);
|
||||||
|
const router = useRouter()
|
||||||
|
var G;
|
||||||
|
useEffect(() => {
|
||||||
|
if (ref && ref.current){
|
||||||
|
G = Network({el:ref.current, graphdata, current:note.id, router, allNodes:false})
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (backlinks.length > 0){
|
||||||
|
const sideBox = document.getElementById("side-graph-box");
|
||||||
|
const Backlink = (data) => (
|
||||||
|
<div className="backlink-box">
|
||||||
|
<Link href={data.id === "index" ? "/" : `/note/${data.id}`}>
|
||||||
|
<a>
|
||||||
|
{data.title ? data.title : data.id}
|
||||||
|
</a>
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
|
||||||
|
//sideBox
|
||||||
|
}
|
||||||
|
},[])
|
||||||
|
|
||||||
|
|
||||||
export default function Home({ note }) {
|
|
||||||
console.log("Note Page: ", note)
|
|
||||||
return (
|
return (
|
||||||
<Layout home>
|
<Layout home>
|
||||||
<Head>…</Head>
|
<Head>
|
||||||
|
{note.title && <meta name="title" content={note.title} />}
|
||||||
|
{note.canonical && <meta name="canonical_url" content={note.canonical} />}
|
||||||
|
{note.description && <meta name="description" content={note.description} />}
|
||||||
|
|
||||||
|
</Head>
|
||||||
<section
|
<section
|
||||||
>
|
>
|
||||||
|
{note.title && <h1>{note.title}</h1>}
|
||||||
<div
|
<div
|
||||||
className="article-body"
|
className="article-body"
|
||||||
dangerouslySetInnerHTML={{__html:note.data}}>
|
dangerouslySetInnerHTML={{__html:note.data}}>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
<hr/>
|
||||||
|
<div id="graph-box" ref={ref}>
|
||||||
|
|
||||||
|
</div>
|
||||||
</Layout>
|
</Layout>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
export async function getStaticPaths() {
|
export async function getStaticPaths() {
|
||||||
const allPostsData = await getPostListData();
|
const allPostsData = await getPostListData();
|
||||||
const paths = allPostsData.map(p => ({params: {id:p.id}}))
|
const paths = allPostsData.map(p => ({params: {id:p.id}}))
|
||||||
console.log("paths", paths)
|
//console.log("paths", paths)
|
||||||
return {
|
return {
|
||||||
paths,
|
paths,
|
||||||
fallback:false
|
fallback:false
|
||||||
@ -31,10 +78,14 @@ export async function getStaticPaths() {
|
|||||||
}
|
}
|
||||||
export async function getStaticProps({ params }) {
|
export async function getStaticProps({ params }) {
|
||||||
const note = await getSinglePost(params.id);
|
const note = await getSinglePost(params.id);
|
||||||
console.log("note: ", note)
|
const graphdata = getGraphData();
|
||||||
|
|
||||||
|
|
||||||
|
//console.log("note: ", params)
|
||||||
return {
|
return {
|
||||||
props: {
|
props: {
|
||||||
note,
|
note,
|
||||||
|
graphdata:graphdata,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
8
posts/.obsidian/workspace
vendored
8
posts/.obsidian/workspace
vendored
@ -10,7 +10,7 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "index.md",
|
"file": "sidebar.md",
|
||||||
"mode": "source"
|
"mode": "source"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -22,7 +22,7 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "index.md",
|
"file": "sidebar.md",
|
||||||
"mode": "source"
|
"mode": "source"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -82,7 +82,7 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "backlink",
|
"type": "backlink",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "index.md",
|
"file": "sidebar.md",
|
||||||
"collapseAll": false,
|
"collapseAll": false,
|
||||||
"extraContext": false,
|
"extraContext": false,
|
||||||
"sortOrder": "alphabetical",
|
"sortOrder": "alphabetical",
|
||||||
@ -99,11 +99,11 @@
|
|||||||
"collapsed": true
|
"collapsed": true
|
||||||
},
|
},
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
|
"sidebar.md",
|
||||||
"index.md",
|
"index.md",
|
||||||
"Code/Codesheet.md",
|
"Code/Codesheet.md",
|
||||||
"Code/JS/Deep Compare.md",
|
"Code/JS/Deep Compare.md",
|
||||||
"articles-eng/Untitled.md",
|
"articles-eng/Untitled.md",
|
||||||
"sidebar.md",
|
|
||||||
"Untitled.md"
|
"Untitled.md"
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
```css
|
```css
|
||||||
/* --> Makes backdrop frost-blur effect on a container */
|
/* --> Makes backdrop frost-blur effect on a container */
|
||||||
.frost-blur {
|
.frost-blur {
|
||||||
|
@ -21,7 +21,7 @@ __CSS Snippets__
|
|||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
__HTML__
|
__HTML__
|
||||||
* [[HTTPS Force meta tag|Force Insecure Requrests to HTTPS]]: Güvensiz bağlantıları HTTPS'e zorlar. `<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">`
|
* [[HTTPS Force Meta Tag]]: Güvensiz bağlantıları HTTPS'e zorlar.
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
@ -35,7 +35,4 @@ __HTML__
|
|||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
* SEO
|
|
||||||
* [[Parameterized URL Index]]: If an indexer can index the link, you get DA93 backlink.
|
|
||||||
|
|
||||||
<br/>
|
<br/>
|
1
posts/Code/HTML/https-force-meta-tag.md
Normal file
1
posts/Code/HTML/https-force-meta-tag.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
`<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">`
|
@ -1,4 +1,4 @@
|
|||||||
Bu yöntemi Stackoverflow'da [[blindfish|https://stackoverflow.com/a/61979865/9351362]] yazmış.
|
Bu yöntemi Stackoverflow'da [blindfish](https://stackoverflow.com/a/61979865/9351362) yazmış.
|
||||||
|
|
||||||
```html
|
```html
|
||||||
// LibLoader.svelte
|
// LibLoader.svelte
|
||||||
|
@ -8,7 +8,6 @@ There are many approaches in recommenders systems considering various situations
|
|||||||
|
|
||||||
The basic idea of collaborative filtering is lying on analyzing people's shared interests on domain specific items (in our case, domain items are movies ). Calculating similarity between taste of people or similarity between different items with each other allow us to make a good recommendations. In general, Those recommendations can be item-based and/or user-based.
|
The basic idea of collaborative filtering is lying on analyzing people's shared interests on domain specific items (in our case, domain items are movies ). Calculating similarity between taste of people or similarity between different items with each other allow us to make a good recommendations. In general, Those recommendations can be item-based and/or user-based.
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
On the rest of this article, to make a good illustration we will consider a hypothetical sitution that are mainly consists of two person; Person A and Person B and two items (movies) Movie X and Movie Y.
|
On the rest of this article, to make a good illustration we will consider a hypothetical sitution that are mainly consists of two person; Person A and Person B and two items (movies) Movie X and Movie Y.
|
||||||
|
|
||||||
|
@ -4,6 +4,8 @@ title: Self-Hosted Confluence Installation with Custom Domain
|
|||||||
|
|
||||||
One of our customers from [Seablue](https://www.seabluetours.com) and [AirportTransfer](https://airporttransfer.ist) ask the possibility of using Atlassian Confluence as a self-hosted wiki program. We look for solutions for a while. Later on, we discovered Cloudron app. In this article, We'll install Confluence with a custom domain on our servers.
|
One of our customers from [Seablue](https://www.seabluetours.com) and [AirportTransfer](https://airporttransfer.ist) ask the possibility of using Atlassian Confluence as a self-hosted wiki program. We look for solutions for a while. Later on, we discovered Cloudron app. In this article, We'll install Confluence with a custom domain on our servers.
|
||||||
|
|
||||||
|
[[Test Linki]]
|
||||||
|
[[Zettelkasten Metodu]]
|
||||||
|
|
||||||
### What is Confluence?
|
### What is Confluence?
|
||||||
Confluence is a team collaboration and wiki software developed by Australian software company Atlassian.
|
Confluence is a team collaboration and wiki software developed by Australian software company Atlassian.
|
||||||
|
@ -6,7 +6,7 @@ __cover__: https://www.cbsofyalioglu.com/content/images/size/w1000/2020/09/blog-
|
|||||||
![Cover](https://www.cbsofyalioglu.com/content/images/size/w1000/2020/09/blog-siteleri.jpg)
|
![Cover](https://www.cbsofyalioglu.com/content/images/size/w1000/2020/09/blog-siteleri.jpg)
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Günlük tutmak, kişisel fikirlerimizi ve kültürel birikimimizi paylaşmak, yazma yeteneğimizi geliştirmek, ürün veya hizmetlerimizi satmak gibi bir çok sebeple her gün sayısız blog yazısı yazılıyor. Siz de ister işletmeniz ister kendiniz için bir tane blog oluşturma fikrine sahipseniz bu yazı size göre.
|
Günlük tutmak, kişisel fikirlerimizi ve kültürel birikimimizi paylaşmak, yazma yeteneğimizi geliştirmek, ürün veya hizmetlerimizi satmak gibi bir çok sebeple her gün sayısız blog yazısı yazılıyor. Siz de ister işletmeniz ister kendiniz için bir tane blog oluşturma fikrine sahipseniz bu yazı size göre.
|
||||||
|
|
||||||
@ -14,7 +14,7 @@ Yazının başında ***blog açmak isteyenlere öneriler*** ve dikkat edilmesi
|
|||||||
|
|
||||||
Ayrıca fotoğraf ve illüstrasyon sanatçıları için ayrıca listeye alınan ve dijital ürünlerini satabilecekleri ve foto-blog'larını oluşturabilecekleri bir kaç platform da mevcut.
|
Ayrıca fotoğraf ve illüstrasyon sanatçıları için ayrıca listeye alınan ve dijital ürünlerini satabilecekleri ve foto-blog'larını oluşturabilecekleri bir kaç platform da mevcut.
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Ne Tür Blog Platformları İncelenecek?**
|
### **Ne Tür Blog Platformları İncelenecek?**
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ En azından şu hizmetlere bakabiliriz:
|
|||||||
- Epost bülteni tasarımı ve gönderilmesi.
|
- Epost bülteni tasarımı ve gönderilmesi.
|
||||||
- Aylık eposta gönderim limitleri.
|
- Aylık eposta gönderim limitleri.
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **En İyi Blog Siteleri**
|
## **En İyi Blog Siteleri**
|
||||||
|
|
||||||
@ -136,7 +136,7 @@ Gelelim fiyat kısmına: Ghost' blog kullanmanın maliyeti 29$, tabi eğer Ghost
|
|||||||
|
|
||||||
Ayrıca biraz uğraşmayı göze alırsanız, [Google Cloud Platform üzerinde ücretsiz olarak Ghost blog açmak](https://www.cbsofyalioglu.com/post/ghost-blog/) isimli yazıma bakabilirsiniz. ([[Ghost Blog Açma Rehberi]])
|
Ayrıca biraz uğraşmayı göze alırsanız, [Google Cloud Platform üzerinde ücretsiz olarak Ghost blog açmak](https://www.cbsofyalioglu.com/post/ghost-blog/) isimli yazıma bakabilirsiniz. ([[Ghost Blog Açma Rehberi]])
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **2) SquareSpace**
|
### **2) SquareSpace**
|
||||||
|
|
||||||
@ -165,7 +165,7 @@ Ayrıca tasarım konusunda yalnızca size sunulan şablonları özelleştirmekle
|
|||||||
|
|
||||||
Toplam 70'den fazla hazır web sitesi şablonuna sahip yeterli gibi gözüküyor ancak gene de daha fazla olabilirdi.
|
Toplam 70'den fazla hazır web sitesi şablonuna sahip yeterli gibi gözüküyor ancak gene de daha fazla olabilirdi.
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **3) HashNode**
|
### **3) HashNode**
|
||||||
|
|
||||||
@ -183,7 +183,7 @@ Markdown editörlü bu sitede yalnızca yazılarınızı paylaşabilir ve bir ka
|
|||||||
|
|
||||||
Diğer ücretsiz blog sitelerinden HashNode'u ayıran şey kendi özel alan adınızı da ücretsiz olarak bağlamanıza izin veriyor oluşu.
|
Diğer ücretsiz blog sitelerinden HashNode'u ayıran şey kendi özel alan adınızı da ücretsiz olarak bağlamanıza izin veriyor oluşu.
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **4) WebFlow**
|
### **4) WebFlow**
|
||||||
|
|
||||||
@ -199,7 +199,7 @@ Ayrıca dahili Lottie animasyon deteğine sahip olduğunu da belitrtmek lazım.
|
|||||||
|
|
||||||
Webflow fiyatlandırmayı 2 genel kategori üzerinden yapıyor. $12'lık paket ile kendi alan adınızı bağlayabilirsiniz. Bir diğer kategori ise "Account Plan" adı altında sunulan ve daha çok freelancer, geliştiriciler ve ajanslar için uygun olan kategori. Bu kategori daha çok aynı anda kaç proje barındırabileceğiniz ve yatığınız projelerin kodlarını dışarı çıkartmak için geçerli.
|
Webflow fiyatlandırmayı 2 genel kategori üzerinden yapıyor. $12'lık paket ile kendi alan adınızı bağlayabilirsiniz. Bir diğer kategori ise "Account Plan" adı altında sunulan ve daha çok freelancer, geliştiriciler ve ajanslar için uygun olan kategori. Bu kategori daha çok aynı anda kaç proje barındırabileceğiniz ve yatığınız projelerin kodlarını dışarı çıkartmak için geçerli.
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **5) Wix**
|
### **5) Wix**
|
||||||
|
|
||||||
@ -215,7 +215,7 @@ Ayrıca 500'den fazla hazır şablona sahip ve bunları ücretsiz kullanabiliyor
|
|||||||
|
|
||||||
Yapay zeka destekli editörünün yanında normal editör ve EditorX dahil 3 editöre sahip.
|
Yapay zeka destekli editörünün yanında normal editör ve EditorX dahil 3 editöre sahip.
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **6) Visual Society**
|
### **6) Visual Society**
|
||||||
|
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
---
|
---
|
||||||
title: Zettelkasten Metodu ile Akıllı Not-Alma
|
title: Zettelkasten Metodu ile Akıllı Not-Alma
|
||||||
description: Zettelkasten metodu ve üretkenliğinizi arttıracak not alma yöntemleri.
|
description: Zettelkasten metodu ve üretkenliğinizi arttıracak not alma yöntemleri.
|
||||||
canonical: [https://www.cbsofyalioglu.com/post/zettelkasten-metodu/](https://www.cbsofyalioglu.com/post/zettelkasten-metodu/)
|
canonical: https://www.cbsofyalioglu.com/post/zettelkasten-metodu/
|
||||||
|
cover: https://cbsofyalioglucom.imfast.io/zettelkasten/zettelkasten.jpg
|
||||||
cover:[https://cbsofyalioglucom.imfast.io/zettelkasten/zettelkasten.jpg](https://cbsofyalioglucom.imfast.io/zettelkasten/zettelkasten.jpg)
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![https://cbsofyalioglucom.imfast.io/zettelkasten/zettelkasten.jpg](https://cbsofyalioglucom.imfast.io/zettelkasten/zettelkasten.jpg)
|
![https://cbsofyalioglucom.imfast.io/zettelkasten/zettelkasten.jpg](https://cbsofyalioglucom.imfast.io/zettelkasten/zettelkasten.jpg)
|
||||||
@ -15,6 +14,7 @@ cover:[https://cbsofyalioglucom.imfast.io/zettelkasten/zettelkasten.jpg](https:/
|
|||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
|
[[Confluence Installation]]
|
||||||
|
|
||||||
Her taraftan bilgi bombardımanına tutulmaya pek ala alıştık artık. Akıllı telefonlar ve sosyal medya uygulamaları derken artık çok daha niş içerikler tüketmemize olanak veren ve bu dar bağlamın da dışına çıkmamamız için de yeterli içeriği bize sunabilecek uygulamalar da fazlasıyla mevcut. (Flipboard, Medium, Feedly, Paper.li gibi)
|
Her taraftan bilgi bombardımanına tutulmaya pek ala alıştık artık. Akıllı telefonlar ve sosyal medya uygulamaları derken artık çok daha niş içerikler tüketmemize olanak veren ve bu dar bağlamın da dışına çıkmamamız için de yeterli içeriği bize sunabilecek uygulamalar da fazlasıyla mevcut. (Flipboard, Medium, Feedly, Paper.li gibi)
|
||||||
|
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: "Sidebar"
|
||||||
|
---
|
||||||
### [Digital Notes](/)
|
### [Digital Notes](/)
|
||||||
|
|
||||||
* [[Zettelkasten Metodu]]
|
* [[Zettelkasten Metodu]]
|
||||||
|
* [[Codesheet]]
|
3
settings.json
Normal file
3
settings.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"title":"Digital Backrom"
|
||||||
|
}
|
@ -47,6 +47,9 @@ p,a, li, h1, h2,h3,h4,h5,h6 {
|
|||||||
|
|
||||||
ul, ol {padding-left: 16px;}
|
ul, ol {padding-left: 16px;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
a {text-decoration: none;color:#222 !important}
|
a {text-decoration: none;color:#222 !important}
|
||||||
a.internal {
|
a.internal {
|
||||||
color: #131313 ;
|
color: #131313 ;
|
||||||
@ -66,7 +69,61 @@ a.internal:hover {
|
|||||||
rgba(0, 255, 85, 0.7) calc(50% - 9px));
|
rgba(0, 255, 85, 0.7) calc(50% - 9px));
|
||||||
background-position: 0px 100%;
|
background-position: 0px 100%;
|
||||||
}
|
}
|
||||||
|
.main a:not(.internal) {
|
||||||
|
color: #131313 ;
|
||||||
|
background-color: transparent !important;
|
||||||
|
background-image: linear-gradient(transparent 0%,transparent calc(50% - 9px),rgba(75, 58, 225, 0.631) calc(50% - 9px), rgba(0,255,0,0.35) 100%);
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-size: 100% 200%;
|
||||||
|
font-weight: bold;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 2px 4px;
|
||||||
|
transition: all 0.2s ease-out;
|
||||||
|
}
|
||||||
|
.main a.internal.new, .sidebar .main a.internal.new {
|
||||||
|
color: #131313 ;
|
||||||
|
background-color: transparent !important;
|
||||||
|
background-image: linear-gradient(transparent 0%,transparent calc(50% - 9px),rgba(250, 51, 54, 0.631) calc(50% - 9px), rgba(0,255,0,0.35) 100%);
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-size: 100% 200%;
|
||||||
|
font-weight: bold;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 2px 4px;
|
||||||
|
transition: all 0.2s ease-out;
|
||||||
|
}
|
||||||
|
.test {
|
||||||
|
color: #5221c4;
|
||||||
|
}
|
||||||
|
|
||||||
|
#graph-box {
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 32px;
|
||||||
|
margin-bottom:64px;
|
||||||
|
min-height:400px;
|
||||||
|
background-color: #29203d;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 4px 8px 1px rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
#side-graph-box {
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 32px;
|
||||||
|
margin-bottom:64px;
|
||||||
|
/*
|
||||||
|
min-height:250px;
|
||||||
|
*/
|
||||||
|
background-color: #29203d;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 4px 8px 1px rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
#side-graph-box label {
|
||||||
|
margin: 32px 0 !important;
|
||||||
|
}
|
||||||
|
.jsnx .node-label { fill: white !important;font-size:12px;}
|
||||||
|
.jsnx g.node {height:60px !important;}
|
||||||
|
|
||||||
|
|
||||||
|
pre code {padding:16px !important; border-radius: 8px;}
|
||||||
img {width:100%; height:auto; margin-top:16px; margin-bottom:48px; border-radius: 8px; box-shadow: 0 4px 8px -1px rgba(0, 0, 0, 0.3);}
|
img {width:100%; height:auto; margin-top:16px; margin-bottom:48px; border-radius: 8px; box-shadow: 0 4px 8px -1px rgba(0, 0, 0, 0.3);}
|
||||||
.sidebar h3,.sidebar h4 {margin-top:16px;}
|
.sidebar h3,.sidebar h4 {margin-top:16px;}
|
||||||
.w-nav-brand {color:#333333; text-decoration: none;}
|
.w-nav-brand {color:#333333; text-decoration: none;}
|
||||||
@ -110,7 +167,7 @@ img {width:100%; height:auto; margin-top:16px; margin-bottom:48px; border-radius
|
|||||||
display: flex;
|
display: flex;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
min-width: 250px;
|
min-width: 350px;
|
||||||
padding: 32px 16px;
|
padding: 32px 16px;
|
||||||
-webkit-box-orient: vertical;
|
-webkit-box-orient: vertical;
|
||||||
-webkit-box-direction: normal;
|
-webkit-box-direction: normal;
|
||||||
@ -132,7 +189,7 @@ img {width:100%; height:auto; margin-top:16px; margin-bottom:48px; border-radius
|
|||||||
|
|
||||||
.main {
|
.main {
|
||||||
position: relative;
|
position: relative;
|
||||||
left: 250px;
|
left: 350px;
|
||||||
z-index: 0;
|
z-index: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
@ -181,18 +238,25 @@ img {width:100%; height:auto; margin-top:16px; margin-bottom:48px; border-radius
|
|||||||
|
|
||||||
.navbar {
|
.navbar {
|
||||||
display: none;
|
display: none;
|
||||||
|
z-index: 5 !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@media screen and (min-width: 767px) {
|
@media screen and (min-width: 767px) {
|
||||||
.sidebar {left: 0 !important;}
|
.sidebar {left: 0 !important;}
|
||||||
.main {width: calc(100% - 250px);}
|
.main {width: calc(100% - 350px);}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 767px) {
|
@media screen and (max-width: 767px) {
|
||||||
.sidebar {
|
.sidebar {
|
||||||
position: absolute;
|
position: fixed;
|
||||||
left: -250px;
|
top:0;
|
||||||
|
z-index: 1;
|
||||||
|
left: -350px;
|
||||||
box-shadow: 3px 3px 8px -2px rgba(0, 0, 0, 0.3);
|
box-shadow: 3px 3px 8px -2px rgba(0, 0, 0, 0.3);
|
||||||
|
padding-top:96px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.main {
|
.main {
|
||||||
@ -222,7 +286,10 @@ img {width:100%; height:auto; margin-top:16px; margin-bottom:48px; border-radius
|
|||||||
display: block;
|
display: block;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
|
#navbar {
|
||||||
|
position: relative;
|
||||||
|
z-index: 5 !important;
|
||||||
|
}
|
||||||
.brand-3 {
|
.brand-3 {
|
||||||
display: -webkit-box;
|
display: -webkit-box;
|
||||||
display: -webkit-flex;
|
display: -webkit-flex;
|
||||||
|
329
yarn.lock
329
yarn.lock
@ -994,7 +994,7 @@ comma-separated-tokens@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea"
|
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea"
|
||||||
integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==
|
integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==
|
||||||
|
|
||||||
commander@^2.20.0:
|
commander@2, commander@^2.20.0:
|
||||||
version "2.20.3"
|
version "2.20.3"
|
||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
||||||
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||||
@ -1222,6 +1222,266 @@ cyclist@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
|
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
|
||||||
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
|
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
|
||||||
|
|
||||||
|
cytoscape-d3-force@^1.1.4:
|
||||||
|
version "1.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/cytoscape-d3-force/-/cytoscape-d3-force-1.1.4.tgz#72d2ff888a6eb5072916e903a08bdbe2cea1cd1b"
|
||||||
|
integrity sha512-8NjI/yEoB3YqVsdf7ud7Oh8Kyi+C9Lhh1fICmtemIo6EC1ZUtm8KcPNLkQySYO8nRS2mQKj5eVdCr7W0L8ONoQ==
|
||||||
|
dependencies:
|
||||||
|
d3-force "^2.0.1"
|
||||||
|
|
||||||
|
cytoscape-node-html-label@^1.2.1:
|
||||||
|
version "1.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/cytoscape-node-html-label/-/cytoscape-node-html-label-1.2.1.tgz#f319dbec6eb7024dadddcdbad88d77c57d8ce2f8"
|
||||||
|
integrity sha512-0IB3xmMKLNm9XFb6L3NVArUd+0J8puSwMMhaeN7VUC58MxMF6IYPWeI4LN+A/8AxZwdv1IFyyitMcvtCq060GA==
|
||||||
|
|
||||||
|
cytoscape@^3.17.0:
|
||||||
|
version "3.17.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.17.0.tgz#9dc476636a32e2b6f272ee0620177b933427c571"
|
||||||
|
integrity sha512-zPAB2UVV4QWArs+0UEq0ojYn7riFfz8CjivL67wibE/zdnAE8TTvDO5bFxsShSTutmG+1NkCnTXJjOxfosDMwA==
|
||||||
|
dependencies:
|
||||||
|
heap "^0.2.6"
|
||||||
|
lodash.debounce "^4.0.8"
|
||||||
|
|
||||||
|
d3-array@2, d3-array@>=2.5, d3-array@^2.3.0:
|
||||||
|
version "2.8.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.8.0.tgz#f76e10ad47f1f4f75f33db5fc322eb9ffde5ef23"
|
||||||
|
integrity sha512-6V272gsOeg7+9pTW1jSYOR1QE37g95I3my1hBmY+vOUNHRrk9yt4OTz/gK7PMkVAVDrYYq4mq3grTiZ8iJdNIw==
|
||||||
|
|
||||||
|
d3-axis@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-2.0.0.tgz#40aebb65626ffe6d95e9441fbf9194274b328a8b"
|
||||||
|
integrity sha512-9nzB0uePtb+u9+dWir+HTuEAKJOEUYJoEwbJPsZ1B4K3iZUgzJcSENQ05Nj7S4CIfbZZ8/jQGoUzGKFznBhiiQ==
|
||||||
|
|
||||||
|
d3-brush@2:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-2.1.0.tgz#adadfbb104e8937af142e9a6e2028326f0471065"
|
||||||
|
integrity sha512-cHLLAFatBATyIKqZOkk/mDHUbzne2B3ZwxkzMHvFTCZCmLaXDpZRihQSn8UNXTkGD/3lb/W2sQz0etAftmHMJQ==
|
||||||
|
dependencies:
|
||||||
|
d3-dispatch "1 - 2"
|
||||||
|
d3-drag "2"
|
||||||
|
d3-interpolate "1 - 2"
|
||||||
|
d3-selection "2"
|
||||||
|
d3-transition "2"
|
||||||
|
|
||||||
|
d3-chord@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-2.0.0.tgz#32491b5665391180560f738e5c1ccd1e3c47ebae"
|
||||||
|
integrity sha512-D5PZb7EDsRNdGU4SsjQyKhja8Zgu+SHZfUSO5Ls8Wsn+jsAKUUGkcshLxMg9HDFxG3KqavGWaWkJ8EpU8ojuig==
|
||||||
|
dependencies:
|
||||||
|
d3-path "1 - 2"
|
||||||
|
|
||||||
|
"d3-color@1 - 2", d3-color@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-2.0.0.tgz#8d625cab42ed9b8f601a1760a389f7ea9189d62e"
|
||||||
|
integrity sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==
|
||||||
|
|
||||||
|
d3-contour@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-2.0.0.tgz#80ee834988563e3bea9d99ddde72c0f8c089ea40"
|
||||||
|
integrity sha512-9unAtvIaNk06UwqBmvsdHX7CZ+NPDZnn8TtNH1myW93pWJkhsV25JcgnYAu0Ck5Veb1DHiCv++Ic5uvJ+h50JA==
|
||||||
|
dependencies:
|
||||||
|
d3-array "2"
|
||||||
|
|
||||||
|
d3-delaunay@5:
|
||||||
|
version "5.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-5.3.0.tgz#b47f05c38f854a4e7b3cea80e0bb12e57398772d"
|
||||||
|
integrity sha512-amALSrOllWVLaHTnDLHwMIiz0d1bBu9gZXd1FiLfXf8sHcX9jrcj81TVZOqD4UX7MgBZZ07c8GxzEgBpJqc74w==
|
||||||
|
dependencies:
|
||||||
|
delaunator "4"
|
||||||
|
|
||||||
|
"d3-dispatch@1 - 2", d3-dispatch@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-2.0.0.tgz#8a18e16f76dd3fcaef42163c97b926aa9b55e7cf"
|
||||||
|
integrity sha512-S/m2VsXI7gAti2pBoLClFFTMOO1HTtT0j99AuXLoGFKO6deHDdnv6ZGTxSTTUTgO1zVcv82fCOtDjYK4EECmWA==
|
||||||
|
|
||||||
|
d3-drag@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-2.0.0.tgz#9eaf046ce9ed1c25c88661911c1d5a4d8eb7ea6d"
|
||||||
|
integrity sha512-g9y9WbMnF5uqB9qKqwIIa/921RYWzlUDv9Jl1/yONQwxbOfszAWTCm8u7HOTgJgRDXiRZN56cHT9pd24dmXs8w==
|
||||||
|
dependencies:
|
||||||
|
d3-dispatch "1 - 2"
|
||||||
|
d3-selection "2"
|
||||||
|
|
||||||
|
"d3-dsv@1 - 2", d3-dsv@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-2.0.0.tgz#b37b194b6df42da513a120d913ad1be22b5fe7c5"
|
||||||
|
integrity sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w==
|
||||||
|
dependencies:
|
||||||
|
commander "2"
|
||||||
|
iconv-lite "0.4"
|
||||||
|
rw "1"
|
||||||
|
|
||||||
|
"d3-ease@1 - 2", d3-ease@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-2.0.0.tgz#fd1762bfca00dae4bacea504b1d628ff290ac563"
|
||||||
|
integrity sha512-68/n9JWarxXkOWMshcT5IcjbB+agblQUaIsbnXmrzejn2O82n3p2A9R2zEB9HIEFWKFwPAEDDN8gR0VdSAyyAQ==
|
||||||
|
|
||||||
|
d3-fetch@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-2.0.0.tgz#ecd7ef2128d9847a3b41b548fec80918d645c064"
|
||||||
|
integrity sha512-TkYv/hjXgCryBeNKiclrwqZH7Nb+GaOwo3Neg24ZVWA3MKB+Rd+BY84Nh6tmNEMcjUik1CSUWjXYndmeO6F7sw==
|
||||||
|
dependencies:
|
||||||
|
d3-dsv "1 - 2"
|
||||||
|
|
||||||
|
d3-force@2, d3-force@^2.0.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-2.1.1.tgz#f20ccbf1e6c9e80add1926f09b51f686a8bc0937"
|
||||||
|
integrity sha512-nAuHEzBqMvpFVMf9OX75d00OxvOXdxY+xECIXjW6Gv8BRrXu6gAWbv/9XKrvfJ5i5DCokDW7RYE50LRoK092ew==
|
||||||
|
dependencies:
|
||||||
|
d3-dispatch "1 - 2"
|
||||||
|
d3-quadtree "1 - 2"
|
||||||
|
d3-timer "1 - 2"
|
||||||
|
|
||||||
|
"d3-format@1 - 2", d3-format@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-2.0.0.tgz#a10bcc0f986c372b729ba447382413aabf5b0767"
|
||||||
|
integrity sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==
|
||||||
|
|
||||||
|
d3-geo@2:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-2.0.1.tgz#2437fdfed3fe3aba2812bd8f30609cac83a7ee39"
|
||||||
|
integrity sha512-M6yzGbFRfxzNrVhxDJXzJqSLQ90q1cCyb3EWFZ1LF4eWOBYxFypw7I/NFVBNXKNqxv1bqLathhYvdJ6DC+th3A==
|
||||||
|
dependencies:
|
||||||
|
d3-array ">=2.5"
|
||||||
|
|
||||||
|
d3-hierarchy@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-2.0.0.tgz#dab88a58ca3e7a1bc6cab390e89667fcc6d20218"
|
||||||
|
integrity sha512-SwIdqM3HxQX2214EG9GTjgmCc/mbSx4mQBn+DuEETubhOw6/U3fmnji4uCVrmzOydMHSO1nZle5gh6HB/wdOzw==
|
||||||
|
|
||||||
|
"d3-interpolate@1 - 2", "d3-interpolate@1.2.0 - 2", d3-interpolate@2:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163"
|
||||||
|
integrity sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==
|
||||||
|
dependencies:
|
||||||
|
d3-color "1 - 2"
|
||||||
|
|
||||||
|
"d3-path@1 - 2", d3-path@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-2.0.0.tgz#55d86ac131a0548adae241eebfb56b4582dd09d8"
|
||||||
|
integrity sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA==
|
||||||
|
|
||||||
|
d3-polygon@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-2.0.0.tgz#13608ef042fbec625ba1598327564f03c0396d8e"
|
||||||
|
integrity sha512-MsexrCK38cTGermELs0cO1d79DcTsQRN7IWMJKczD/2kBjzNXxLUWP33qRF6VDpiLV/4EI4r6Gs0DAWQkE8pSQ==
|
||||||
|
|
||||||
|
"d3-quadtree@1 - 2", d3-quadtree@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-2.0.0.tgz#edbad045cef88701f6fee3aee8e93fb332d30f9d"
|
||||||
|
integrity sha512-b0Ed2t1UUalJpc3qXzKi+cPGxeXRr4KU9YSlocN74aTzp6R/Ud43t79yLLqxHRWZfsvWXmbDWPpoENK1K539xw==
|
||||||
|
|
||||||
|
d3-random@2:
|
||||||
|
version "2.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-2.2.2.tgz#5eebd209ef4e45a2b362b019c1fb21c2c98cbb6e"
|
||||||
|
integrity sha512-0D9P8TRj6qDAtHhRQn6EfdOtHMfsUWanl3yb/84C4DqpZ+VsgfI5iTVRNRbELCfNvRfpMr8OrqqUTQ6ANGCijw==
|
||||||
|
|
||||||
|
d3-scale-chromatic@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz#c13f3af86685ff91323dc2f0ebd2dabbd72d8bab"
|
||||||
|
integrity sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA==
|
||||||
|
dependencies:
|
||||||
|
d3-color "1 - 2"
|
||||||
|
d3-interpolate "1 - 2"
|
||||||
|
|
||||||
|
d3-scale@3:
|
||||||
|
version "3.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-3.2.3.tgz#be380f57f1f61d4ff2e6cbb65a40593a51649cfd"
|
||||||
|
integrity sha512-8E37oWEmEzj57bHcnjPVOBS3n4jqakOeuv1EDdQSiSrYnMCBdMd3nc4HtKk7uia8DUHcY/CGuJ42xxgtEYrX0g==
|
||||||
|
dependencies:
|
||||||
|
d3-array "^2.3.0"
|
||||||
|
d3-format "1 - 2"
|
||||||
|
d3-interpolate "1.2.0 - 2"
|
||||||
|
d3-time "1 - 2"
|
||||||
|
d3-time-format "2 - 3"
|
||||||
|
|
||||||
|
d3-selection@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-2.0.0.tgz#94a11638ea2141b7565f883780dabc7ef6a61066"
|
||||||
|
integrity sha512-XoGGqhLUN/W14NmaqcO/bb1nqjDAw5WtSYb2X8wiuQWvSZUsUVYsOSkOybUrNvcBjaywBdYPy03eXHMXjk9nZA==
|
||||||
|
|
||||||
|
d3-shape@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-2.0.0.tgz#2331b62fa784a2a1daac47a7233cfd69301381fd"
|
||||||
|
integrity sha512-djpGlA779ua+rImicYyyjnOjeubyhql1Jyn1HK0bTyawuH76UQRWXd+pftr67H6Fa8hSwetkgb/0id3agKWykw==
|
||||||
|
dependencies:
|
||||||
|
d3-path "1 - 2"
|
||||||
|
|
||||||
|
"d3-time-format@2 - 3", d3-time-format@3:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-3.0.0.tgz#df8056c83659e01f20ac5da5fdeae7c08d5f1bb6"
|
||||||
|
integrity sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==
|
||||||
|
dependencies:
|
||||||
|
d3-time "1 - 2"
|
||||||
|
|
||||||
|
"d3-time@1 - 2", d3-time@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-2.0.0.tgz#ad7c127d17c67bd57a4c61f3eaecb81108b1e0ab"
|
||||||
|
integrity sha512-2mvhstTFcMvwStWd9Tj3e6CEqtOivtD8AUiHT8ido/xmzrI9ijrUUihZ6nHuf/vsScRBonagOdj0Vv+SEL5G3Q==
|
||||||
|
|
||||||
|
"d3-timer@1 - 2", d3-timer@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-2.0.0.tgz#055edb1d170cfe31ab2da8968deee940b56623e6"
|
||||||
|
integrity sha512-TO4VLh0/420Y/9dO3+f9abDEFYeCUr2WZRlxJvbp4HPTQcSylXNiL6yZa9FIUvV1yRiFufl1bszTCLDqv9PWNA==
|
||||||
|
|
||||||
|
d3-transition@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-2.0.0.tgz#366ef70c22ef88d1e34105f507516991a291c94c"
|
||||||
|
integrity sha512-42ltAGgJesfQE3u9LuuBHNbGrI/AJjNL2OAUdclE70UE6Vy239GCBEYD38uBPoLeNsOhFStGpPI0BAOV+HMxog==
|
||||||
|
dependencies:
|
||||||
|
d3-color "1 - 2"
|
||||||
|
d3-dispatch "1 - 2"
|
||||||
|
d3-ease "1 - 2"
|
||||||
|
d3-interpolate "1 - 2"
|
||||||
|
d3-timer "1 - 2"
|
||||||
|
|
||||||
|
d3-zoom@2:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-2.0.0.tgz#f04d0afd05518becce879d04709c47ecd93fba54"
|
||||||
|
integrity sha512-fFg7aoaEm9/jf+qfstak0IYpnesZLiMX6GZvXtUSdv8RH2o4E2qeelgdU09eKS6wGuiGMfcnMI0nTIqWzRHGpw==
|
||||||
|
dependencies:
|
||||||
|
d3-dispatch "1 - 2"
|
||||||
|
d3-drag "2"
|
||||||
|
d3-interpolate "1 - 2"
|
||||||
|
d3-selection "2"
|
||||||
|
d3-transition "2"
|
||||||
|
|
||||||
|
d3@^6.2.0:
|
||||||
|
version "6.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/d3/-/d3-6.2.0.tgz#f19b0ecb16ca4ad2171ce8b37c63247e71c6f01d"
|
||||||
|
integrity sha512-aH+kx55J8vRBh4K4k9GN4EbNO3QnZsXy4XBfrnr4fL2gQuszUAPQU3fV2oObO2iSpreRH/bG/wfvO+hDu2+e9w==
|
||||||
|
dependencies:
|
||||||
|
d3-array "2"
|
||||||
|
d3-axis "2"
|
||||||
|
d3-brush "2"
|
||||||
|
d3-chord "2"
|
||||||
|
d3-color "2"
|
||||||
|
d3-contour "2"
|
||||||
|
d3-delaunay "5"
|
||||||
|
d3-dispatch "2"
|
||||||
|
d3-drag "2"
|
||||||
|
d3-dsv "2"
|
||||||
|
d3-ease "2"
|
||||||
|
d3-fetch "2"
|
||||||
|
d3-force "2"
|
||||||
|
d3-format "2"
|
||||||
|
d3-geo "2"
|
||||||
|
d3-hierarchy "2"
|
||||||
|
d3-interpolate "2"
|
||||||
|
d3-path "2"
|
||||||
|
d3-polygon "2"
|
||||||
|
d3-quadtree "2"
|
||||||
|
d3-random "2"
|
||||||
|
d3-scale "3"
|
||||||
|
d3-scale-chromatic "2"
|
||||||
|
d3-selection "2"
|
||||||
|
d3-shape "2"
|
||||||
|
d3-time "2"
|
||||||
|
d3-time-format "3"
|
||||||
|
d3-timer "2"
|
||||||
|
d3-transition "2"
|
||||||
|
d3-zoom "2"
|
||||||
|
|
||||||
d@1, d@^1.0.1:
|
d@1, d@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
|
resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
|
||||||
@ -1297,6 +1557,11 @@ define-property@^2.0.2:
|
|||||||
is-descriptor "^1.0.2"
|
is-descriptor "^1.0.2"
|
||||||
isobject "^3.0.1"
|
isobject "^3.0.1"
|
||||||
|
|
||||||
|
delaunator@4:
|
||||||
|
version "4.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-4.0.1.tgz#3d779687f57919a7a418f8ab947d3bddb6846957"
|
||||||
|
integrity sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag==
|
||||||
|
|
||||||
delegates@^1.0.0:
|
delegates@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
|
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
|
||||||
@ -1954,6 +2219,16 @@ he@1.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
||||||
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
|
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
|
||||||
|
|
||||||
|
heap@^0.2.6:
|
||||||
|
version "0.2.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac"
|
||||||
|
integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=
|
||||||
|
|
||||||
|
highlight.js@~10.4.0:
|
||||||
|
version "10.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.4.0.tgz#ef3ce475e5dfa7a48484260b49ea242ddab823a0"
|
||||||
|
integrity sha512-EfrUGcQ63oLJbj0J0RI9ebX6TAITbsDBLbsjr881L/X5fMO9+oadKzEF21C7R3ULKG6Gv3uoab2HiqVJa/4+oA==
|
||||||
|
|
||||||
hmac-drbg@^1.0.0:
|
hmac-drbg@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
|
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
|
||||||
@ -2002,7 +2277,7 @@ https-proxy-agent@5.0.0:
|
|||||||
agent-base "6"
|
agent-base "6"
|
||||||
debug "4"
|
debug "4"
|
||||||
|
|
||||||
iconv-lite@0.4.24:
|
iconv-lite@0.4, iconv-lite@0.4.24:
|
||||||
version "0.4.24"
|
version "0.4.24"
|
||||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||||
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
|
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
|
||||||
@ -2074,6 +2349,11 @@ inline-style-parser@0.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
|
resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
|
||||||
integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
|
integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
|
||||||
|
|
||||||
|
is-absolute-url@^3.0.0:
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698"
|
||||||
|
integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==
|
||||||
|
|
||||||
is-accessor-descriptor@^0.1.6:
|
is-accessor-descriptor@^0.1.6:
|
||||||
version "0.1.6"
|
version "0.1.6"
|
||||||
resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
|
resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
|
||||||
@ -2410,6 +2690,11 @@ locate-path@^5.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
p-locate "^4.1.0"
|
p-locate "^4.1.0"
|
||||||
|
|
||||||
|
lodash.debounce@^4.0.8:
|
||||||
|
version "4.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
|
||||||
|
integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
|
||||||
|
|
||||||
lodash.sortby@^4.7.0:
|
lodash.sortby@^4.7.0:
|
||||||
version "4.7.0"
|
version "4.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
|
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
|
||||||
@ -2437,6 +2722,14 @@ loose-envify@^1.1.0, loose-envify@^1.4.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
js-tokens "^3.0.0 || ^4.0.0"
|
js-tokens "^3.0.0 || ^4.0.0"
|
||||||
|
|
||||||
|
lowlight@^1.2.0:
|
||||||
|
version "1.17.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.17.0.tgz#a1143b2fba8239df8cd5893f9fe97aaf8465af4a"
|
||||||
|
integrity sha512-vmtBgYKD+QVNy7tIa7ulz5d//Il9R4MooOVh4nkOf9R9Cb/Dk5TXMSTieg/vDulkBkIWj59/BIlyFQxT9X1oAQ==
|
||||||
|
dependencies:
|
||||||
|
fault "^1.0.0"
|
||||||
|
highlight.js "~10.4.0"
|
||||||
|
|
||||||
lru-cache@6.0.0:
|
lru-cache@6.0.0:
|
||||||
version "6.0.0"
|
version "6.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
|
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
|
||||||
@ -3465,6 +3758,17 @@ regex-parser@^2.2.11:
|
|||||||
resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58"
|
resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58"
|
||||||
integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==
|
integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==
|
||||||
|
|
||||||
|
remark-external-links@^8.0.0:
|
||||||
|
version "8.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/remark-external-links/-/remark-external-links-8.0.0.tgz#308de69482958b5d1cd3692bc9b725ce0240f345"
|
||||||
|
integrity sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==
|
||||||
|
dependencies:
|
||||||
|
extend "^3.0.0"
|
||||||
|
is-absolute-url "^3.0.0"
|
||||||
|
mdast-util-definitions "^4.0.0"
|
||||||
|
space-separated-tokens "^1.0.0"
|
||||||
|
unist-util-visit "^2.0.0"
|
||||||
|
|
||||||
remark-frontmatter@^3.0.0:
|
remark-frontmatter@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz#ca5d996361765c859bd944505f377d6b186a6ec6"
|
resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz#ca5d996361765c859bd944505f377d6b186a6ec6"
|
||||||
@ -3473,6 +3777,14 @@ remark-frontmatter@^3.0.0:
|
|||||||
mdast-util-frontmatter "^0.2.0"
|
mdast-util-frontmatter "^0.2.0"
|
||||||
micromark-extension-frontmatter "^0.2.0"
|
micromark-extension-frontmatter "^0.2.0"
|
||||||
|
|
||||||
|
remark-highlight.js@^6.0.0:
|
||||||
|
version "6.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/remark-highlight.js/-/remark-highlight.js-6.0.0.tgz#cb05387ddddeb078f0b61ce6299f6323f05098fc"
|
||||||
|
integrity sha512-eNHP/ezuDKoeh3KV+rWLeBVzU3SYVt0uu1tHdsCB6TUJYHwTNMJWZ5+nU+2fJHQXb+7PtpfGXVtFS9zk/W6qdw==
|
||||||
|
dependencies:
|
||||||
|
lowlight "^1.2.0"
|
||||||
|
unist-util-visit "^2.0.0"
|
||||||
|
|
||||||
remark-html@^13.0.1:
|
remark-html@^13.0.1:
|
||||||
version "13.0.1"
|
version "13.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/remark-html/-/remark-html-13.0.1.tgz#d5b2d8be01203e61fc37403167ca7584879ad675"
|
resolved "https://registry.yarnpkg.com/remark-html/-/remark-html-13.0.1.tgz#d5b2d8be01203e61fc37403167ca7584879ad675"
|
||||||
@ -4100,6 +4412,11 @@ run-queue@^1.0.0, run-queue@^1.0.3:
|
|||||||
dependencies:
|
dependencies:
|
||||||
aproba "^1.1.1"
|
aproba "^1.1.1"
|
||||||
|
|
||||||
|
rw@1:
|
||||||
|
version "1.3.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
|
||||||
|
integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=
|
||||||
|
|
||||||
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
|
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
|
||||||
version "5.2.1"
|
version "5.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||||
@ -4727,6 +5044,14 @@ to-regex@^3.0.1, to-regex@^3.0.2:
|
|||||||
regex-not "^1.0.2"
|
regex-not "^1.0.2"
|
||||||
safe-regex "^1.1.0"
|
safe-regex "^1.1.0"
|
||||||
|
|
||||||
|
to-vfile@^6.1.0:
|
||||||
|
version "6.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/to-vfile/-/to-vfile-6.1.0.tgz#5f7a3f65813c2c4e34ee1f7643a5646344627699"
|
||||||
|
integrity sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==
|
||||||
|
dependencies:
|
||||||
|
is-buffer "^2.0.0"
|
||||||
|
vfile "^4.0.0"
|
||||||
|
|
||||||
toidentifier@1.0.0:
|
toidentifier@1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
|
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
|
||||||
|
Loading…
Reference in New Issue
Block a user