jekyll-graph 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/Gemfile +2 -2
- data/README.md +26 -26
- data/bin/console +1 -1
- data/jekyll-graph.gemspec +4 -3
- data/lib/jekyll-graph/config.rb +13 -7
- data/lib/jekyll-graph/jekyll-graph.js +48 -14
- data/lib/jekyll-graph/version.rb +1 -1
- data/lib/jekyll-graph.rb +34 -23
- metadata +9 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56a0cf412d49fe1abbc5280977f3bc732f7ff42836abddb64a948e26d4f5dc89
|
4
|
+
data.tar.gz: 29914337ea3a859ea54a5585e10944cb3334d48c7d9a021902e2ab8f87130f64
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58d70f942b2024ba62c52c7fcd1a88162f36e342e02268ba198852f6dd09b08f7768edb2a7504abecb0495ae4d8f0d1071dc40320868bd95c06bc94330e82364
|
7
|
+
data.tar.gz: 66f5daee147641ad9ac8c1c71c8baffe90a6d3400d6e52f42e725cf886444775e38272dbb7907be3df2e892e835e9230ebe4690774a3cc2decdd71f899652152
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## [0.0.3] 2021-11-22
|
2
|
+
### Change
|
3
|
+
- Fix javascript inheritance.
|
4
|
+
- Decrement missing node log messages from 'warn' to 'debug'.
|
5
|
+
- Update license.
|
6
|
+
### Fix
|
7
|
+
- Display log messages related to dependencies (see [#2](https://github.com/manunamz/jekyll-graph/issues/2)).
|
8
|
+
- Custom path configs.
|
9
|
+
|
1
10
|
## [0.0.2] - 2021-09-17
|
2
11
|
### Change
|
3
12
|
- Liquid tag `force-graph` -> `jekyll_graph`.
|
data/Gemfile
CHANGED
@@ -6,8 +6,8 @@ source "https://rubygems.org"
|
|
6
6
|
gemspec
|
7
7
|
|
8
8
|
gem "jekyll", "~> 4.2.0"
|
9
|
-
gem "jekyll-namespaces", "~> 0.0.
|
10
|
-
gem "jekyll-wikilinks", "~> 0.0.
|
9
|
+
gem "jekyll-namespaces", "~> 0.0.3"
|
10
|
+
gem "jekyll-wikilinks", "~> 0.0.8"
|
11
11
|
|
12
12
|
gem "rake", "~> 13.0.3"
|
13
13
|
gem "rspec", "~> 3.10"
|
data/README.md
CHANGED
@@ -37,33 +37,32 @@ Follow the instructions for installing a [jekyll plugin](https://jekyllrb.com/do
|
|
37
37
|
```javascript
|
38
38
|
import JekyllGraph from './jekyll-graph.js';
|
39
39
|
|
40
|
-
export default class JekyllGraphSubClass {
|
41
|
-
|
40
|
+
export default class JekyllGraphSubClass extends JekyllGraph {
|
41
|
+
|
42
|
+
constructor() {
|
43
|
+
super();
|
44
|
+
// access graph div with 'this.graphDiv'
|
45
|
+
}
|
46
|
+
|
47
|
+
// ...
|
42
48
|
}
|
43
|
-
|
44
|
-
// subclass
|
45
|
-
// Hook up the instance properties
|
46
|
-
Object.setPrototypeOf(JekyllGraphSubClass.prototype, JekyllGraph.prototype);
|
47
|
-
|
48
|
-
// Hook up the static properties
|
49
|
-
Object.setPrototypeOf(JekyllGraphSubClass, JekyllGraph);
|
50
|
-
|
51
49
|
```
|
52
50
|
Call `this.drawNetWeb()` and `this.drawTree()` to actually draw the graph. You could do this simply on initialization or on a button click, etc.
|
53
51
|
|
54
|
-
Unless otherwise defined, the `jekyll-graph.js` file will be generated into `_site/assets/
|
52
|
+
Unless otherwise defined, the `jekyll-graph.js` file will be generated into `_site/assets/js/`.
|
55
53
|
|
56
54
|
## Configuration
|
57
55
|
|
58
56
|
Default configs look like this:
|
59
57
|
|
60
|
-
```
|
58
|
+
```yaml
|
61
59
|
graph:
|
62
60
|
enabled: true
|
63
61
|
exclude: []
|
64
|
-
|
65
|
-
|
66
|
-
|
62
|
+
path:
|
63
|
+
assets: "/assets"
|
64
|
+
scripts: "/assets/js"
|
65
|
+
net_web:
|
67
66
|
enabled: true
|
68
67
|
force:
|
69
68
|
charge:
|
@@ -71,7 +70,7 @@ graph:
|
|
71
70
|
x_val:
|
72
71
|
strength_y:
|
73
72
|
y_val:
|
74
|
-
|
73
|
+
tree:
|
75
74
|
enabled: true
|
76
75
|
force:
|
77
76
|
charge:
|
@@ -85,11 +84,11 @@ graph:
|
|
85
84
|
|
86
85
|
`exclude`: Exclude specific jekyll document types (`posts`, `pages`, `collection_items`).
|
87
86
|
|
88
|
-
`
|
87
|
+
`path.assets`: An optional custom assets location for graph assets to generate into. Location is relative to the root of the generated `_site/` directory.
|
89
88
|
|
90
|
-
`
|
89
|
+
`path.scripts`: An optional custom scripts location for the graph scripts to generate into. Location is relative to the assets location in the `_site/` directory (If `assets_path` is set, but `scripts_path` is not, the location will default to `_site/<assets_path>/js/`).
|
91
90
|
|
92
|
-
`tree.enabled` and `net_web.enabled`: Toggles on/off the `tree` and `net_web` graphs, respectively.
|
91
|
+
`tree.enabled` and `net_web.enabled`: Toggles on/off the `tree` and `net_web` graphs, respectively. Be sure to disable graphs that are not in use.
|
93
92
|
|
94
93
|
`tree.force` and `net_web.force`: These are force variables from d3's simulation forces. You can check out the [docs for details](https://github.com/d3/d3-force#simulation_force).
|
95
94
|
|
@@ -98,7 +97,6 @@ Force values will likely need to be played with depending on the div size and nu
|
|
98
97
|
```yaml
|
99
98
|
graph:
|
100
99
|
tree:
|
101
|
-
# enabled: true
|
102
100
|
dag_lvl_dist: 100
|
103
101
|
force:
|
104
102
|
charge: -100
|
@@ -107,7 +105,6 @@ graph:
|
|
107
105
|
strength_y: 0.1
|
108
106
|
y_val: 0.9
|
109
107
|
net_web:
|
110
|
-
# enabled: true
|
111
108
|
force:
|
112
109
|
charge: -300
|
113
110
|
strength_x: 0.3
|
@@ -138,13 +135,13 @@ Graph colors are determined by css variables which may be defined like so -- any
|
|
138
135
|
--graph-particles-color: grey;
|
139
136
|
/* label text */
|
140
137
|
--graph-text-color: black;
|
141
|
-
/* */
|
142
138
|
```
|
143
139
|
|
144
140
|
## Data
|
145
141
|
Graph data is generated in the following format:
|
146
142
|
|
147
143
|
For the net-web graph, `graph-net-web.json`,`links` are built from `backlinks` and `attributed` metadata generated in `jekyll-wikilinks`:
|
144
|
+
|
148
145
|
```json
|
149
146
|
// graph-net-web.json
|
150
147
|
{
|
@@ -154,8 +151,8 @@ For the net-web graph, `graph-net-web.json`,`links` are built from `backlinks` a
|
|
154
151
|
"url": "<relative-url>", // site.baseurl is handled for you here
|
155
152
|
"label": "<note's-title>",
|
156
153
|
"neighbors": {
|
157
|
-
"nodes": [<neighbor-node>, ...],
|
158
|
-
"links": [<neighbor-link>, ...],
|
154
|
+
"nodes": [<neighbor-node-id>, ...],
|
155
|
+
"links": [<neighbor-link-id>, ...],
|
159
156
|
}
|
160
157
|
},
|
161
158
|
...
|
@@ -169,7 +166,9 @@ For the net-web graph, `graph-net-web.json`,`links` are built from `backlinks` a
|
|
169
166
|
]
|
170
167
|
}
|
171
168
|
```
|
169
|
+
|
172
170
|
For the tree graph, `graph-tree.json`, `links` are built from a tree data structure constructed in `jekyll-namespaces`:
|
171
|
+
|
173
172
|
```json
|
174
173
|
// graph-tree.json
|
175
174
|
{
|
@@ -179,8 +178,8 @@ For the tree graph, `graph-tree.json`, `links` are built from a tree data struct
|
|
179
178
|
"url": "<relative-url>", // site.baseurl wil be handled for you here
|
180
179
|
"label": "<note's-title>",
|
181
180
|
"relatives": {
|
182
|
-
"nodes": [<relative-node>, ...],
|
183
|
-
"links": [<relative-link>, ...],
|
181
|
+
"nodes": [<relative-node-id>, ...],
|
182
|
+
"links": [<relative-link-id>, ...],
|
184
183
|
}
|
185
184
|
},
|
186
185
|
...
|
@@ -194,4 +193,5 @@ For the tree graph, `graph-tree.json`, `links` are built from a tree data struct
|
|
194
193
|
]
|
195
194
|
}
|
196
195
|
```
|
196
|
+
|
197
197
|
Unless otherwise defined, both json files are generated into `_site/assets/`.
|
data/bin/console
CHANGED
data/jekyll-graph.gemspec
CHANGED
@@ -12,7 +12,8 @@ Gem::Specification.new do |spec|
|
|
12
12
|
# spec.description = "TODO: Write a longer description or delete this line."
|
13
13
|
spec.homepage = "https://github.com/manunamz/jekyll-graph"
|
14
14
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
|
15
|
-
|
15
|
+
spec.licenses = ["GPL3"]
|
16
|
+
|
16
17
|
# spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
17
18
|
|
18
19
|
spec.metadata["homepage_uri"] = spec.homepage
|
@@ -34,6 +35,6 @@ Gem::Specification.new do |spec|
|
|
34
35
|
# For more information and examples about making a new gem, checkout our
|
35
36
|
# guide at: https://bundler.io/guides/creating_gem.html
|
36
37
|
|
37
|
-
spec.add_runtime_dependency "jekyll-namespaces", "~> 0.0.
|
38
|
-
spec.add_runtime_dependency "jekyll-wikilinks", "~> 0.0.
|
38
|
+
spec.add_runtime_dependency "jekyll-namespaces", "~> 0.0.3"
|
39
|
+
spec.add_runtime_dependency "jekyll-wikilinks", "~> 0.0.8"
|
39
40
|
end
|
data/lib/jekyll-graph/config.rb
CHANGED
@@ -5,12 +5,14 @@ module Jekyll
|
|
5
5
|
module Graph
|
6
6
|
|
7
7
|
class PluginConfig
|
8
|
+
|
9
|
+
ASSETS_KEY = "assets"
|
8
10
|
CONFIG_KEY = "graph"
|
9
11
|
ENABLED_KEY = "enabled"
|
10
12
|
EXCLUDE_KEY = "exclude"
|
11
13
|
NET_WEB_KEY = "net_web"
|
12
|
-
|
13
|
-
|
14
|
+
PATH_KEY = "path"
|
15
|
+
SCRIPTS_KEY = "scripts"
|
14
16
|
TREE_KEY = "tree"
|
15
17
|
TYPE_KEY = "type"
|
16
18
|
|
@@ -39,18 +41,22 @@ module Jekyll
|
|
39
41
|
return option(EXCLUDE_KEY).include?(type.to_s)
|
40
42
|
end
|
41
43
|
|
42
|
-
def
|
43
|
-
return
|
44
|
+
def has_custom_assets_path?
|
45
|
+
return option_path(ASSETS_KEY)
|
44
46
|
end
|
45
47
|
|
46
48
|
def has_custom_scripts_path?
|
47
|
-
return
|
49
|
+
return option_path(SCRIPTS_KEY)
|
48
50
|
end
|
49
51
|
|
50
52
|
def option(key)
|
51
53
|
@config[CONFIG_KEY] && @config[CONFIG_KEY][key]
|
52
54
|
end
|
53
55
|
|
56
|
+
def option_path(key)
|
57
|
+
@config[CONFIG_KEY] && @config[CONFIG_KEY][PATH_KEY] && @config[CONFIG_KEY][PATH_KEY][key]
|
58
|
+
end
|
59
|
+
|
54
60
|
def option_net_web(key)
|
55
61
|
@config[CONFIG_KEY] && @config[CONFIG_KEY][NET_WEB_KEY] && @config[CONFIG_KEY][NET_WEB_KEY][key]
|
56
62
|
end
|
@@ -66,11 +72,11 @@ module Jekyll
|
|
66
72
|
end
|
67
73
|
|
68
74
|
def path_assets
|
69
|
-
return
|
75
|
+
return has_custom_assets_path? ? option_path(ASSETS_KEY) : "/assets"
|
70
76
|
end
|
71
77
|
|
72
78
|
def path_scripts
|
73
|
-
return has_custom_scripts_path? ?
|
79
|
+
return has_custom_scripts_path? ? File.join(path_assets, option_path(SCRIPTS_KEY)) : File.join(path_assets, "js")
|
74
80
|
end
|
75
81
|
|
76
82
|
def testing
|
@@ -1,4 +1,5 @@
|
|
1
1
|
// don't need frontmatter because liquid is handled internally...somehow...
|
2
|
+
|
2
3
|
export default class JekyllGraph {
|
3
4
|
|
4
5
|
constructor() {
|
@@ -29,9 +30,11 @@ export default class JekyllGraph {
|
|
29
30
|
let hoverNode = null;
|
30
31
|
let hoverLink = null;
|
31
32
|
|
32
|
-
|
33
|
+
if (this.graph) {
|
34
|
+
this.graph._destructor();
|
35
|
+
}
|
33
36
|
|
34
|
-
(this.graphDiv)
|
37
|
+
const Graph = ForceGraph()(this.graphDiv)
|
35
38
|
// container
|
36
39
|
.height(this.graphDiv.parentElement.clientHeight)
|
37
40
|
.width(this.graphDiv.parentElement.clientWidth)
|
@@ -101,15 +104,32 @@ export default class JekyllGraph {
|
|
101
104
|
Graph.height(el.offsetHeight);
|
102
105
|
}
|
103
106
|
);
|
107
|
+
|
108
|
+
this.graph = Graph;
|
104
109
|
});
|
105
110
|
}
|
106
111
|
|
107
112
|
drawTree () {
|
108
113
|
let assetsPath = '{{ site.graph.assets_path }}' !== '' ? '{{ site.graph.assets_path }}' : '/assets';
|
109
114
|
fetch(`{{ site.baseurl }}${assetsPath}/graph-tree.json`).then(res => res.json()).then(data => {
|
115
|
+
|
116
|
+
if (this.graph) {
|
117
|
+
this.graph._destructor();
|
118
|
+
}
|
119
|
+
|
120
|
+
// node height vars
|
121
|
+
this.shifted = [];
|
122
|
+
this.numSiblingsLeft = [];
|
123
|
+
|
124
|
+
// hover vars
|
125
|
+
const highlightNodes = new Set();
|
126
|
+
const highlightLinks = new Set();
|
127
|
+
let hoverNode = null;
|
128
|
+
let hoverLink = null;
|
110
129
|
|
111
|
-
// relatives: replace ids with full
|
130
|
+
// relatives: replace ids with full objects
|
112
131
|
data.nodes.forEach(node => {
|
132
|
+
// relatives
|
113
133
|
let relativeNodes = [];
|
114
134
|
node.relatives.nodes.forEach(nNodeId => {
|
115
135
|
relativeNodes.push(data.nodes.find(node => node.id === nNodeId));
|
@@ -120,16 +140,11 @@ export default class JekyllGraph {
|
|
120
140
|
});
|
121
141
|
node.relatives.nodes = relativeNodes;
|
122
142
|
node.relatives.links = relativeLinks;
|
143
|
+
// siblings
|
144
|
+
this.numSiblingsLeft[node.parent] = node.siblings.length;
|
123
145
|
});
|
124
146
|
|
125
|
-
const
|
126
|
-
const highlightLinks = new Set();
|
127
|
-
let hoverNode = null;
|
128
|
-
let hoverLink = null;
|
129
|
-
|
130
|
-
const Graph = ForceGraph()
|
131
|
-
|
132
|
-
(this.graphDiv)
|
147
|
+
const Graph = ForceGraph()(this.graphDiv)
|
133
148
|
// dag-mode (tree)
|
134
149
|
.dagMode('td')
|
135
150
|
.dagLevelDistance(Number('{{ site.graph.tree.dag_lvl_dist }}'))
|
@@ -141,6 +156,8 @@ export default class JekyllGraph {
|
|
141
156
|
// .nodePointerAreaPaint((node, color, ctx, scale) => nodePaint(node, nodeTypeInNetWeb(node), ctx))
|
142
157
|
.nodeId('id')
|
143
158
|
.nodeLabel('label')
|
159
|
+
// todo-shift: this shiftNodeHeight() always renders, but animatation is choppy
|
160
|
+
// .nodeVal(node => this.shiftNodeHeight(node))
|
144
161
|
.onNodeClick((node, event) => this.goToPage(node, event))
|
145
162
|
// link
|
146
163
|
.linkSource('source')
|
@@ -202,12 +219,29 @@ export default class JekyllGraph {
|
|
202
219
|
Graph.height(el.offsetHeight);
|
203
220
|
}
|
204
221
|
);
|
222
|
+
|
223
|
+
this.graph = Graph;
|
205
224
|
});
|
206
225
|
}
|
207
226
|
|
208
227
|
// draw helpers
|
209
228
|
|
229
|
+
shiftNodeHeight(node) {
|
230
|
+
if (node.namespace !== 'root' && !this.shifted.includes(node)) {
|
231
|
+
const padding = 5;
|
232
|
+
let areSiblingsLeftEven = (this.numSiblingsLeft[node.parent] % 2) === 1;
|
233
|
+
let altrntr = areSiblingsLeftEven ? 1 : -1;
|
234
|
+
node.fy = node.fy + (altrntr * (this.numSiblingsLeft[node.parent] * padding));
|
235
|
+
this.numSiblingsLeft[node.parent] -= 1;
|
236
|
+
this.shifted.push(node);
|
237
|
+
}
|
238
|
+
}
|
239
|
+
|
210
240
|
nodePaint(node, ctx, hoverNode, hoverLink, gType) {
|
241
|
+
// todo-shift: this shiftNodeHeight() animates more smoothly, but suffers from a race condition
|
242
|
+
// if (gType === "tree") {
|
243
|
+
// this.shiftNodeHeight(node);
|
244
|
+
// }
|
211
245
|
let fillText = true;
|
212
246
|
let radius = 6;
|
213
247
|
//
|
@@ -216,7 +250,7 @@ export default class JekyllGraph {
|
|
216
250
|
if (this.isVisitedPage(node)) {
|
217
251
|
ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--graph-node-visited-color');
|
218
252
|
} else if (this.isMissingPage(node)) {
|
219
|
-
ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--graph-node-missing-color')
|
253
|
+
ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--graph-node-missing-color');
|
220
254
|
} else if (!this.isVisitedPage(node) && !this.isMissingPage(node)) {
|
221
255
|
ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--graph-node-unvisited-color');
|
222
256
|
} else {
|
@@ -255,11 +289,11 @@ export default class JekyllGraph {
|
|
255
289
|
//
|
256
290
|
if (this.isCurrentPage(node)) {
|
257
291
|
// turn glow on
|
258
|
-
ctx.shadowBlur =
|
292
|
+
ctx.shadowBlur = 40;
|
259
293
|
ctx.shadowColor = getComputedStyle(document.documentElement).getPropertyValue('--graph-node-current-glow');
|
260
294
|
} else if (this.isTag(node)) {
|
261
295
|
// turn glow on
|
262
|
-
ctx.shadowBlur =
|
296
|
+
ctx.shadowBlur = 40;
|
263
297
|
ctx.shadowColor = getComputedStyle(document.documentElement).getPropertyValue('--graph-node-tagged-glow');
|
264
298
|
} else if (this.isVisitedPage(node)) {
|
265
299
|
// turn glow on
|
data/lib/jekyll-graph/version.rb
CHANGED
data/lib/jekyll-graph.rb
CHANGED
@@ -30,13 +30,14 @@ module Jekyll
|
|
30
30
|
CONVERTER_CLASS = Jekyll::Converters::Markdown
|
31
31
|
|
32
32
|
def generate(site)
|
33
|
+
# check what's enabled
|
33
34
|
return if $graph_conf.disabled?
|
34
|
-
if !$graph_conf.disabled_net_web? && site.link_index
|
35
|
-
Jekyll.logger.error("To generate the net-web graph, please add and enable the 'jekyll-wikilinks' plugin")
|
35
|
+
if !$graph_conf.disabled_net_web? && !site.respond_to?(:link_index)
|
36
|
+
Jekyll.logger.error("Jekyll-Graph: To generate the net-web graph, please either add and enable the 'jekyll-wikilinks' plugin or disable the net-web in the jekyll-graph config")
|
36
37
|
return
|
37
38
|
end
|
38
|
-
if !$graph_conf.disabled_tree? && site.tree
|
39
|
-
Jekyll.logger.error("To generate the tree graph, please add and enable the 'jekyll-namespaces' plugin")
|
39
|
+
if !$graph_conf.disabled_tree? && !site.respond_to?(:tree)
|
40
|
+
Jekyll.logger.error("Jekyll-Graph: To generate the tree graph, please either add and enable the 'jekyll-namespaces' plugin or disable the tree in the jekyll-graph config")
|
40
41
|
return
|
41
42
|
end
|
42
43
|
|
@@ -50,7 +51,7 @@ module Jekyll
|
|
50
51
|
docs += @site.docs_to_write.filter { |d| !$graph_conf.excluded?(d.type) }
|
51
52
|
@md_docs = docs.filter { |doc| markdown_extension?(doc.extname) }
|
52
53
|
if @md_docs.empty?
|
53
|
-
Jekyll.logger.
|
54
|
+
Jekyll.logger.warn("Jekyll-Graph: No documents to process.")
|
54
55
|
end
|
55
56
|
|
56
57
|
# write graph
|
@@ -64,7 +65,6 @@ module Jekyll
|
|
64
65
|
)
|
65
66
|
# create json file
|
66
67
|
json_net_web_graph_file = self.new_page($graph_conf.path_assets, "graph-net-web.json", net_web_graph_content)
|
67
|
-
self.register_static_file(json_net_web_graph_file)
|
68
68
|
end
|
69
69
|
if !$graph_conf.disabled_tree?
|
70
70
|
# generate json data
|
@@ -76,13 +76,12 @@ module Jekyll
|
|
76
76
|
)
|
77
77
|
# create json file
|
78
78
|
json_tree_graph_file = self.new_page($graph_conf.path_assets, "graph-tree.json", tree_graph_content)
|
79
|
-
self.register_static_file(json_tree_graph_file)
|
80
79
|
end
|
81
80
|
# add graph drawing scripts
|
82
81
|
script_filename = "jekyll-graph.js"
|
83
82
|
graph_script_content = File.read(source_path(script_filename))
|
83
|
+
# create js file
|
84
84
|
static_file = self.new_page($graph_conf.path_scripts, script_filename, graph_script_content)
|
85
|
-
self.register_static_file(static_file)
|
86
85
|
end
|
87
86
|
|
88
87
|
# helpers
|
@@ -116,13 +115,12 @@ module Jekyll
|
|
116
115
|
return new_file
|
117
116
|
end
|
118
117
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
end
|
118
|
+
# keeping this around in case it's needed again
|
119
|
+
# # tests fail without manually adding the static file, but actual site builds seem to do ok
|
120
|
+
# # ...although there does seem to be a race condition which causes a rebuild to be necessary in order to detect the graph data file
|
121
|
+
# def register_static_file(static_file)
|
122
|
+
# @site.static_files << static_file if !@site.static_files.include?(static_file)
|
123
|
+
# end
|
126
124
|
|
127
125
|
# json population helpers
|
128
126
|
# set ids here, full javascript objects are populated in client-side javascript.
|
@@ -143,6 +141,8 @@ module Jekyll
|
|
143
141
|
def set_relatives(json_nodes, json_links)
|
144
142
|
# TODO: json nodes have relative_url, but node.id's/urls are doc urls.
|
145
143
|
json_nodes.each do |json_node|
|
144
|
+
# set relatives
|
145
|
+
|
146
146
|
ancestor_node_ids, descendent_node_ids = @site.tree.get_all_relative_ids(json_node[:id])
|
147
147
|
relative_node_ids = ancestor_node_ids.concat(descendent_node_ids)
|
148
148
|
json_node[:relatives][:nodes] = relative_node_ids if !relative_node_ids.nil?
|
@@ -152,6 +152,10 @@ module Jekyll
|
|
152
152
|
|
153
153
|
json_relative_links = json_links.select { |l| lineage_ids.include?(l[:source]) && lineage_ids.include?(l[:target]) }
|
154
154
|
json_node[:relatives][:links] = json_relative_links if !json_relative_links.nil?
|
155
|
+
|
156
|
+
# set siblings
|
157
|
+
|
158
|
+
json_node[:siblings] = @site.tree.get_sibling_ids(json_node[:id])
|
155
159
|
end
|
156
160
|
end
|
157
161
|
|
@@ -163,14 +167,13 @@ module Jekyll
|
|
163
167
|
@md_docs.each do |doc|
|
164
168
|
if !$graph_conf.excluded?(doc.type)
|
165
169
|
|
166
|
-
Jekyll.logger.debug
|
170
|
+
Jekyll.logger.debug("Jekyll-Graph: Processing graph nodes for doc: ", doc.data['title'])
|
167
171
|
#
|
168
172
|
# missing nodes
|
169
173
|
#
|
170
174
|
@site.link_index.index[doc.url].missing.each do |missing_link_name|
|
171
175
|
if net_web_nodes.none? { |node| node[:id] == missing_link_name }
|
172
|
-
Jekyll.logger.warn
|
173
|
-
Jekyll.logger.warn " in: ", doc.data['title']
|
176
|
+
Jekyll.logger.warn("Jekyll-Graph: Net-Web node missing: #{missing_link_name}, in: #{doc.data['title']}")
|
174
177
|
net_web_nodes << {
|
175
178
|
id: missing_link_name, # an id is necessary for link targets
|
176
179
|
url: '',
|
@@ -235,12 +238,12 @@ module Jekyll
|
|
235
238
|
return net_web_nodes, net_web_links
|
236
239
|
end
|
237
240
|
|
238
|
-
def generate_json_tree(node, json_parent="", tree_nodes=[], tree_links=[])
|
241
|
+
def generate_json_tree(node, json_parent="", tree_nodes=[], tree_links=[], level=0)
|
239
242
|
#
|
240
243
|
# missing nodes
|
241
244
|
#
|
242
245
|
if node.missing
|
243
|
-
Jekyll.logger.warn("Document for tree node missing: ", node.namespace)
|
246
|
+
Jekyll.logger.warn("Jekyll-Graph: Document for tree node missing: ", node.namespace)
|
244
247
|
|
245
248
|
leaf = node.namespace.split('.').pop()
|
246
249
|
missing_node = {
|
@@ -248,18 +251,22 @@ module Jekyll
|
|
248
251
|
label: leaf.gsub('-', ' '),
|
249
252
|
namespace: node.namespace,
|
250
253
|
url: "",
|
254
|
+
level: level,
|
251
255
|
relatives: {
|
252
256
|
nodes: [],
|
253
257
|
links: [],
|
254
258
|
},
|
259
|
+
siblings: [],
|
255
260
|
}
|
256
|
-
|
261
|
+
# non-root handling
|
257
262
|
if !json_parent.empty?
|
263
|
+
missing_node[:parent] = json_parent[:id]
|
258
264
|
tree_links << {
|
259
265
|
source: json_parent[:id],
|
260
266
|
target: node.namespace,
|
261
267
|
}
|
262
268
|
end
|
269
|
+
tree_nodes << missing_node
|
263
270
|
json_parent = missing_node
|
264
271
|
#
|
265
272
|
# existing nodes
|
@@ -270,22 +277,26 @@ module Jekyll
|
|
270
277
|
label: node.title,
|
271
278
|
namespace: node.namespace,
|
272
279
|
url: relative_url(node.url),
|
280
|
+
level: level,
|
273
281
|
relatives: {
|
274
282
|
nodes: [],
|
275
283
|
links: [],
|
276
284
|
},
|
285
|
+
siblings: [],
|
277
286
|
}
|
278
|
-
|
287
|
+
# non-root handling
|
279
288
|
if !json_parent.empty?
|
289
|
+
existing_node[:parent] = json_parent[:id]
|
280
290
|
tree_links << {
|
281
291
|
source: json_parent[:id],
|
282
292
|
target: node.url,
|
283
293
|
}
|
284
294
|
end
|
295
|
+
tree_nodes << existing_node
|
285
296
|
json_parent = existing_node
|
286
297
|
end
|
287
298
|
node.children.each do |child|
|
288
|
-
self.generate_json_tree(child, json_parent, tree_nodes, tree_links)
|
299
|
+
self.generate_json_tree(child, json_parent, tree_nodes, tree_links, (level + 1))
|
289
300
|
end
|
290
301
|
return tree_nodes, tree_links
|
291
302
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-graph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- manunamz
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll-namespaces
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.0.
|
19
|
+
version: 0.0.3
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.0.
|
26
|
+
version: 0.0.3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: jekyll-wikilinks
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.0.
|
33
|
+
version: 0.0.8
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.0.
|
40
|
+
version: 0.0.8
|
41
41
|
description:
|
42
42
|
email:
|
43
43
|
- manunamz@pm.me
|
@@ -65,7 +65,8 @@ files:
|
|
65
65
|
- lib/jekyll-graph/tags.rb
|
66
66
|
- lib/jekyll-graph/version.rb
|
67
67
|
homepage: https://github.com/manunamz/jekyll-graph
|
68
|
-
licenses:
|
68
|
+
licenses:
|
69
|
+
- GPL3
|
69
70
|
metadata:
|
70
71
|
homepage_uri: https://github.com/manunamz/jekyll-graph
|
71
72
|
source_code_uri: https://github.com/manunamz/jekyll-graph
|
@@ -85,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
86
|
- !ruby/object:Gem::Version
|
86
87
|
version: '0'
|
87
88
|
requirements: []
|
88
|
-
rubygems_version: 3.2.
|
89
|
+
rubygems_version: 3.2.27
|
89
90
|
signing_key:
|
90
91
|
specification_version: 4
|
91
92
|
summary: Add d3 graph generation to jekyll.
|