This commit is contained in:
Alex Wied
2026-07-10 23:14:50 -04:00
parent 9805c2e623
commit 66d21de8fe
2 changed files with 27 additions and 22 deletions
+24 -19
View File
@@ -133,6 +133,7 @@ impl Publisher {
let mut abbreviated_datatypes = ontology
.datatypes()
.into_iter()
.map(|node| ontology.abbreviate(node.as_ref()))
.collect::<Vec<_>>();
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::<Vec<_>>()
})
.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)
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)));
.on_control_click(Message::OpenQueryWindow(SearchResultClickAction::Object(key)))
};
let selected_datatype = term.datatype().map(|node| self.ontology.abbreviate(node));
let datatype_selector: Element<Message> = if state.read_only {
@@ -751,10 +759,7 @@ impl Publisher {
let body: Element<Message> = 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()
};
+2 -2
View File
@@ -295,7 +295,7 @@ WHERE {{
.collect()
}
pub fn datatypes(&self) -> impl Iterator<Item = NamedNode> {
pub fn datatypes(&self) -> BTreeSet<NamedNode> {
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<TripleRef<'a>>) -> bool {