mirror of
https://github.com/kanidm/kanidm.git
synced 2025-02-23 12:37:00 +01:00
Feature object graph (#2518)
* Refactor: move the object graph ui to admin web ui * Add dynamic js loading support Load viz.js dynamically * Add some js docs * chore: cleanup imports * chore: remove unused clipboard feature chore: remove unused mermaid.sh * Messing with the profile.release settings and reverting the changes I tried has now made the build much smaller yay :D * Refactor: user raw search requests Assert service-accounts properly * refactor: new v1 proto structure * Add self to CONTRIBUTORS.md --------- Co-authored-by: James Hodgkinson <james@terminaloutcomes.com>
This commit is contained in:
parent
3760951b6d
commit
eddca4fc86
|
@ -35,6 +35,7 @@
|
|||
- Allan Zhang (allan2)
|
||||
- illode
|
||||
- Jinna Kiisuo (jinnatar)
|
||||
- Merlijn Verstraete (ToxicMushroom)
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
|
|
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -3311,6 +3311,7 @@ dependencies = [
|
|||
name = "kanidmd_web_ui_admin"
|
||||
version = "1.2.0-dev"
|
||||
dependencies = [
|
||||
"enum-iterator",
|
||||
"gloo",
|
||||
"gloo-utils 0.2.0",
|
||||
"js-sys",
|
||||
|
@ -3372,6 +3373,7 @@ dependencies = [
|
|||
name = "kanidmd_web_ui_user"
|
||||
version = "1.2.0-dev"
|
||||
dependencies = [
|
||||
"enum-iterator",
|
||||
"gloo",
|
||||
"gloo-timers 0.3.0",
|
||||
"gloo-utils 0.2.0",
|
||||
|
|
|
@ -34,6 +34,8 @@ pub fn generate_integrity_hash(filename: String) -> Result<String, String> {
|
|||
pub struct JavaScriptFile {
|
||||
// Relative to the pkg/ dir
|
||||
pub filepath: &'static str,
|
||||
// Dynamic
|
||||
pub dynamic: bool,
|
||||
// SHA384 hash of the file
|
||||
pub hash: String,
|
||||
// if it's a module add the "type"
|
||||
|
@ -41,7 +43,7 @@ pub struct JavaScriptFile {
|
|||
}
|
||||
|
||||
impl JavaScriptFile {
|
||||
/// returns a `<script>` HTML tag
|
||||
/// returns a `<script>` or `<meta>` HTML tag
|
||||
pub fn as_tag(&self) -> String {
|
||||
let filetype = match &self.filetype {
|
||||
Some(val) => {
|
||||
|
@ -49,9 +51,16 @@ impl JavaScriptFile {
|
|||
}
|
||||
_ => String::from(""),
|
||||
};
|
||||
format!(
|
||||
r#"<script async src="/pkg/{}" integrity="sha384-{}"{}></script>"#,
|
||||
self.filepath, &self.hash, &filetype,
|
||||
)
|
||||
if self.dynamic {
|
||||
format!(
|
||||
r#"<meta async src="/pkg/{}" integrity="sha384-{}"{} />"#,
|
||||
self.filepath, &self.hash, &filetype,
|
||||
)
|
||||
} else {
|
||||
format!(
|
||||
r#"<script async src="/pkg/{}" integrity="sha384-{}"{}></script>"#,
|
||||
self.filepath, &self.hash, &filetype,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -125,6 +125,7 @@ pub fn get_js_files(role: ServerRole) -> Result<JavaScriptFiles, ()> {
|
|||
filepath.to_string(),
|
||||
JavaScriptFile {
|
||||
filepath,
|
||||
dynamic: false,
|
||||
hash,
|
||||
filetype: Some("module".to_string()),
|
||||
},
|
||||
|
@ -141,9 +142,10 @@ pub fn get_js_files(role: ServerRole) -> Result<JavaScriptFiles, ()> {
|
|||
};
|
||||
}
|
||||
|
||||
for (filepath, filetype) in [
|
||||
("shared.js", Some("module".to_string())),
|
||||
("external/bootstrap.bundle.min.js", None),
|
||||
for (filepath, filetype, dynamic) in [
|
||||
("shared.js", Some("module".to_string()), false),
|
||||
("external/bootstrap.bundle.min.js", None, false),
|
||||
("external/viz.js", None, true),
|
||||
] {
|
||||
// let's set up the list of non-wasm-module js files we want to serve
|
||||
// for filepath in ["external/bootstrap.bundle.min.js", "shared.js"] {
|
||||
|
@ -154,6 +156,7 @@ pub fn get_js_files(role: ServerRole) -> Result<JavaScriptFiles, ()> {
|
|||
)) {
|
||||
Ok(hash) => all_pages.push(JavaScriptFile {
|
||||
filepath,
|
||||
dynamic,
|
||||
hash,
|
||||
filetype,
|
||||
}),
|
||||
|
|
|
@ -4,6 +4,7 @@ fn test_javscriptfile() {
|
|||
use crate::https::JavaScriptFile;
|
||||
let jsf = JavaScriptFile {
|
||||
filepath: "wasmloader_admin.js",
|
||||
dynamic: false,
|
||||
hash: "1234567890".to_string(),
|
||||
filetype: Some("module".to_string()),
|
||||
};
|
||||
|
@ -13,6 +14,7 @@ fn test_javscriptfile() {
|
|||
);
|
||||
let jsf = JavaScriptFile {
|
||||
filepath: "wasmloader_admin.js",
|
||||
dynamic: false,
|
||||
hash: "1234567890".to_string(),
|
||||
filetype: None,
|
||||
};
|
||||
|
|
|
@ -31,6 +31,7 @@ wasm-bindgen-futures = { workspace = true }
|
|||
yew = { workspace = true, features = ["csr"] }
|
||||
yew-router = { workspace = true }
|
||||
gloo-utils = { workspace = true }
|
||||
enum-iterator = { workspace = true}
|
||||
|
||||
[dependencies.web-sys]
|
||||
workspace = true
|
||||
|
@ -49,6 +50,8 @@ features = [
|
|||
"HtmlButtonElement",
|
||||
"HtmlDocument",
|
||||
"HtmlFormElement",
|
||||
"HtmlSelectElement",
|
||||
"HtmlInputElement",
|
||||
"Navigator",
|
||||
# "PublicKeyCredential",
|
||||
# "PublicKeyCredentialCreationOptions",
|
||||
|
|
334
server/web_ui/admin/src/components/admin_objectgraph.rs
Normal file
334
server/web_ui/admin/src/components/admin_objectgraph.rs
Normal file
|
@ -0,0 +1,334 @@
|
|||
use enum_iterator::{all, Sequence};
|
||||
#[cfg(debug_assertions)]
|
||||
use gloo::console;
|
||||
use serde::Serialize;
|
||||
use std::fmt::{Display, Formatter};
|
||||
use yew::prelude::*;
|
||||
|
||||
use kanidm_proto::internal::Filter::{Eq, Or};
|
||||
use kanidm_proto::internal::{SearchRequest, SearchResponse};
|
||||
use kanidm_proto::v1::Entry;
|
||||
use kanidmd_web_ui_shared::constants::CSS_PAGE_HEADER;
|
||||
use kanidmd_web_ui_shared::{do_request, error::FetchError, RequestMethod};
|
||||
use wasm_bindgen::prelude::*;
|
||||
use web_sys::HtmlInputElement;
|
||||
use yew_router::Routable;
|
||||
|
||||
use crate::router::AdminRoute;
|
||||
use kanidmd_web_ui_shared::ui::{error_page, loading_spinner};
|
||||
use kanidmd_web_ui_shared::utils::{init_graphviz, open_blank};
|
||||
|
||||
pub enum Msg {
|
||||
NewFilters { filters: Vec<ObjectType> },
|
||||
NewObjects { entries: Vec<Entry> },
|
||||
|
||||
Error { emsg: String, kopid: Option<String> },
|
||||
}
|
||||
|
||||
impl From<FetchError> for Msg {
|
||||
fn from(fe: FetchError) -> Self {
|
||||
Msg::Error {
|
||||
emsg: fe.as_string(),
|
||||
kopid: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Sequence)]
|
||||
pub enum ObjectType {
|
||||
Group,
|
||||
BuiltinGroup,
|
||||
ServiceAccount,
|
||||
Person,
|
||||
}
|
||||
|
||||
impl Display for ObjectType {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||
let str = match self {
|
||||
ObjectType::Group => "Group",
|
||||
ObjectType::BuiltinGroup => "Built In Group",
|
||||
ObjectType::ServiceAccount => "Service Account",
|
||||
ObjectType::Person => "Person",
|
||||
};
|
||||
|
||||
write!(f, "{str}")
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<String> for ObjectType {
|
||||
type Error = ();
|
||||
|
||||
fn try_from(value: String) -> Result<Self, Self::Error> {
|
||||
all::<ObjectType>()
|
||||
.find(|x| format!("{x}") == value)
|
||||
.ok_or(())
|
||||
}
|
||||
}
|
||||
|
||||
pub enum State {
|
||||
Waiting,
|
||||
Ready { entries: Vec<Entry> },
|
||||
Error { emsg: String, kopid: Option<String> },
|
||||
}
|
||||
|
||||
pub struct AdminObjectGraph {
|
||||
state: State,
|
||||
filters: Vec<ObjectType>,
|
||||
}
|
||||
|
||||
impl Component for AdminObjectGraph {
|
||||
type Message = Msg;
|
||||
type Properties = ();
|
||||
|
||||
fn create(ctx: &Context<Self>) -> Self {
|
||||
#[cfg(debug_assertions)]
|
||||
console::debug!("views::objectgraph::create");
|
||||
|
||||
ctx.link()
|
||||
.send_future(async { Self::fetch_objects().await.unwrap_or_else(|v| v.into()) });
|
||||
|
||||
let state = State::Waiting;
|
||||
|
||||
AdminObjectGraph {
|
||||
state,
|
||||
filters: vec![],
|
||||
}
|
||||
}
|
||||
|
||||
fn update(&mut self, _ctx: &Context<Self>, msg: Self::Message) -> bool {
|
||||
#[cfg(debug_assertions)]
|
||||
console::debug!("views::objectgraph::update");
|
||||
match msg {
|
||||
Msg::NewObjects { entries } => {
|
||||
#[cfg(debug_assertions)]
|
||||
console::debug!("Received new objects");
|
||||
self.state = State::Ready { entries }
|
||||
}
|
||||
Msg::NewFilters { filters } => {
|
||||
#[cfg(debug_assertions)]
|
||||
console::debug!("Received new filters");
|
||||
self.filters = filters;
|
||||
}
|
||||
Msg::Error { emsg, kopid } => self.state = State::Error { emsg, kopid },
|
||||
}
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
fn changed(&mut self, _ctx: &Context<Self>, _props: &Self::Properties) -> bool {
|
||||
#[cfg(debug_assertions)]
|
||||
console::debug!("views::objectgraph::changed");
|
||||
false
|
||||
}
|
||||
|
||||
fn view(&self, ctx: &Context<Self>) -> Html {
|
||||
match &self.state {
|
||||
State::Waiting => self.view_waiting(),
|
||||
State::Ready { entries } => self.view_ready(ctx, &self.filters, entries),
|
||||
State::Error { emsg, kopid } => self.view_error(ctx, emsg, kopid.as_deref()),
|
||||
}
|
||||
}
|
||||
|
||||
fn rendered(&mut self, _ctx: &Context<Self>, _first_render: bool) {
|
||||
#[cfg(debug_assertions)]
|
||||
console::debug!("views::objectgraph::rendered");
|
||||
}
|
||||
}
|
||||
|
||||
impl AdminObjectGraph {
|
||||
fn view_waiting(&self) -> Html {
|
||||
loading_spinner()
|
||||
}
|
||||
|
||||
fn view_ready(&self, ctx: &Context<Self>, filters: &[ObjectType], entries: &[Entry]) -> Html {
|
||||
let typed_entries = entries
|
||||
.iter()
|
||||
.filter_map(|entry| {
|
||||
let classes = entry.attrs.get("class")?;
|
||||
let uuid = entry.attrs.get("uuid")?.first()?;
|
||||
|
||||
// Logic to decide the type of each entry
|
||||
let obj_type = if classes.contains(&"group".to_string()) {
|
||||
if uuid.starts_with("00000000-0000-0000-0000-") {
|
||||
ObjectType::BuiltinGroup
|
||||
} else {
|
||||
ObjectType::Group
|
||||
}
|
||||
} else if classes.contains(&"account".to_string()) {
|
||||
if classes.contains(&"person".to_string()) {
|
||||
ObjectType::Person
|
||||
} else if classes.contains(&"service-account".to_string()) {
|
||||
ObjectType::ServiceAccount
|
||||
} else {
|
||||
return None;
|
||||
}
|
||||
} else {
|
||||
return None;
|
||||
};
|
||||
|
||||
// Filter out the things we want to keep, if the filter is empty we assume we want all.
|
||||
if !filters.contains(&obj_type) && !filters.is_empty() {
|
||||
return None;
|
||||
}
|
||||
|
||||
let spn = entry.attrs.get("spn")?.first()?;
|
||||
Some((spn.clone(), uuid.clone(), obj_type))
|
||||
})
|
||||
.collect::<Vec<(String, String, ObjectType)>>();
|
||||
|
||||
// Vec<obj, uuid, obj's members>
|
||||
let members_of = entries
|
||||
.iter()
|
||||
.filter_map(|entry| {
|
||||
let spn = entry.attrs.get("spn")?.first()?.clone();
|
||||
let uuid = entry.attrs.get("uuid")?.first()?.clone();
|
||||
let keep = typed_entries
|
||||
.iter()
|
||||
.any(|(_, filtered_uuid, _)| &uuid == filtered_uuid);
|
||||
if keep {
|
||||
Some((spn, uuid, entry.attrs.get("member")?.clone()))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
// Constructing graph source
|
||||
let mut sb = String::new();
|
||||
sb.push_str("digraph {\n rankdir=\"RL\"\n");
|
||||
for (spn, _, members) in members_of {
|
||||
members
|
||||
.iter()
|
||||
.filter(|member| typed_entries.iter().any(|(spn, _, _)| spn == *member))
|
||||
.for_each(|member| {
|
||||
sb.push_str(format!(r#" "{spn}" -> "{member}"{}"#, "\n").as_str());
|
||||
});
|
||||
}
|
||||
|
||||
for (spn, uuid, obj_type) in typed_entries {
|
||||
let (color, shape, route) = match obj_type {
|
||||
ObjectType::Group => ("#b86367", "box", AdminRoute::ViewGroup { uuid }),
|
||||
ObjectType::BuiltinGroup => {
|
||||
("#8bc1d6", "component", AdminRoute::ViewGroup { uuid })
|
||||
}
|
||||
ObjectType::ServiceAccount => (
|
||||
"#77c98d",
|
||||
"parallelogram",
|
||||
AdminRoute::ViewServiceAccount { uuid },
|
||||
),
|
||||
ObjectType::Person => ("#af8bd6", "ellipse", AdminRoute::ViewPerson { uuid }),
|
||||
};
|
||||
let url = route.to_path();
|
||||
sb.push_str(
|
||||
format!(
|
||||
r#" "{spn}" [color = "{color}", shape = {shape}, URL = "{url}"]{}"#,
|
||||
"\n"
|
||||
)
|
||||
.as_str(),
|
||||
);
|
||||
}
|
||||
sb.push('}');
|
||||
init_graphviz(sb.as_str());
|
||||
|
||||
let node_refs = all::<ObjectType>()
|
||||
.map(|object_type: ObjectType| (object_type, NodeRef::default()))
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let on_checkbox_click = {
|
||||
let scope = ctx.link().clone();
|
||||
let node_refs = node_refs.clone();
|
||||
move |_: Event| {
|
||||
let mut filters = vec![];
|
||||
|
||||
for (obj_type, node_ref) in &node_refs {
|
||||
if let Some(input_el) = node_ref.cast::<HtmlInputElement>() {
|
||||
let checked = input_el.checked();
|
||||
|
||||
if checked {
|
||||
filters.push(*obj_type);
|
||||
}
|
||||
}
|
||||
}
|
||||
scope.send_message(Msg::NewFilters { filters });
|
||||
}
|
||||
};
|
||||
|
||||
let view_graph_source = {
|
||||
move |_: MouseEvent| {
|
||||
open_blank(sb.as_str());
|
||||
}
|
||||
};
|
||||
|
||||
html! {
|
||||
<>
|
||||
<div class={CSS_PAGE_HEADER}>
|
||||
<h2>{ "ObjectGraph view" }</h2>
|
||||
</div>
|
||||
if entries.is_empty() {
|
||||
<div>
|
||||
<h5>{ "No graph objects for the applied filters." }</h5>
|
||||
</div>
|
||||
} else {
|
||||
<div class="column">
|
||||
<div class="hstack gap-3">
|
||||
{
|
||||
node_refs.iter().map(|(ot, node_ref)| {
|
||||
let ot_str = format!("{}", ot);
|
||||
let selected = filters.contains(ot);
|
||||
|
||||
html! {
|
||||
<>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input obj-graph-filter-cb" type="checkbox" ref={ node_ref } id={ot_str.clone()} onchange={on_checkbox_click.clone()} checked={selected}/>
|
||||
<label class="form-check-label" for={ot_str.clone()}>{ot_str.clone()}</label>
|
||||
</div>
|
||||
if *ot != ObjectType::last().unwrap() {
|
||||
<div class="vr"></div>
|
||||
}
|
||||
</>
|
||||
}
|
||||
}).collect::<Html>()
|
||||
}
|
||||
</div>
|
||||
<button class="btn btn-primary mt-2" onclick={view_graph_source}>{ "View graph source" }</button>
|
||||
</div>
|
||||
<div id="graph-container" class="mt-3"></div>
|
||||
}
|
||||
</>
|
||||
}
|
||||
}
|
||||
|
||||
fn view_error(&self, _ctx: &Context<Self>, msg: &str, kopid: Option<&str>) -> Html {
|
||||
error_page(msg, kopid)
|
||||
}
|
||||
|
||||
async fn fetch_objects() -> Result<Msg, FetchError> {
|
||||
let req_body = SearchRequest {
|
||||
filter: Or(vec![
|
||||
Eq("class".to_string(), "person".to_string()),
|
||||
Eq("class".to_string(), "service_account".to_string()),
|
||||
Eq("class".to_string(), "group".to_string()),
|
||||
]),
|
||||
};
|
||||
|
||||
let req_jsvalue = req_body
|
||||
.serialize(&serde_wasm_bindgen::Serializer::json_compatible())
|
||||
.expect("Failed to serialise request");
|
||||
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
|
||||
|
||||
let (kopid, status, value, _) =
|
||||
do_request("/v1/raw/search", RequestMethod::POST, Some(req_jsvalue)).await?;
|
||||
|
||||
if status == 200 {
|
||||
let search_resp: SearchResponse = serde_wasm_bindgen::from_value(value)
|
||||
.expect_throw("Invalid response type - objectgraph::SearchRequest");
|
||||
|
||||
Ok(Msg::NewObjects {
|
||||
entries: search_resp.entries,
|
||||
})
|
||||
} else {
|
||||
let emsg = value.as_string().unwrap_or_default();
|
||||
Ok(Msg::Error { emsg, kopid })
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,6 +2,7 @@ pub mod admin_accounts;
|
|||
pub mod admin_groups;
|
||||
pub mod admin_menu;
|
||||
pub mod admin_oauth2;
|
||||
pub mod admin_objectgraph;
|
||||
|
||||
mod prelude {
|
||||
|
||||
|
|
|
@ -111,6 +111,7 @@ impl Component for AdminApp {
|
|||
html! {<Link<AdminRoute> classes={CSS_NAV_LINK} to={AdminRoute::AdminMenu}>{"Admin"}</Link<AdminRoute>>},
|
||||
html! {<Link<AdminRoute> classes={CSS_NAV_LINK} to={AdminRoute::AdminListAccounts}>{"Accounts"}</Link<AdminRoute>>},
|
||||
html! {<Link<AdminRoute> classes={CSS_NAV_LINK} to={AdminRoute::AdminListGroups}>{"Groups"}</Link<AdminRoute>>},
|
||||
html! {<Link<AdminRoute> classes={CSS_NAV_LINK} to={AdminRoute::AdminObjectGraph}>{"ObjectGraph"}</Link<AdminRoute>>},
|
||||
html! {<Link<AdminRoute> classes={CSS_NAV_LINK} to={AdminRoute::AdminListOAuth2}>{"OAuth2"}</Link<AdminRoute>>},
|
||||
signout_link(),
|
||||
];
|
||||
|
|
|
@ -15,6 +15,8 @@ pub enum AdminRoute {
|
|||
AdminListGroups,
|
||||
#[at("/ui/admin/accounts")]
|
||||
AdminListAccounts,
|
||||
#[at("/ui/admin/object-graph")]
|
||||
AdminObjectGraph,
|
||||
#[at("/ui/admin/oauth2")]
|
||||
AdminListOAuth2,
|
||||
|
||||
|
@ -43,6 +45,9 @@ pub(crate) fn switch(route: AdminRoute) -> Html {
|
|||
AdminRoute::AdminListGroups => html!(
|
||||
<components::admin_groups::AdminListGroups />
|
||||
),
|
||||
AdminRoute::AdminObjectGraph => html!(
|
||||
<components::admin_objectgraph::AdminObjectGraph />
|
||||
),
|
||||
AdminRoute::AdminListOAuth2 => html!(
|
||||
<components::admin_oauth2::AdminListOAuth2 />
|
||||
),
|
||||
|
|
|
@ -15,6 +15,14 @@ if [ -z "$(which wasm-pack)" ]; then
|
|||
echo "Cannot find wasm-pack which is needed to build the UI, quitting!"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "$(which wasm-bindgen)" ]; then
|
||||
echo "Cannot find wasm-bindgen which is needed to build the UI, quitting!"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "$(which bc)" ]; then
|
||||
echo "Cannot find bc which is needed to build the UI, quitting!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${BUILD_FLAGS}" ]; then
|
||||
export BUILD_FLAGS="--release"
|
||||
|
|
Binary file not shown.
BIN
server/web_ui/pkg/external/bootstrap.min.css.map.br
vendored
BIN
server/web_ui/pkg/external/bootstrap.min.css.map.br
vendored
Binary file not shown.
9
server/web_ui/pkg/external/viz.js
vendored
Normal file
9
server/web_ui/pkg/external/viz.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
server/web_ui/pkg/external/viz.js.br
vendored
Normal file
BIN
server/web_ui/pkg/external/viz.js.br
vendored
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,3 +1,5 @@
|
|||
import { init_graphviz, open_blank } from '/pkg/shared.js';
|
||||
|
||||
let wasm;
|
||||
|
||||
const heap = new Array(128).fill(undefined);
|
||||
|
@ -230,19 +232,19 @@ function addBorrowedObject(obj) {
|
|||
}
|
||||
function __wbg_adapter_38(arg0, arg1, arg2) {
|
||||
try {
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__ha262e6b88a6c80cc(arg0, arg1, addBorrowedObject(arg2));
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h9769b6ea49fd5fb8(arg0, arg1, addBorrowedObject(arg2));
|
||||
} finally {
|
||||
heap[stack_pointer++] = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
function __wbg_adapter_41(arg0, arg1, arg2) {
|
||||
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h096bc01bd3cc011d(arg0, arg1, addHeapObject(arg2));
|
||||
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hfd2c1c4b524d4fa7(arg0, arg1, addHeapObject(arg2));
|
||||
}
|
||||
|
||||
function __wbg_adapter_44(arg0, arg1, arg2) {
|
||||
try {
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hc04e5f41a154e807(arg0, arg1, addBorrowedObject(arg2));
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h5bac1d2533339968(arg0, arg1, addBorrowedObject(arg2));
|
||||
} finally {
|
||||
heap[stack_pointer++] = undefined;
|
||||
}
|
||||
|
@ -352,9 +354,13 @@ function __wbg_get_imports() {
|
|||
const ret = false;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbindgen_is_string = function(arg0) {
|
||||
const ret = typeof(getObject(arg0)) === 'string';
|
||||
return ret;
|
||||
imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
|
||||
const ret = getObject(arg0);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_error_new = function(arg0, arg1) {
|
||||
const ret = new Error(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_is_object = function(arg0) {
|
||||
const val = getObject(arg0);
|
||||
|
@ -369,13 +375,15 @@ function __wbg_get_imports() {
|
|||
const ret = getObject(arg0) in getObject(arg1);
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
|
||||
const ret = getObject(arg0);
|
||||
return addHeapObject(ret);
|
||||
imports.wbg.__wbindgen_is_string = function(arg0) {
|
||||
const ret = typeof(getObject(arg0)) === 'string';
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbindgen_error_new = function(arg0, arg1) {
|
||||
const ret = new Error(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
imports.wbg.__wbg_initgraphviz_c3ff41f4a4b3769c = function(arg0, arg1) {
|
||||
init_graphviz(getStringFromWasm0(arg0, arg1));
|
||||
};
|
||||
imports.wbg.__wbg_openblank_46584d7c929c5e36 = function(arg0, arg1) {
|
||||
open_blank(getStringFromWasm0(arg0, arg1));
|
||||
};
|
||||
imports.wbg.__wbindgen_boolean_get = function(arg0) {
|
||||
const v = getObject(arg0);
|
||||
|
@ -396,14 +404,6 @@ function __wbg_get_imports() {
|
|||
const ret = arg0;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_setlistenerid_3183aae8fa5840fb = function(arg0, arg1) {
|
||||
getObject(arg0).__yew_listener_id = arg1 >>> 0;
|
||||
};
|
||||
imports.wbg.__wbg_listenerid_12315eee21527820 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).__yew_listener_id;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
|
||||
};
|
||||
imports.wbg.__wbg_cachekey_b61393159c57fd7b = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).__yew_subtree_cache_key;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
|
||||
|
@ -420,6 +420,14 @@ function __wbg_get_imports() {
|
|||
imports.wbg.__wbg_setcachekey_80183b7cfc421143 = function(arg0, arg1) {
|
||||
getObject(arg0).__yew_subtree_cache_key = arg1 >>> 0;
|
||||
};
|
||||
imports.wbg.__wbg_listenerid_12315eee21527820 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).__yew_listener_id;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
|
||||
};
|
||||
imports.wbg.__wbg_setlistenerid_3183aae8fa5840fb = function(arg0, arg1) {
|
||||
getObject(arg0).__yew_listener_id = arg1 >>> 0;
|
||||
};
|
||||
imports.wbg.__wbg_new_abda76e883ba8a5f = function() {
|
||||
const ret = new Error();
|
||||
return addHeapObject(ret);
|
||||
|
@ -495,6 +503,40 @@ function __wbg_get_imports() {
|
|||
const ret = getObject(arg0).querySelector(getStringFromWasm0(arg1, arg2));
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_Window_cee7a886d55e7df5 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof Window;
|
||||
} catch (_) {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_document_eb7fd66bde3ee213 = function(arg0) {
|
||||
const ret = getObject(arg0).document;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_location_b17760ac7977a47a = function(arg0) {
|
||||
const ret = getObject(arg0).location;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_history_6882f83324841599 = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).history;
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_localStorage_3d538af21ea07fcc = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).localStorage;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_sessionStorage_32de79fb90d1534a = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).sessionStorage;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_fetch_33c84c2bf739f490 = function(arg0, arg1) {
|
||||
const ret = getObject(arg0).fetch(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_instanceof_Element_813f33306edae612 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
|
@ -536,107 +578,15 @@ function __wbg_get_imports() {
|
|||
imports.wbg.__wbg_setAttribute_f7ffa687ef977957 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_Window_cee7a886d55e7df5 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof Window;
|
||||
} catch (_) {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
imports.wbg.__wbg_value_ffef403d62e3df58 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_document_eb7fd66bde3ee213 = function(arg0) {
|
||||
const ret = getObject(arg0).document;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_location_b17760ac7977a47a = function(arg0) {
|
||||
const ret = getObject(arg0).location;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_history_6882f83324841599 = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).history;
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_localStorage_3d538af21ea07fcc = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).localStorage;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_sessionStorage_32de79fb90d1534a = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).sessionStorage;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_fetch_33c84c2bf739f490 = function(arg0, arg1) {
|
||||
const ret = getObject(arg0).fetch(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_addEventListener_bc4a7ad4cc72c6bf = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeEventListener_deae10c75ef836f8 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_headers_bb094b3567fea691 = function(arg0) {
|
||||
const ret = getObject(arg0).headers;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_newwithstrandinit_11fbc38beb4c26b0 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_Response_b5451a06784a2404 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof Response;
|
||||
} catch (_) {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_status_bea567d1049f0b6a = function(arg0) {
|
||||
const ret = getObject(arg0).status;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_headers_96d9457941f08a33 = function(arg0) {
|
||||
const ret = getObject(arg0).headers;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_json_c07875c84e5205af = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).json();
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_ShadowRoot_ef56f954a86c7472 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof ShadowRoot;
|
||||
} catch (_) {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_host_dfffc3b2ba786fb8 = function(arg0) {
|
||||
const ret = getObject(arg0).host;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_add_73b81757e03ad37a = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).add(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_bubbles_31126fc08276cf99 = function(arg0) {
|
||||
const ret = getObject(arg0).bubbles;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_cancelBubble_ae95595adf5ae83d = function(arg0) {
|
||||
const ret = getObject(arg0).cancelBubble;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_composedPath_bd8a0336a042e053 = function(arg0) {
|
||||
const ret = getObject(arg0).composedPath();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_preventDefault_657cbf753df1396c = function(arg0) {
|
||||
getObject(arg0).preventDefault();
|
||||
imports.wbg.__wbg_setvalue_cbab536654d8dd52 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_getItem_5c179cd36e9529e8 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
|
||||
|
@ -651,26 +601,9 @@ function __wbg_get_imports() {
|
|||
imports.wbg.__wbg_setItem_7b55989efb4d45f7 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_state_dce1712758f75ed1 = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).state;
|
||||
return addHeapObject(ret);
|
||||
imports.wbg.__wbg_add_73b81757e03ad37a = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).add(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_pushState_01f73865f6d8789a = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {
|
||||
getObject(arg0).pushState(getObject(arg1), getStringFromWasm0(arg2, arg3), arg4 === 0 ? undefined : getStringFromWasm0(arg4, arg5));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_setchecked_50e21357d62a8ccd = function(arg0, arg1) {
|
||||
getObject(arg0).checked = arg1 !== 0;
|
||||
};
|
||||
imports.wbg.__wbg_value_99f5294791d62576 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_bba31de32cdbb32c = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_get_f5027e7a212e97a0 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = getObject(arg1).get(getStringFromWasm0(arg2, arg3));
|
||||
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
|
@ -688,16 +621,48 @@ function __wbg_get_imports() {
|
|||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_value_ffef403d62e3df58 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
imports.wbg.__wbg_href_14a0154147810c9c = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_cbab536654d8dd52 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
imports.wbg.__wbg_pathname_3bec400c9c042d62 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).pathname;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_search_6b70a3bf2ceb3f63 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).search;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_setsearch_e3e6802fd5fe58c4 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).search = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_hash_6169ffe1f1446fd4 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).hash;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_sethash_06df74e85ecce4f6 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).hash = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_new_79acf9a4da56c772 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = new URL(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_newwithbase_98813076a95cdc23 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = new URL(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_parentNode_e3a5ee563364a613 = function(arg0) {
|
||||
const ret = getObject(arg0).parentNode;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
|
@ -767,48 +732,95 @@ function __wbg_get_imports() {
|
|||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_href_14a0154147810c9c = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
imports.wbg.__wbg_bubbles_31126fc08276cf99 = function(arg0) {
|
||||
const ret = getObject(arg0).bubbles;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_pathname_3bec400c9c042d62 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).pathname;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
imports.wbg.__wbg_cancelBubble_ae95595adf5ae83d = function(arg0) {
|
||||
const ret = getObject(arg0).cancelBubble;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_search_6b70a3bf2ceb3f63 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).search;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
imports.wbg.__wbg_composedPath_bd8a0336a042e053 = function(arg0) {
|
||||
const ret = getObject(arg0).composedPath();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_setsearch_e3e6802fd5fe58c4 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).search = getStringFromWasm0(arg1, arg2);
|
||||
imports.wbg.__wbg_preventDefault_657cbf753df1396c = function(arg0) {
|
||||
getObject(arg0).preventDefault();
|
||||
};
|
||||
imports.wbg.__wbg_hash_6169ffe1f1446fd4 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).hash;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_sethash_06df74e85ecce4f6 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).hash = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_new_79acf9a4da56c772 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = new URL(getStringFromWasm0(arg0, arg1));
|
||||
imports.wbg.__wbg_state_dce1712758f75ed1 = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).state;
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_newwithbase_98813076a95cdc23 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = new URL(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
|
||||
imports.wbg.__wbg_pushState_01f73865f6d8789a = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {
|
||||
getObject(arg0).pushState(getObject(arg1), getStringFromWasm0(arg2, arg3), arg4 === 0 ? undefined : getStringFromWasm0(arg4, arg5));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_checked_30b85a12f3f06fd9 = function(arg0) {
|
||||
const ret = getObject(arg0).checked;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_setchecked_50e21357d62a8ccd = function(arg0, arg1) {
|
||||
getObject(arg0).checked = arg1 !== 0;
|
||||
};
|
||||
imports.wbg.__wbg_value_99f5294791d62576 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_bba31de32cdbb32c = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_addEventListener_bc4a7ad4cc72c6bf = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeEventListener_deae10c75ef836f8 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_headers_bb094b3567fea691 = function(arg0) {
|
||||
const ret = getObject(arg0).headers;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_newwithstrandinit_11fbc38beb4c26b0 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_Response_b5451a06784a2404 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof Response;
|
||||
} catch (_) {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_status_bea567d1049f0b6a = function(arg0) {
|
||||
const ret = getObject(arg0).status;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_headers_96d9457941f08a33 = function(arg0) {
|
||||
const ret = getObject(arg0).headers;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_json_c07875c84e5205af = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).json();
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_ShadowRoot_ef56f954a86c7472 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof ShadowRoot;
|
||||
} catch (_) {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_host_dfffc3b2ba786fb8 = function(arg0) {
|
||||
const ret = getObject(arg0).host;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_get_0ee8ea3c7c984c45 = function(arg0, arg1) {
|
||||
const ret = getObject(arg0)[arg1 >>> 0];
|
||||
return addHeapObject(ret);
|
||||
|
@ -817,6 +829,10 @@ function __wbg_get_imports() {
|
|||
const ret = getObject(arg0).length;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_new_75208e29bddfd88c = function() {
|
||||
const ret = new Array();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_newnoargs_cfecb3965268594c = function(arg0, arg1) {
|
||||
const ret = new Function(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
|
@ -869,6 +885,9 @@ function __wbg_get_imports() {
|
|||
const ret = global.global;
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_set_79c308ecd9a1d091 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0)[arg1 >>> 0] = takeObject(arg2);
|
||||
};
|
||||
imports.wbg.__wbg_from_58c79ccfb68060f5 = function(arg0) {
|
||||
const ret = Array.from(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
|
@ -958,6 +977,10 @@ function __wbg_get_imports() {
|
|||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_stringify_865daa6fb8c83d5a = function() { return handleError(function (arg0) {
|
||||
const ret = JSON.stringify(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_set_961700853a212a39 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));
|
||||
return ret;
|
||||
|
@ -976,16 +999,16 @@ function __wbg_get_imports() {
|
|||
const ret = wasm.memory;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper1174 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 540, __wbg_adapter_38);
|
||||
imports.wbg.__wbindgen_closure_wrapper1196 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 568, __wbg_adapter_38);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper1339 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 610, __wbg_adapter_41);
|
||||
imports.wbg.__wbindgen_closure_wrapper1432 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 651, __wbg_adapter_41);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper1382 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 630, __wbg_adapter_44);
|
||||
imports.wbg.__wbindgen_closure_wrapper1465 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 667, __wbg_adapter_44);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -239,19 +239,19 @@ function addBorrowedObject(obj) {
|
|||
}
|
||||
function __wbg_adapter_48(arg0, arg1, arg2) {
|
||||
try {
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hef87f67032238a7d(arg0, arg1, addBorrowedObject(arg2));
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hc5493f440a20bd7c(arg0, arg1, addBorrowedObject(arg2));
|
||||
} finally {
|
||||
heap[stack_pointer++] = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
function __wbg_adapter_51(arg0, arg1, arg2) {
|
||||
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h096bc01bd3cc011d(arg0, arg1, addHeapObject(arg2));
|
||||
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hfd2c1c4b524d4fa7(arg0, arg1, addHeapObject(arg2));
|
||||
}
|
||||
|
||||
function __wbg_adapter_54(arg0, arg1, arg2) {
|
||||
try {
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hdaa408b7f06cb2c5(arg0, arg1, addBorrowedObject(arg2));
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h46bea18a2aaeab4a(arg0, arg1, addBorrowedObject(arg2));
|
||||
} finally {
|
||||
heap[stack_pointer++] = undefined;
|
||||
}
|
||||
|
@ -414,14 +414,6 @@ function __wbg_get_imports() {
|
|||
const ret = getObject(arg0);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_setlistenerid_3183aae8fa5840fb = function(arg0, arg1) {
|
||||
getObject(arg0).__yew_listener_id = arg1 >>> 0;
|
||||
};
|
||||
imports.wbg.__wbg_listenerid_12315eee21527820 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).__yew_listener_id;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
|
||||
};
|
||||
imports.wbg.__wbg_cachekey_b61393159c57fd7b = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).__yew_subtree_cache_key;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
|
||||
|
@ -438,6 +430,14 @@ function __wbg_get_imports() {
|
|||
imports.wbg.__wbg_setcachekey_80183b7cfc421143 = function(arg0, arg1) {
|
||||
getObject(arg0).__yew_subtree_cache_key = arg1 >>> 0;
|
||||
};
|
||||
imports.wbg.__wbg_listenerid_12315eee21527820 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).__yew_listener_id;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
|
||||
};
|
||||
imports.wbg.__wbg_setlistenerid_3183aae8fa5840fb = function(arg0, arg1) {
|
||||
getObject(arg0).__yew_listener_id = arg1 >>> 0;
|
||||
};
|
||||
imports.wbg.__wbg_new_abda76e883ba8a5f = function() {
|
||||
const ret = new Error();
|
||||
return addHeapObject(ret);
|
||||
|
@ -538,6 +538,44 @@ function __wbg_get_imports() {
|
|||
const ret = getObject(arg0).querySelector(getStringFromWasm0(arg1, arg2));
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_Window_cee7a886d55e7df5 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof Window;
|
||||
} catch (_) {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_document_eb7fd66bde3ee213 = function(arg0) {
|
||||
const ret = getObject(arg0).document;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_location_b17760ac7977a47a = function(arg0) {
|
||||
const ret = getObject(arg0).location;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_history_6882f83324841599 = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).history;
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_navigator_b1003b77e05fcee9 = function(arg0) {
|
||||
const ret = getObject(arg0).navigator;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_localStorage_3d538af21ea07fcc = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).localStorage;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_sessionStorage_32de79fb90d1534a = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).sessionStorage;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_fetch_33c84c2bf739f490 = function(arg0, arg1) {
|
||||
const ret = getObject(arg0).fetch(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_instanceof_Element_813f33306edae612 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
|
@ -579,44 +617,6 @@ function __wbg_get_imports() {
|
|||
imports.wbg.__wbg_setAttribute_f7ffa687ef977957 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_Window_cee7a886d55e7df5 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof Window;
|
||||
} catch (_) {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_document_eb7fd66bde3ee213 = function(arg0) {
|
||||
const ret = getObject(arg0).document;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_location_b17760ac7977a47a = function(arg0) {
|
||||
const ret = getObject(arg0).location;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_history_6882f83324841599 = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).history;
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_navigator_b1003b77e05fcee9 = function(arg0) {
|
||||
const ret = getObject(arg0).navigator;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_localStorage_3d538af21ea07fcc = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).localStorage;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_sessionStorage_32de79fb90d1534a = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).sessionStorage;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_fetch_33c84c2bf739f490 = function(arg0, arg1) {
|
||||
const ret = getObject(arg0).fetch(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_instanceof_HtmlElement_99861aeb7af981c2 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
|
@ -630,6 +630,66 @@ function __wbg_get_imports() {
|
|||
imports.wbg.__wbg_focus_d1373017540aae66 = function() { return handleError(function (arg0) {
|
||||
getObject(arg0).focus();
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_HtmlInputElement_189f182751dc1f5e = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof HTMLInputElement;
|
||||
} catch (_) {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_checked_30b85a12f3f06fd9 = function(arg0) {
|
||||
const ret = getObject(arg0).checked;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_setchecked_50e21357d62a8ccd = function(arg0, arg1) {
|
||||
getObject(arg0).checked = arg1 !== 0;
|
||||
};
|
||||
imports.wbg.__wbg_value_99f5294791d62576 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_bba31de32cdbb32c = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_log_79d3c56888567995 = function(arg0) {
|
||||
console.log(getObject(arg0));
|
||||
};
|
||||
imports.wbg.__wbg_href_6918c551c13f118b = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_value_ffef403d62e3df58 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_cbab536654d8dd52 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_getItem_5c179cd36e9529e8 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
|
||||
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeItem_c402594a05099505 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).removeItem(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_setItem_7b55989efb4d45f7 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_addEventListener_bc4a7ad4cc72c6bf = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));
|
||||
}, arguments) };
|
||||
|
@ -680,62 +740,50 @@ function __wbg_get_imports() {
|
|||
const ret = getObject(arg0).host;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_bubbles_31126fc08276cf99 = function(arg0) {
|
||||
const ret = getObject(arg0).bubbles;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_cancelBubble_ae95595adf5ae83d = function(arg0) {
|
||||
const ret = getObject(arg0).cancelBubble;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_composedPath_bd8a0336a042e053 = function(arg0) {
|
||||
const ret = getObject(arg0).composedPath();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_preventDefault_657cbf753df1396c = function(arg0) {
|
||||
getObject(arg0).preventDefault();
|
||||
};
|
||||
imports.wbg.__wbg_credentials_46f979142974ef3b = function(arg0) {
|
||||
const ret = getObject(arg0).credentials;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_parentNode_e3a5ee563364a613 = function(arg0) {
|
||||
const ret = getObject(arg0).parentNode;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_parentElement_45a9756dc74ff48b = function(arg0) {
|
||||
const ret = getObject(arg0).parentElement;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_lastChild_d22dbf81f92f163b = function(arg0) {
|
||||
const ret = getObject(arg0).lastChild;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_nextSibling_87d2b32dfbf09fe3 = function(arg0) {
|
||||
const ret = getObject(arg0).nextSibling;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_setnodeValue_d1cec51282858afe = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).nodeValue = arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_textContent_528ff517a0418a3e = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).textContent;
|
||||
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len1 = WASM_VECTOR_LEN;
|
||||
imports.wbg.__wbg_href_14a0154147810c9c = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_appendChild_4153ba1b5d54d73b = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).appendChild(getObject(arg1));
|
||||
imports.wbg.__wbg_pathname_3bec400c9c042d62 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).pathname;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_search_6b70a3bf2ceb3f63 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).search;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_hash_6169ffe1f1446fd4 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).hash;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_sethash_06df74e85ecce4f6 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).hash = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_new_79acf9a4da56c772 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = new URL(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_insertBefore_2be91083083caa9e = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
const ret = getObject(arg0).insertBefore(getObject(arg1), getObject(arg2));
|
||||
imports.wbg.__wbg_newwithbase_98813076a95cdc23 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = new URL(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeChild_660924798c7e128c = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).removeChild(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
imports.wbg.__wbg_add_73b81757e03ad37a = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).add(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_remove_dea714b8c5f17b97 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).remove(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_get_f5027e7a212e97a0 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = getObject(arg1).get(getStringFromWasm0(arg2, arg3));
|
||||
|
@ -781,88 +829,6 @@ function __wbg_get_imports() {
|
|||
imports.wbg.__wbg_replace_6569a636f8d64d4c = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).replace(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_getClientExtensionResults_466d05f787e7f4cb = function(arg0) {
|
||||
const ret = getObject(arg0).getClientExtensionResults();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_href_14a0154147810c9c = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_pathname_3bec400c9c042d62 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).pathname;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_search_6b70a3bf2ceb3f63 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).search;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_hash_6169ffe1f1446fd4 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).hash;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_sethash_06df74e85ecce4f6 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).hash = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_new_79acf9a4da56c772 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = new URL(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_newwithbase_98813076a95cdc23 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = new URL(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_href_6918c551c13f118b = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_value_ffef403d62e3df58 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_cbab536654d8dd52 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_add_73b81757e03ad37a = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).add(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_remove_dea714b8c5f17b97 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).remove(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_getItem_5c179cd36e9529e8 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
|
||||
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeItem_c402594a05099505 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).removeItem(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_setItem_7b55989efb4d45f7 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_log_79d3c56888567995 = function(arg0) {
|
||||
console.log(getObject(arg0));
|
||||
};
|
||||
imports.wbg.__wbg_get_3929a71ee2443c90 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).get(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
|
@ -874,33 +840,67 @@ function __wbg_get_imports() {
|
|||
imports.wbg.__wbg_pushState_01f73865f6d8789a = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {
|
||||
getObject(arg0).pushState(getObject(arg1), getStringFromWasm0(arg2, arg3), arg4 === 0 ? undefined : getStringFromWasm0(arg4, arg5));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_HtmlInputElement_189f182751dc1f5e = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof HTMLInputElement;
|
||||
} catch (_) {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
imports.wbg.__wbg_credentials_46f979142974ef3b = function(arg0) {
|
||||
const ret = getObject(arg0).credentials;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_getClientExtensionResults_466d05f787e7f4cb = function(arg0) {
|
||||
const ret = getObject(arg0).getClientExtensionResults();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_bubbles_31126fc08276cf99 = function(arg0) {
|
||||
const ret = getObject(arg0).bubbles;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_checked_30b85a12f3f06fd9 = function(arg0) {
|
||||
const ret = getObject(arg0).checked;
|
||||
imports.wbg.__wbg_cancelBubble_ae95595adf5ae83d = function(arg0) {
|
||||
const ret = getObject(arg0).cancelBubble;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_setchecked_50e21357d62a8ccd = function(arg0, arg1) {
|
||||
getObject(arg0).checked = arg1 !== 0;
|
||||
imports.wbg.__wbg_composedPath_bd8a0336a042e053 = function(arg0) {
|
||||
const ret = getObject(arg0).composedPath();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_value_99f5294791d62576 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
imports.wbg.__wbg_preventDefault_657cbf753df1396c = function(arg0) {
|
||||
getObject(arg0).preventDefault();
|
||||
};
|
||||
imports.wbg.__wbg_parentNode_e3a5ee563364a613 = function(arg0) {
|
||||
const ret = getObject(arg0).parentNode;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_parentElement_45a9756dc74ff48b = function(arg0) {
|
||||
const ret = getObject(arg0).parentElement;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_lastChild_d22dbf81f92f163b = function(arg0) {
|
||||
const ret = getObject(arg0).lastChild;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_nextSibling_87d2b32dfbf09fe3 = function(arg0) {
|
||||
const ret = getObject(arg0).nextSibling;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_setnodeValue_d1cec51282858afe = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).nodeValue = arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_textContent_528ff517a0418a3e = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).textContent;
|
||||
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_bba31de32cdbb32c = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_appendChild_4153ba1b5d54d73b = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).appendChild(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_insertBefore_2be91083083caa9e = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
const ret = getObject(arg0).insertBefore(getObject(arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeChild_660924798c7e128c = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).removeChild(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_get_0ee8ea3c7c984c45 = function(arg0, arg1) {
|
||||
const ret = getObject(arg0)[arg1 >>> 0];
|
||||
return addHeapObject(ret);
|
||||
|
@ -1101,16 +1101,16 @@ function __wbg_get_imports() {
|
|||
const ret = wasm.memory;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper1359 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 508, __wbg_adapter_48);
|
||||
imports.wbg.__wbindgen_closure_wrapper1294 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 501, __wbg_adapter_48);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper1734 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 635, __wbg_adapter_51);
|
||||
imports.wbg.__wbindgen_closure_wrapper1736 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 641, __wbg_adapter_51);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper1777 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 654, __wbg_adapter_54);
|
||||
imports.wbg.__wbindgen_closure_wrapper1769 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 657, __wbg_adapter_54);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -232,7 +232,7 @@ function makeMutClosure(arg0, arg1, dtor, f) {
|
|||
return real;
|
||||
}
|
||||
function __wbg_adapter_48(arg0, arg1) {
|
||||
wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hc8b05d5513b97f0a(arg0, arg1);
|
||||
wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__ha0399323477fc8dc(arg0, arg1);
|
||||
}
|
||||
|
||||
let stack_pointer = 128;
|
||||
|
@ -244,19 +244,19 @@ function addBorrowedObject(obj) {
|
|||
}
|
||||
function __wbg_adapter_51(arg0, arg1, arg2) {
|
||||
try {
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__he486f8e8914d0caa(arg0, arg1, addBorrowedObject(arg2));
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h14408378559014c2(arg0, arg1, addBorrowedObject(arg2));
|
||||
} finally {
|
||||
heap[stack_pointer++] = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
function __wbg_adapter_54(arg0, arg1, arg2) {
|
||||
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h096bc01bd3cc011d(arg0, arg1, addHeapObject(arg2));
|
||||
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hfd2c1c4b524d4fa7(arg0, arg1, addHeapObject(arg2));
|
||||
}
|
||||
|
||||
function __wbg_adapter_57(arg0, arg1, arg2) {
|
||||
try {
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h54a1d85f42adb752(arg0, arg1, addBorrowedObject(arg2));
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h4de28a5fcd777f4e(arg0, arg1, addBorrowedObject(arg2));
|
||||
} finally {
|
||||
heap[stack_pointer++] = undefined;
|
||||
}
|
||||
|
@ -437,14 +437,6 @@ function __wbg_get_imports() {
|
|||
imports.wbg.__wbg_modalhidebyid_3f2427f253e15ed1 = function(arg0, arg1) {
|
||||
modal_hide_by_id(getStringFromWasm0(arg0, arg1));
|
||||
};
|
||||
imports.wbg.__wbg_setlistenerid_3183aae8fa5840fb = function(arg0, arg1) {
|
||||
getObject(arg0).__yew_listener_id = arg1 >>> 0;
|
||||
};
|
||||
imports.wbg.__wbg_listenerid_12315eee21527820 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).__yew_listener_id;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
|
||||
};
|
||||
imports.wbg.__wbg_cachekey_b61393159c57fd7b = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).__yew_subtree_cache_key;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
|
||||
|
@ -461,6 +453,14 @@ function __wbg_get_imports() {
|
|||
imports.wbg.__wbg_setcachekey_80183b7cfc421143 = function(arg0, arg1) {
|
||||
getObject(arg0).__yew_subtree_cache_key = arg1 >>> 0;
|
||||
};
|
||||
imports.wbg.__wbg_listenerid_12315eee21527820 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).__yew_listener_id;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
|
||||
};
|
||||
imports.wbg.__wbg_setlistenerid_3183aae8fa5840fb = function(arg0, arg1) {
|
||||
getObject(arg0).__yew_listener_id = arg1 >>> 0;
|
||||
};
|
||||
imports.wbg.__wbg_new_abda76e883ba8a5f = function() {
|
||||
const ret = new Error();
|
||||
return addHeapObject(ret);
|
||||
|
@ -650,10 +650,18 @@ function __wbg_get_imports() {
|
|||
imports.wbg.__wbg_focus_d1373017540aae66 = function() { return handleError(function (arg0) {
|
||||
getObject(arg0).focus();
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_create_5a2dc9022fb20da6 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).create(getObject(arg1));
|
||||
imports.wbg.__wbg_getClientExtensionResults_466d05f787e7f4cb = function(arg0) {
|
||||
const ret = getObject(arg0).getClientExtensionResults();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_newwithform_38212a8c8bd57ecb = function() { return handleError(function (arg0) {
|
||||
const ret = new FormData(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_get_8a3d784ef8f1768f = function(arg0, arg1, arg2) {
|
||||
const ret = getObject(arg0).get(getStringFromWasm0(arg1, arg2));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_headers_bb094b3567fea691 = function(arg0) {
|
||||
const ret = getObject(arg0).headers;
|
||||
return addHeapObject(ret);
|
||||
|
@ -698,62 +706,6 @@ function __wbg_get_imports() {
|
|||
const ret = getObject(arg0).host;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_newwithform_38212a8c8bd57ecb = function() { return handleError(function (arg0) {
|
||||
const ret = new FormData(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_get_8a3d784ef8f1768f = function(arg0, arg1, arg2) {
|
||||
const ret = getObject(arg0).get(getStringFromWasm0(arg1, arg2));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_href_6918c551c13f118b = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_value_ffef403d62e3df58 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_cbab536654d8dd52 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_href_a5b902312c18d121 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_sethref_5f2e449a509e644b = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).href = getStringFromWasm0(arg1, arg2);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_pathname_d98d0a003b664ef0 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).pathname;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_search_40927d5af164fdfe = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).search;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_hash_163703b5971e593c = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).hash;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_href_14a0154147810c9c = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
|
@ -796,61 +748,6 @@ function __wbg_get_imports() {
|
|||
const ret = new URL(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_state_dce1712758f75ed1 = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).state;
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_pushState_01f73865f6d8789a = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {
|
||||
getObject(arg0).pushState(getObject(arg1), getStringFromWasm0(arg2, arg3), arg4 === 0 ? undefined : getStringFromWasm0(arg4, arg5));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_HtmlInputElement_189f182751dc1f5e = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof HTMLInputElement;
|
||||
} catch (_) {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_setchecked_50e21357d62a8ccd = function(arg0, arg1) {
|
||||
getObject(arg0).checked = arg1 !== 0;
|
||||
};
|
||||
imports.wbg.__wbg_value_99f5294791d62576 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_bba31de32cdbb32c = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_addEventListener_bc4a7ad4cc72c6bf = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeEventListener_deae10c75ef836f8 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_add_73b81757e03ad37a = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).add(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_remove_dea714b8c5f17b97 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).remove(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_getItem_5c179cd36e9529e8 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
|
||||
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeItem_c402594a05099505 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).removeItem(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_setItem_7b55989efb4d45f7 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_target_6795373f170fd786 = function(arg0) {
|
||||
const ret = getObject(arg0).target;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
|
@ -870,10 +767,6 @@ function __wbg_get_imports() {
|
|||
imports.wbg.__wbg_preventDefault_657cbf753df1396c = function(arg0) {
|
||||
getObject(arg0).preventDefault();
|
||||
};
|
||||
imports.wbg.__wbg_credentials_46f979142974ef3b = function(arg0) {
|
||||
const ret = getObject(arg0).credentials;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_parentNode_e3a5ee563364a613 = function(arg0) {
|
||||
const ret = getObject(arg0).parentNode;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
|
@ -912,15 +805,71 @@ function __wbg_get_imports() {
|
|||
const ret = getObject(arg0).removeChild(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_get_f5027e7a212e97a0 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = getObject(arg1).get(getStringFromWasm0(arg2, arg3));
|
||||
imports.wbg.__wbg_addEventListener_bc4a7ad4cc72c6bf = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeEventListener_deae10c75ef836f8 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_HtmlInputElement_189f182751dc1f5e = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof HTMLInputElement;
|
||||
} catch (_) {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_setchecked_50e21357d62a8ccd = function(arg0, arg1) {
|
||||
getObject(arg0).checked = arg1 !== 0;
|
||||
};
|
||||
imports.wbg.__wbg_value_99f5294791d62576 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_bba31de32cdbb32c = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_href_6918c551c13f118b = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_value_ffef403d62e3df58 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_cbab536654d8dd52 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_getItem_5c179cd36e9529e8 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
|
||||
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_set_4ad92a627c50c8ef = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).set(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
imports.wbg.__wbg_removeItem_c402594a05099505 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).removeItem(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_setItem_7b55989efb4d45f7 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_state_dce1712758f75ed1 = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).state;
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_pushState_01f73865f6d8789a = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {
|
||||
getObject(arg0).pushState(getObject(arg1), getStringFromWasm0(arg2, arg3), arg4 === 0 ? undefined : getStringFromWasm0(arg4, arg5));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_HtmlFormElement_03c5f1936c956219 = function(arg0) {
|
||||
let result;
|
||||
|
@ -932,10 +881,61 @@ function __wbg_get_imports() {
|
|||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_getClientExtensionResults_466d05f787e7f4cb = function(arg0) {
|
||||
const ret = getObject(arg0).getClientExtensionResults();
|
||||
imports.wbg.__wbg_credentials_46f979142974ef3b = function(arg0) {
|
||||
const ret = getObject(arg0).credentials;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_create_5a2dc9022fb20da6 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).create(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_href_a5b902312c18d121 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_sethref_5f2e449a509e644b = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).href = getStringFromWasm0(arg1, arg2);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_pathname_d98d0a003b664ef0 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).pathname;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_search_40927d5af164fdfe = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).search;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_hash_163703b5971e593c = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).hash;
|
||||
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_add_73b81757e03ad37a = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).add(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_remove_dea714b8c5f17b97 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).remove(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_get_f5027e7a212e97a0 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = getObject(arg1).get(getStringFromWasm0(arg2, arg3));
|
||||
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len1 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len1;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_set_4ad92a627c50c8ef = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).set(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_get_0ee8ea3c7c984c45 = function(arg0, arg1) {
|
||||
const ret = getObject(arg0)[arg1 >>> 0];
|
||||
return addHeapObject(ret);
|
||||
|
@ -1148,20 +1148,20 @@ function __wbg_get_imports() {
|
|||
const ret = wasm.memory;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper1554 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 897, __wbg_adapter_48);
|
||||
imports.wbg.__wbindgen_closure_wrapper854 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 537, __wbg_adapter_48);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper3761 = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbindgen_closure_wrapper3700 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 1911, __wbg_adapter_51);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper3894 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 1959, __wbg_adapter_54);
|
||||
imports.wbg.__wbindgen_closure_wrapper3909 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 1974, __wbg_adapter_54);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper3937 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 1978, __wbg_adapter_57);
|
||||
imports.wbg.__wbindgen_closure_wrapper3942 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 1990, __wbg_adapter_57);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,6 +1,70 @@
|
|||
// This is easier to have in JS than in WASM
|
||||
export function modal_hide_by_id(m) {
|
||||
var elem = document.getElementById(m);
|
||||
var modal = bootstrap.Modal.getInstance(elem);
|
||||
const elem = document.getElementById(m);
|
||||
const modal = bootstrap.Modal.getInstance(elem);
|
||||
modal.hide();
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces the node with a new node using new_tag, and copies all other attributes from node onto new node
|
||||
* @param {Element} node
|
||||
* @param {string} new_tag
|
||||
* @return the new node
|
||||
*/
|
||||
function replace_tag(node, new_tag) {
|
||||
const newNode = document.createElement(new_tag);
|
||||
|
||||
[...node.attributes].map(({ name, value }) => {
|
||||
newNode.setAttribute(name, value);
|
||||
});
|
||||
|
||||
while (node.firstChild) {
|
||||
newNode.appendChild(node.firstChild);
|
||||
}
|
||||
|
||||
node.parentNode.replaceChild(newNode, node);
|
||||
return newNode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads graphviz and then renders the graph
|
||||
* @param {string} graph_src dot language graph source
|
||||
*/
|
||||
export function init_graphviz(graph_src) {
|
||||
if (typeof Viz !== 'undefined') {
|
||||
start_graphviz(graph_src);
|
||||
} else {
|
||||
let meta = document.querySelector("meta[src='/pkg/external/viz.js']");
|
||||
if (meta) {
|
||||
let script = replace_tag(meta, "script");
|
||||
script.addEventListener('load', () => {
|
||||
start_graphviz(graph_src);
|
||||
});
|
||||
} else {
|
||||
console.error("viz.js not found");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses the graphviz library to show a graph
|
||||
* @param {string} graph_src dot language graph source
|
||||
*/
|
||||
function start_graphviz(graph_src) {
|
||||
Viz.instance().then(function(viz) {
|
||||
const graphContainer = document.getElementById("graph-container");
|
||||
if (graphContainer)
|
||||
graphContainer.replaceChildren(viz.renderSVGElement(graph_src))
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens a popup window `target=_blank` filled with `content`
|
||||
* @param {string} content shown in the pre block
|
||||
*/
|
||||
export function open_blank(content) {
|
||||
const windowDocument = window.open("", "_blank").document;
|
||||
const pre2 = windowDocument.createElement("pre");
|
||||
pre2.innerText = content;
|
||||
windowDocument.body.appendChild(pre2);
|
||||
}
|
|
@ -248,3 +248,44 @@ body {
|
|||
max-width: 150px;
|
||||
max-height: 150px;
|
||||
}
|
||||
|
||||
.codeblock {
|
||||
background: gainsboro;
|
||||
color: black;
|
||||
padding: 1rem;
|
||||
border: 1rem;
|
||||
width: fit-content;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.copy__btn {
|
||||
float: right;
|
||||
position: relative;
|
||||
top: 1rem;
|
||||
right: 1rem;
|
||||
opacity: 50%;
|
||||
}
|
||||
.copy__btn:hover {
|
||||
opacity: 90%;
|
||||
}
|
||||
|
||||
.hstack {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
align-self: stretch;
|
||||
}
|
||||
|
||||
.vr {
|
||||
display: inline-block;
|
||||
align-self: stretch;
|
||||
width: 0.063rem;
|
||||
min-height: 1em;
|
||||
background-color: currentcolor;
|
||||
opacity: .25;
|
||||
}
|
||||
|
||||
#graph-container svg {
|
||||
max-width: 100%;
|
||||
height: fit-content;
|
||||
}
|
|
@ -5,9 +5,9 @@ use gloo::console;
|
|||
use wasm_bindgen::JsValue;
|
||||
use yew::{html, BaseComponent, Context, Html};
|
||||
|
||||
use crate::constants::{CSS_NAV_LINK, ID_SIGNOUTMODAL};
|
||||
use crate::constants::{CSS_ALERT_DANGER, CSS_NAV_LINK, ID_SIGNOUTMODAL, URL_USER_HOME};
|
||||
use crate::models::clear_bearer_token;
|
||||
use crate::{do_request, RequestMethod};
|
||||
use crate::{do_request, logo_img, RequestMethod};
|
||||
|
||||
/// returns an a-href link which can trigger the signout flow
|
||||
pub fn signout_link() -> Html {
|
||||
|
@ -69,3 +69,42 @@ where
|
|||
</div>
|
||||
</div>}
|
||||
}
|
||||
|
||||
/// generic view_error modal to show when errors occur
|
||||
pub fn error_page(err_msg: &str, kopid: Option<&str>) -> Html {
|
||||
html! {
|
||||
<>
|
||||
<p class="text-center">
|
||||
{logo_img()}
|
||||
</p>
|
||||
<div class={CSS_ALERT_DANGER} role="alert">
|
||||
<h2>{ "An Error Occurred 🥺" }</h2>
|
||||
<p>{ err_msg.to_string() }</p>
|
||||
<p>
|
||||
{
|
||||
if let Some(opid) = kopid.as_ref() {
|
||||
format!("Operation ID: {}", opid)
|
||||
} else {
|
||||
"Local Error".to_string()
|
||||
}
|
||||
}
|
||||
</p>
|
||||
</div>
|
||||
<p class="text-center">
|
||||
<a href={URL_USER_HOME}><button href={URL_USER_HOME} class="btn btn-secondary" aria-label="Return home">{"Return to the home page"}</button></a>
|
||||
</p>
|
||||
</>
|
||||
}
|
||||
}
|
||||
|
||||
pub fn loading_spinner() -> Html {
|
||||
html! {
|
||||
<>
|
||||
<div class="vert-center">
|
||||
<div class="spinner-border text-dark" role="status">
|
||||
<span class="visually-hidden">{ "Loading..." }</span>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
}
|
||||
|
|
|
@ -83,6 +83,12 @@ pub fn get_value_from_element_id(id: &str) -> Option<String> {
|
|||
#[wasm_bindgen(raw_module = "/pkg/shared.js")]
|
||||
extern "C" {
|
||||
pub fn modal_hide_by_id(m: &str);
|
||||
pub fn init_graphviz(m: &str);
|
||||
|
||||
/// Opens a popup window `target=_blank` filled with `content`
|
||||
/// # Arguments
|
||||
/// * `content` string shown in a \<pre> block
|
||||
pub fn open_blank(content: &str);
|
||||
}
|
||||
|
||||
/// Returns the footer node for the UI
|
||||
|
|
9
server/web_ui/shared/static/external/viz.js
vendored
Normal file
9
server/web_ui/shared/static/external/viz.js
vendored
Normal file
File diff suppressed because one or more lines are too long
|
@ -1,6 +1,70 @@
|
|||
// This is easier to have in JS than in WASM
|
||||
export function modal_hide_by_id(m) {
|
||||
var elem = document.getElementById(m);
|
||||
var modal = bootstrap.Modal.getInstance(elem);
|
||||
const elem = document.getElementById(m);
|
||||
const modal = bootstrap.Modal.getInstance(elem);
|
||||
modal.hide();
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces the node with a new node using new_tag, and copies all other attributes from node onto new node
|
||||
* @param {Element} node
|
||||
* @param {string} new_tag
|
||||
* @return the new node
|
||||
*/
|
||||
function replace_tag(node, new_tag) {
|
||||
const newNode = document.createElement(new_tag);
|
||||
|
||||
[...node.attributes].map(({ name, value }) => {
|
||||
newNode.setAttribute(name, value);
|
||||
});
|
||||
|
||||
while (node.firstChild) {
|
||||
newNode.appendChild(node.firstChild);
|
||||
}
|
||||
|
||||
node.parentNode.replaceChild(newNode, node);
|
||||
return newNode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads graphviz and then renders the graph
|
||||
* @param {string} graph_src dot language graph source
|
||||
*/
|
||||
export function init_graphviz(graph_src) {
|
||||
if (typeof Viz !== 'undefined') {
|
||||
start_graphviz(graph_src);
|
||||
} else {
|
||||
let meta = document.querySelector("meta[src='/pkg/external/viz.js']");
|
||||
if (meta) {
|
||||
let script = replace_tag(meta, "script");
|
||||
script.addEventListener('load', () => {
|
||||
start_graphviz(graph_src);
|
||||
});
|
||||
} else {
|
||||
console.error("viz.js not found");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses the graphviz library to show a graph
|
||||
* @param {string} graph_src dot language graph source
|
||||
*/
|
||||
function start_graphviz(graph_src) {
|
||||
Viz.instance().then(function(viz) {
|
||||
const graphContainer = document.getElementById("graph-container");
|
||||
if (graphContainer)
|
||||
graphContainer.replaceChildren(viz.renderSVGElement(graph_src))
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens a popup window `target=_blank` filled with `content`
|
||||
* @param {string} content shown in the pre block
|
||||
*/
|
||||
export function open_blank(content) {
|
||||
const windowDocument = window.open("", "_blank").document;
|
||||
const pre2 = windowDocument.createElement("pre");
|
||||
pre2.innerText = content;
|
||||
windowDocument.body.appendChild(pre2);
|
||||
}
|
|
@ -248,3 +248,44 @@ body {
|
|||
max-width: 150px;
|
||||
max-height: 150px;
|
||||
}
|
||||
|
||||
.codeblock {
|
||||
background: gainsboro;
|
||||
color: black;
|
||||
padding: 1rem;
|
||||
border: 1rem;
|
||||
width: fit-content;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.copy__btn {
|
||||
float: right;
|
||||
position: relative;
|
||||
top: 1rem;
|
||||
right: 1rem;
|
||||
opacity: 50%;
|
||||
}
|
||||
.copy__btn:hover {
|
||||
opacity: 90%;
|
||||
}
|
||||
|
||||
.hstack {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
align-self: stretch;
|
||||
}
|
||||
|
||||
.vr {
|
||||
display: inline-block;
|
||||
align-self: stretch;
|
||||
width: 0.063rem;
|
||||
min-height: 1em;
|
||||
background-color: currentcolor;
|
||||
opacity: .25;
|
||||
}
|
||||
|
||||
#graph-container svg {
|
||||
max-width: 100%;
|
||||
height: fit-content;
|
||||
}
|
|
@ -36,6 +36,7 @@ wasm-timer = "0.2.5"
|
|||
regex.workspace = true
|
||||
lazy_static.workspace = true
|
||||
gloo-utils = { workspace = true }
|
||||
enum-iterator = { workspace = true}
|
||||
|
||||
[dependencies.web-sys]
|
||||
workspace = true
|
||||
|
@ -65,7 +66,7 @@ features = [
|
|||
"RequestMode",
|
||||
"RequestRedirect",
|
||||
"Response",
|
||||
"Window",
|
||||
"Window"
|
||||
]
|
||||
|
||||
[dev-dependencies]
|
||||
|
|
|
@ -4,7 +4,7 @@ use kanidm_proto::internal::{
|
|||
CredentialDetail, CredentialDetailType, PasskeyDetail,
|
||||
};
|
||||
|
||||
use kanidmd_web_ui_shared::constants::{CSS_ALERT_DANGER, URL_USER_HOME};
|
||||
use kanidmd_web_ui_shared::constants::URL_USER_HOME;
|
||||
use kanidmd_web_ui_shared::models::{get_cred_update_session, pop_return_location};
|
||||
use kanidmd_web_ui_shared::utils::{autofocus, do_footer};
|
||||
use kanidmd_web_ui_shared::{add_body_form_classes, logo_img, remove_body_form_classes};
|
||||
|
@ -20,6 +20,7 @@ use super::passkeyremove::PasskeyRemoveModalApp;
|
|||
use super::pwmodal::PwModalApp;
|
||||
use super::totpmodal::TotpModalApp;
|
||||
use super::totpremove::TotpRemoveComp;
|
||||
use kanidmd_web_ui_shared::ui::error_page;
|
||||
use kanidmd_web_ui_shared::{do_request, error::FetchError, utils, RequestMethod};
|
||||
|
||||
// use std::rc::Rc;
|
||||
|
@ -805,25 +806,7 @@ impl CredentialResetApp {
|
|||
fn view_error(&self, _ctx: &Context<Self>, msg: &str, kopid: Option<&str>) -> Html {
|
||||
html! {
|
||||
<main class="form-signin">
|
||||
<p class="text-center">
|
||||
{logo_img()}
|
||||
</p>
|
||||
<div class={CSS_ALERT_DANGER} role="alert">
|
||||
<h2>{ "An Error Occurred 🥺" }</h2>
|
||||
<p>{ msg.to_string() }</p>
|
||||
<p>
|
||||
{
|
||||
if let Some(opid) = kopid.as_ref() {
|
||||
format!("Operation ID: {}", opid)
|
||||
} else {
|
||||
"Local Error".to_string()
|
||||
}
|
||||
}
|
||||
</p>
|
||||
</div>
|
||||
<p class="text-center">
|
||||
<a href={URL_USER_HOME}><button href={URL_USER_HOME} class="btn btn-secondary" aria-label="Return home">{"Return to the home page"}</button></a>
|
||||
</p>
|
||||
{ error_page(msg, kopid) }
|
||||
</main>
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
#[cfg(debug_assertions)]
|
||||
use gloo::console;
|
||||
use kanidmd_web_ui_shared::logo_img;
|
||||
use yew::prelude::*;
|
||||
|
||||
use kanidmd_web_ui_shared::constants::{
|
||||
CSS_ALERT_DANGER, CSS_CARD, CSS_LINK_DARK_STRETCHED, CSS_PAGE_HEADER, URL_USER_HOME,
|
||||
};
|
||||
use kanidmd_web_ui_shared::constants::{CSS_CARD, CSS_LINK_DARK_STRETCHED, CSS_PAGE_HEADER};
|
||||
use kanidmd_web_ui_shared::{do_request, error::FetchError, RequestMethod};
|
||||
use wasm_bindgen::prelude::*;
|
||||
|
||||
use kanidm_proto::internal::AppLink;
|
||||
use kanidmd_web_ui_shared::ui::{error_page, loading_spinner};
|
||||
|
||||
pub enum Msg {
|
||||
Ready { apps: Vec<AppLink> },
|
||||
|
@ -100,15 +98,7 @@ impl Component for AppsApp {
|
|||
|
||||
impl AppsApp {
|
||||
fn view_waiting(&self) -> Html {
|
||||
html! {
|
||||
<>
|
||||
<div class="vert-center">
|
||||
<div class="spinner-border text-dark" role="status">
|
||||
<span class="visually-hidden">{ "Loading..." }</span>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
loading_spinner()
|
||||
}
|
||||
|
||||
fn view_ready(&self, _ctx: &Context<Self>, apps: &[AppLink]) -> Html {
|
||||
|
@ -155,29 +145,7 @@ impl AppsApp {
|
|||
}
|
||||
|
||||
fn view_error(&self, _ctx: &Context<Self>, msg: &str, kopid: Option<&str>) -> Html {
|
||||
html! {
|
||||
<>
|
||||
<p class="text-center">
|
||||
{logo_img()}
|
||||
</p>
|
||||
<div class={CSS_ALERT_DANGER} role="alert">
|
||||
<h2>{ "An Error Occurred 🥺" }</h2>
|
||||
<p>{ msg.to_string() }</p>
|
||||
<p>
|
||||
{
|
||||
if let Some(opid) = kopid.as_ref() {
|
||||
format!("Operation ID: {}", opid)
|
||||
} else {
|
||||
"Local Error".to_string()
|
||||
}
|
||||
}
|
||||
</p>
|
||||
</div>
|
||||
<p class="text-center">
|
||||
<a href={URL_USER_HOME}><button href={URL_USER_HOME} class="btn btn-secondary" aria-label="Return home">{"Return to the home page"}</button></a>
|
||||
</p>
|
||||
</>
|
||||
}
|
||||
error_page(msg, kopid)
|
||||
}
|
||||
|
||||
async fn fetch_user_apps() -> Result<Msg, FetchError> {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#[cfg(debug_assertions)]
|
||||
use gloo::console;
|
||||
use kanidm_proto::internal::{IdentifyUserRequest, IdentifyUserResponse};
|
||||
use kanidmd_web_ui_shared::logo_img;
|
||||
use regex::Regex;
|
||||
use serde::Serialize;
|
||||
use wasm_bindgen::{JsValue, UnwrapThrowExt};
|
||||
|
@ -9,10 +8,11 @@ use yew::prelude::*;
|
|||
|
||||
use crate::components::totpdisplay::TotpDisplayApp;
|
||||
use kanidmd_web_ui_shared::constants::{
|
||||
CLASS_DIV_LOGIN_BUTTON, CLASS_DIV_LOGIN_FIELD, CSS_ALERT_DANGER, URL_USER_HOME,
|
||||
CLASS_DIV_LOGIN_BUTTON, CLASS_DIV_LOGIN_FIELD, URL_USER_HOME,
|
||||
};
|
||||
|
||||
use crate::views::ViewProps;
|
||||
use kanidmd_web_ui_shared::ui::{error_page, loading_spinner};
|
||||
use kanidmd_web_ui_shared::{do_request, error::FetchError, utils, RequestMethod};
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
|
@ -272,15 +272,7 @@ impl Component for IdentityVerificationApp {
|
|||
|
||||
impl IdentityVerificationApp {
|
||||
fn view_start(&self) -> Html {
|
||||
html! {
|
||||
<>
|
||||
<div class="vert-center">
|
||||
<div class="spinner-border text-dark" role="status">
|
||||
<span class="visually-hidden">{ "Loading..." }</span>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
loading_spinner()
|
||||
}
|
||||
|
||||
fn view_id_submit_and_display(&self, ctx: &Context<Self>) -> Html {
|
||||
|
@ -387,20 +379,7 @@ impl IdentityVerificationApp {
|
|||
}
|
||||
|
||||
fn view_error(&self, error_message: &str) -> Html {
|
||||
html! {
|
||||
<>
|
||||
<p class="text-center">
|
||||
{logo_img()}
|
||||
</p>
|
||||
<div class={CSS_ALERT_DANGER} role="alert">
|
||||
<h2>{ "An Error Occurred 🥺" }</h2>
|
||||
<p>{ error_message }</p>
|
||||
</div>
|
||||
<p class="text-center">
|
||||
<a href={URL_USER_HOME}><button href={URL_USER_HOME} class="btn btn-secondary" aria-label="Return home">{"Return to the home page"}</button></a>
|
||||
</p>
|
||||
</>
|
||||
}
|
||||
error_page(error_message, None)
|
||||
}
|
||||
|
||||
fn view_success(&self) -> Html {
|
||||
|
|
174
tools/cli/src/cli/graph.rs
Normal file
174
tools/cli/src/cli/graph.rs
Normal file
|
@ -0,0 +1,174 @@
|
|||
use crate::common::OpType;
|
||||
use crate::{handle_client_error, GraphCommonOpt, GraphType, ObjectType, OutputMode};
|
||||
use kanidm_proto::internal::Filter::{Eq, Or};
|
||||
|
||||
impl GraphCommonOpt {
|
||||
pub fn debug(&self) -> bool {
|
||||
self.copt.debug
|
||||
}
|
||||
|
||||
pub async fn exec(&self) {
|
||||
let gopt: &GraphCommonOpt = self;
|
||||
let copt = &gopt.copt;
|
||||
let client = copt.to_client(OpType::Read).await;
|
||||
let graph_type = &gopt.graph_type;
|
||||
let filters = &gopt.filter;
|
||||
|
||||
let filter = Or(vec![
|
||||
Eq("class".to_string(), "person".to_string()),
|
||||
Eq("class".to_string(), "service_account".to_string()),
|
||||
Eq("class".to_string(), "group".to_string()),
|
||||
]);
|
||||
|
||||
let result = client.search(filter).await;
|
||||
|
||||
let entries = match result {
|
||||
Ok(entries) => entries,
|
||||
Err(e) => {
|
||||
handle_client_error(e, copt.output_mode);
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
match copt.output_mode {
|
||||
OutputMode::Json => {
|
||||
let r_attrs: Vec<_> = entries.iter().map(|entry| &entry.attrs).collect();
|
||||
println!(
|
||||
"{}",
|
||||
serde_json::to_string(&r_attrs).expect("Failed to serialise json")
|
||||
);
|
||||
}
|
||||
OutputMode::Text => {
|
||||
println!("Showing graph for type: {graph_type:?}, filters: {filters:?}\n");
|
||||
let typed_entries = entries
|
||||
.iter()
|
||||
.filter_map(|entry| {
|
||||
let classes = entry.attrs.get("class")?;
|
||||
let uuid = entry.attrs.get("uuid")?.first()?;
|
||||
|
||||
// Logic to decide the type of each entry
|
||||
let obj_type = if classes.contains(&"group".to_string()) {
|
||||
if uuid.starts_with("00000000-0000-0000-0000-") {
|
||||
ObjectType::BuiltinGroup
|
||||
} else {
|
||||
ObjectType::Group
|
||||
}
|
||||
} else if classes.contains(&"account".to_string()) {
|
||||
if classes.contains(&"person".to_string()) {
|
||||
ObjectType::Person
|
||||
} else if classes.contains(&"service-account".to_string()) {
|
||||
ObjectType::ServiceAccount
|
||||
} else {
|
||||
return None;
|
||||
}
|
||||
} else {
|
||||
return None;
|
||||
};
|
||||
|
||||
// Filter out the things we want to keep, if the filter is empty we assume we want all.
|
||||
if !filters.contains(&obj_type) && !filters.is_empty() {
|
||||
return None;
|
||||
}
|
||||
|
||||
let spn = entry.attrs.get("spn")?.first()?;
|
||||
Some((spn.clone(), uuid.clone(), obj_type))
|
||||
})
|
||||
.collect::<Vec<(String, String, ObjectType)>>();
|
||||
|
||||
// Vec<obj, uuid, obj's members>
|
||||
let members_of = entries
|
||||
.into_iter()
|
||||
.filter_map(|entry| {
|
||||
let spn = entry.attrs.get("spn")?.first()?.clone();
|
||||
let uuid = entry.attrs.get("uuid")?.first()?.clone();
|
||||
let keep = typed_entries
|
||||
.iter()
|
||||
.any(|(_, filtered_uuid, _)| &uuid == filtered_uuid);
|
||||
if keep {
|
||||
Some((spn, entry.attrs.get("member")?.clone()))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
match graph_type {
|
||||
GraphType::Graphviz => Self::print_graphviz_graph(&typed_entries, &members_of),
|
||||
GraphType::Mermaid => Self::print_mermaid_graph(typed_entries, members_of),
|
||||
GraphType::MermaidElk => {
|
||||
println!(r#"%%{{init: {{"flowchart": {{"defaultRenderer": "elk"}}}} }}%%"#);
|
||||
Self::print_mermaid_graph(typed_entries, members_of);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn print_graphviz_graph(
|
||||
typed_entries: &Vec<(String, String, ObjectType)>,
|
||||
members_of: &Vec<(String, Vec<String>)>,
|
||||
) {
|
||||
println!("digraph {{");
|
||||
println!(r#" rankdir="RL""#);
|
||||
|
||||
for (spn, members) in members_of {
|
||||
members
|
||||
.iter()
|
||||
.filter(|member| typed_entries.iter().any(|(spn, _, _)| spn == *member))
|
||||
.for_each(|member| {
|
||||
println!(r#" "{spn}" -> "{member}""#);
|
||||
});
|
||||
}
|
||||
|
||||
for (spn, _, obj_type) in typed_entries {
|
||||
let (color, shape) = match obj_type {
|
||||
ObjectType::Group => ("#b86367", "box"),
|
||||
ObjectType::BuiltinGroup => ("#8bc1d6", "component"),
|
||||
ObjectType::ServiceAccount => ("#77c98d", "parallelogram"),
|
||||
ObjectType::Person => ("#af8bd6", "ellipse"),
|
||||
};
|
||||
|
||||
println!(r#" "{spn}" [color = "{color}", shape = {shape}]"#);
|
||||
}
|
||||
println!("}}");
|
||||
}
|
||||
|
||||
fn print_mermaid_graph(
|
||||
typed_entries: Vec<(String, String, ObjectType)>,
|
||||
members_of: Vec<(String, Vec<String>)>,
|
||||
) {
|
||||
println!("graph RL");
|
||||
for (spn, members) in members_of {
|
||||
members
|
||||
.iter()
|
||||
.filter(|member| typed_entries.iter().any(|(spn, _, _)| spn == *member))
|
||||
.for_each(|member| {
|
||||
let at_less_name = Self::mermaid_id_from_spn(&spn);
|
||||
let at_less_member = Self::mermaid_id_from_spn(member);
|
||||
println!(" {at_less_name}[\"{spn}\"] --> {at_less_member}[\"{member}\"]")
|
||||
});
|
||||
}
|
||||
println!(
|
||||
" classDef groupClass fill:#f9f,stroke:#333,stroke-width:4px,stroke-dasharray: 5 5"
|
||||
);
|
||||
println!(" classDef builtInGroupClass fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5");
|
||||
println!(" classDef serviceAccountClass fill:#f9f,stroke:#333,stroke-width:4px");
|
||||
println!(" classDef personClass fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff");
|
||||
|
||||
for (spn, _, obj_type) in typed_entries {
|
||||
let class = match obj_type {
|
||||
ObjectType::Group => "groupClass",
|
||||
ObjectType::BuiltinGroup => "builtInGroupClass",
|
||||
ObjectType::ServiceAccount => "serviceAccountClass",
|
||||
ObjectType::Person => "personClass",
|
||||
};
|
||||
let at_less_name = Self::mermaid_id_from_spn(&spn);
|
||||
println!(" {at_less_name}[\"{spn}\"]");
|
||||
println!(" class {at_less_name} {class}");
|
||||
}
|
||||
}
|
||||
|
||||
fn mermaid_id_from_spn(spn: &str) -> String {
|
||||
spn.replace('@', "_")
|
||||
}
|
||||
}
|
|
@ -26,6 +26,7 @@ include!("../opt/kanidm.rs");
|
|||
|
||||
mod common;
|
||||
mod domain;
|
||||
mod graph;
|
||||
mod group;
|
||||
mod oauth2;
|
||||
mod person;
|
||||
|
@ -168,6 +169,7 @@ impl KanidmClientOpt {
|
|||
KanidmClientOpt::Group { commands } => commands.debug(),
|
||||
KanidmClientOpt::Person { commands } => commands.debug(),
|
||||
KanidmClientOpt::ServiceAccount { commands } => commands.debug(),
|
||||
KanidmClientOpt::Graph(gopt) => gopt.debug(),
|
||||
KanidmClientOpt::System { commands } => commands.debug(),
|
||||
KanidmClientOpt::Recycle { commands } => commands.debug(),
|
||||
KanidmClientOpt::Version {} => {
|
||||
|
@ -188,6 +190,7 @@ impl KanidmClientOpt {
|
|||
KanidmClientOpt::Person { commands } => commands.exec().await,
|
||||
KanidmClientOpt::ServiceAccount { commands } => commands.exec().await,
|
||||
KanidmClientOpt::Group { commands } => commands.exec().await,
|
||||
KanidmClientOpt::Graph(gops) => gops.exec().await,
|
||||
KanidmClientOpt::System { commands } => commands.exec().await,
|
||||
KanidmClientOpt::Recycle { commands } => commands.exec().await,
|
||||
KanidmClientOpt::Version {} => (),
|
||||
|
|
|
@ -279,6 +279,31 @@ pub enum GroupOpt {
|
|||
},
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, ValueEnum)]
|
||||
pub enum GraphType {
|
||||
Graphviz,
|
||||
Mermaid,
|
||||
MermaidElk
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, ValueEnum)]
|
||||
pub enum ObjectType {
|
||||
Group,
|
||||
BuiltinGroup,
|
||||
ServiceAccount,
|
||||
Person
|
||||
}
|
||||
|
||||
#[derive(Debug, Args)]
|
||||
pub struct GraphCommonOpt {
|
||||
#[arg(value_enum)]
|
||||
pub graph_type: GraphType,
|
||||
#[clap()]
|
||||
pub filter: Vec<ObjectType>,
|
||||
#[clap(flatten)]
|
||||
pub copt: CommonOpt,
|
||||
}
|
||||
|
||||
#[derive(Debug, Args)]
|
||||
pub struct AccountCommonOpt {
|
||||
#[clap()]
|
||||
|
@ -1327,6 +1352,9 @@ pub enum KanidmClientOpt {
|
|||
#[clap(subcommand)]
|
||||
commands: ServiceAccountOpt,
|
||||
},
|
||||
/// Prints graphviz dot file of all groups
|
||||
#[clap(name = "graph")]
|
||||
Graph(GraphCommonOpt),
|
||||
/// System configuration operations
|
||||
System {
|
||||
#[clap(subcommand)]
|
||||
|
|
Loading…
Reference in a new issue