.
This commit is contained in:
+44
-12
@@ -1,7 +1,7 @@
|
||||
use std::collections::HashMap;
|
||||
use crate::rdf::ontology::{IndexEntry, LabeledIri, Ontology};
|
||||
use crate::rdf::term_helper::{TermHelper, TermHelperMut};
|
||||
use gl_search::{Schema, SearchDocument, SearchIndex, doc, IndexWriter, Value};
|
||||
use gl_search::{Schema, SearchDocument, SearchIndex, doc, Value};
|
||||
use http::StatusCode;
|
||||
use iced::alignment::Horizontal;
|
||||
use iced::widget::button::Style;
|
||||
@@ -21,10 +21,12 @@ use oxigraph::model::vocab::{rdf, rdfs};
|
||||
use oxigraph::model::{BaseDirection, Dataset, NamedNode, Quad, Term};
|
||||
use tracing::{debug, debug_span, error, trace};
|
||||
use tracing::span::EnteredSpan;
|
||||
use crate::navigator::Navigator;
|
||||
use crate::rdf::curie::CurieHelper;
|
||||
use crate::rdf::language;
|
||||
use crate::rdf::vocab::rda;
|
||||
use crate::widget::iri_input::iri_input;
|
||||
use crate::widget::navigation_area::navigation_area;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub(crate) enum Message {
|
||||
@@ -37,6 +39,7 @@ pub(crate) enum Message {
|
||||
WindowClosed(window::Id),
|
||||
URLInputChanged(String),
|
||||
URLInputSubmitted,
|
||||
NavigateTo(Url),
|
||||
FetchDocument(Url),
|
||||
LoadDocument(RdfSource<KeyedDataset<RowState>>),
|
||||
ShowNewDocumentButtons,
|
||||
@@ -64,6 +67,8 @@ pub(crate) enum Message {
|
||||
NewDocument(NamedNode),
|
||||
NavigateToPredicate(QuadKey),
|
||||
NavigateToObject(QuadKey),
|
||||
NavigateBack,
|
||||
NavigateForward,
|
||||
ResetState,
|
||||
}
|
||||
|
||||
@@ -95,6 +100,7 @@ pub(crate) struct Publisher {
|
||||
abbreviated_datatypes: Vec<String>,
|
||||
window_id: window::Id,
|
||||
url_input: String,
|
||||
navigator: Navigator<Url>,
|
||||
document: RdfSource<KeyedDataset<RowState>>,
|
||||
hovered_row: Option<QuadKey>,
|
||||
search_state: Option<SearchState>,
|
||||
@@ -139,8 +145,9 @@ impl Publisher {
|
||||
))
|
||||
.build();
|
||||
|
||||
let url_input = "http://fedora.quill.lan/rest/".to_string();
|
||||
let document = RdfSource::new(Url::parse(&url_input).unwrap());
|
||||
let starting_url = Url::parse("http://fedora.quill.lan/rest/").unwrap();
|
||||
let navigator = Navigator::new(starting_url.clone());
|
||||
let document = RdfSource::new(starting_url.clone());
|
||||
|
||||
(
|
||||
Self {
|
||||
@@ -149,7 +156,8 @@ impl Publisher {
|
||||
ontology,
|
||||
abbreviated_datatypes,
|
||||
window_id: id,
|
||||
url_input,
|
||||
url_input: starting_url.to_string(),
|
||||
navigator,
|
||||
document,
|
||||
hovered_row: None,
|
||||
search_state: None,
|
||||
@@ -255,6 +263,10 @@ impl Publisher {
|
||||
}
|
||||
Message::URLInputSubmitted => {
|
||||
let url = Url::parse(&self.url_input).expect("Invalid URL");
|
||||
self.navigator.goto(url.clone());
|
||||
task = Task::done(Message::NavigateTo(url));
|
||||
}
|
||||
Message::NavigateTo(url) => {
|
||||
task = Task::done(Message::DeleteAllRows)
|
||||
.chain(Task::done(Message::ResetState))
|
||||
.chain(Task::done(Message::FetchDocument(url)));
|
||||
@@ -558,18 +570,30 @@ impl Publisher {
|
||||
}
|
||||
Message::NavigateToPredicate(key) => {
|
||||
if let Some(quad) = self.document.dataset_mut().quads.get_mut(key) {
|
||||
self.url_input = quad.predicate.as_str().to_string();
|
||||
task = Task::done(Message::URLInputSubmitted);
|
||||
let url = Url::parse(quad.predicate.as_str()).expect("Invalid URL");
|
||||
task = Task::done(Message::URLInputChanged(url.to_string()))
|
||||
.chain(Task::done(Message::URLInputSubmitted));
|
||||
}
|
||||
}
|
||||
Message::NavigateToObject(key) => {
|
||||
if let Some(quad) = self.document.dataset_mut().quads.get_mut(key) {
|
||||
if let Term::NamedNode(node) = &quad.object {
|
||||
self.url_input = node.as_str().to_string();
|
||||
task = Task::done(Message::URLInputSubmitted);
|
||||
let url = Url::parse(node.as_str()).expect("Invalid URL");
|
||||
task = Task::done(Message::URLInputChanged(url.to_string()))
|
||||
.chain(Task::done(Message::URLInputSubmitted));
|
||||
}
|
||||
}
|
||||
}
|
||||
Message::NavigateBack => {
|
||||
let url = self.navigator.back().clone();
|
||||
task = Task::done(Message::URLInputChanged(url.to_string()))
|
||||
.chain(Task::done(Message::NavigateTo(url)));
|
||||
}
|
||||
Message::NavigateForward => {
|
||||
let url = self.navigator.forward().clone();
|
||||
task = Task::done(Message::URLInputChanged(url.to_string()))
|
||||
.chain(Task::done(Message::NavigateTo(url)));
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
task
|
||||
@@ -634,14 +658,14 @@ impl Publisher {
|
||||
})
|
||||
.unwrap_or(Horizontal::Left);
|
||||
|
||||
let object_input_base = iri_input(&self.curie_helper, "Object", value.as_str());
|
||||
let object_input_base = iri_input(&self.curie_helper, "Object", value.as_str())
|
||||
.on_shift_click(Message::NavigateToObject(key));
|
||||
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_shift_click(Message::NavigateToObject(key))
|
||||
};
|
||||
|
||||
let selected_datatype = term.datatype()
|
||||
@@ -797,6 +821,10 @@ impl Publisher {
|
||||
].into();
|
||||
}
|
||||
|
||||
let back_button = button("\u{21e6}").on_press(Message::NavigateBack);
|
||||
|
||||
let forward_button = button("\u{21e8}").on_press(Message::NavigateForward);
|
||||
|
||||
let add_row_button = button("Add row").on_press(Message::AddRow(None));
|
||||
|
||||
let reindex_ontology_button = button("Rebuild index").on_press(Message::RebuildIndex);
|
||||
@@ -831,8 +859,10 @@ impl Publisher {
|
||||
save_button_base
|
||||
};
|
||||
|
||||
let content = column![
|
||||
let content = navigation_area(column![
|
||||
row![
|
||||
back_button,
|
||||
forward_button,
|
||||
add_row_button,
|
||||
reindex_ontology_button,
|
||||
traverse_button,
|
||||
@@ -841,7 +871,9 @@ impl Publisher {
|
||||
],
|
||||
scrollable(body),
|
||||
space::vertical(),
|
||||
];
|
||||
])
|
||||
.on_back_click(Message::NavigateBack)
|
||||
.on_forward_click(Message::NavigateForward);
|
||||
|
||||
if self.show_overwrite_confirmation {
|
||||
let confirmation_modal = container(column![
|
||||
|
||||
Reference in New Issue
Block a user