@@ -2,114 +2,6 @@ import { isValidStyle, preprocessStyle, styleObjectToString } from "../lib";
2
2
import { setReactiveAttributes } from "../signals/batch" ;
3
3
import { reactiveAttribute } from "../signals/signal" ;
4
4
import { SVG_NAMESPACE } from "./constants" ;
5
- // export function setProperty(dom, name, value, oldValue, namespace) {
6
- // o: if (name == "style") {
7
- // if (typeof value == "string") {
8
- // dom.style.cssText = value;
9
- // } else {
10
- // if (typeof oldValue == "string") {
11
- // dom.style.cssText = oldValue = "";
12
- // }
13
-
14
- // if (oldValue) {
15
- // for (name in oldValue) {
16
- // if (!(value && name in value)) {
17
- // setStyle(dom.style, name, "");
18
- // }
19
- // }
20
- // }
21
-
22
- // if (value) {
23
- // for (name in value) {
24
- // if (!oldValue || value[name] !== oldValue[name]) {
25
- // setStyle(dom.style, name, value[name]);
26
- // }
27
- // }
28
- // }
29
- // }
30
- // }
31
- // // Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6
32
- // else if (name[0] == "o" && name[1] == "n") {
33
- // useCapture = name != (name = name.replace(CAPTURE_REGEX, "$1"));
34
-
35
- // // Infer correct casing for DOM built-in events:
36
- // if (
37
- // name.toLowerCase() in dom ||
38
- // name == "onFocusOut" ||
39
- // name == "onFocusIn"
40
- // )
41
- // name = name.toLowerCase().slice(2);
42
- // else name = name.slice(2);
43
-
44
- // if (!dom._listeners) dom._listeners = {};
45
- // dom._listeners[name + useCapture] = value;
46
-
47
- // if (value) {
48
- // if (!oldValue) {
49
- // value._attached = eventClock;
50
- // dom.addEventListener(
51
- // name,
52
- // useCapture ? eventProxyCapture : eventProxy,
53
- // useCapture
54
- // );
55
- // } else {
56
- // value._attached = oldValue._attached;
57
- // }
58
- // } else {
59
- // dom.removeEventListener(
60
- // name,
61
- // useCapture ? eventProxyCapture : eventProxy,
62
- // useCapture
63
- // );
64
- // }
65
- // } else {
66
- // if (namespace == SVG_NAMESPACE) {
67
- // // Normalize incorrect prop usage for SVG:
68
- // // - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)
69
- // // - className --> class
70
- // name = name.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s");
71
- // } else if (
72
- // name != "width" &&
73
- // name != "height" &&
74
- // name != "href" &&
75
- // name != "list" &&
76
- // name != "form" &&
77
- // // Default value in browsers is `-1` and an empty string is
78
- // // cast to `0` instead
79
- // name != "tabIndex" &&
80
- // name != "download" &&
81
- // name != "rowSpan" &&
82
- // name != "colSpan" &&
83
- // name != "role" &&
84
- // name != "popover" &&
85
- // name in dom
86
- // ) {
87
- // try {
88
- // dom[name] = value == NULL ? "" : value;
89
- // // labelled break is 1b smaller here than a return statement (sorry)
90
- // break o;
91
- // } catch (e) {}
92
- // }
93
-
94
- // // aria- and data- attributes have no boolean representation.
95
- // // A `false` value is different from the attribute not being
96
- // // present, so we can't remove it. For non-boolean aria
97
- // // attributes we could treat false as a removal, but the
98
- // // amount of exceptions would cost too many bytes. On top of
99
- // // that other frameworks generally stringify `false`.
100
-
101
- // if (typeof value == "function") {
102
- // // never serialize functions as attribute values
103
- // } else if (value != null && (value !== false || name[4] == "-")) {
104
- // dom.setAttribute(
105
- // name,
106
- // name == "popover" && value == true ? "" : value
107
- // );
108
- // } else {
109
- // dom.removeAttribute(name);
110
- // }
111
- // }
112
- // }
113
5
114
6
export function setStyle (
115
7
style : Record < string , string | number > | string ,
@@ -159,7 +51,6 @@ export function setAttribute(
159
51
setStyle ( value , dom ) ;
160
52
return ;
161
53
}
162
-
163
54
if ( name [ 0 ] === "o" && name [ 1 ] === "n" && typeof value === "function" ) {
164
55
const useCapture = name != ( name = name . replace ( CAPTURE_REGEX , "$1" ) ) ;
165
56
@@ -198,7 +89,15 @@ export function setAttribute(
198
89
) {
199
90
try {
200
91
// Set the property directly on the DOM element.
201
- dom [ name ] = value == null ? "" : value ;
92
+ if ( name === "value" && dom . tagName === "SELECT" ) {
93
+ setTimeout ( ( ) => {
94
+ dom [ name ] = value == null ? "" : value ;
95
+ } ) ;
96
+ } else {
97
+ dom [ name ] = value == null ? "" : value ;
98
+ }
99
+ // console.log(dom[name], dom);
100
+
202
101
// We simply return after setting the property.
203
102
return ;
204
103
} catch ( e ) {
0 commit comments