jekyll-graph 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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.
|