mirror of
https://github.com/zaphar/wasm-web-components.git
synced 2025-07-21 19:40:30 -04:00
Make all the attribute args optional
This commit is contained in:
parent
7e257ba7bc
commit
c311de79b1
@ -33,7 +33,10 @@ fn expand_crate_ref(name: &str, path: Path) -> syn::Path {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_class_and_element_names(args: Vec<NestedMeta>) -> (Literal, Literal, Literal) {
|
fn get_class_and_element_names(
|
||||||
|
args: Vec<NestedMeta>,
|
||||||
|
struct_name: &Ident,
|
||||||
|
) -> (Literal, Literal, Literal) {
|
||||||
let mut class_name = None;
|
let mut class_name = None;
|
||||||
let mut element_name = None;
|
let mut element_name = None;
|
||||||
let mut observed_attributes = None;
|
let mut observed_attributes = None;
|
||||||
@ -54,12 +57,11 @@ fn get_class_and_element_names(args: Vec<NestedMeta>) -> (Literal, Literal, Lite
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO(jwall): it should be a compile error if this is missing.
|
|
||||||
let class_name = class_name
|
|
||||||
.map(|n| n.token())
|
|
||||||
.unwrap_or_else(|| LitStr::new("", Span::call_site()).token());
|
|
||||||
|
|
||||||
// TODO(jwall): if Missing we should derive this from the class name.
|
let class_name = class_name.map(|n| n.token()).unwrap_or_else(|| {
|
||||||
|
LitStr::new(struct_name.to_string().as_ref(), Span::call_site()).token()
|
||||||
|
});
|
||||||
|
|
||||||
let element_name = match element_name.map(|n| n.token()) {
|
let element_name = match element_name.map(|n| n.token()) {
|
||||||
Some(n) => n,
|
Some(n) => n,
|
||||||
None => {
|
None => {
|
||||||
@ -266,7 +268,8 @@ pub fn web_component(attr: TokenStream, item: TokenStream) -> TokenStream {
|
|||||||
let args = parse_macro_input!(attr as AttributeArgs);
|
let args = parse_macro_input!(attr as AttributeArgs);
|
||||||
let item_struct = parse_macro_input!(item as ItemStruct);
|
let item_struct = parse_macro_input!(item as ItemStruct);
|
||||||
|
|
||||||
let (class_name, element_name, observed_attributes) = get_class_and_element_names(args);
|
let (class_name, element_name, observed_attributes) =
|
||||||
|
get_class_and_element_names(args, &item_struct.ident);
|
||||||
|
|
||||||
expand_struct(item_struct, class_name, element_name, observed_attributes)
|
expand_struct(item_struct, class_name, element_name, observed_attributes)
|
||||||
}
|
}
|
||||||
|
@ -11,10 +11,10 @@ use web_sys::{window, Element, HtmlElement};
|
|||||||
/// It expects you to implement the [WebComponentBinding](trait@WebComponentBinding)
|
/// It expects you to implement the [WebComponentBinding](trait@WebComponentBinding)
|
||||||
/// trait in order to implement the callbacks.
|
/// trait in order to implement the callbacks.
|
||||||
///
|
///
|
||||||
/// It supports three attribute `name = value` parameters.
|
/// It supports three optional attributes `name = value` parameters.
|
||||||
/// * `class_name = "ClassName"` - Required. The class name to use for the javascript shim.
|
/// * `class_name = "ClassName"` - The class name to use for the javascript shim. If not provided uses the structs name instead.
|
||||||
/// * `element_name = "class-name"` - Optional. A valid custom element name to use for the element.
|
/// * `element_name = "class-name"` - A valid custom element name to use for the element. if not proviced derives it from the class name.
|
||||||
/// * `observed_attrs = "['attr1', attr2']"` - Optional. A javascript array with a list of observed attributes for this compoment.
|
/// * `observed_attrs = "['attr1', attr2']"` - A javascript array with a list of observed attributes for this compoment. Defaults to "[]".
|
||||||
///
|
///
|
||||||
/// Reference [MDN Web Components Guide](https://developer.mozilla.org/en-US/docs/Web/Web_Components)
|
/// Reference [MDN Web Components Guide](https://developer.mozilla.org/en-US/docs/Web/Web_Components)
|
||||||
pub use wasm_web_component_macros::web_component;
|
pub use wasm_web_component_macros::web_component;
|
||||||
@ -206,4 +206,14 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(AnElement::element_name(), "an-element");
|
assert_eq!(AnElement::element_name(), "an-element");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen_test]
|
||||||
|
fn test_component_no_class_name() {
|
||||||
|
#[web_component]
|
||||||
|
pub struct AnotherElement {}
|
||||||
|
impl WebComponentBinding for AnotherElement {}
|
||||||
|
|
||||||
|
assert_eq!(AnotherElement::class_name(), "AnotherElement");
|
||||||
|
assert_eq!(AnotherElement::element_name(), "another-element");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user