Skip to content

Commit c968774

Browse files
committed
Add import/export of node content
1 parent 3995033 commit c968774

File tree

6 files changed

+42
-2
lines changed

6 files changed

+42
-2
lines changed

src/contextmenu.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ const nodeHeaderCtxMenuItems = [
9393
{ label: "Save current as initial value", action: "SaveInitialValueAction", onlyVisibleFor: [ "TurtleInputNodeWithCopyPasteInPort" ] },
9494
{ label: "Info", action: "InfoAction", onlyVisibleFor: [ "ExternalTurtleFilesInputNode", "ExternalSparqlEndpointInputNode" ] },
9595
{ label: "Toggle settings", action: "ToggleSettings", onlyVisibleFor: [ "ShaclValidationNode" ] },
96+
{ label: "Import content", action: "ImportContent", onlyVisibleFor: [ "JsonLdInputNode" ] }, // visible for input nodes TODO
97+
{ label: "Export content", action: "ExportContent", onlyVisibleFor: [ "JavaScriptExecNode" ] }, // visible for processor nodes TODO
9698
]
9799

98100
const multipleNodesHeaderCtxMenuItems = (count) => {

src/graph/Graph.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,15 @@ export class Graph {
2020
this.applySettings()
2121
}
2222

23+
registerNodeImportContentTrigger(func) {
24+
this.triggerNodeImportContent = func
25+
}
26+
27+
triggerNodeImportContentForNode(node) {
28+
this.nodeToReceiveImportedContent = node
29+
this.triggerNodeImportContent(node)
30+
}
31+
2332
applySettings() {
2433
for (let setting of Object.values(this.settings)) {
2534
document.documentElement.style.setProperty(setting.variable, setting.value)

src/graph/node/Node.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,8 @@ export class Node {
276276
saveInitialValue() { this.err() }
277277
getInfo() { this.err() }
278278
toggleSettings() { this.err() }
279-
279+
importContent() { this.err() }
280+
exportContent() { this.err() }
280281
err() {
281282
console.error("This 'abstract base method' should not be called")
282283
}

src/graph/node/input/JsonLdInputNode.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,8 @@ export class JsonLdInputNode extends CodeNode {
55
constructor(initialValues, graph) {
66
super(initialValues, graph, [], [ PORT.JSONLD ], TYPE.INPUT)
77
}
8+
9+
importContent() {
10+
this.graph.triggerNodeImportContentForNode(this)
11+
}
812
}

src/graph/node/processor/JavaScriptExecNode.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { CodeNode } from "../CodeNode.js"
22
import { PORT, TYPE } from "../../nodeFactory.js"
33
import { newStore, addTripleToStore, storeToTurtle } from "../../../assets/bundle.js"
4+
import { download, getTimestamp } from "../../../utils.js"
45

56
export class JavaScriptExecNode extends CodeNode {
67
constructor(initialValues, graph) {
7-
super(initialValues, graph, [ PORT.ANY, PORT.JAVASCRIPT ], [ PORT.ANY ], TYPE.PROCESSOR)
8+
// change back to PORT.ANY TODO
9+
super(initialValues, graph, [ PORT.ANY, PORT.JAVASCRIPT ], [ PORT.TURTLE ], TYPE.PROCESSOR)
810
}
911

1012
async processIncomingData() {
@@ -19,4 +21,8 @@ export class JavaScriptExecNode extends CodeNode {
1921
return this.handleError(err.message)
2022
}
2123
}
24+
25+
exportContent() {
26+
download(this.getValue(), "text/turtle", `export_${getTimestamp()}.ttl`)
27+
}
2228
}

src/index.html

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@
212212
<span id="githubBtn" class="spanBtn">GitHub</span>
213213
</span>
214214
</div>
215+
<input type="file" id="nodeImportContentFileUpload" style="display: none" />
215216
<div id="drawflow"></div>
216217
<script type="module">
217218
import { checkForNewRepoCommits } from "./check-repo-updates.js"
@@ -231,6 +232,7 @@
231232
editor.start()
232233

233234
let graph = new Graph(editor, showMessage)
235+
graph.registerNodeImportContentTrigger(() => document.getElementById("nodeImportContentFileUpload").click())
234236

235237
const wipe = () => {
236238
editor.clear()
@@ -368,6 +370,16 @@
368370
wipe()
369371
reader.readAsText(file)
370372
})
373+
document.getElementById("nodeImportContentFileUpload").addEventListener("change", () => {
374+
const reader = new FileReader()
375+
reader.onload = event => {
376+
const content = event.target.result
377+
graph.nodeToReceiveImportedContent.setValue(content)
378+
graph.nodeToReceiveImportedContent = null
379+
}
380+
const file = document.getElementById("nodeImportContentFileUpload").files[0]
381+
reader.readAsText(file)
382+
})
371383
document.getElementById("importBtn").addEventListener("click", () => document.getElementById("fileUpload").click())
372384
document.getElementById("exportBtn").addEventListener("click", () => {
373385
let modalContent = showModal("Export")
@@ -671,6 +683,12 @@
671683
case "ToggleSettings":
672684
node.toggleSettings()
673685
break;
686+
case "ImportContent":
687+
node.importContent()
688+
break;
689+
case "ExportContent":
690+
node.exportContent()
691+
break;
674692
}
675693
})
676694
return

0 commit comments

Comments
 (0)