From 66d21de8fe174ccffadf17542ef57b01f7214f12335175f7d0abd615b056333f Mon Sep 17 00:00:00 2001 From: Alex Wied <543423+centromere@users.noreply.github.com> Date: Fri, 10 Jul 2026 23:14:50 -0400 Subject: [PATCH] . --- publish/src/app.rs | 45 ++++++++++++++++++++----------------- publish/src/rdf/ontology.rs | 4 ++-- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/publish/src/app.rs b/publish/src/app.rs index 886efe0..f4827f8 100644 --- a/publish/src/app.rs +++ b/publish/src/app.rs @@ -133,6 +133,7 @@ impl Publisher { let mut abbreviated_datatypes = ontology .datatypes() + .into_iter() .map(|node| ontology.abbreviate(node.as_ref())) .collect::>(); abbreviated_datatypes.sort(); @@ -274,7 +275,11 @@ impl Publisher { error!(error); } Message::AddRow(None) => { - let quad = self.document.new_quad(); + let mut quad = self.document.new_quad(); + let empty_node = NamedNode::new_unchecked(""); + quad.predicate = empty_node.clone(); + quad.object = Term::NamedNode(empty_node); + let key = self.document.dataset_mut().quads.insert(quad); task = Task::done(Message::AddRow(Some(key))); } @@ -504,14 +509,9 @@ impl Publisher { .collect::>() }) .unwrap_or_else(|| { - let triple = Triple::new( - NamedOrBlankNode::BlankNode(BlankNode::default()), - rdf::TYPE, - Term::NamedNode(class) - ); - vec![ - self.document.quad_from_triple(triple) - ] + let mut new_quad = self.document.new_quad(); + new_quad.object = Term::NamedNode(class); + vec![new_quad] }); task = Task::done(Message::HideNewDocumentButtons); @@ -557,9 +557,13 @@ impl Publisher { container(space()).width(BUTTON_WIDTH) }; - let predicate_input = iri_input(self.ontology.prefixes(), "Predicate", triple.predicate.as_str()) - .on_input(move |value| Message::PredicateUpdated(key, value)) - .on_control_click(Message::OpenQueryWindow(SearchResultClickAction::Predicate(key))); + let predicate_input_base = iri_input(self.ontology.prefixes(), "Predicate", triple.predicate.as_str()); + let predicate_input = if self.ontology.is_read_only(triple.as_ref()) { + predicate_input_base + } else { + predicate_input_base.on_input(move |value| Message::PredicateUpdated(key, value)) + .on_control_click(Message::OpenQueryWindow(SearchResultClickAction::Predicate(key))) + }; let term = TermHelper::new(&triple.object); @@ -581,10 +585,14 @@ impl Publisher { }) .unwrap_or(Horizontal::Left); - let object_input = iri_input(self.ontology.prefixes(), "Object", value.as_str()) - .align_x(value_alignment) - .on_input(move |value| Message::ObjectUpdated(key, value)) - .on_control_click(Message::OpenQueryWindow(SearchResultClickAction::Object(key))); + let object_input_base = iri_input(self.ontology.prefixes(), "Object", value.as_str()); + let object_input = if self.ontology.is_read_only(triple.as_ref()) { + object_input_base + } else { + object_input_base.align_x(value_alignment) + .on_input(move |value| Message::ObjectUpdated(key, value)) + .on_control_click(Message::OpenQueryWindow(SearchResultClickAction::Object(key))) + }; let selected_datatype = term.datatype().map(|node| self.ontology.abbreviate(node)); let datatype_selector: Element = if state.read_only { @@ -751,10 +759,7 @@ impl Publisher { let body: Element = if self.show_new_document_buttons { let subclasses = self.ontology.subclasses_of(&rda::ENTITY.into_owned()); let labeled_subclasses = subclasses.iter().map(|iri| self.ontology.info(iri, &*language::ENGLISH_OR_UNTAGGED)); - column![ - //self.view_new_entity_buttons(self.ontology.subclass_of(gl::ENTITY)), - self.view_new_entity_buttons(labeled_subclasses), - ].into() + column![self.view_new_entity_buttons(labeled_subclasses)].into() } else { column(rows).into() }; diff --git a/publish/src/rdf/ontology.rs b/publish/src/rdf/ontology.rs index 0729282..fa44c7a 100644 --- a/publish/src/rdf/ontology.rs +++ b/publish/src/rdf/ontology.rs @@ -295,7 +295,7 @@ WHERE {{ .collect() } - pub fn datatypes(&self) -> impl Iterator { + pub fn datatypes(&self) -> BTreeSet { self.store .quads_for_pattern( None, @@ -307,7 +307,7 @@ WHERE {{ .filter_map(|quad| match quad.subject { NamedOrBlankNode::NamedNode(subject) => Some(subject), _ => None, - }) + }).collect() } pub fn is_read_only<'a>(&self, triple: impl Into>) -> bool {