01:12
<zcorpan>
RFC: I wrote an emoji proposal for "semla" (as requested by my wife): https://docs.google.com/document/d/1aw0Md2v7twwmj1DMjh5ryBEjt32sJx4tGb3w4rV7NCo/edit?usp=sharing Submissions are accepted from 2025-04-02 apparently https://unicode.org/emoji/proposals.html
11:25
<annevk>
Hmm well I guess command/commandfor landed too quickly after all. :-( That's way too many regressions for something that's supposed to be a standard.
11:35
<annevk>
zcorpan: can you also get bitterballen added?
12:08
<zcorpan>
annevk: do you have evidence of demand? :)
12:10
<Luke Warlow>
Hmm well I guess command/commandfor landed too quickly after all. :-( That's way too many regressions for something that's supposed to be a standard.
Yeah apologies. That auto state change seemed to break things a bit and not get caught. + Some last minute feedback about desired behaviours also meant a slightly bigger normative change in that last PR I've put up
18:01
<annevk>

I wonder if folks here can help me with some IDL. Say I have a method importNode that takes a Node node and a boolean or a dictionary options. The dictionary has two members: subtree and customElements.

I want the semantics to be like this:

  • importNode(node, false) == importNode(node, { subtree: false })
  • importNode(node, true) == importNode(node, { subtree: true })
  • importNode(node) == importNode(node, { subtree: false })
  • importNode(node, undefined) == importNode(node, { subtree: false })
  • importNode(node, { customElements }) == importNode(node, { subtree: true, customElements })
  • importNode(node, { }) == importNode(node, { subtree: true })
  • importNode(node, aRandomObject) == importNode(node, { subtree: true }) (I think this is the same case as { })

At least that would generally match how it behaves today when an object is passed instead of a boolean.

The path of least resistance is probably to not handle empty dictionary differently from undefined, but curious if people have thoughts. (Opinions are fine too.) cc smaug Domenic keithamus

18:03
<keithamus>
So subtree would default to true unless explicitly set to false?
18:10
<keithamus>

So it would be defined something a bit like...

dictionary ImportNodeOptions {
  boolean subtree = true;
  CustomElementRegistry customElements = null;
};

importNode(Node node, optional (ImportNodeOptions or boolean) options = false)

I think?

18:11
<keithamus>
It seems reasonable to me at least. I think boolean properties defaulting to false is a little weird - especially as I think the only other similar API is addEventListener? Where if you pass a dictionary capture = false.
18:15
<annevk>
The dictionary member name can prolly be inverted to account for that. I'm mainly wondering whether this is something we want to do and if this actually works in IDL (I haven't tried your option, I'm not sure if that runs counter to requirements around dictionaries defaulting to { }).
18:16
<annevk>
This case is a bit different from capture in that people want subtree to be true by default. (Or have a selfOnly that defaults to false instead of true, however you want to put it.) Nobody wanted that for capture.
18:20
<keithamus>
From a developer perspective I think the dictionary member defaulting to true is perhaps less confusing than inverting the argument (e.g. selfOnly = false). I understand that capture was intentionally false I am just trying to think of how existing intuitions might map.
18:27
<keithamus>
I guess scrollIntoView() is another API which uses boolean/dict but the boolean maps to a supplied dictionary of very different arguments (if true it's {block: "start", inline: "nearest"} while false is {block: "end", inline: "nearest"}). I am not sure if that's more or less confusing 😅
18:34
<bkardell>
It is definitely one of those... more or less :)
19:49
<Noam Rosenthal>
Most of these boolean args are confusing TBH
19:49
<Noam Rosenthal>
But importNode is pretty old so it's understandable
19:50
<Noam Rosenthal>
I think importNode(node, { }) is handled as {subtree: true} because {} is cast as truthy to boolean?
19:54
<Noam Rosenthal>
this IDL seems legit