Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(697)

Unified Diff: pkg/polymer/lib/src/js/polymer/polymer.concat.js

Issue 221653004: "Reverting 34633" (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/polymer/lib/src/js/polymer/polymer.js ('k') | pkg/polymer/lib/src/js/polymer/polymer.concat.js.map » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/polymer/lib/src/js/polymer/polymer.concat.js
diff --git a/pkg/polymer/lib/src/js/polymer/polymer.concat.js b/pkg/polymer/lib/src/js/polymer/polymer.concat.js
index 85a6554d084eb8e9ebf2d0f3302c1278158a976e..44c0afbcf74e49b9951b0903a12fe5bcc5529a2a 100644
--- a/pkg/polymer/lib/src/js/polymer/polymer.concat.js
+++ b/pkg/polymer/lib/src/js/polymer/polymer.concat.js
@@ -407,11 +407,11 @@ if (typeof window.Polymer === 'function') {
var handle = timeout ? setTimeout(fn, timeout) :
requestAnimationFrame(fn);
// NOTE: switch on inverting handle to determine which time is used.
- return timeout ? handle : ~handle;
+ return timeout ? handle : 1 / handle;
},
cancelAsync: function(handle) {
- if (handle < 0) {
- cancelAnimationFrame(~handle);
+ if (handle < 1) {
+ cancelAnimationFrame(Math.round(1 / handle));
} else {
clearTimeout(handle);
}
@@ -664,8 +664,6 @@ if (typeof window.Polymer === 'function') {
if ((n$ && n$.length) || (pn$ && pn$.length)) {
var self = this;
var o = this._propertyObserver = new CompoundObserver();
- // keep track of property observer so we can shut it down
- this.registerObservers([o]);
for (var i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) {
o.addPath(this, n);
// observer array properties
@@ -708,7 +706,7 @@ if (typeof window.Polymer === 'function') {
// if we are observing the previous value, stop
if (Array.isArray(old)) {
log.observe && console.log('[%s] observeArrayValue: unregister observer [%s]', this.localName, name);
- this.closeNamedObserver(name + '__array');
+ this.unregisterObserver(name + '__array');
}
// if the new value is an array, being observing it
if (Array.isArray(value)) {
@@ -717,7 +715,7 @@ if (typeof window.Polymer === 'function') {
observer.open(function(value, old) {
this.invokeMethod(callbackName, [old]);
}, this);
- this.registerNamedObserver(name + '__array', observer);
+ this.registerObserver(name + '__array', observer);
}
}
},
@@ -725,51 +723,42 @@ if (typeof window.Polymer === 'function') {
// apply Polymer two-way reference binding
return bindProperties(this, property, observable);
},
+ unbindAllProperties: function() {
+ if (this._propertyObserver) {
+ this._propertyObserver.close();
+ }
+ this.unregisterObservers();
+ },
+ unbindProperty: function(name) {
+ return this.unregisterObserver(name);
+ },
invokeMethod: function(method, args) {
var fn = this[method] || method;
if (typeof fn === 'function') {
fn.apply(this, args);
}
},
- registerObservers: function(observers) {
- this._observers.push(observers);
- },
- // observer array items are arrays of observers.
- closeObservers: function() {
- for (var i=0, l=this._observers.length; i<l; i++) {
- this.closeObserverArray(this._observers[i]);
- }
- this._observers = [];
- },
- closeObserverArray: function(observerArray) {
- for (var i=0, l=observerArray.length, o; i<l; i++) {
- o = observerArray[i];
- if (o && o.close) {
- o.close();
- }
- }
- },
// bookkeeping observers for memory management
- registerNamedObserver: function(name, observer) {
- var o$ = this._namedObservers || (this._namedObservers = {});
+ registerObserver: function(name, observer) {
+ var o$ = this._observers || (this._observers = {});
o$[name] = observer;
},
- closeNamedObserver: function(name) {
- var o$ = this._namedObservers;
+ unregisterObserver: function(name) {
+ var o$ = this._observers;
if (o$ && o$[name]) {
o$[name].close();
o$[name] = null;
return true;
}
},
- closeNamedObservers: function() {
- if (this._namedObservers) {
- var keys=Object.keys(this._namedObservers);
+ unregisterObservers: function() {
+ if (this._observers) {
+ var keys=Object.keys(this._observers);
for (var i=0, l=keys.length, k, o; (i < l) && (k=keys[i]); i++) {
- o = this._namedObservers[k];
+ o = this._observers[k];
o.close();
}
- this._namedObservers = {};
+ this._observers = {};
}
}
};
@@ -842,33 +831,33 @@ if (typeof window.Polymer === 'function') {
var mdv = {
syntax: syntax,
instanceTemplate: function(template) {
- var dom = template.createInstance(this, this.syntax);
- this.registerObservers(dom.bindings_);
- return dom;
+ return template.createInstance(this, this.syntax);
},
bind: function(name, observable, oneTime) {
+ // note: binding is a prepare signal. This allows us to be sure that any
+ // property changes that occur as a result of binding will be observed.
+ if (!this._elementPrepared) {
+ this.prepareElement();
+ }
var property = this.propertyForAttribute(name);
if (!property) {
// TODO(sjmiles): this mixin method must use the special form
// of `super` installed by `mixinMethod` in declaration/prototype.js
return this.mixinSuper(arguments);
} else {
+ // clean out the closets
+ this.unbind(name);
// use n-way Polymer binding
var observer = this.bindProperty(property, observable);
+ // stick path on observer so it's available via this.bindings
+ observer.path = observable.path_;
+ // reflect bound property to attribute when binding
+ // to ensure binding is not left on attribute if property
+ // does not update due to not changing.
this.reflectPropertyToAttribute(property);
- // NOTE: reflecting binding information is typically required only for
- // tooling. It has a performance cost so it's opt-in in Node.bind.
- if (Platform.enableBindingsReflection) {
- observer.path = observable.path_;
- this.bindings_ = this.bindings_ || {};
- this.bindings_[name] = observer;
- }
- return observer;
+ return this.bindings[name] = observer;
}
},
- // TODO(sorvell): unbind/unbindAll has been removed, as public api, from
- // TemplateBinding. We still need to close/dispose of observers but perhaps
- // we should choose a more explicit name.
asyncUnbindAll: function() {
if (!this._unbound) {
log.unbind && console.log('[%s] asyncUnbindAll', this.localName);
@@ -877,12 +866,18 @@ if (typeof window.Polymer === 'function') {
},
unbindAll: function() {
if (!this._unbound) {
- this.closeObservers();
- this.closeNamedObservers();
+ this.unbindAllProperties();
+ this.super();
+ // unbind shadowRoot
+ var root = this.shadowRoot;
+ while (root) {
+ unbindNodeTree(root);
+ root = root.olderShadowRoot;
+ }
this._unbound = true;
}
},
- cancelUnbindAll: function() {
+ cancelUnbindAll: function(preventCascade) {
if (this._unbound) {
log.unbind && console.warn('[%s] already unbound, cannot cancel unbindAll', this.localName);
return;
@@ -891,6 +886,15 @@ if (typeof window.Polymer === 'function') {
if (this._unbindAllJob) {
this._unbindAllJob = this._unbindAllJob.stop();
}
+ // cancel unbinding our shadow tree iff we're not in the process of
+ // cascading our tree (as we do, for example, when the element is inserted).
+ if (!preventCascade) {
+ forNodeTree(this.shadowRoot, function(n) {
+ if (n.cancelUnbindAll) {
+ n.cancelUnbindAll();
+ }
+ });
+ }
}
};
@@ -926,17 +930,11 @@ if (typeof window.Polymer === 'function') {
* license that can be found in the LICENSE file.
*/
(function(scope) {
+ var preparingElements = 0;
var base = {
PolymerBase: true,
- job: function(job, callback, wait) {
- if (typeof job === 'string') {
- var n = '___' + job;
- this[n] = Polymer.job.call(this, this[n], callback, wait);
- } else {
- return Polymer.job.call(this, job, callback, wait);
- }
- },
+ job: Polymer.job,
super: Polymer.super,
// user entry point for element has had its createdCallback called
created: function() {
@@ -946,21 +944,17 @@ if (typeof window.Polymer === 'function') {
ready: function() {
},
createdCallback: function() {
- if (this.templateInstance && this.templateInstance.model) {
- console.warn('Attributes on ' + this.localName + ' were data bound ' +
- 'prior to Polymer upgrading the element. This may result in ' +
- 'incorrect binding types.');
- }
this.created();
- this.prepareElement();
+ if (this.ownerDocument.defaultView || this.alwaysPrepare ||
+ preparingElements > 0) {
+ this.prepareElement();
+ }
},
// system entry point, do not override
prepareElement: function() {
this._elementPrepared = true;
// install shadowRoots storage
this.shadowRoots = {};
- // storage for closeable observers.
- this._observers = [];
// install property observers
this.observeProperties();
// install boilerplate attributes
@@ -969,8 +963,13 @@ if (typeof window.Polymer === 'function') {
this.takeAttributes();
// add event listeners
this.addHostListeners();
+ // guarantees that while preparing, any
+ // sub-elements are also prepared
+ preparingElements++;
// process declarative resources
this.parseDeclarations(this.__proto__);
+ // decrement semaphore
+ preparingElements--;
// TODO(sorvell): CE polyfill uses unresolved attribute to simulate
// :unresolved; remove this attribute to be compatible with native
// CE.
@@ -979,7 +978,10 @@ if (typeof window.Polymer === 'function') {
this.ready();
},
attachedCallback: function() {
- this.cancelUnbindAll();
+ if (!this._elementPrepared) {
+ this.prepareElement();
+ }
+ this.cancelUnbindAll(true);
// invoke user action
if (this.attached) {
this.attached();
@@ -1040,7 +1042,7 @@ if (typeof window.Polymer === 'function') {
var template = this.fetchTemplate(elementElement);
if (template) {
var root = this.shadowFromTemplate(template);
- this.shadowRoots[elementElement.name] = root;
+ this.shadowRoots[elementElement.name] = root;
}
},
// return a shadow-root template (if desired), override for custom behavior
@@ -1052,6 +1054,8 @@ if (typeof window.Polymer === 'function') {
if (template) {
// make a shadow root
var root = this.createShadowRoot();
+ // migrate flag(s)
+ root.resetStyleInheritance = this.resetStyleInheritance;
// stamp template
// which includes parsing and applying MDV bindings before being
// inserted (to avoid {{}} in attribute values)
@@ -1066,7 +1070,7 @@ if (typeof window.Polymer === 'function') {
}
},
// utility function that stamps a <template> into light-dom
- lightFromTemplate: function(template, refNode) {
+ lightFromTemplate: function(template) {
if (template) {
// TODO(sorvell): mark this element as a lightDOMController so that
// event listeners on bound nodes inside it will be called on it.
@@ -1079,18 +1083,14 @@ if (typeof window.Polymer === 'function') {
// e.g. to prevent <img src="images/{{icon}}"> from generating a 404.
var dom = this.instanceTemplate(template);
// append to shadow dom
- if (refNode) {
- this.insertBefore(dom, refNode);
- } else {
- this.appendChild(dom);
- }
+ this.appendChild(dom);
// perform post-construction initialization tasks on ahem, light root
- this.shadowRootReady(this);
+ this.shadowRootReady(this, template);
// return the created shadow root
return dom;
}
},
- shadowRootReady: function(root) {
+ shadowRootReady: function(root, template) {
// locate nodes with id and store references to them in this.$ hash
this.marshalNodeReferences(root);
// set up pointer gestures
@@ -1166,12 +1166,25 @@ if (typeof window.Polymer === 'function') {
/**
* Installs external stylesheets and <style> elements with the attribute
* polymer-scope='controller' into the scope of element. This is intended
- * to be a called during custom element construction.
+ * to be a called during custom element construction. Note, this incurs a
+ * per instance cost and should be used sparingly.
+ *
+ * The need for this type of styling should go away when the shadowDOM spec
+ * addresses these issues:
+ *
+ * https://www.w3.org/Bugs/Public/show_bug.cgi?id=21391
+ * https://www.w3.org/Bugs/Public/show_bug.cgi?id=21390
+ * https://www.w3.org/Bugs/Public/show_bug.cgi?id=21389
+ *
+ * @param element The custom element instance into whose controller (parent)
+ * scope styles will be installed.
+ * @param elementElement The <element> containing controller styles.
*/
+ // TODO(sorvell): remove when spec issues are addressed
installControllerStyles: function() {
// apply controller styles, but only if they are not yet applied
- var scope = this.findStyleScope();
- if (scope && !this.scopeHasNamedStyle(scope, this.localName)) {
+ var scope = this.findStyleController();
+ if (scope && !this.scopeHasElementStyle(scope, STYLE_CONTROLLER_SCOPE)) {
// allow inherited controller styles
var proto = getPrototypeOf(this), cssText = '';
while (proto && proto.element) {
@@ -1179,50 +1192,29 @@ if (typeof window.Polymer === 'function') {
proto = getPrototypeOf(proto);
}
if (cssText) {
- this.installScopeCssText(cssText, scope);
- }
- }
- },
- installScopeStyle: function(style, name, scope) {
- var scope = scope || this.findStyleScope(), name = name || '';
- if (scope && !this.scopeHasNamedStyle(scope, this.localName + name)) {
- var cssText = '';
- if (style instanceof Array) {
- for (var i=0, l=style.length, s; (i<l) && (s=style[i]); i++) {
- cssText += s.textContent + '\n\n';
- }
- } else {
- cssText = style.textContent;
+ var style = this.element.cssTextToScopeStyle(cssText,
+ STYLE_CONTROLLER_SCOPE);
+ // TODO(sorvell): for now these styles are not shimmed
+ // but we may need to shim them
+ Polymer.applyStyleToScope(style, scope);
}
- this.installScopeCssText(cssText, scope, name);
}
},
- installScopeCssText: function(cssText, scope, name) {
- scope = scope || this.findStyleScope();
- name = name || '';
- if (!scope) {
- return;
- }
+ findStyleController: function() {
if (window.ShadowDOMPolyfill) {
- cssText = shimCssText(cssText, scope.host);
- }
- var style = this.element.cssTextToScopeStyle(cssText,
- STYLE_CONTROLLER_SCOPE);
- Polymer.applyStyleToScope(style, scope);
- // cache that this style has been applied
- scope._scopeStyles[this.localName + name] = true;
- },
- findStyleScope: function(node) {
- // find the shadow root that contains this element
- var n = node || this;
- while (n.parentNode) {
- n = n.parentNode;
+ return wrap(document.head);
+ } else {
+ // find the shadow root that contains this element
+ var n = this;
+ while (n.parentNode) {
+ n = n.parentNode;
+ }
+ return n === document ? document.head : n;
}
- return n;
},
- scopeHasNamedStyle: function(scope, name) {
- scope._scopeStyles = scope._scopeStyles || {};
- return scope._scopeStyles[name];
+ scopeHasElementStyle: function(scope, descriptor) {
+ var rule = STYLE_SCOPE_ATTRIBUTE + '=' + this.localName + '-' + descriptor;
+ return scope.querySelector('style[' + rule + ']');
}
};
@@ -1232,16 +1224,6 @@ if (typeof window.Polymer === 'function') {
return prototype.__proto__;
}
- function shimCssText(cssText, host) {
- var name = '', is = false;
- if (host) {
- name = host.localName;
- is = host.hasAttribute('is');
- }
- var selector = Platform.ShadowCSS.makeScopeSelector(name, is);
- return Platform.ShadowCSS.shimCssText(cssText, selector);
- }
-
// exports
scope.api.instance.styles = styles;
@@ -1264,15 +1246,6 @@ if (typeof window.Polymer === 'function') {
// specify an 'own' prototype for tag `name`
function element(name, prototype) {
- if (arguments.length === 1 && typeof arguments[0] !== 'string') {
- prototype = name;
- var script = document._currentScript;
- name = script && script.parentNode && script.parentNode.getAttribute ?
- script.parentNode.getAttribute('name') : '';
- if (!name) {
- throw 'Element name could not be inferred.';
- }
- }
if (getRegisteredPrototype[name]) {
throw 'Already registered (Polymer) prototype for element ' + name;
}
@@ -1422,7 +1395,7 @@ scope.api.declaration.path = path;
},
copySheetAttributes: function(style, link) {
for (var i=0, a$=link.attributes, l=a$.length, a; (a=a$[i]) && i<l; i++) {
- if (a.name !== 'rel' && a.name !== 'href') {
+ if (a.name !== 'rel' && a.name !== 'src') {
style.setAttribute(a.name, a.value);
}
}
@@ -1444,6 +1417,14 @@ scope.api.declaration.path = path;
* element's template.
* @param elementElement The <element> element to style.
*/
+ // TODO(sorvell): wip... caching and styles handling can probably be removed
+ // We need a scheme to ensure stylesheets are eagerly loaded without
+ // the creation of an element instance. Here are 2 options for handling this:
+ // 1. create a dummy element with ShadowDOM in dom that includes ALL styles
+ // processed here.
+ // 2. place stylesheets outside the element template. This will allow
+ // imports to naturally load the sheets. Then at load time, we can remove
+ // the stylesheet from dom.
installSheets: function() {
this.cacheSheets();
this.cacheStyles();
@@ -1554,17 +1535,11 @@ scope.api.declaration.path = path;
function importRuleForSheet(sheet, baseUrl) {
var href = new URL(sheet.getAttribute('href'), baseUrl).href;
- return '@import \'' + href + '\';';
+ return '@import \'' + href + '\';'
}
function applyStyleToScope(style, scope) {
if (style) {
- if (scope === document) {
- scope = document.head;
- }
- if (window.ShadowDOMPolyfill) {
- scope = document.head;
- }
// TODO(sorvell): necessary for IE
// see https://connect.microsoft.com/IE/feedback/details/790212/
// cloning-a-style-element-and-adding-to-document-produces
@@ -1575,17 +1550,7 @@ scope.api.declaration.path = path;
if (attr) {
clone.setAttribute(STYLE_SCOPE_ATTRIBUTE, attr);
}
- // TODO(sorvell): probably too brittle; try to figure out
- // where to put the element.
- var refNode = scope.firstElementChild;
- if (scope === document.head) {
- var selector = 'style[' + STYLE_SCOPE_ATTRIBUTE + ']';
- var s$ = document.head.querySelectorAll(selector);
- if (s$.length) {
- refNode = s$[s$.length-1].nextElementSibling;
- }
- }
- scope.insertBefore(clone, refNode);
+ scope.appendChild(clone);
}
}
@@ -1665,94 +1630,95 @@ scope.api.declaration.path = path;
scope.api.declaration.events = events;
})(Polymer);
-/*
- * Copyright 2013 The Polymer Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style
- * license that can be found in the LICENSE file.
- */
-(function(scope) {
-
- // element api
-
- var properties = {
- inferObservers: function(prototype) {
- // called before prototype.observe is chained to inherited object
- var observe = prototype.observe, property;
- for (var n in prototype) {
- if (n.slice(-7) === 'Changed') {
- if (!observe) {
- observe = (prototype.observe = {});
- }
- property = n.slice(0, -7)
- observe[property] = observe[property] || n;
- }
- }
- },
- explodeObservers: function(prototype) {
- // called before prototype.observe is chained to inherited object
- var o = prototype.observe;
- if (o) {
- var exploded = {};
- for (var n in o) {
- var names = n.split(' ');
- for (var i=0, ni; ni=names[i]; i++) {
- exploded[ni] = o[n];
- }
- }
- prototype.observe = exploded;
- }
- },
- optimizePropertyMaps: function(prototype) {
- if (prototype.observe) {
- // construct name list
- var a = prototype._observeNames = [];
- for (var n in prototype.observe) {
- var names = n.split(' ');
- for (var i=0, ni; ni=names[i]; i++) {
- a.push(ni);
- }
- }
- }
- if (prototype.publish) {
- // construct name list
- var a = prototype._publishNames = [];
- for (var n in prototype.publish) {
- a.push(n);
- }
- }
- },
- publishProperties: function(prototype, base) {
- // if we have any properties to publish
- var publish = prototype.publish;
- if (publish) {
- // transcribe `publish` entries onto own prototype
- this.requireProperties(publish, prototype, base);
- // construct map of lower-cased property names
- prototype._publishLC = this.lowerCaseMap(publish);
- }
- },
- requireProperties: function(properties, prototype, base) {
- // ensure a prototype value for each property
- for (var n in properties) {
- if (prototype[n] === undefined && base[n] === undefined) {
- prototype[n] = properties[n];
- }
- }
- },
- lowerCaseMap: function(properties) {
- var map = {};
- for (var n in properties) {
- map[n.toLowerCase()] = n;
- }
- return map;
- }
- };
-
- // exports
-
- scope.api.declaration.properties = properties;
-
-})(Polymer);
+/*
+ * Copyright 2013 The Polymer Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file.
+ */
+(function(scope) {
+
+ // element api
+
+ var properties = {
+ inferObservers: function(prototype) {
+ // called before prototype.observe is chained to inherited object
+ var observe = prototype.observe, property;
+ for (var n in prototype) {
+ if (n.slice(-7) === 'Changed') {
+ if (!observe) {
+ observe = (prototype.observe = {});
+ }
+ property = n.slice(0, -7)
+ observe[property] = observe[property] || n;
+ }
+ }
+ },
+ explodeObservers: function(prototype) {
+ // called before prototype.observe is chained to inherited object
+ var o = prototype.observe;
+ if (o) {
+ var exploded = {};
+ for (var n in o) {
+ var names = n.split(' ');
+ for (var i=0, ni; ni=names[i]; i++) {
+ exploded[ni] = o[n];
+ }
+ }
+ prototype.observe = exploded;
+ }
+ },
+ optimizePropertyMaps: function(prototype) {
+ if (prototype.observe) {
+ // construct name list
+ var a = prototype._observeNames = [];
+ for (var n in prototype.observe) {
+ var names = n.split(' ');
+ for (var i=0, ni; ni=names[i]; i++) {
+ a.push(ni);
+ }
+ //a.push(n);
+ }
+ }
+ if (prototype.publish) {
+ // construct name list
+ var a = prototype._publishNames = [];
+ for (var n in prototype.publish) {
+ a.push(n);
+ }
+ }
+ },
+ publishProperties: function(prototype, base) {
+ // if we have any properties to publish
+ var publish = prototype.publish;
+ if (publish) {
+ // transcribe `publish` entries onto own prototype
+ this.requireProperties(publish, prototype, base);
+ // construct map of lower-cased property names
+ prototype._publishLC = this.lowerCaseMap(publish);
+ }
+ },
+ requireProperties: function(properties, prototype, base) {
+ // ensure a prototype value for each property
+ for (var n in properties) {
+ if (prototype[n] === undefined && base[n] === undefined) {
+ prototype[n] = properties[n];
+ }
+ }
+ },
+ lowerCaseMap: function(properties) {
+ var map = {};
+ for (var n in properties) {
+ map[n.toLowerCase()] = n;
+ }
+ return map;
+ }
+ };
+
+ // exports
+
+ scope.api.declaration.properties = properties;
+
+})(Polymer);
/*
* Copyright 2013 The Polymer Authors. All rights reserved.
@@ -2097,8 +2063,8 @@ scope.api.declaration.path = path;
indexOf: function(element) {
var i = queueForElement(element).indexOf(element);
if (i >= 0 && document.contains(element)) {
- i += (HTMLImports.useNative || HTMLImports.ready) ?
- importQueue.length : 1e9;
+ i += (HTMLImports.useNative || HTMLImports.ready) ? importQueue.length :
+ 1e9;
}
return i;
},
@@ -2117,7 +2083,7 @@ scope.api.declaration.path = path;
//console.warn('queue order wrong', i);
return;
}
- return queueForElement(element).shift();
+ return queueForElement(element).shift();
},
check: function() {
// next
@@ -2281,11 +2247,10 @@ scope.api.declaration.path = path;
|| this.waitingForResources()) {
return;
}
- // TODO(sorvell): ends up calling '_register' by virtue
- // of `waitingForQueue` (see below)
queue.go(this);
},
+
// TODO(sorvell): refactor, this method is private-ish, but it's being
// called by the queue object.
_register: function() {
« no previous file with comments | « pkg/polymer/lib/src/js/polymer/polymer.js ('k') | pkg/polymer/lib/src/js/polymer/polymer.concat.js.map » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698