| Index: third_party/polymer/v0_8/components-chromium/polymer/src/standard/notify-path-extracted.js
|
| diff --git a/third_party/polymer/v0_8/components-chromium/polymer/src/standard/notify-path-extracted.js b/third_party/polymer/v0_8/components-chromium/polymer/src/standard/notify-path-extracted.js
|
| deleted file mode 100644
|
| index 2dc890ccfc571124dae945225bf2df9caab5ea2e..0000000000000000000000000000000000000000
|
| --- a/third_party/polymer/v0_8/components-chromium/polymer/src/standard/notify-path-extracted.js
|
| +++ /dev/null
|
| @@ -1,240 +0,0 @@
|
| -
|
| -
|
| - /**
|
| - * Changes to an object sub-field (aka "path") via a binding
|
| - * (e.g. `<x-foo value="{{item.subfield}}"`) will notify other elements bound to
|
| - * the same object automatically.
|
| - *
|
| - * When modifying a sub-field of an object imperatively
|
| - * (e.g. `this.item.subfield = 42`), in order to have the new value propagated
|
| - * to other elements, a special `setPathValue(path, value)` API is provided.
|
| - * `setPathValue` sets the object field at the path specified, and then notifies the
|
| - * binding system so that other elements bound to the same path will update.
|
| - *
|
| - * Example:
|
| - *
|
| - * Polymer({
|
| - *
|
| - * is: 'x-date',
|
| - *
|
| - * properties: {
|
| - * date: {
|
| - * type: Object,
|
| - * notify: true
|
| - * }
|
| - * },
|
| - *
|
| - * attached: function() {
|
| - * this.date = {};
|
| - * setInterval(function() {
|
| - * var d = new Date();
|
| - * // Required to notify elements bound to date of changes to sub-fields
|
| - * // this.date.seconds = d.getSeconds(); <-- Will not notify
|
| - * this.setPathValue('date.seconds', d.getSeconds());
|
| - * this.setPathValue('date.minutes', d.getMinutes());
|
| - * this.setPathValue('date.hours', d.getHours() % 12);
|
| - * }.bind(this), 1000);
|
| - * }
|
| - *
|
| - * });
|
| - *
|
| - * Allows bindings to `date` sub-fields to update on changes:
|
| - *
|
| - * <x-date date="{{date}}"></x-date>
|
| - *
|
| - * Hour: <span>{{date.hours}}</span>
|
| - * Min: <span>{{date.minutes}}</span>
|
| - * Sec: <span>{{date.seconds}}</span>
|
| - *
|
| - * @class data feature: path notification
|
| - */
|
| -
|
| - Polymer.Base._addFeature({
|
| - /**
|
| - Notify that a path has changed. For example:
|
| -
|
| - this.item.user.name = 'Bob';
|
| - this.notifyPath('item.user.name', this.item.user.name);
|
| -
|
| - Returns true if notification actually took place, based on
|
| - a dirty check of whether the new value was already known
|
| - */
|
| - notifyPath: function(path, value, fromAbove) {
|
| - var old = this._propertySet(path, value);
|
| - // manual dirty checking for now...
|
| - if (old !== value) {
|
| - // console.group((this.localName || this.dataHost.id + '-' + this.dataHost.dataHost.index) + '#' + (this.id || this.index) + ' ' + path, value);
|
| - // Take path effects at this level for exact path matches,
|
| - // and notify down for any bindings to a subset of this path
|
| - this._pathEffector(path, value);
|
| - // Send event to notify the path change upwards
|
| - // Optimization: don't notify up if we know the notification
|
| - // is coming from above already (avoid wasted event dispatch)
|
| - if (!fromAbove) {
|
| - // TODO(sorvell): should only notify if notify: true?
|
| - this._notifyPath(path, value);
|
| - }
|
| - // console.groupEnd((this.localName || this.dataHost.id + '-' + this.dataHost.dataHost.index) + '#' + (this.id || this.index) + ' ' + path, value);
|
| - }
|
| - },
|
| -
|
| - /**
|
| - Convienence method for setting a value to a path and calling
|
| - notify path
|
| - */
|
| - setPathValue: function(path, value) {
|
| - var parts = path.split('.');
|
| - if (parts.length > 1) {
|
| - var last = parts.pop();
|
| - var prop = this;
|
| - while (parts.length) {
|
| - prop = prop[parts.shift()];
|
| - if (!prop) {
|
| - return;
|
| - }
|
| - }
|
| - // TODO(kschaaf): want dirty-check here?
|
| - // if (prop[last] !== value) {
|
| - prop[last] = value;
|
| - this.notifyPath(path, value);
|
| - // }
|
| - } else {
|
| - this[path] = value;
|
| - }
|
| - },
|
| -
|
| - getPathValue: function(path, root) {
|
| - var parts = path.split('.');
|
| - var last = parts.pop();
|
| - var prop = root || this;
|
| - while (parts.length) {
|
| - prop = prop[parts.shift()];
|
| - if (!prop) {
|
| - return;
|
| - }
|
| - }
|
| - return prop[last];
|
| - },
|
| -
|
| - // TODO(kschaaf): This machine can be optimized to memoize compiled path
|
| - // effectors as new paths are notified for performance, since it involves
|
| - // a fair amount of runtime lookup
|
| - _pathEffector: function(path, value) {
|
| - // get root property
|
| - var model = this._modelForPath(path);
|
| - // search property effects of the root property for 'annotation' effects
|
| - var fx$ = this._propertyEffects[model];
|
| - if (fx$) {
|
| - fx$.forEach(function(fx) {
|
| - var fxFn = this[fx.kind + 'PathEffect'];
|
| - if (fxFn) {
|
| - fxFn.call(this, path, value, fx.effect);
|
| - }
|
| - }, this);
|
| - }
|
| - // notify runtime-bound paths
|
| - if (this._boundPaths) {
|
| - this._notifyBoundPaths(path, value);
|
| - }
|
| - },
|
| -
|
| - annotationPathEffect: function(path, value, effect) {
|
| - if (effect.value === path || effect.value.indexOf(path + '.') === 0) {
|
| - // TODO(sorvell): ideally the effect function is on this prototype
|
| - // so we don't have to call it like this.
|
| - Polymer.Bind.annotationEffect.call(this, path, value, effect);
|
| - } else if ((path.indexOf(effect.value + '.') === 0) && !effect.negate) {
|
| - // locate the bound node
|
| - var node = this._nodes[effect.index];
|
| - if (node && node.notifyPath) {
|
| - var p = this._fixPath(effect.name , effect.value, path);
|
| - node.notifyPath(p, value, true);
|
| - }
|
| - }
|
| - },
|
| -
|
| - complexObserverPathEffect: function(path, value, effect) {
|
| - if (this._pathMatchesEffect(path, effect)) {
|
| - Polymer.Bind.complexObserverEffect.call(this, path, value, effect);
|
| - }
|
| - },
|
| -
|
| - computePathEffect: function(path, value, effect) {
|
| - if (this._pathMatchesEffect(path, effect)) {
|
| - Polymer.Bind.computeEffect.call(this, path, value, effect);
|
| - }
|
| - },
|
| -
|
| - annotatedComputationPathEffect: function(path, value, effect) {
|
| - if (this._pathMatchesEffect(path, effect)) {
|
| - Polymer.Bind.annotatedComputationEffect.call(this, path, value, effect);
|
| - }
|
| - },
|
| -
|
| - _pathMatchesEffect: function(path, effect) {
|
| - var effectArg = effect.arg.name;
|
| - return (effectArg == path) ||
|
| - (effectArg.indexOf(path + '.') === 0) ||
|
| - (effect.arg.wildcard && path.indexOf(effectArg) === 0);
|
| - },
|
| -
|
| - bindPaths: function(to, from) {
|
| - this._boundPaths = this._boundPaths || {};
|
| - if (from) {
|
| - this._boundPaths[to] = from;
|
| - // this.setPathValue(to, this.getPathValue(from));
|
| - } else {
|
| - this.unbindPath(to);
|
| - // this.setPathValue(to, from);
|
| - }
|
| - },
|
| -
|
| - unbindPaths: function(path) {
|
| - if (this._boundPaths) {
|
| - delete this._boundPaths[path];
|
| - }
|
| - },
|
| -
|
| - _notifyBoundPaths: function(path, value) {
|
| - var from, to;
|
| - for (var a in this._boundPaths) {
|
| - var b = this._boundPaths[a];
|
| - if (path.indexOf(a + '.') == 0) {
|
| - from = a;
|
| - to = b;
|
| - break;
|
| - }
|
| - if (path.indexOf(b + '.') == 0) {
|
| - from = b;
|
| - to = a;
|
| - break;
|
| - }
|
| - }
|
| - if (from && to) {
|
| - var p = this._fixPath(to, from, path);
|
| - this.notifyPath(p, value);
|
| - }
|
| - },
|
| -
|
| - _fixPath: function(property, root, path) {
|
| - return property + path.slice(root.length);
|
| - },
|
| -
|
| - _notifyPath: function(path, value) {
|
| - var rootName = this._modelForPath(path);
|
| - var dashCaseName = Polymer.CaseMap.camelToDashCase(rootName);
|
| - var eventName = dashCaseName + this._EVENT_CHANGED;
|
| - this.fire(eventName, {
|
| - path: path,
|
| - value: value
|
| - }, {bubbles: false});
|
| - },
|
| -
|
| - _modelForPath: function(path) {
|
| - return path.split('.').shift();
|
| - },
|
| -
|
| - _EVENT_CHANGED: '-changed',
|
| -
|
| - });
|
| -
|
|
|