Polish PWA assets, accessible tabs and bulk selection, harden bulk revoke tests
This commit is contained in:
1 parent
763268bd40
commit
57c810ea65
10 files changed
+77
-27
No files matched your search
@@ -276,9 +276,16 @@ pub fn CertificateDetailPage(vault_id: String, cert_id: String) -> View {
|
||||
};
|
||||
|
||||
let tab = move |key: &'static str, label: &'static str| -> View {
|
||||
let panel_id = format!("panel-{key}");
|
||||
let tab_id = format!("tab-{key}");
|
||||
view! {
|
||||
li(class="nav-item") {
|
||||
li(class="nav-item", role="presentation") {
|
||||
button(class=if active_tab.get_clone() == key { "nav-link active" } else { "nav-link" },
|
||||
id=tab_id,
|
||||
r#type="button",
|
||||
role="tab",
|
||||
aria-controls=panel_id,
|
||||
aria-selected=if active_tab.get_clone() == key { "true" } else { "false" },
|
||||
on:click=move |_| {
|
||||
active_tab.set(key.to_string());
|
||||
if let Some(window) = web_sys::window() {
|
||||
@@ -326,7 +333,7 @@ pub fn CertificateDetailPage(vault_id: String, cert_id: String) -> View {
|
||||
}
|
||||
}
|
||||
}
|
||||
ul(class="nav nav-tabs mb-3") {
|
||||
ul(class="nav nav-tabs mb-3", role="tablist", aria-label="Certificate sections") {
|
||||
(tab("overview", "Overview"))
|
||||
(tab("extensions", "Extensions"))
|
||||
(tab("validation", "Validation"))
|
||||
@@ -338,7 +345,7 @@ pub fn CertificateDetailPage(vault_id: String, cert_id: String) -> View {
|
||||
}
|
||||
(if active_tab.get_clone() == "overview" {
|
||||
view! {
|
||||
div(class="row g-3 mb-3") {
|
||||
div(id="panel-overview", role="tabpanel", aria-labelledby="tab-overview", class="row g-3 mb-3") {
|
||||
div(class="col-12 col-lg-6") {
|
||||
div(class="card") {
|
||||
div(class="card-header") { "Subject" }
|
||||
@@ -358,25 +365,27 @@ pub fn CertificateDetailPage(vault_id: String, cert_id: String) -> View {
|
||||
}
|
||||
|
||||
}
|
||||
} else { view! {} }) (if active_tab.get_clone() == "extensions" {
|
||||
} else { view! {} })
|
||||
(if active_tab.get_clone() == "extensions" {
|
||||
view! {
|
||||
div(class="card mb-3") {
|
||||
div(id="panel-extensions", role="tabpanel", aria-labelledby="tab-extensions", class="card mb-3") {
|
||||
div(class="card-header d-flex justify-content-between align-items-center") {
|
||||
span() { "Extensions" }
|
||||
(copy_button(openssl_config.get_clone(), "Copy OpenSSL config"))
|
||||
}
|
||||
div(class="table-responsive") {
|
||||
table(class="table table-sm ext-table mb-0") {
|
||||
thead() { tr() { th() { "Extension" } th() { "Value" } } }
|
||||
thead() { tr() { th(scope="col") { "Extension" } th(scope="col") { "Value" } } }
|
||||
tbody() { Indexed(list=extensions, view=|ext| view! { tr() { td() { (ext.name) (if ext.critical { view! { span(class="badge badge-critical ms-2") { "critical" } } } else { view! {} }) } td(class="extension-value") { (ext.value) } } }) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
} else { view! {} }) (if active_tab.get_clone() == "validation" {
|
||||
} else { view! {} })
|
||||
(if active_tab.get_clone() == "validation" {
|
||||
view! {
|
||||
div(class="card mb-3") {
|
||||
div(id="panel-validation", role="tabpanel", aria-labelledby="tab-validation", class="card mb-3") {
|
||||
div(class="card-header") { "Validation" }
|
||||
div(class="card-body") {
|
||||
(if validation_errors.get_clone().is_empty() {
|
||||
@@ -389,9 +398,10 @@ pub fn CertificateDetailPage(vault_id: String, cert_id: String) -> View {
|
||||
}
|
||||
|
||||
}
|
||||
} else { view! {} }) (if active_tab.get_clone() == "export" {
|
||||
} else { view! {} })
|
||||
(if active_tab.get_clone() == "export" {
|
||||
view! {
|
||||
div(class="row g-3") {
|
||||
div(id="panel-export", role="tabpanel", aria-labelledby="tab-export", class="row g-3") {
|
||||
div(class="col-12 col-lg-6") {
|
||||
div(class="card mb-3") {
|
||||
div(class="card-header") { "Export" }
|
||||
@@ -427,7 +437,7 @@ pub fn CertificateDetailPage(vault_id: String, cert_id: String) -> View {
|
||||
} else { view! {} })
|
||||
(if active_tab.get_clone() == "metadata" {
|
||||
view! {
|
||||
div(class="row g-3") {
|
||||
div(id="panel-metadata", role="tabpanel", aria-labelledby="tab-metadata", class="row g-3") {
|
||||
div(class="col-12 col-lg-6") {
|
||||
div(class="card") {
|
||||
div(class="card-header") { "Metadata" }
|
||||
@@ -449,7 +459,7 @@ pub fn CertificateDetailPage(vault_id: String, cert_id: String) -> View {
|
||||
} else { view! {} })
|
||||
(if active_tab.get_clone() == "revoke" {
|
||||
view! {
|
||||
div(class="row g-3") {
|
||||
div(id="panel-revoke", role="tabpanel", aria-labelledby="tab-revoke", class="row g-3") {
|
||||
div(class="col-12 col-lg-6") {
|
||||
div(class="card") {
|
||||
div(class="card-header") { "Revoke" }
|
||||
@@ -464,7 +474,7 @@ pub fn CertificateDetailPage(vault_id: String, cert_id: String) -> View {
|
||||
} else { view! {} })
|
||||
(if active_tab.get_clone() == "transform" {
|
||||
view! {
|
||||
div(class="row g-3") {
|
||||
div(id="panel-transform", role="tabpanel", aria-labelledby="tab-transform", class="row g-3") {
|
||||
div(class="col-12 col-lg-6") {
|
||||
div(class="card") {
|
||||
div(class="card-header") { "Transform" }
|
||||
@@ -481,7 +491,7 @@ pub fn CertificateDetailPage(vault_id: String, cert_id: String) -> View {
|
||||
} else { view! {} })
|
||||
(if is_ca && active_tab.get_clone() == "ca" {
|
||||
view! {
|
||||
div(class="card mt-3") {
|
||||
div(id="panel-ca", role="tabpanel", aria-labelledby="tab-ca", class="card mt-3") {
|
||||
div(class="card-header") { "CA operations" }
|
||||
div(class="card-body") {
|
||||
div(class="row g-2 align-items-end mb-3") {
|
||||
@@ -554,7 +564,7 @@ pub fn CertificateDetailPage(vault_id: String, cert_id: String) -> View {
|
||||
}
|
||||
}
|
||||
table(class="table table-sm mb-0") {
|
||||
thead() { tr() { th() { "Serial" } th() { "Revoked" } th() { "Reason" } th() { "Invalid since" } th() {} } }
|
||||
thead() { tr() { th(scope="col") { "Serial" } th(scope="col") { "Revoked" } th(scope="col") { "Reason" } th(scope="col") { "Invalid since" } th(scope="col") {} } }
|
||||
tbody() { Indexed(list=revocations, view=move |rev| { let rev_id = rev.id.clone(); let rev_for_edit = rev.clone(); view! {
|
||||
tr() {
|
||||
td(class="fingerprint") { (rev.serial_hex) }
|
||||
|
||||
Reference in new issue
Block a user