From 17e73cd3abddf66275d4b4ea8780709240ac2768 Mon Sep 17 00:00:00 2001 From: Steve Orvell Date: Mon, 15 Sep 2014 18:22:40 -0700 Subject: [PATCH] Fixes https://github.com/Polymer/CustomElements/issues/130. Test in platform-dev repo. --- src/Observer.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/Observer.js b/src/Observer.js index 53e5c55..61d764f 100644 --- a/src/Observer.js +++ b/src/Observer.js @@ -318,14 +318,34 @@ function upgradeDocument(doc) { logFlags.dom && console.groupEnd(); } +/* +This method is intended to be called when the document tree (including imports) +has pending custom elements to upgrade. It can be called multiple times and +should do nothing if no elements are in need of upgrade. + +Note that the import tree can consume itself and therefore special care +must be taken to avoid recursion. +*/ +var upgradedDocuments; function upgradeDocumentTree(doc) { + upgradedDocuments = []; + _upgradeDocumentTree(doc); + upgradedDocuments = null; +} + + +function _upgradeDocumentTree(doc) { doc = wrapIfNeeded(doc); + if (upgradedDocuments.indexOf(doc) >= 0) { + return; + } + upgradedDocuments.push(doc); //console.log('upgradeDocumentTree: ', (doc.baseURI).split('/').pop()); // upgrade contained imported documents var imports = doc.querySelectorAll('link[rel=' + IMPORT_LINK_TYPE + ']'); for (var i=0, l=imports.length, n; (i