diff --git a/src/lib/custom-style.html b/src/lib/custom-style.html index ff791d650b..b3c86533b6 100644 --- a/src/lib/custom-style.html +++ b/src/lib/custom-style.html @@ -145,8 +145,18 @@ // Allow all custom-styles defined in this turn to register // before applying any properties. This helps ensure that all properties // are defined before any are consumed. - Polymer.RenderStatus.beforeNextRender(this, - this._applyCustomProperties, [e]); + // Premature application of properties can occur in 2 cases: + // (1) A property is consumed in a style created before it is produced. + // In general, we require custom properties to be defined before usage + // for elements so this case is only to be slightly more like native + // custom properties where this construction is supported. + // (2) A set of in order styles (A, B) are re-ordered due to a parser + // yield A wait for textContent, making B go before A. This case + // can occur with native or polyflled webcomponents. + var self = this; + requestAnimationFrame(function() { + self._applyCustomProperties(e); + }); } }, diff --git a/src/lib/render-status.html b/src/lib/render-status.html index 493c76dd74..c4735260cb 100644 --- a/src/lib/render-status.html +++ b/src/lib/render-status.html @@ -50,8 +50,6 @@ }, _afterNextRenderQueue: [], - _beforeNextRenderQueue: [], - _waitingNextRender: false, afterNextRender: function(element, fn, args) { @@ -59,11 +57,6 @@ this._afterNextRenderQueue.push([element, fn, args]); }, - beforeNextRender: function(element, fn, args) { - this._watchNextRender(); - this._beforeNextRenderQueue.push([element, fn, args]); - }, - _watchNextRender: function() { if (!this._waitingNextRender) { this._waitingNextRender = true; @@ -79,14 +72,12 @@ }, _flushNextRender: function() { - this._waitingNextRender = false; - this._flushRenderCallbacks(this._beforeNextRenderQueue); - this._beforeNextRenderQueue = []; var self = this; // we want to defer after render until just after the paint. setTimeout(function() { self._flushRenderCallbacks(self._afterNextRenderQueue); self._afterNextRenderQueue = []; + self._waitingNextRender = false; }); },