Files
webcomponentsjs/src/post-polyfill.js
Daniel Freedman 7b13afd170 Make WebComponentsReady fire consistently for Chrome
Also fire WebComponentsReady on document and have it bubble for
backwards compatibility

Fixes #753
Fixes #756
2017-04-06 17:01:05 -07:00

57 lines
1.8 KiB
JavaScript

/**
* @license
* Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
* This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
* The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
* The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
* Code distributed by Google as part of the polymer project is also
* subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
(function() {
'use strict';
var customElements = window['customElements'];
var HTMLImports = window['HTMLImports'];
if (customElements && customElements['polyfillWrapFlushCallback']) {
// Here we ensure that the public `HTMLImports.whenReady`
// always comes *after* custom elements have upgraded.
var flushCallback;
var runAndClearCallback = function runAndClearCallback() {
if (flushCallback) {
var cb = flushCallback;
flushCallback = null;
cb();
return true;
}
}
var origWhenReady = HTMLImports['whenReady'];
customElements['polyfillWrapFlushCallback'](function(cb) {
flushCallback = cb;
origWhenReady(runAndClearCallback);
});
HTMLImports['whenReady'] = function(cb) {
origWhenReady(function() {
// custom element code may add dynamic imports
// to match processing of native custom elements before
// domContentLoaded, we wait for these imports to resolve first.
if (runAndClearCallback()) {
HTMLImports['whenReady'](cb);
} else {
cb();
}
});
}
}
HTMLImports['whenReady'](function() {
requestAnimationFrame(function() {
document.dispatchEvent(new CustomEvent('WebComponentsReady', {bubbles: true}));
});
});
})();