From 2f799ed93718a48f6c3e041885db80c9adbd3c40 Mon Sep 17 00:00:00 2001 From: Niko PLP Date: Sun, 11 Aug 2024 19:48:49 +0300 Subject: [PATCH] MD and XML source viewer, and hide unimplemented Graph editors and viewers --- ng-app/package.json | 1 + ng-app/src/App.svelte | 2 +- ng-app/src/apps/MdSource.svelte | 157 ++++++++++++++++++++++ ng-app/src/apps/ProseMirrorEditor.svelte | 2 +- ng-app/src/apps/ProseMirrorViewer.svelte | 4 +- ng-app/src/apps/XmlSource.svelte | 131 ++++++++++++++++++ ng-app/src/apps/YMapEditor.svelte | 3 +- ng-app/src/apps/YMapViewer.svelte | 25 +++- ng-app/src/classes.ts | 10 ++ ng-app/src/lib/Document.svelte | 29 +++- ng-app/src/lib/FullLayout.svelte | 97 +++++++------ ng-app/src/lib/Pane.svelte | 9 +- ng-app/src/lib/components/MenuItem.svelte | 25 +++- ng-app/src/styles.css | 4 + ng-app/src/tab.ts | 1 + ng-app/src/zeras.ts | 48 +++++-- ng-app/vite.config.ts | 4 +- pnpm-lock.yaml | 13 ++ 18 files changed, 497 insertions(+), 68 deletions(-) create mode 100644 ng-app/src/apps/MdSource.svelte create mode 100644 ng-app/src/apps/XmlSource.svelte diff --git a/ng-app/package.json b/ng-app/package.json index bebf180..10f30f1 100644 --- a/ng-app/package.json +++ b/ng-app/package.json @@ -82,6 +82,7 @@ "svelte-jsoneditor": "^0.23.8", "svelte-spa-router": "^3.3.0", "vite-plugin-top-level-await": "^1.3.1", + "xml-beautifier": "^0.5.0", "y-codemirror.next": "^0.3.5", "y-prosemirror": "^1.2.10", "y-protocols": "^1.0.1", diff --git a/ng-app/src/App.svelte b/ng-app/src/App.svelte index bc5da3b..f018b5f 100644 --- a/ng-app/src/App.svelte +++ b/ng-app/src/App.svelte @@ -74,7 +74,7 @@ // }; onMount(async () => { - console.log("hide splash", window.supported); + //console.log("hide splash", window.supported); if (window.supported) { window.document.getElementById("splash").className="noshow"; window.document.getElementById("app").className=""; diff --git a/ng-app/src/apps/MdSource.svelte b/ng-app/src/apps/MdSource.svelte new file mode 100644 index 0000000..82da84b --- /dev/null +++ b/ng-app/src/apps/MdSource.svelte @@ -0,0 +1,157 @@ + + + + + + + {#if !has_content} +

{$t("doc.empty")}

