Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 <!-- | 1 <!-- |
| 2 Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 2 Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 3 for details. All rights reserved. Use of this source code is governed by a | 3 for details. All rights reserved. Use of this source code is governed by a |
| 4 BSD-style license that can be found in the LICENSE file. | 4 BSD-style license that can be found in the LICENSE file. |
| 5 --> | 5 --> |
| 6 <script> | 6 <script> |
| 7 (function() { | 7 (function() { |
| 8 Polymer.Base.originalPolymerCreatedCallback = | 8 Polymer.Base.originalPolymerCreatedCallback = |
| 9 Polymer.Base.createdCallback; | 9 Polymer.Base.createdCallback; |
| 10 Polymer.Base.createdCallback = function() { | 10 Polymer.Base.createdCallback = function() { |
| 11 if (this.__isPolymerDart__) return; | 11 if (this.__isPolymerDart__) return; |
| 12 this.originalPolymerCreatedCallback(); | 12 this.originalPolymerCreatedCallback(); |
| 13 }; | 13 }; |
| 14 | 14 |
| 15 // Store serialize/deserialize to retain the original behavior when the | |
| 16 // methods are overriden by PolymerSerialize. | |
| 17 Polymer.Base.originalSerialize = Polymer.Base.serialize; | |
| 18 Polymer.Base.originalDeserialize = Polymer.Base.deserialize; | |
| 19 | |
| 20 Polymer.Dart = {}; | 15 Polymer.Dart = {}; |
| 21 | 16 |
| 22 // Placeholder for `undefined` return values. This should eventually go | 17 // Placeholder for `undefined` return values. This should eventually go |
| 23 // away, once we have dart:js support for `undefined`. | 18 // away, once we have dart:js support for `undefined`. |
| 24 Polymer.Dart.undefined = {}; | 19 Polymer.Dart.undefined = {}; |
| 25 | 20 |
| 26 // Used to get an empty constructor function which doesn't call into dart. | 21 // Used to get an empty constructor function which doesn't call into dart. |
| 27 Polymer.Dart.functionFactory = function() { return function() {}; }; | 22 Polymer.Dart.functionFactory = function() { return function() {}; }; |
| 28 | 23 |
| 29 // Generates a function which accesses a particular property on a dart | 24 // Generates a function which accesses a particular property on a dart |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 55 // recognize. | 50 // recognize. |
| 56 var args = []; | 51 var args = []; |
| 57 for (var i = 0; i < arguments.length; i++) { | 52 for (var i = 0; i < arguments.length; i++) { |
| 58 args[i] = arguments[i]; | 53 args[i] = arguments[i]; |
| 59 } | 54 } |
| 60 var value = dartFunction(thisArg, args); | 55 var value = dartFunction(thisArg, args); |
| 61 if (value === Polymer.Dart.undefined) return undefined; | 56 if (value === Polymer.Dart.undefined) return undefined; |
| 62 return value; | 57 return value; |
| 63 } | 58 } |
| 64 }; | 59 }; |
| 60 | |
| 61 // Remove any `__dartClass__` instances during serialization. | |
| 62 Polymer.Dart.serialize = function(value, type) { | |
| 63 var dartClass = value['__dartClass__']; | |
|
Siggi Cherem (dart-lang)
2015/09/17 21:11:59
Since this is JS, use the field directly?
var d
jakemac
2015/09/23 17:37:08
done
| |
| 64 value['__dartClass__'] = undefined; | |
|
Siggi Cherem (dart-lang)
2015/09/17 21:11:59
Does Polymer.Base.serialize depend on Object.keys?
jakemac
2015/09/23 17:37:08
It seemed to work fine, but deleting it entirely i
| |
| 65 var serialized = Polymer.Base.serialize(value, type); | |
| 66 value['__dartClass__'] = dartClass; | |
| 67 return serialized; | |
| 68 }; | |
| 69 | |
| 70 Polymer.Dart.Behavior = { | |
|
Siggi Cherem (dart-lang)
2015/09/17 21:11:59
instead of a behavior, would it make sense to make
jakemac
2015/09/23 17:37:08
I think the behavior actually makes a lot of sense
| |
| 71 // Secret hook into property changes. Pretty hacky but its more efficient | |
| 72 // than using a JsProxy object for the element. | |
| 73 _propertyChanged: function(path, newValue, oldValue) { | |
| 74 var parts = path.split('.'); | |
| 75 var thisArg = parts.length == 1 ? | |
| 76 this : this.get(parts.slice(0, parts.length - 1)); | |
| 77 thisArg = thisArg.__dartClass__ ? thisArg.__dartClass__ : thisArg; | |
|
Siggi Cherem (dart-lang)
2015/09/17 21:11:59
Or:
thisArg = thisArg.__dartClass__ || thisArg;
jakemac
2015/09/23 17:37:08
Done.
| |
| 78 Polymer.Dart.propertyChanged( | |
| 79 thisArg, parts[parts.length - 1], newValue); | |
| 80 }, | |
| 81 | |
| 82 notifyPath: function(path, value, fromAbove) { | |
| 83 var notified = | |
| 84 Polymer.Base.notifyPath.call(this, path, value, fromAbove); | |
| 85 if (fromAbove) return notified; | |
| 86 | |
| 87 // If you call notifyPath from dart we need to do manual modifications | |
| 88 // on any JsArray or JsObject instances. | |
| 89 var parts = this._getPathParts(path); | |
| 90 if (parts.length > 1) { | |
| 91 var model = this.get(parts.splice(0, parts.length - 1)); | |
| 92 if (model[parts[0]] !== value) model[parts[0]] = value; | |
|
Siggi Cherem (dart-lang)
2015/09/17 21:11:59
do we expect the value to always be a string liter
jakemac
2015/09/23 17:37:08
good catch, I don't think it would ever be created
| |
| 93 } | |
| 94 return notified; | |
| 95 }, | |
| 96 | |
| 97 serialize: function(value, type) { | |
| 98 return Polymer.Dart.serialize(value, type); | |
| 99 } | |
| 100 } | |
| 65 })(); | 101 })(); |
| 66 </script> | 102 </script> |
| OLD | NEW |