.
This commit is contained in:
+25
-20
@@ -133,6 +133,7 @@ impl Publisher {
|
|||||||
|
|
||||||
let mut abbreviated_datatypes = ontology
|
let mut abbreviated_datatypes = ontology
|
||||||
.datatypes()
|
.datatypes()
|
||||||
|
.into_iter()
|
||||||
.map(|node| ontology.abbreviate(node.as_ref()))
|
.map(|node| ontology.abbreviate(node.as_ref()))
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
abbreviated_datatypes.sort();
|
abbreviated_datatypes.sort();
|
||||||
@@ -274,7 +275,11 @@ impl Publisher {
|
|||||||
error!(error);
|
error!(error);
|
||||||
}
|
}
|
||||||
Message::AddRow(None) => {
|
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);
|
let key = self.document.dataset_mut().quads.insert(quad);
|
||||||
task = Task::done(Message::AddRow(Some(key)));
|
task = Task::done(Message::AddRow(Some(key)));
|
||||||
}
|
}
|
||||||
@@ -504,14 +509,9 @@ impl Publisher {
|
|||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
})
|
})
|
||||||
.unwrap_or_else(|| {
|
.unwrap_or_else(|| {
|
||||||
let triple = Triple::new(
|
let mut new_quad = self.document.new_quad();
|
||||||
NamedOrBlankNode::BlankNode(BlankNode::default()),
|
new_quad.object = Term::NamedNode(class);
|
||||||
rdf::TYPE,
|
vec![new_quad]
|
||||||
Term::NamedNode(class)
|
|
||||||
);
|
|
||||||
vec![
|
|
||||||
self.document.quad_from_triple(triple)
|
|
||||||
]
|
|
||||||
});
|
});
|
||||||
|
|
||||||
task = Task::done(Message::HideNewDocumentButtons);
|
task = Task::done(Message::HideNewDocumentButtons);
|
||||||
@@ -557,9 +557,13 @@ impl Publisher {
|
|||||||
container(space()).width(BUTTON_WIDTH)
|
container(space()).width(BUTTON_WIDTH)
|
||||||
};
|
};
|
||||||
|
|
||||||
let predicate_input = iri_input(self.ontology.prefixes(), "Predicate", triple.predicate.as_str())
|
let predicate_input_base = iri_input(self.ontology.prefixes(), "Predicate", triple.predicate.as_str());
|
||||||
.on_input(move |value| Message::PredicateUpdated(key, value))
|
let predicate_input = if self.ontology.is_read_only(triple.as_ref()) {
|
||||||
.on_control_click(Message::OpenQueryWindow(SearchResultClickAction::Predicate(key)));
|
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);
|
let term = TermHelper::new(&triple.object);
|
||||||
|
|
||||||
@@ -581,10 +585,14 @@ impl Publisher {
|
|||||||
})
|
})
|
||||||
.unwrap_or(Horizontal::Left);
|
.unwrap_or(Horizontal::Left);
|
||||||
|
|
||||||
let object_input = iri_input(self.ontology.prefixes(), "Object", value.as_str())
|
let object_input_base = iri_input(self.ontology.prefixes(), "Object", value.as_str());
|
||||||
.align_x(value_alignment)
|
let object_input = if self.ontology.is_read_only(triple.as_ref()) {
|
||||||
.on_input(move |value| Message::ObjectUpdated(key, value))
|
object_input_base
|
||||||
.on_control_click(Message::OpenQueryWindow(SearchResultClickAction::Object(key)));
|
} 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 selected_datatype = term.datatype().map(|node| self.ontology.abbreviate(node));
|
||||||
let datatype_selector: Element<Message> = if state.read_only {
|
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 body: Element<Message> = if self.show_new_document_buttons {
|
||||||
let subclasses = self.ontology.subclasses_of(&rda::ENTITY.into_owned());
|
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));
|
let labeled_subclasses = subclasses.iter().map(|iri| self.ontology.info(iri, &*language::ENGLISH_OR_UNTAGGED));
|
||||||
column![
|
column![self.view_new_entity_buttons(labeled_subclasses)].into()
|
||||||
//self.view_new_entity_buttons(self.ontology.subclass_of(gl::ENTITY)),
|
|
||||||
self.view_new_entity_buttons(labeled_subclasses),
|
|
||||||
].into()
|
|
||||||
} else {
|
} else {
|
||||||
column(rows).into()
|
column(rows).into()
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -295,7 +295,7 @@ WHERE {{
|
|||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn datatypes(&self) -> impl Iterator<Item = NamedNode> {
|
pub fn datatypes(&self) -> BTreeSet<NamedNode> {
|
||||||
self.store
|
self.store
|
||||||
.quads_for_pattern(
|
.quads_for_pattern(
|
||||||
None,
|
None,
|
||||||
@@ -307,7 +307,7 @@ WHERE {{
|
|||||||
.filter_map(|quad| match quad.subject {
|
.filter_map(|quad| match quad.subject {
|
||||||
NamedOrBlankNode::NamedNode(subject) => Some(subject),
|
NamedOrBlankNode::NamedNode(subject) => Some(subject),
|
||||||
_ => None,
|
_ => None,
|
||||||
})
|
}).collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_read_only<'a>(&self, triple: impl Into<TripleRef<'a>>) -> bool {
|
pub fn is_read_only<'a>(&self, triple: impl Into<TripleRef<'a>>) -> bool {
|
||||||
|
|||||||
Reference in New Issue
Block a user