+ {/if} + + {#if loading} +
+ + + + +

{$t("connectivity.loading")}...

+
+ {/if} + + {#if source} + + + + {/if} + + \ No newline at end of file diff --git a/ng-app/src/apps/ProseMirrorEditor.svelte b/ng-app/src/apps/ProseMirrorEditor.svelte index 527dabc..001f0e0 100644 --- a/ng-app/src/apps/ProseMirrorEditor.svelte +++ b/ng-app/src/apps/ProseMirrorEditor.svelte @@ -37,7 +37,7 @@ export let commits = {}; const ydoc = new Y.Doc() - const yxml = ydoc.getXmlFragment('ng') + const yxml = ydoc.getXmlFragment('prosemirror') let view; diff --git a/ng-app/src/apps/ProseMirrorViewer.svelte b/ng-app/src/apps/ProseMirrorViewer.svelte index 1ade29c..8ce8bbf 100644 --- a/ng-app/src/apps/ProseMirrorViewer.svelte +++ b/ng-app/src/apps/ProseMirrorViewer.svelte @@ -31,7 +31,7 @@ let source = ""; const ydoc = new Y.Doc() - const yxml = ydoc.getXmlFragment('ng') + const yxml = ydoc.getXmlFragment('prosemirror') let loading = true; @@ -101,7 +101,7 @@ {#if source} -
+
{@html source}
diff --git a/ng-app/src/apps/XmlSource.svelte b/ng-app/src/apps/XmlSource.svelte new file mode 100644 index 0000000..7891aac --- /dev/null +++ b/ng-app/src/apps/XmlSource.svelte @@ -0,0 +1,131 @@ + + + + + + + {#if !has_content} +

{$t("doc.empty")}

+ {/if} + + {#if loading} +
+ + + + +

{$t("connectivity.loading")}...

+
+ {/if} + + {#if source} + + + + {/if} diff --git a/ng-app/src/apps/YMapEditor.svelte b/ng-app/src/apps/YMapEditor.svelte index cd66124..fd097fa 100644 --- a/ng-app/src/apps/YMapEditor.svelte +++ b/ng-app/src/apps/YMapEditor.svelte @@ -266,7 +266,7 @@ function onRenderContextMenu(items, context) { if (items[4].items[1].items[0].text == "Convert to:") items[4].items.pop(); - if (Array.isArray(context.selection.path) && context.selection.path.length == 0 && context.selection.type === "value") { + if (Array.isArray(context.selection?.path) && context.selection.path.length == 0 && context.selection.type === "value") { items[2].items.shift(); items[2].items.pop(); items[4].items[0].items.pop(); @@ -275,6 +275,7 @@ } +
diff --git a/ng-app/src/apps/YMapViewer.svelte b/ng-app/src/apps/YMapViewer.svelte index 7e5ba49..a8e1dea 100644 --- a/ng-app/src/apps/YMapViewer.svelte +++ b/ng-app/src/apps/YMapViewer.svelte @@ -20,11 +20,11 @@ discrete_update } from "../store"; import { - cur_tab_register_on_save, - cur_tab_deregister_on_save, - cur_tab_branch_class + cur_tab_doc_can_edit, + set_view_or_edit } from "../tab"; import { t } from "svelte-i18n"; + import{ PencilSquare } from "svelte-heros-v2"; import * as Y from 'yjs' import { JSONEditor } from 'svelte-jsoneditor' @@ -119,12 +119,17 @@ for (const h of history) { Y.applyUpdate(ydoc, h[crdt], {local:true}) } + loading = false; }); onDestroy(async ()=>{ ydoc.destroy(); await editor.destroy(); }); + + const edit = () => { + set_view_or_edit(false); + } @@ -155,6 +160,20 @@
{/if} + + {#if $cur_tab_doc_can_edit && ( crdt=="YMap" && Object.keys(content.json).length == 0 || crdt=="YArray" && Array.isArray(content.json) && content.json.length == 0 ) } +
+ +
+ {/if} +
diff --git a/ng-app/src/classes.ts b/ng-app/src/classes.ts index c05d0d8..6499364 100644 --- a/ng-app/src/classes.ts +++ b/ng-app/src/classes.ts @@ -105,6 +105,7 @@ export const official_classes = { "ng:o": "n:g:z:pre", "ng:w": "n:g:z:code_editor", "ng:compat": ["file:iana:text:javascript"], + "implemented": true }, "code:ts": { "ng:crdt": "YText", @@ -113,6 +114,7 @@ export const official_classes = { "ng:o": "n:g:z:pre", "ng:w": "n:g:z:code_editor", "ng:compat": ["file:iana:text:typescript"], + "implemented": true }, "code:rust": { "ng:crdt": "YText", @@ -121,6 +123,7 @@ export const official_classes = { "ng:o": "n:g:z:pre", "ng:w": "n:g:z:code_editor", "ng:compat": [], + "implemented": true }, "code:svelte": { "ng:crdt": "YText", @@ -129,6 +132,7 @@ export const official_classes = { "ng:o": "n:g:z:pre", "ng:w": "n:g:z:code_editor", "ng:compat": [], + "implemented": true }, "code:react": { "ng:crdt": "YText", @@ -137,6 +141,7 @@ export const official_classes = { "ng:o": "n:g:z:pre", "ng:w": "n:g:z:code_editor", "ng:compat": [], + "implemented": true }, "app": { "ng:n": "Official App", @@ -283,6 +288,7 @@ export const official_classes = { }, "ng:compat": [ "rdf:*", "xsd:*", "file:iana:text:n3", "file:iana:text:rdf+n3", "file:iana:text:turtle", "file:iana:application:n-quads", "file:iana:application:trig", "file:iana:application:n-triples", "file:iana:application:rdf+xml", "file:iana:application:ld+json"], + "implemented": true }, "data:json": { "ng:crdt": "Automerge", @@ -291,6 +297,7 @@ export const official_classes = { "ng:o": "n:g:z:json_automerge_viewer", // default viewer "ng:w": "n:g:z:json_automerge_editor", // default editor "ng:compat": ["file:iana:application:json", "code:json"], + "implemented": true }, "data:array": { "ng:crdt": "YArray", @@ -299,6 +306,7 @@ export const official_classes = { "ng:o": "n:g:z:json_yarray_viewer", // default viewer "ng:w": "n:g:z:json_yarray_editor", // default editor "ng:compat": ["file:iana:application:json", "code:json"], + "implemented": true }, "data:map": { "ng:crdt": "YMap", @@ -307,6 +315,7 @@ export const official_classes = { "ng:o": "n:g:z:json_ymap_viewer", // default viewer "ng:w": "n:g:z:json_ymap_editor", // default editor "ng:compat": ["file:iana:application:json", "code:json"], + "implemented": true }, "data:xml": { "ng:crdt": "YXml", @@ -343,6 +352,7 @@ export const official_classes = { "ldp": true, }, "ng:compat": ["rdfs:member","ldp:contains","rdf:Bag","rdf:Alt"], + "implemented": true }, "data:plato": { "ng:crdt": "Graph", diff --git a/ng-app/src/lib/Document.svelte b/ng-app/src/lib/Document.svelte index 902142f..0e54ddb 100644 --- a/ng-app/src/lib/Document.svelte +++ b/ng-app/src/lib/Document.svelte @@ -118,7 +118,34 @@
{:then} {#if $cur_app} - {#await load_official_app($cur_app) then app} + {#await load_official_app($cur_app)} +
+
+ + + + +

{$t("connectivity.loading")}...

+
+
+ {:then app}
diff --git a/ng-app/src/lib/FullLayout.svelte b/ng-app/src/lib/FullLayout.svelte index 08b27e1..ab137b2 100644 --- a/ng-app/src/lib/FullLayout.svelte +++ b/ng-app/src/lib/FullLayout.svelte @@ -103,6 +103,8 @@ Camera, VideoCamera, Microphone, + ChevronUp, + ChevronDown, } from "svelte-heros-v2"; import NavBar from "./components/NavBar.svelte"; @@ -340,8 +342,8 @@ "data:board", "data:grid", "data:json", - "data:array", "data:map", + "data:array", "data:xml", ]; @@ -643,7 +645,7 @@ {/if} {#if $cur_viewer} - 1 || !$cur_tab_view_or_edit) && function () { if ($available_viewers.length > 1) { open_view_as = !open_view_as; } else { set_view_or_edit(true); hideMenu(); } open_edit_with=false;} }> + 1 ? open_view_as : undefined} clickable={($available_viewers.length > 1 || !$cur_tab_view_or_edit) && function () { if ($available_viewers.length > 1) { open_view_as = !open_view_as; } else { set_view_or_edit(true); hideMenu(); } open_edit_with=false;} }> {#if open_view_as && $available_viewers.length > 1 } {#each $available_viewers as viewer} - + 1 || $cur_tab_view_or_edit) && function () { if ($available_editors.length > 1) { open_edit_with = !open_edit_with; } else { set_view_or_edit(false); hideMenu(); } open_view_as=false;} }> + 1 ? open_edit_with : undefined} + clickable={ ($available_editors.length > 1 || $cur_tab_view_or_edit) && function () { if ($available_editors.length > 1) { open_edit_with = !open_edit_with; } else { set_view_or_edit(false); hideMenu(); } open_view_as=false;} }> {#if open_edit_with && $available_editors.length > 1 } {#each $available_editors as editor} - + {$t("doc.menu.items.files.label")} {$all_files_count}
- { open_share = !open_share; scrollToMenuShare(); } }> + { open_share = !open_share; scrollToMenuShare(); } }> {$t("doc.menu.items.settings.label")}
- {open_tools = !open_tools; scrollToMenuTools();} } > + {open_tools = !open_tools; scrollToMenuTools();} } > {$t("doc.menu.items.mc.label")} - openArchive() }> + openArchive() }> {$t("doc.text")} - new_group() }> + + {$t("doc.group")} - new_document("doc:compose") }> + + {get_class("doc:compose")["ng:n"]}
- { createMenuOpened.social = !createMenuOpened.social; scrollToCreateMenu("social"); } }> + { createMenuOpened.social = !createMenuOpened.social; scrollToCreateMenu("social"); } }> {#if createMenuOpened.social } {#each create_social_items as item} - new_document(item) }> + + {get_class(item)["ng:n"]} @@ -961,18 +969,20 @@ {/if}
- { createMenuOpened.apps = !createMenuOpened.apps; scrollToCreateMenu("apps"); } }> + { createMenuOpened.apps = !createMenuOpened.apps; scrollToCreateMenu("apps"); } }> {$t("doc.apps")} {#if createMenuOpened.apps } - new_app() }> + + {$t("doc.new_app")} {#each create_apps_items as item} - new_document(item) }> + + 3rd party app Class @@ -980,7 +990,7 @@ {/if}
- { createMenuOpened.pro = !createMenuOpened.pro; scrollToCreateMenu("pro"); } }> + { createMenuOpened.pro = !createMenuOpened.pro; scrollToCreateMenu("pro"); } }> {#if createMenuOpened.pro } {#each create_pro_items as item} - new_document(item) }> + + {get_class(item)["ng:n"]} @@ -998,25 +1009,26 @@ {#await check_has_camera() then has_camera} {#if has_camera} - scan_qr() }> + + {$t("buttons.scan_qr")} - - take_picture() }> + + {$t("doc.take_picture")} - - record_reel() }> + + {$t("doc.record_reel")} - - record_voice() }> + + {$t("doc.record_voice")} @@ -1024,7 +1036,7 @@ {/if}
- { createMenuOpened.media = !createMenuOpened.media; scrollToCreateMenu("media"); } }> + { createMenuOpened.media = !createMenuOpened.media; scrollToCreateMenu("media"); } }> {#if createMenuOpened.media } {#each create_media_items as item} - new_document(item) }> + + {get_class(item)["ng:n"]} {/each} {#if !has_camera} - record_voice() }> + + {$t("doc.record_voice")} @@ -1049,13 +1063,14 @@ {/await}
- { createMenuOpened.chart = !createMenuOpened.chart; scrollToCreateMenu("chart"); } }> + { createMenuOpened.chart = !createMenuOpened.chart; scrollToCreateMenu("chart"); } }> {$t("doc.chart")} {#if createMenuOpened.chart } {#each create_chart_items as item} - new_document(item) }> + + {get_class(item)["ng:n"]} @@ -1063,13 +1078,14 @@ {/if}
- { createMenuOpened.viz = !createMenuOpened.viz; scrollToCreateMenu("viz"); } }> + { createMenuOpened.viz = !createMenuOpened.viz; scrollToCreateMenu("viz"); } }> {$t("doc.viz")} {#if createMenuOpened.viz } {#each create_viz_items as item} - new_document(item) }> + + {get_class(item)["ng:n"]} @@ -1077,13 +1093,14 @@ {/if}
- { createMenuOpened.diagram = !createMenuOpened.diagram; scrollToCreateMenu("diagram"); } }> + { createMenuOpened.diagram = !createMenuOpened.diagram; scrollToCreateMenu("diagram"); } }> {$t("doc.diagram")} {#if createMenuOpened.diagram } {#each create_diagram_items as item} - new_document(item) }> + + {get_class(item)["ng:n"]} @@ -1091,13 +1108,14 @@ {/if}
- { createMenuOpened.doc = !createMenuOpened.doc; scrollToCreateMenu("doc"); } }> + { createMenuOpened.doc = !createMenuOpened.doc; scrollToCreateMenu("doc"); } }> {$t("doc.other")} {#if createMenuOpened.doc } {#each create_doc_items as item} - new_document(item) }> + + {get_class(item)["ng:n"]} @@ -1105,13 +1123,13 @@ {/if}
- { createMenuOpened.data = !createMenuOpened.data; scrollToCreateMenu("data"); } }> + { createMenuOpened.data = !createMenuOpened.data; scrollToCreateMenu("data"); } }> {$t("doc.data")} {#if createMenuOpened.data } {#each create_data_items as item} - new_document(item) }> + new_document(item) : undefined }> {get_class(item)["ng:n"]} @@ -1119,7 +1137,7 @@ {/if}
- { createMenuOpened.code = !createMenuOpened.code; scrollToCreateMenu("code"); } }> + { createMenuOpened.code = !createMenuOpened.code; scrollToCreateMenu("code"); } }> {$t("doc.code")} @@ -1132,7 +1150,8 @@ {/each} {/if} - new_document("e:link") }> + + {get_class("e:link")["ng:n"]} diff --git a/ng-app/src/lib/Pane.svelte b/ng-app/src/lib/Pane.svelte index f09344d..9e4d99f 100644 --- a/ng-app/src/lib/Pane.svelte +++ b/ng-app/src/lib/Pane.svelte @@ -19,6 +19,7 @@ }; const load_pane = async (pane_name) => { + if (!panes[pane_name]) return false; let component = await import(`./panes/${panes[pane_name]}.svelte`); return component.default; }; @@ -29,9 +30,11 @@ {#if pane_name} {#await load_pane(pane_name) then pane} -
- -
+ {#if pane} +
+ +
+ {/if} {/await} {/if} diff --git a/ng-app/src/lib/components/MenuItem.svelte b/ng-app/src/lib/components/MenuItem.svelte index f5bcce1..97bd8c3 100644 --- a/ng-app/src/lib/components/MenuItem.svelte +++ b/ng-app/src/lib/components/MenuItem.svelte @@ -16,17 +16,36 @@ export let extraClass = ""; export let selected = false; export let title = ""; + export let dropdown = undefined; + + import { + ChevronUp, + ChevronDown, + } from "svelte-heros-v2"; {#if clickable} +{:else if clickable === false} +
  • +
  • {:else} -
  • +
  • -{/if} \ No newline at end of file +{/if} + diff --git a/ng-app/src/styles.css b/ng-app/src/styles.css index e16aa77..6501ad7 100644 --- a/ng-app/src/styles.css +++ b/ng-app/src/styles.css @@ -238,6 +238,10 @@ div[role="alert"] div { justify-content: center; } +.deactivated-menu > svg { + color: rgb(156 163 175) !important; +} + :root { font-family: Inter, Avenir, Helvetica, Arial, sans-serif; font-size: 16px; diff --git a/ng-app/src/tab.ts b/ng-app/src/tab.ts index dd4618b..0e5d403 100644 --- a/ng-app/src/tab.ts +++ b/ng-app/src/tab.ts @@ -535,6 +535,7 @@ export const change_nav_bar = (icon, title, back) => { } return old; }); + live_editing.set(get(cur_tab).doc.live_edit); }; export const persistent_error = (nuri, pe) => { diff --git a/ng-app/src/zeras.ts b/ng-app/src/zeras.ts index 8120eaf..6385e6d 100644 --- a/ng-app/src/zeras.ts +++ b/ng-app/src/zeras.ts @@ -30,6 +30,7 @@ export const official_apps = { "ng:b": "SparqlUpdateEditor", // YASGUI of Zazuko https://github.com/zazuko/trifid/tree/main/packages/yasgui "ng:o": [], "ng:w": ["query:sparql_update","data:graph"], + implemented: true, }, "n:g:z:json_ld_editor": { "ng:n": "JSON-LD Editor", @@ -48,6 +49,7 @@ export const official_apps = { "ng:g": "n:g:z:json_yarray_editor", "ng:b": "YArrayEditor", "ng:w": ["data:array"], + implemented: true, }, "n:g:z:json_automerge_editor": { "ng:n": "JSON Editor", @@ -58,6 +60,7 @@ export const official_apps = { "ng:b": "AutomergeEditor", "ng:w": ["data:json"], "full_width": true, + implemented: true, }, "n:g:z:json_ymap_editor": { "ng:n": "JSON Editor", @@ -67,6 +70,7 @@ export const official_apps = { "ng:g": "n:g:z:json_ymap_editor", "ng:b": "YMapEditor", "ng:w": ["data:map"], + implemented: true, }, "n:g:z:triple_editor": { "ng:n": "Graph Triples Editor", @@ -86,6 +90,7 @@ export const official_apps = { "ng:b": "TurtleViewer", "ng:o": ["data:graph"], "ng:w": [], + implemented: true, }, "n:g:z:sparql_query": { "ng:n": "SPARQL Query", @@ -96,6 +101,7 @@ export const official_apps = { "ng:b": "SparqlQueryEditor", // YASGUI of Zazuko https://github.com/zazuko/trifid/tree/main/packages/yasgui "ng:o": ["data:graph"], "ng:w": ["query:sparql"], + implemented: true, }, "n:g:z:json_ld_viewer": { "ng:n": "JSON-LD", @@ -124,6 +130,7 @@ export const official_apps = { "ng:g": "n:g:z:json_ymap_viewer", "ng:b": "YMapViewer", "ng:o": ["data:map"], + implemented: true, }, "n:g:z:json_yarray_viewer": { "ng:n": "JSON", @@ -133,6 +140,7 @@ export const official_apps = { "ng:g": "n:g:z:json_yarray_viewer", "ng:b": "YArrayViewer", "ng:o": ["data:array"], + implemented: true, }, "n:g:z:json_automerge_viewer": { "ng:n": "JSON", @@ -143,6 +151,7 @@ export const official_apps = { "ng:b": "AutomergeViewer", "ng:o": ["data:json"], "full_width": true, + implemented: true, }, "n:g:z:triple_viewer": { "ng:n": "Graph Triples", @@ -252,6 +261,7 @@ export const official_apps = { "ng:b": "ProseMirrorEditor", "ng:o": [], "ng:w": ["post:rich"], + implemented: true, }, "n:g:z:post_md_editor": { "ng:n": "Post MD Editor", @@ -263,6 +273,7 @@ export const official_apps = { "ng:o": [], "ng:w": ["post:md"], "full_width": true, + implemented: true, }, "n:g:z:code_editor": { "ng:n": "Text Editor", @@ -273,6 +284,7 @@ export const official_apps = { "ng:b": "CodeMirrorEditor", "ng:o": [], "ng:w": ["code*","post:text"], + implemented: true, }, "n:g:z:file_viewer": { "ng:n": "File details", @@ -303,6 +315,7 @@ export const official_apps = { "ng:b": "XmlSource", // displayed with highlight.js , with option to download "ng:o": ["post:rich","post:md","post:html","page","data:xml", "doc:diagram:drawio"], "ng:w": [], + implemented: true, }, "n:g:z:viewer:md": { "ng:n": "MarkDown source", @@ -313,6 +326,7 @@ export const official_apps = { "ng:b": "MdSource", // displayed with highlight.js , with option to download "ng:o": ["post:md"], "ng:w": [], + implemented: true, }, "n:g:z:crdt_source_viewer:json": { "ng:n": "JSON Source", @@ -324,6 +338,7 @@ export const official_apps = { "ng:o": ["data:json", "data:table", "doc:diagram:jsmind", "doc:diagram:gantt", "doc:diagram:excalidraw", "doc:viz:*", "doc:chart:*", "prod:cad"], "ng:w": [], "full_width": true, + implemented: true, }, "n:g:z:crdt_source_viewer:ymap": { "ng:n": "JSON Source", @@ -334,6 +349,7 @@ export const official_apps = { "ng:b": "YMapSource", // displayed with highlight.js , with option to download "ng:o": ["data:map"], "ng:w": [], + implemented: true, }, "n:g:z:crdt_source_viewer:yarray": { "ng:n": "JSON Source", @@ -344,6 +360,7 @@ export const official_apps = { "ng:b": "YArraySource", // displayed with highlight.js , with option to download "ng:o": ["data:array"], "ng:w": [], + implemented: true, }, "n:g:z:crdt_source_viewer:text": { "ng:n": "Text source", @@ -351,21 +368,23 @@ export const official_apps = { "ng:c": "app", "ng:u": "source",//favicon. can be a did:ng:j "ng:g": "n:g:z:crdt_source_viewer:text", - "ng:b": "TextViewer", // displayed with highlight.js , with option to download + "ng:b": "TextViewer", // displayed with highlight.js , with option to download and copy paste "ng:o": ["post:asciidoc", "service*", "contract", "query:sparql*","query:graphql","doc:diagram:mermaid","doc:diagram:graphviz","doc:diagram:flowchart", "doc:diagram:sequence","doc:diagram:markmap","doc:diagram:mymind","doc:music*", "doc:maths", "doc:chemistry", "doc:ancientscript", "doc:braille", "media:subtitle"], "ng:w": [], - }, - "n:g:z:crdt_source_viewer:rdf": { - "ng:n": "RDF source", - "ng:a": "See the source graph of this document, in RDF (turtle)", - "ng:c": "app", - "ng:u": "source",//favicon. can be a did:ng:j - "ng:g": "n:g:z:crdt_source_viewer:rdf", - "ng:b": "TurtleViewer", //, with option to download - "ng:o": ["data:graph"], - "ng:w": [], - }, + implemented: true, + }, + // "n:g:z:crdt_source_viewer:rdf": { + // "ng:n": "RDF source", + // "ng:a": "See the source graph of this document, in RDF (turtle)", + // "ng:c": "app", + // "ng:u": "source",//favicon. can be a did:ng:j + // "ng:g": "n:g:z:crdt_source_viewer:rdf", + // "ng:b": "TurtleViewer", //, with option to download + // "ng:o": ["data:graph"], + // "ng:w": [], + // implemented: true, + // }, "n:g:z:post:rich": { "ng:n": "Post", "ng:a": "View a Rich Post", @@ -375,6 +394,7 @@ export const official_apps = { "ng:b": "ProseMirrorViewer", // https://www.npmjs.com/package/prosemirror-to-html-js or https://prosemirror.net/docs/ref/version/0.4.0.html#toDOM https://prosemirror.net/docs/ref/version/0.4.0.html#toHTML "ng:o": ["post:rich"], "ng:w": [], + implemented: true, }, "n:g:z:post:md": { "ng:n": "Post", @@ -385,6 +405,7 @@ export const official_apps = { "ng:b": "PostMdViewer", // https://github.com/wooorm/markdown-rs "ng:o": ["post:md"], "ng:w": [], + implemented: true, }, "n:g:z:compose:editor": { "ng:n": "Composition Editor", @@ -413,6 +434,7 @@ export const official_apps = { "ng:b": "TextViewer", "ng:o": ["post:text"], "ng:w": [], + implemented: true, }, "n:g:z:pre": { "ng:n": "Source Code", @@ -423,6 +445,7 @@ export const official_apps = { "ng:b": "TextViewer", // displayed with highlight.js "ng:o": ["code*"], "ng:w": [], + implemented: true, }, "n:g:z:pad": { "ng:n": "Pad", @@ -481,6 +504,7 @@ export const official_apps = { "ng:u": "container",//favicon. can be a did:ng:j "ng:g": "n:g:z:container", "ng:b": "ContainerView", + implemented: true, "ng:o": ["data:collection","data:container"], "ng:w": ["data:collection","data:container"], }, diff --git a/ng-app/vite.config.ts b/ng-app/vite.config.ts index 08d558c..ce19e93 100644 --- a/ng-app/vite.config.ts +++ b/ng-app/vite.config.ts @@ -30,12 +30,12 @@ export default defineConfig(async () => { "@codemirror/lang-javascript", "@codemirror/lang-rust", "@replit/codemirror-lang-svelte", "yjs", "y-codemirror.next", "svelte-codemirror-editor", "prosemirror-svelte", "prosemirror-svelte/state", "prosemirror-svelte/helpers", "y-prosemirror", "prosemirror-state", "prosemirror-model", "prosemirror-view", "y-protocols", "@milkdown/core", "@milkdown/ctx", "@milkdown/prose", "@milkdown/transformer", "@milkdown/preset-commonmark", "@milkdown/theme-nord", "@milkdown/plugin-collab", - "svelte-highlight", "svelte-highlight/languages/typescript", "svelte-highlight/languages/javascript", "svelte-highlight/languages/rust", "@milkdown/preset-gfm", + "svelte-highlight", "svelte-highlight/languages/typescript", "svelte-highlight/languages/markdown", "svelte-highlight/languages/xml", "svelte-highlight/languages/javascript", "svelte-highlight/languages/rust", "@milkdown/preset-gfm", "@milkdown-lab/plugin-split-editing", "@milkdown/plugin-slash", "@milkdown/utils", "@milkdown/plugin-prism", "@milkdown/plugin-emoji", "@milkdown/plugin-math", "@milkdown/plugin-indent", "svelte-jsoneditor", "@automerge/automerge/next", "@automerge/automerge/slim"], include: ["debug","extend","highlight.js","highlight.js/lib/core","lodash.debounce","@sindresorhus/is","char-regex","emojilib","skin-tone", - 'immutable-json-patch', ] + 'immutable-json-patch', "xml-beautifier" ] }, worker: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 79664c9..cdd1a57 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -101,6 +101,7 @@ importers: vite-plugin-svelte-svg: ^2.2.1 vite-plugin-top-level-await: ^1.3.1 vite-plugin-wasm: ^3.2.2 + xml-beautifier: ^0.5.0 y-codemirror.next: ^0.3.5 y-prosemirror: ^1.2.10 y-protocols: ^1.0.1 @@ -172,6 +173,7 @@ importers: svelte-jsoneditor: 0.23.8_@lezer+common@1.2.1 svelte-spa-router: 3.3.0 vite-plugin-top-level-await: 1.3.1_vite@4.3.9 + xml-beautifier: 0.5.0 y-codemirror.next: 0.3.5_2derscuhaavtzv2sogf3enfvaa y-prosemirror: 1.2.10_t5dsb3fc2figoeqqliqhb3exne y-protocols: 1.0.6_yjs@13.6.18 @@ -3720,6 +3722,11 @@ packages: - supports-color dev: false + /repeat-string/1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: false + /require-from-string/2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -4599,6 +4606,12 @@ packages: /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + /xml-beautifier/0.5.0: + resolution: {integrity: sha512-QG/qiHeolHUd1tAtM+5zHxTzDprb8qvhmIYUYV1E9QK/jTFlrAa1Mz7QQqJPeqc3uuFAGzTOhjvbdx2hOP6bHw==} + dependencies: + repeat-string: 1.6.1 + dev: false + /y-codemirror.next/0.3.5_2derscuhaavtzv2sogf3enfvaa: resolution: {integrity: sha512-VluNu3e5HfEXybnypnsGwKAj+fKLd4iAnR7JuX1Sfyydmn1jCBS5wwEL/uS04Ch2ib0DnMAOF6ZRR/8kK3wyGw==} peerDependencies: