diff --git a/Cargo.lock b/Cargo.lock
index 0b66a147..50f07c6d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3507,6 +3507,7 @@ dependencies = [
"either",
"futures",
"getrandom 0.2.10",
+ "lazy_static",
"ng-net",
"ng-oxigraph",
"ng-repo",
diff --git a/RELEASE-NOTE.md b/RELEASE-NOTE.md
index 48ec1c4e..c5e774c2 100644
--- a/RELEASE-NOTE.md
+++ b/RELEASE-NOTE.md
@@ -40,6 +40,5 @@ The `ngcli` daemon is release with the basic features listed in `ngcli --help`.
- you cannot share documents with other users. Everything is ready for this internally, but there is still some wiring to do that will take some more time.
- the Rich text editors (both for normal Post/Article and in Markdown) do not let you insert images nor links to other documents.
-- your documents listed in your 3 stores do not display any title or content type, making it difficult to understand which document is which by just reading the 7-character ID of the documents. This will be addressed very quickly, as soon as the "Header branch" feature will be implemented. For the same reason (lack of this feature), and in the web-app only, when you will have created many docs with many modifications, the loading of your app can take some time because it is loading all the content of all the docs at startup. The native apps are already working well and do not suffer from this caveat. For the web-app, it is not the intended behaviour of course, but we need the "Header branch" feature to fix this.
- The webapp has some limitation for now when it is offline, because it doesn't have a UserStorage. it works differently than the native apps, as it has to replay all the commits at every load. This will stay like that for now, as the feature "Web UserStorage" based on IndexedDB will take some time to be coded.
- JSON-LD isn't ready yet as we need the "Context branch" feature in order to enter the list of ontologies each document is based on.
diff --git a/ng-app/index-web.html b/ng-app/index-web.html
index 12b3a4f1..729114b0 100644
--- a/ng-app/index-web.html
+++ b/ng-app/index-web.html
@@ -116,19 +116,24 @@
{#each contained(commits.graph) as doc}
-
+ {#await fetch_header(doc.repo)}
+
+ {:then header}
+
{#if header.class}
{:else}{/if}
+ {/await}
{/each}
{#if commits.graph.length == 0 || contained(commits.graph).length == 0}
{$t("doc.empty_container")}
diff --git a/ng-app/src/apps/SparqlQueryEditor.svelte b/ng-app/src/apps/SparqlQueryEditor.svelte
index dc8bcb89..76fbf346 100644
--- a/ng-app/src/apps/SparqlQueryEditor.svelte
+++ b/ng-app/src/apps/SparqlQueryEditor.svelte
@@ -55,7 +55,7 @@
await reset_toasts();
results = await sparql_query($in_memory_discrete, union);
} catch(e) {
- console.log(e)
+ console.error(e)
toast_error(display_error(e));
}
}
@@ -112,7 +112,7 @@
{#each results.results.bindings as row}
{#each results.head.vars as variable}
- {row[variable].value}
+ {#if row[variable]} {row[variable].value }{/if}
{/each}
{/each}
diff --git a/ng-app/src/classes.ts b/ng-app/src/classes.ts
index 64993645..5929e0ec 100644
--- a/ng-app/src/classes.ts
+++ b/ng-app/src/classes.ts
@@ -12,7 +12,7 @@
// "data:graph", "data:json", "data:array", "data:map", "data:xml", "data:table", "data:collection", "data:board", "data:grid", "data:geomap",
// "e:email", "e:web", "e:http://[url of class in ontology]", "e:rdf" (read-only cache of RDF fetched from web2.0)
// "mc:text", "mc:link", "mc:card", "mc:pad",
-// "doc:diagram","doc:chart", "doc:pdf", "doc:odf", "doc:latex", "doc:ps", "doc:music", "doc:maths", "doc:chemistry", "doc:braille", "doc:ancientscript",
+// "diagram","chart", "doc:pdf", "doc:odf", "doc:latex", "doc:ps", "doc:music", "doc:maths", "doc:chemistry", "doc:braille", "doc:ancientscript",
// "media:image", "media:reel", "media:album", "media:video", "media:audio", "media:song", "media:subtitle", "media:overlay",
// "social:channel", "social:stream", "social:contact", "social:event", "social:calendar", "social:scheduler", "social:reaction", "social:chatroom",
// "prod:task", "prod:project", "prod:issue", "prod:form", "prod:filling", "prod:cad", "prod:slides", "prod:question", "prod:answer", "prod:poll", "prod:vote"
@@ -165,35 +165,24 @@ export const official_classes = {
},
"ng:compat": ["rdfs:Class"],
},
- "schema:rdfs": {
+ "schema": { // display with https://github.com/VisualDataWeb/WebVOWL
"ng:crdt": "Graph",
- "ng:n": "Schema - RDFS",
- "ng:a": "Define the Schema, Ontology or Vocabulary for your data and the relations between them, with RDFS",
- "ng:o": "n:g:z:json_ld_viewer", // default viewer
+ "ng:n": "Schema - RDFS/OWL",
+ "ng:a": "Define the Schema, Ontology or Vocabulary for your data and the relations between them, with RDFS and/or OWL",
+ "ng:o": "n:g:z:ontology_viewer", // default viewer
"ng:w": "n:g:z:ontology_editor", // default editor
"ng:x": {
"rdfs":true,
- },
- "ng:include": ["data:graph"],
- "ng:compat": ["rdfs:*","class"],
- },
- "schema:owl": { // display with https://github.com/VisualDataWeb/WebVOWL
- "ng:crdt": "Graph",
- "ng:n": "Schema - OWL",
- "ng:a": "Define the Schema, Ontology or Vocabulary for your data and the relations between them, with OWL",
- "ng:o": "n:g:z:owl_viewer", // default viewer
- "ng:w": "n:g:z:ontology_editor", // default editor
- "ng:x": {
"owl":true,
},
"ng:include": ["data:graph"],
- "ng:compat": ["owl:Ontology"],
+ "ng:compat": ["rdfs:*","class","owl:Ontology"],
},
"schema:shacl": {
"ng:crdt": "Graph",
"ng:n": "Schema - SHACL",
- "ng:a": "Define the Schema, Ontology or Vocabulary for your data and the relations between them, with SHACL",
- "ng:o": "n:g:z:json_ld_viewer", // default viewer
+ "ng:a": "Define the rules for your data with SHACL",
+ "ng:o": "n:g:z:ontology_viewer", // default viewer
"ng:w": "n:g:z:ontology_editor", // default editor
"ng:x": {
"sh":true,
@@ -204,8 +193,8 @@ export const official_classes = {
"schema:shex": {
"ng:crdt": "Graph",
"ng:n": "Schema - SHEX",
- "ng:a": "Define the Schema, Ontology or Vocabulary for your data and the relations between them, with SHEX",
- "ng:o": "n:g:z:json_ld_viewer", // default viewer
+ "ng:a": "Define the rules for your data with SHEX",
+ "ng:o": "n:g:z:ontology_viewer", // default viewer
"ng:w": "n:g:z:ontology_editor", // default editor
"ng:x": {
"shex":true,
@@ -426,13 +415,13 @@ export const official_classes = {
"ng:n": "Link",
"ng:a": "Link to a document. kept in Magic Carpet",
},
- "plato/card": {
+ "plato:card": {
"ng:crdt": "Graph",
"ng:n": "Card",
"ng:a": "Card representation of a document",
"ng:o": "n:g:z:card",
},
- "plato/pad": {
+ "plato:pad": {
"ng:crdt": "Graph",
"ng:n": "Pad",
"ng:a": "Pad representation of a document",
@@ -445,62 +434,62 @@ export const official_classes = {
"ng:o": "n:g:z:compose:viewer",
"ng:w": "n:g:z:compose:editor",
},
- "doc:diagram:mermaid" : {
+ "diagram:mermaid" : {
"ng:crdt": "YText",
"ng:n": "Diagram - Mermaid",
"ng:a": "Describe Diagrams with Mermaid",
"ng:compat": ["file:iana:application:vnd.mermaid"]
},
- "doc:diagram:drawio" : {
+ "diagram:drawio" : {
"ng:crdt": "YXml",
"ng:n": "Diagram - DrawIo",
"ng:a": "Draw Diagrams with DrawIo",
"ng:compat": ["file:iana:application:vnd.jgraph.mxfile","file:iana:application:x-drawio"]
},
- "doc:diagram:graphviz" : {
+ "diagram:graphviz" : {
"ng:crdt": "YText",
"ng:n": "Diagram - Graphviz",
"ng:a": "Describe Diagrams with Graphviz",
"ng:compat": ["file:iana:text:vnd.graphviz"]
},
- "doc:diagram:excalidraw" : {
+ "diagram:excalidraw" : {
"ng:crdt": "Automerge",
"ng:n": "Diagram - Excalidraw",
"ng:a": "Collaborate on Diagrams with Excalidraw",
"ng:compat": ["file:iana:application:vnd.excalidraw+json"]
},
- "doc:diagram:gantt" : { //https://github.com/frappe/gantt
+ "diagram:gantt" : { //https://github.com/frappe/gantt
"ng:crdt": "Automerge",
"ng:n": "Diagram - Gantt",
"ng:a": "Interactive gantt chart",
"ng:compat": []
},
- "doc:diagram:flowchart" : { //https://github.com/adrai/flowchart.js
+ "diagram:flowchart" : { //https://github.com/adrai/flowchart.js
"ng:crdt": "YText",
"ng:n": "Diagram - Flowchart",
"ng:a": "flow chart diagrams",
"ng:compat": []
},
- "doc:diagram:sequence" : { //https://github.com/bramp/js-sequence-diagrams
+ "diagram:sequence" : { //https://github.com/bramp/js-sequence-diagrams
"ng:crdt": "YText",
"ng:n": "Diagram - Sequence",
"ng:a": "sequence diagrams",
"ng:compat": []
},
// checkout https://www.mindmaps.app/ but it is AGPL
- "doc:diagram:markmap" : { //https://github.com/markmap/markmap
+ "diagram:markmap" : { //https://github.com/markmap/markmap
"ng:crdt": "YText",
"ng:n": "Diagram - Markmap",
"ng:a": "mindmaps with markmap",
"ng:compat": []
},
- "doc:diagram:mymind" : { //https://github.com/markmap/markmap
+ "diagram:mymind" : { //https://github.com/markmap/markmap
"ng:crdt": "YText", // see MyMind format, MindMup JSON, FreeMind XML and MindMap Architect XML
"ng:n": "Diagram - Mymind",
"ng:a": "mindmaps with mymind",
"ng:compat": [] // https://github.com/ondras/my-mind/wiki/Saving-and-loading#file-formats
},
- "doc:diagram:jsmind" : { //https://github.com/hizzgdev/jsmind
+ "diagram:jsmind" : { //https://github.com/hizzgdev/jsmind
"ng:crdt": "Automerge",
"ng:n": "Diagram - jsmind",
"ng:a": "mindmaps with jsmind",
@@ -514,69 +503,69 @@ export const official_classes = {
// https://github.com/Rich-Harris/pancake
// https://github.com/williamngan/pts
// https://visjs.org/
- "doc:viz:cytoscape" : {
+ "viz:cytoscape" : {
"ng:crdt": "Automerge",
"ng:n": "Viz - Cytoscape",
"ng:a": "Graph theory (network) visualization",
"ng:compat": [] // https://github.com/cytoscape/cytoscape.js
},
- "doc:viz:vega" : {
+ "viz:vega" : {
"ng:crdt": "Automerge",
"ng:n": "Viz - Vega",
"ng:a": "Grammar for interactive graphics",
"ng:compat": [] // https://vega.github.io/vega-lite/docs/ https://github.com/vega/editor
},
- "doc:viz:vizzu" : {
+ "viz:vizzu" : {
"ng:crdt": "Automerge",
"ng:n": "Viz - Vizzu",
"ng:a": "Animated data visualizations and data stories",
"ng:compat": [] // https://github.com/vizzuhq/vizzu-lib
},
- "doc:viz:plotly" : { //https://github.com/plotly/plotly.js
+ "viz:plotly" : { //https://github.com/plotly/plotly.js
"ng:crdt": "Automerge",
"ng:n": "Viz - Plotly",
"ng:a": "Declarative charts",
"ng:compat": [] // https://github.com/cytoscape/cytoscape.js
},
- "doc:viz:avail" : {
+ "viz:avail" : {
"ng:crdt": "Automerge",
"ng:n": "Viz - Avail",
"ng:a": "Time Data Availability Visualization",
"ng:compat": [] // https://github.com/flrs/visavail
},
- "doc:chart:frappecharts" : {
+ "chart:frappecharts" : {
"ng:crdt": "Automerge",
"ng:n": "Charts - Frappe",
"ng:a": "GitHub-inspired responsive charts",
"ng:compat": [] // https://github.com/frappe/charts
},
- "doc:chart:financial" : {
+ "chart:financial" : {
"ng:crdt": "Automerge",
"ng:n": "Charts - Financial",
"ng:a": "Financial charts",
"ng:compat": [] //https://github.com/tradingview/lightweight-charts
},
// have a look at https://github.com/cube-js/cube and https://awesome.cube.dev/ and https://frappe.io/products
- "doc:chart:apexcharts" : {
+ "chart:apexcharts" : {
"ng:crdt": "Automerge",
"ng:n": "Charts - ApexCharts",
"ng:a": "Interactive data visualizations",
"ng:compat": [] // https://github.com/apexcharts/apexcharts.js
},
//realtime data with https://github.com/square/cubism
- "doc:chart:billboard" : {
+ "chart:billboard" : {
"ng:crdt": "Automerge",
"ng:n": "Charts - BillBoard",
"ng:a": "Interactive data visualizations based on D3",
"ng:compat": [] // https://github.com/naver/billboard.js
},
- "doc:chart:echarts" : {
+ "chart:echarts" : {
"ng:crdt": "Automerge",
"ng:n": "Charts - ECharts",
"ng:a": "Interactive charting and data visualization with Apache ECharts",
"ng:compat": [] // https://github.com/apache/echarts
},
- "doc:chart:chartjs" : {
+ "chart:chartjs" : {
"ng:crdt": "Automerge",
"ng:n": "Charts - Chart.js",
"ng:a": "Simple yet flexible charting for designers & developers with Chart.js",
diff --git a/ng-app/src/lib/Document.svelte b/ng-app/src/lib/Document.svelte
index 939124dc..457e6421 100644
--- a/ng-app/src/lib/Document.svelte
+++ b/ng-app/src/lib/Document.svelte
@@ -14,7 +14,7 @@
branch_subscribe,
active_session,
cannot_load_offline,
- online,
+ open_doc_popup
} from "../store";
import {
@@ -42,7 +42,7 @@
const inview_options = {};//{rootMargin: "-44px"};
function openEditHeader() {
- //TODO
+ open_doc_popup("header");
}
diff --git a/ng-app/src/lib/FullLayout.svelte b/ng-app/src/lib/FullLayout.svelte
index 381ccf5b..15c88f9a 100644
--- a/ng-app/src/lib/FullLayout.svelte
+++ b/ng-app/src/lib/FullLayout.svelte
@@ -34,7 +34,6 @@
import BranchIcon from "./icons/BranchIcon.svelte";
import Message from "./components/Message.svelte";
- import Signature from "./popups/Signature.svelte";
import {
get,
} from "svelte/store";
@@ -47,11 +46,11 @@
has_editor_chat, all_files_count, all_comments_count, hideMenu, show_modal_menu, show_modal_create,
cur_tab_branch_nuri, cur_tab_doc_can_edit, cur_tab_doc_is_member, cur_tab_right_pane, cur_tab_folders_pane,
cur_tab_toc_pane, cur_tab_show_menu, cur_tab_branch_has_discrete, cur_tab_graph_or_discrete, cur_tab_view_or_edit, show_spinner,
- in_private_store, show_doc_popup, cur_doc_popup, open_doc_popup } from "../tab";
+ in_private_store, show_doc_popup, cur_doc_popup } from "../tab";
import {
active_session, redirect_after_login, toasts, check_has_camera, toast_error,
reset_toasts, redirect_if_wallet_is, active_wallet,
- display_error, openModalCreate
+ display_error, openModalCreate, open_doc_popup
} from "../store";
import ZeraIcon from "./icons/ZeraIcon.svelte";
import ng from "../api";
@@ -300,33 +299,33 @@
];
const create_chart_items = [
- "doc:chart:frappecharts",
- "doc:chart:financial",
- "doc:chart:apexcharts",
- "doc:chart:billboard",
- "doc:chart:echarts",
- "doc:chart:chartjs",
+ "chart:frappecharts",
+ "chart:financial",
+ "chart:apexcharts",
+ "chart:billboard",
+ "chart:echarts",
+ "chart:chartjs",
];
const create_viz_items = [
- "doc:viz:cytoscape",
- "doc:viz:vega",
- "doc:viz:vizzu",
- "doc:viz:plotly",
- "doc:viz:avail",
+ "viz:cytoscape",
+ "viz:vega",
+ "viz:vizzu",
+ "viz:plotly",
+ "viz:avail",
];
const create_diagram_items = [
- "doc:diagram:mermaid",
- "doc:diagram:drawio",
- "doc:diagram:graphviz",
- "doc:diagram:excalidraw",
- "doc:diagram:gantt",
- "doc:diagram:flowchart",
- "doc:diagram:sequence",
- "doc:diagram:markmap",
- "doc:diagram:mymind",
- "doc:diagram:jsmind",
+ "diagram:mermaid",
+ "diagram:drawio",
+ "diagram:graphviz",
+ "diagram:excalidraw",
+ "diagram:gantt",
+ "diagram:flowchart",
+ "diagram:sequence",
+ "diagram:markmap",
+ "diagram:mymind",
+ "diagram:jsmind",
];
const create_doc_items = [
@@ -367,6 +366,19 @@
"app:n:xxx.xx.xx",
];
+ import Signature from "./popups/Signature.svelte";
+ import Header from "./popups/Header.svelte";
+
+ const doc_popups = {
+ "signature": Signature,
+ "header": Header,
+ }
+
+ const doc_popups_size = {
+ "signature": "xs",
+ "header": "md",
+ }
+
let top;
let shareMenu;
let toolsMenu;
@@ -428,7 +440,7 @@
const openAction = (action:string) => {
hideMenu();
- if (doc_popups[action]) open_doc_popup(action);
+ open_doc_popup(action);
}
const openPane = (pane:string) => {
@@ -564,10 +576,6 @@
"mc":Sparkles,
};
- const doc_popups = {
- "signature": Signature,
- }
-
let destination = "store";
$: destination = $cur_tab_branch_nuri === "" ? "mc" : destination == "mc" ? "store" : destination;
@@ -755,7 +763,8 @@
{/if}
{#if $cur_tab_doc_can_edit}
-