diff --git a/source b/source index 8f4842be964..4dea9c65380 100644 --- a/source +++ b/source @@ -9336,6 +9336,7 @@ interface HTMLElement : Element { HTMLElement implements DocumentAndElementEventHandlers; HTMLElement implements ElementContentEditable; +// Note: intentionally not [HTMLConstructor] interface HTMLUnknownElement : HTMLElement { };

The HTMLElement interface holds methods and attributes related to a number of @@ -12027,7 +12028,8 @@ gave me some of the songs they wrote. I love sharing my music.</p>

Global attributes
DOM interface:
-
interface HTMLHeadElement : HTMLElement {};
+
[HTMLConstructor]
+interface HTMLHeadElement : HTMLElement {};
@@ -49995,14 +49997,14 @@ Daddy"></textarea>
name
DOM interface:
-
[HTMLConstructor]
+
// Note: intentionally not [HTMLConstructor]
 interface HTMLKeygenElement : HTMLElement {
-  [CEReactions] attribute boolean autofocus;
-  [CEReactions] attribute DOMString challenge;
-  [CEReactions] attribute boolean disabled;
+  attribute boolean autofocus;
+  attribute DOMString challenge;
+  attribute boolean disabled;
   readonly attribute HTMLFormElement? form;
-  [CEReactions] attribute DOMString keytype;
-  [CEReactions] attribute DOMString name;
+  attribute DOMString keytype;
+  attribute DOMString name;
 
   readonly attribute DOMString type;
 
@@ -65796,6 +65798,24 @@ console.log(plasticButton2.getAttribute("is")); // will output "plastic-button"<
   data-x="concept-form-submit">form submission, the disabled attribute, and so on.

+

Customized built-in elements are designed to allow extension of existing HTML + elements that have useful user-agent supplied behavior or APIs. As such, they can only extend + existing HTML elements defined in this specification, and cannot extend legacy elements such as + bgsound, blink, isindex, multicol, + nextid, or spacer that have been defined to use + HTMLUnknownElement as their element interface.

+ +

One reason for this requirement is future-compatibility: if a customized built-in + element was defined that extended a currently-unknown element, for example combobox, this would prevent this specification from defining a combobox element in the future, as consumers of the derived customized + built-in element would have come to depend on their base element having no interesting + user-agent-supplied behavior.

+ +

Additionally, applet and keygen elements cannot be extended, as they + are in the process of being removed from the Web platform.

+
Drawbacks of autonomous custom elements
@@ -112586,18 +112606,19 @@ if (s = prompt('What is your name?')) {

The applet element must implement the HTMLAppletElement interface.

-
interface HTMLAppletElement : HTMLElement {
-  [CEReactions] attribute DOMString align;
-  [CEReactions] attribute DOMString alt;
-  [CEReactions] attribute DOMString archive;
-  [CEReactions] attribute DOMString code;
-  [CEReactions] attribute USVString codeBase;
-  [CEReactions] attribute DOMString height;
-  [CEReactions] attribute unsigned long hspace;
-  [CEReactions] attribute DOMString name;
-  [CEReactions] attribute USVString _object; // the underscore is not part of the identifier 
-  [CEReactions] attribute unsigned long vspace;
-  [CEReactions] attribute DOMString width;
+  
// Note: intentionally not [HTMLConstructor]
+interface HTMLAppletElement : HTMLElement {
+  attribute DOMString align;
+  attribute DOMString alt;
+  attribute DOMString archive;
+  attribute DOMString code;
+  attribute USVString codeBase;
+  attribute DOMString height;
+  attribute unsigned long hspace;
+  attribute DOMString name;
+  attribute USVString _object; // the underscore is not part of the identifier 
+  attribute unsigned long vspace;
+  attribute DOMString width;
 };

The align, The marquee element must implement the HTMLMarqueeElement interface.

-
interface HTMLMarqueeElement : HTMLElement {
+  
[HTMLConstructor]
+interface HTMLMarqueeElement : HTMLElement {
   [CEReactions] attribute DOMString behavior;
   [CEReactions] attribute DOMString bgColor;
   [CEReactions] attribute DOMString direction;
@@ -112845,7 +112867,8 @@ if (s = prompt('What is your name?')) {
   

The frameset element must implement the HTMLFrameSetElement interface.

-
interface HTMLFrameSetElement : HTMLElement {
+  
[HTMLConstructor]
+interface HTMLFrameSetElement : HTMLElement {
   [CEReactions] attribute DOMString cols;
   [CEReactions] attribute DOMString rows;
 };
@@ -112965,7 +112988,8 @@ if (s = prompt('What is your name?')) {
 
   

The frame element must implement the HTMLFrameElement interface.

-
interface HTMLFrameElement : HTMLElement {
+  
[HTMLConstructor]
+interface HTMLFrameElement : HTMLElement {
   [CEReactions] attribute DOMString name;
   [CEReactions] attribute DOMString scrolling;
   [CEReactions] attribute USVString src;