OLD | NEW |
1 part of html_common; | 1 part of html_common; |
2 | 2 |
3 convertDartToNative_PrepareForStructuredClone(value) => | 3 convertDartToNative_PrepareForStructuredClone(value) => |
4 new _StructuredCloneDartium().convertDartToNative_PrepareForStructuredClone(
value); | 4 new _StructuredCloneDartium().convertDartToNative_PrepareForStructuredClone(
value); |
5 | 5 |
6 convertNativeToDart_AcceptStructuredClone(object, {mustCopy: false}) => | 6 convertNativeToDart_AcceptStructuredClone(object, {mustCopy: false}) => |
7 new _AcceptStructuredCloneDartium().convertNativeToDart_AcceptStructuredClon
e(object, mustCopy: mustCopy); | 7 new _AcceptStructuredCloneDartium().convertNativeToDart_AcceptStructuredClon
e(object, mustCopy: mustCopy); |
8 | 8 |
9 class _StructuredCloneDartium extends _StructuredClone { | 9 class _StructuredCloneDartium extends _StructuredClone { |
10 newJsMap() => new js.JsObject(js.context["Object"]); | 10 newJsMap() => new js.JsObject(js.context["Object"]); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 try { | 115 try { |
116 if (jsObject is! js.JsObject || jsObject == null) { | 116 if (jsObject is! js.JsObject || jsObject == null) { |
117 // JS Interop converted the object to a Dart class e.g., Uint8ClampedList. | 117 // JS Interop converted the object to a Dart class e.g., Uint8ClampedList. |
118 // or it's a simple type. | 118 // or it's a simple type. |
119 return jsObject; | 119 return jsObject; |
120 } | 120 } |
121 | 121 |
122 var wrapper = js.getDartHtmlWrapperFor(jsObject); | 122 var wrapper = js.getDartHtmlWrapperFor(jsObject); |
123 // if we have a wrapper return the Dart instance. | 123 // if we have a wrapper return the Dart instance. |
124 if (wrapper != null) { | 124 if (wrapper != null) { |
125 var customElementClass = getCustomElementType(wrapper.blink_jsObject); | |
126 if (wrapper.runtimeType != customElementClass && customElementClass != nul
l) { | |
127 if (wrapper.runtimeType == HtmlElement && !wrapper.isBadUpgrade) { | |
128 // We're a Dart instance if it's HtmlElement and we have a customEleme
nt | |
129 // class then we need to upgrade. | |
130 if (customElementClass != null) { | |
131 var dartClass_instance; | |
132 try { | |
133 dartClass_instance = _blink.Blink_Utils.constructElement(customEle
mentClass, jsObject); | |
134 } finally { | |
135 dartClass_instance.blink_jsObject = jsObject; | |
136 return dartClass_instance; | |
137 } | |
138 } | |
139 } | |
140 } | |
141 | |
142 return wrapper; | 125 return wrapper; |
143 } | 126 } |
144 | 127 |
145 if (jsObject is js.JsArray) { | 128 if (jsObject is js.JsArray) { |
146 var wrappingList = new DartHtmlWrappingList(jsObject); | 129 var wrappingList = new DartHtmlWrappingList(jsObject); |
147 js.setDartHtmlWrapperFor(jsObject, wrappingList); | 130 js.setDartHtmlWrapperFor(jsObject, wrappingList); |
148 return wrappingList; | 131 return wrappingList; |
149 } | 132 } |
150 | 133 |
151 // Try the most general type conversions on it. | 134 // Try the most general type conversions on it. |
(...skipping 21 matching lines...) Expand all Loading... |
173 | 156 |
174 var dartClass_instance; | 157 var dartClass_instance; |
175 var customElementClass = null; | 158 var customElementClass = null; |
176 var extendsTag = ""; | 159 var extendsTag = ""; |
177 var custom = getCustomElementEntry(jsObject); | 160 var custom = getCustomElementEntry(jsObject); |
178 if (custom != null) { | 161 if (custom != null) { |
179 customElementClass = custom['type']; | 162 customElementClass = custom['type']; |
180 extendsTag = custom['extends']; | 163 extendsTag = custom['extends']; |
181 } | 164 } |
182 | 165 |
183 // Custom Element to upgrade. | 166 // Only allow custom elements to be created in the html or svg default |
184 // Only allow custome elements to be created in the html or svg default | |
185 // namespace. | 167 // namespace. |
| 168 var func; |
186 var defaultNS = jsObject['namespaceURI'] == 'http://www.w3.org/1999/xhtml' |
| | 169 var defaultNS = jsObject['namespaceURI'] == 'http://www.w3.org/1999/xhtml' |
| |
187 jsObject['namespaceURI'] == 'http://www.w3.org/2000/svg'; | 170 jsObject['namespaceURI'] == 'http://www.w3.org/2000/svg'; |
188 if (customElementClass != null && extendsTag == "" && defaultNS) { | 171 if (customElementClass != null && extendsTag == "" && defaultNS) { |
189 try { | 172 // The customElementClass is known but we can't create the real class so |
190 dartClass_instance = _blink.Blink_Utils.constructElement(customElementCl
ass, jsObject); | 173 // create the HtmlElement and it will get upgraded when registerElement's |
191 } finally { | 174 // createdCallback is called. |
192 dartClass_instance.blink_jsObject = jsObject; | 175 func = getHtmlCreateFunction('HTMLElement'); |
193 js.setDartHtmlWrapperFor(jsObject, dartClass_instance); | |
194 } | |
195 } else { | 176 } else { |
196 var func = getHtmlCreateFunction(jsTypeName); | 177 func = getHtmlCreateFunction(jsTypeName); |
197 if (func == null) { | 178 if (func == null) { |
198 if (jsTypeName == 'auto-binding') { | 179 if (jsTypeName == 'auto-binding') { |
199 func = getHtmlCreateFunction("HTMLTemplateElement"); | 180 func = getHtmlCreateFunction('HTMLTemplateElement'); |
200 } else if (jsObject.toString() == "[object HTMLElement]") { | 181 } else if (jsObject.toString() == "[object HTMLElement]") { |
201 // One last ditch effort could be a JS custom element. | 182 // One last ditch effort could be a JS custom element. |
202 func = getHtmlCreateFunction("HTMLElement"); | 183 func = getHtmlCreateFunction('HTMLElement'); |
203 } | 184 } |
204 } | 185 } |
205 if (func != null) { | |
206 dartClass_instance = func(); | |
207 dartClass_instance.blink_jsObject = jsObject; | |
208 js.setDartHtmlWrapperFor(jsObject, dartClass_instance); | |
209 } | |
210 } | 186 } |
211 | 187 |
| 188 // Can we construct a Dart class? |
| 189 if (func != null) { |
| 190 dartClass_instance = func(); |
| 191 |
| 192 // Wrap our Dart instance in both directions. |
| 193 dartClass_instance.blink_jsObject = jsObject; |
| 194 js.setDartHtmlWrapperFor(jsObject, dartClass_instance); |
| 195 } |
| 196 |
212 // TODO(jacobr): cache that this is not a dart:html JS class. | 197 // TODO(jacobr): cache that this is not a dart:html JS class. |
213 return dartClass_instance; | 198 return dartClass_instance; |
214 } catch(e, stacktrace){ | 199 } catch(e, stacktrace){ |
215 if (interop_checks) { | 200 if (interop_checks) { |
216 if (e is DebugAssertException) | 201 if (e is DebugAssertException) |
217 window.console.log("${e.message}\n ${stacktrace}"); | 202 window.console.log("${e.message}\n ${stacktrace}"); |
218 else | 203 else |
219 window.console.log("${stacktrace}"); | 204 window.console.log("${stacktrace}"); |
220 } | 205 } |
221 } | 206 } |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
387 | 372 |
388 final js.JsArray blink_jsObject; | 373 final js.JsArray blink_jsObject; |
389 | 374 |
390 operator [](int index) => wrap_jso(js.JsNative.getArrayIndex(blink_jsObject, i
ndex)); | 375 operator [](int index) => wrap_jso(js.JsNative.getArrayIndex(blink_jsObject, i
ndex)); |
391 | 376 |
392 operator []=(int index, value) => blink_jsObject[index] = value; | 377 operator []=(int index, value) => blink_jsObject[index] = value; |
393 | 378 |
394 int get length => blink_jsObject.length; | 379 int get length => blink_jsObject.length; |
395 int set length(int newLength) => blink_jsObject.length = newLength; | 380 int set length(int newLength) => blink_jsObject.length = newLength; |
396 } | 381 } |
OLD | NEW |