diff --git a/src/App.vue b/src/App.vue index 0aaac63..337976c 100644 --- a/src/App.vue +++ b/src/App.vue @@ -18,12 +18,15 @@ import type { Dataset, Term } from '@rdfjs/types'; import { prefixMap } from './rdf/prefix-map'; import SPOSearch from './components/SPOSearch.vue'; +import ShareButton from './components/share-button/ShareButton.vue'; import { useVueFlow } from '@vue-flow/core'; const { fitView, nodeLookup} = useVueFlow() const selectedFormat = ref(rdfFormats.find(f => f.type === RdfSerializationType.Turtle) ?? rdfFormats[0]); const rdfFormatOptions = ref(rdfFormats); +const rdfText = ref(''); + const currentSerialization = computed(() => selectedFormat.value.type); const dataset = ref(rdfEnvironment.dataset() as unknown as Dataset); const hideEditorSplitterPanel = ref(false); @@ -33,6 +36,7 @@ const showAboutDialog = ref(false); function onQuadsChanged(rdfData: RdfData) { const newDataset = rdfEnvironment.dataset(rdfData.quads) as unknown as Dataset; prefixMap.update(rdfData.prefix); + rdfText.value = rdfData.rdfText; dataset.value = newDataset; } function makeEditorSmall() { @@ -52,8 +56,6 @@ function onFormatChange(rdfSerializationType: RdfSerializationType) { } -const env = rdfEnvironment; - function onNdeSelected(term: Term) { if (!(term.termType === 'NamedNode' || term.termType === 'BlankNode')) { return @@ -70,6 +72,7 @@ function onNdeSelected(term: Term) { } + + + - + + + @@ -135,3 +145,6 @@ Sketch is a simple yet powerful tool for visualizing RDF graphs. It allows you t + + + diff --git a/src/components/GraphView.vue b/src/components/GraphView.vue index 05bd60d..aedb158 100644 --- a/src/components/GraphView.vue +++ b/src/components/GraphView.vue @@ -10,6 +10,7 @@ + + + diff --git a/src/main.ts b/src/main.ts index 3b4289a..990001b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,11 +1,17 @@ import './assets/main.css' -import { createApp } from 'vue' +import { createApp } from 'vue'; -import PrimeVue from 'primevue/config' +import PrimeVue from 'primevue/config'; -import Aura from '@primevue/themes/aura' -import App from './App.vue' +import Aura from '@primevue/themes/aura'; +import App from './App.vue'; + +import { useUrlSearchParams } from '@vueuse/core'; +import { rdfFormats, RdfSerializationType } from './constant/rdf-format'; +import { localStorageKeyFormat, localStorageKeyText } from './constant/local-storage-keys'; + +const params = useUrlSearchParams('hash-params') const app = createApp(App); @@ -19,5 +25,22 @@ app.use(PrimeVue, { } }); +writeRdfFromUrlToLocalStorage(); + app.mount('#app') + +/** + * This is used for "Share" functionality. + * It reads the RDF and format from the URL and writes it to the local storage. + */ +function writeRdfFromUrlToLocalStorage(): void { + if (params.rdf) { + const rdfText = (Array.isArray(params.rdf) ? params.rdf[0] : params.rdf) ?? ''; + const rdfFormat = ((Array.isArray(params.format) ? params.format[0] : params.format) ?? RdfSerializationType.Turtle).replace(' ', '+'); + if (rdfText.length > 0 && rdfFormats.find(f => f.type === rdfFormat)) { + localStorage.setItem(localStorageKeyText, rdfText); + localStorage.setItem(localStorageKeyFormat, rdfFormat); + } + } +}